定义:select中嵌套select,嵌套的select语句称为子查询语句。
一,where中的子查询:
示例:
select productName,productCount from bill
-> where productCount>=(select avg(productCount) from bill);
后面的子查询语句相当于先把平均值找出来,然后再找到大于平均值的信息。
二,from中的子查询:
可以将from后面的子查询的结果当作一张临时表。
select t.*,s.grade from (select avg(sal) as avgsal from emp group by job) as t join s
where t.avgsal between s.losal and s.hisal;
这里的t表的是sal的平均值的搜索结果,因为搜索生成的这张表中avg(sal)这行在后面的where比较中要用到,不能用本来的字段名avg(sal),所以要用别名。
三,select后的子查询(不常用)
四,union合并查询结果
示例:
> select contact from address where id=1
-> union
-> select contact from address where id=3;
跟使用in或or结果一样,但是union的效率高一些。表连接由于符合笛卡尔积的规律,每连接一个新表,查询数量翻倍,但是union可以减少查询次数。
Notations:uinion在合并结果的时候要求两个结果列数相同,在mysql中可以列的数据类型不一致,但oracle中要求数据类型相同。
四,limit
limit将查询结果部分取出来,通常用于分页查询中。如百度的搜索结果。分页是为了提高用户的体验效果。示例:
> select contact from address
-> limit 1,2;
limit后面跟两个数字前一个是起始下标,后一个是长度。如果只有一个数字就是默认从0开始。
limit执行顺序在order by的后面。如取出升序排列前四名:
> select contact from address
-> order by tel asc
-> limit 4;
五,limit进行分页
分页的每页显示pageSize条数据,每页开始的序号为(分页的页码-1)*pageSize。所以分页的通用公式: