05-MySQL中的limit和union关键字

limit和union关键字

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;

你可能感兴趣的:(数据库,mysql,数据库)