目录
1.单表查询
select [distinct] <字段列表> from <数据源> [where 查询条件] [group by 分组字段]
[having 过滤条件] [order by 排序字段 desc|asc] [limit 分页条件]
去重查询
distinct:去重
别名查询
语法:字段名 as 别名;字段名 别名;
结果以别名作为了字段名。
查询条件
模糊查询
关键字:like;
表达式:'%key_';(%:一种通配符,表示任意个字符;_:表示任一字符);
语法:字段名 like 表达式。
范围查询
字段名 between 条件 and 条件
in查询
条件 in (值1,值2,值3,...)
排序查询
order by 字段名1 [asc|desc], 字段名2 [asc|desc],... (asc:升序;desc:降序)
分页查询
语法:limit 分页条件;
可以被用于强制SELECT语句返回指定的记录数,limit接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是0(而不是1)。
聚合查询
字段列表不再是数据源中有的字段,而是通过聚合函数后的字段。
常用的聚合函数包括:COUNT:返回结果集中行的数目;SUM:返回结果集中所有值的总和;AVG:返回结果集中所有值的平均值;MAX:返回结果集中所有值的最大值;MIN:返回结果集中所有值的最小值。
count函数的参数可以是*,常量,或某一列:使用列名作为参数时,该列数据为null的数据不会被统计。
分组查询
语法:group by <字段1>,<字段2>,...;
将所有数据按照字段进行分组。
过滤分组
语法:having 过滤条件;
分组后再做条件筛选。
2.多表查询
连接查询
连接:多个表通过主外键关联,形成一个表来进行查询。
分类:
内连接:两张表通过主外键关系一一对应进行连接
select * from table1 inner join table2 on table1.pk=table2.fk
select * from table1 , table2 where table1.pk=table2.fk
select * from table1 join table2 on table1.pk=table2.fk
连接条件一定要写正确,如果不正确,会形成笛卡尔积(造成数据无效)。
外连接
左右表和join的位置有关,join左边的是左表,join右边的是右表。
左外连接
select * from table1 left join table2 on table1.pk=table2.fk
以左表的数据为主,右表匹配上的数据就显示数据,没有匹配上的数据就显示null。
右外连接
select * from table1 right join table2 on table1.pk=table2.fk
以右表的数据为主,左表匹配上的数据就显示数据,没有匹配上的数据就显示null。
使用连接查询的方法
- 先看需要显示的字段有哪些
- 再看这些字段在哪些表中,确定哪些表要进行关联
- 如果这些表没有主外键关联,就要考虑使用一个关系表来连接这两张表
- 先连表,再筛选
子查询
select 列名…… from 表的表名 [where 查询条件] [group by 分组字段] having [聚合条件] [order by 排序字段 desc/asc] [limit 分页条件]
子查询是嵌入到其他的SQL语句中的select语句。当在SQL语句需要用到可变数据来进行条件表达式的运算的时候,需要采用子查询来获取这个值;需要某些临时数据作为数据源来使用的时候,也需要采用子查询(所以select语句的返回结果都是一个虚拟表,返回一个数据单元格都算)。
涉及到的关键字
all:all(子查询);获取子查询返回结果中的最大值
any:any(子查询);和子查询返回结果中的任何一个值进行比较
in:in(子查询);和子查询返回结果中的任何一个值进行匹配
in的执行顺序:首先查询子查询的表;将内表和外表做一个笛卡尔积;使用where条件进行筛选。所以相对而言,内表(子查询查的表,例子中的table2)比较小的时候,in的速度较快!
exists:exists(子查询);判断子查询是否存在结果,如果存在,则返回true,否则返回false
exists的执行顺序:查询外表,遍历循环外表(table1);将外表的数据代入到子查询中,判断子查询返回True还是False;如果返回True,则将外表循环的数据加入到返回结果集中,否则,不加入;最后,将结果集中数据返回给用户。所以相对而言,内表(table2)比较多的时候,e×ists的速度较快!
几乎可以出现在SQL查询语句的任何地方,但一般最多出现在 select后、from后、where后。
组合查询
union|union all操作符
用于连接两个以上的select语句并将结果组合到一个结果集合中
注意事项:
- union是自动去重,union all不会自动去重
- 使用union连接的select语句的返回字段类型、数量要一致
- union连接的查询数不能超过6个
select语句 union [all|distinct]select语句