概念:出现在其他语句内部的select语句,称为子查询或内查询
内部嵌套其他selectyu语句的查询,称为外查询或主查询
分类:
按子查询出现的位置:
select后面
仅仅支持标量子查询
from后面
支持表子查询
where或having后面 (重点)
支持标量子查询*
支持列子查询*
行子查询(较少)
exists后面(称为相关子查询)
表子查询
按结果集的行列数不同:
标量子查询(结果集只有一行一列/单行自查寻)
列子查询(结果集只有一列多行/多行子查询)
行子查询(结果集有一行多列)
表子查询(结果集一般为多行多列/多列多行)
特点:1.子查询放在小括号内
2.子查询yi一般放在条件的右侧
3.标量子查询,一般搭配单行操作符使用
> < >= <= = <>
列子查询:一般搭配多行操作符使用
IN ANY/SOME ALL
多行子查询:
ANY和some用的少,用其他代替可读性更强
上面表示a比右边的其中一个值大就行
上面a比右边的所有值都大
any和min可以互换 all和max可互换,重在理解题意
行子查询
替换成
FROM 后面形成的表必须起别名
exists(相关zi)子查询 用的较少
能用exists绝对可以用in实现
语法 exists(完整的查询语句)
结果:0或1
分页查询
当要显示的数据,一页显示不全,需要分页提交sql请求
语法:
select 查询列表 7
from 表 1 1
【连接类型 join 表2 2
on连接条件】 3
where 筛选条件 4
group by 分组字段 5
having 分组后的筛选 6
order by 排序的字段 8
limit offset,size 9
offset 要显示条目的起始索引(数据中的起始)索引下标从0开始(和substr这些函数比是比较特殊的,这里是从0开始索引)
size 要显示的条目个数
1.limit语句放在查询语句的最后 ,语句执行也是在最后
2. select * from 表
limit (page-1)*10,size
下面就这里特殊认为这里的索引是从0开始,其实其他都是从1开始,起始索引不写默认是从0开始
联合查询
union 联合 合并:将多条查询语句的结果合并成一个结果
语法:查询语句1
union
查询语句2
union
。。。
应用场景:要查询的结果来自于多个表,且多个表没有直接
的连接关系,但查询的消息一致时 图2可以体现
特点:1.要求多条查询语句的查询列数是一致的
2.要求多条查询语句的查询的每一列的类型和顺序最好一致 图3可提现(不然会出错)
3.union关键字是默认去重的,如果使用union all 可以包含重复列 图四可以体现,第一条语句显示2行,第二条显示3行
图5 union all 没有去重的情况
WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句。
HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句
对于distinct与group by的使用: 1、当对系统的性能高并数据量大时使用group by 2、当对系统的性能不高时使用数据量少时两者皆可 3、尽量使用group by