Select distinct column_1, Function(column_or_expression), column2 as c2
From my_table
JOIN another_table
on my_table.key1 = another_table.key2
where conditon1 # group by 前的条件筛选
group by column_3
having group_conditon1 # group by 后的条件筛选
order by column_4 asc/desc
limit m offset n
1. From & Join
说明查询数据来源:可以单表查询,也可以多表查询,多表之间需要有main_key将表格相连。
From 或 Join 会第一个执行,确定一个整体的数据范围. 如果要join不同表,可能会生成一个临时Table来用于下面的过程。总之第一步可以简单理解为确定一个数据源表(含临时表)。
sql复制代码
#单表查询:
From single_table
# 多表查询:
# 合并在两个表中key1和key2都有的部分
From table1 inner join table2 on table1.key1 = table2.key2
#right join 以右边table2为主,保留table2所有数据,key1超出key2范围的丢掉不要,key2有key1缺失的补为NULL
From table1 right join table2 on table1.key1 = table2.key2
#left join 以左边table1为主,保留table1所有数据,key2超出key1范围的丢掉不要,key1有key2缺失的补为NULL
From table1 left join table2 on table1.key1 = table2.key2
#Full join 全链接,仅Key1有的则Key2为Full,仅Key2有的则Key1为Full,保留所有数据
From table1 Full join table2 on table1.key1 = table2.key2
2. Where
Where 说明查询条件(只能用于group by之前),多个条件用and或or链接。
确定了数据来源 Where 语句就将在这个数据源中按要求进行数据筛选,并丢弃不符合要求的数据行,所有的筛选Column属性只能来自From圈定的表。
As别名还不能在这个阶段使用,因为可能别名是一个还没执行的表达式。
常用数值条件语法:
sql复制代码
col_num != 4 #基础比较 =, !=; <, <=; >, >=;
col_num between 0 and 100 #两数之间
col_num not between 0 and 100 #不在两数之间,在值域外
col_num in (2,4,6) # 在数组内
col_num not in (2,4,6) # 不在数组内
col_num % 2 = 0 # 偶数
col_num %2 # 奇数
col_num %2 =1 # 奇数
常用字符串比较语法
sql复制代码
col_str = "abc"
col_str != "abc"
col_str like "abc" #没有通配符时,"like" 和 "=" 作用相同
col_str like "%abc%"# %是通配符,表示任意字符。"abc%"表示abc开头的任意字符,"%abc"表示abc结尾的任意字符, 长度无限制。
col_str like "abc_" # "_"表示一个任意字符。"abc_"会匹配到abcd,不会匹配到abc
col_str in ("A", "B", "C")
col_str not in ("A", "B", "C")
3. Group by
Group by 对之前的数据进行分组,统计等,并将结果集缩小为分组数。这意味着其他的数据在分组后会丢弃。
Group by 可以同时按照多个变量分组
例:原数据表
按1个变量分组
sql复制代码
SELECT role,count(*)as count,building is not Null as bn FROM employees
group by role
按2个变量分组
sql复制代码
SELECT role,count(*)as count,building is not Null as bn FROM employees
group by role,bn