union合并查询结果集
例:查询工作岗位是MANAGER和SALSESMAN的员工
方法一:select ename,job from emp where job = "MANAGER" or job = "SALSESMAN";
方法二:select ename,job from emp where job in( "MANAGER" ,"SALSESMAN");
方法三:union
select ename,job from emp where job = "MANAGER"
union
select ename,job from emp where job = "SALSESMAN";
union的效率要高,对于表连接来说,每连接一次新表,则匹配的次数满足笛卡尔积,成倍的翻……
但是union可以减少匹配的次数,在减少匹配次数的情况下,还可以完成两个结果集的拼接。
union在进行结果集合并的时候,要求两个结果集的列数相同
limit 是将查询结果集的一部分取出来(通常使用在分页查询中)( 重要!!!)
用法一:limit startIndex,length
—— startIndex:起始下标,从0开始,length:长度
用法二:limit 5;这是取前5 ( 相当于startIndex为0 )
limit 在 order by 之后执行
例:按照薪资降序,取出排名前5名的员工
select
ename,sal
from
emp
order by
sal desc
limit 5;
例:取出工资排名在 [3,5] 名的员工
select
ename,sal
from
emp
order by
sal desc
limit 2,3; // 起始位置下标2,3是长度
例:取出工资排名在 [5,9]名的员工
select
ename,sal
from
emp
order by
sal desc
limit
4,5; // 起始位置下标4,5是长度
分页查询
每页显示3条记录
第1页:limit 0,3
第2页:limit 3,3
第3页:limit 6,3
第4页:limit 9,3
每页显示 pageSize 条记录
第 pageNo 页:limit ( pageNo - 1 ) * pageSize , pageSize
public static void main (Sting[] args){
// 用户提交过来一个页码,以及每页显示的记录条数
int pageNo = 5; // 第 5 页
int pageSize = 10; // 每页显示 10 条
int startIndex = ( pageNo - 1) * pageSize;
String sql = "select ... limit" + startIndex + "," + pageSize ;
}
公式:limit (pageNo - 1) * pageSize , pageSiz
DQL大总结
select
...
from
...
where
...
group by
...
having
...
order by
...
limit
...
执行顺序
- from
- where
- group by
- having
- select
- order by
- limit..