union
union的作用
合并查询结果集
union的用法
案例:查询工作岗位是MANAGER和SALESMAN的员工?
第一种写法
select ename,job from emp where job = ' MANAGER' or job = ' SALESMAN' ;
第二种写法
select ename,job from emp where job in ( 'MANAGER' , ' SALESMAN') ;
第三种写法
select ename,job from emp where job ='manager'
union
select ename,job from emp where job ='salesman';
- union的效率要高一些。对于表连接来说,每连接一次新表, 则匹配的次数满足笛卡尔数学积,成倍的翻。
但是union可以减少匹配的次数。在减少匹配次数的情况下, 还可以完成两个结果集的拼接。
a连接b连接c
a 10条记录
b 10条记录
C 10条记录
匹配次数是: 1000
a连接b一个结果: 10 * 10 --> 100次
b连接c一个结果: 10 * 10 --> 100次
使用union的话是:
100次+ 100次= 200次。
union使时的注意事项
select ename, job from emp where job = 'MANAGER'
union
select ename from emp where job ='SALESMAN' ;
//错误的:union在进行结果集合并的时候,要求两个结果集的列数相同,
也就是字段数相同。
select ename, job from emp where job = ' MANAGER'
union
select ename,sal from emp where job = ' SALESMAN' ;
// MYSQL可以,oracle语法严格 ,不可以,报错。
要求:结果集合并时列和列的数据类型也相同
limit
limit作用:
将查询结果集的一部分取出来。通常使用在分页查询当中。
百度默认:一页显示10条记录。
分页的作用是为了提高用户的体验,因为一次全部都查出来,用户体验差.
可以一页一页翻页看
limit的用法
完整用法: limit startIndex, length
startIndex是起始下标,length是长度。
起始下标从0开始。
缺省用法: limit 5;这是取前5.
按照薪资降序,取出排名在前5名的员工?
select
ename, sal
from
emp
order by
sal desc
limit 5; //取前5
或者
select
ename , sal
from
emp
order by
sal desc
limit 0,5;//从下标0开始,也就是第一个元素开始,取5条记录
取出工资排名在[3-5]名的员工?
select
ename,sal
from
emp
order by
sal desc
limit
2,3;
//2表示起始位置从下标2开始,就是第三条记录,3表示长度
分页
每页显示pageSize条记录
第pageNo页: limit (pageNo - 1) * pagesize, pagesize
public static void main (String[] args) {
//用户提交过来-一个页码,以及每页显示的记录条数
int pageNo = 5; · //第5页
int pagesize = 10; //每页显示10条
int startIndex =(pageNo - 1) * pageSize; //startindex每页的下标的起始位置
String sql = "select . . .limit”+ startIndex + ",”+ pageSize ;
}