union合并关键字
union
关键字用来上下合并查询结果集,要求两个结果集中查询字段个数相同否则报错,在Oracle中不但要求个数相同,而且还要求类型对应相同
-- 错误: 两个结果集的字段不同
select ename,job from emp where job = 'MANAGER'
union
select ename from emp where job = 'SALESMAN';
-- 无意义: 两个结果集的字段类型不同
select ename,job from emp where job = 'MANAGER'
union
select ename,sal from emp where job = 'SALESMAN';
+--------+---------+
| ename | job |
+--------+---------+
| JONES | MANAGER |
| BLAKE | MANAGER |
| CLARK | MANAGER |
| ALLEN | 1600 |
| WARD | 1250 |
| MARTIN | 1250 |
| TURNER | 1500 |
+--------+---------+
假设a,b,c三张表都是10条记录
: 相对于表连接使用union可以在减少匹配次数的情况下完成两个结果集的拼接从而提高效率
表连接(乘法)
: a连接b连接c此时匹配次数是1000合并(加法)
:a连接b的结果加a连接c的结果此时匹配次数是200查询工作岗位是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';
limit分页关键字
分页就是将查询结果集的一部分取出来方便用户一页一页看 ,因为一次性把数据全部都查出来会降低用户的阅读体验
limit startIndex,length
: startIndex是起始数据的下标,length是取几条记录,省略起始下标默认从0开始
limit (pageNo - 1) * pageSize,pageSize
: 每页显示pageSize条记录,显示第pageNo页的数据,省略起始页码默认从1开始
public static void main(String[] args){
// 用户提交过来一个页码以及每页显示的记录条数
int pageNo = 5; //第5页
int pageSize = 10; //每页显示10条
int startIndex = (pageNo - 1) * pageSize;
// 拼接SQL
String sql = "select ...limit " + startIndex + ", " + pageSize;
}
按照薪资降序,取出工资排名前5的员工,limit在order by之后执行
select
ename,sal
from
emp
order by
sal desc
limit 0,5;
按照薪资降序,取出工资排名在[3-5]名的员工
select
ename,sal
from
emp
order by
sal desc
limit
2, 3;