MySqL速成教程笔记系列九

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,b,c表均有10条记录,那么不用union就需要进行101010=1000次
而如果使用了union,则a连接b,进行10*10=100次连接;a连接c,也进行100次连接,所以最后只需要200次连接。

union的注意事项:
(1)union在进行结果集合并时,要求两个结果集的列数相同。
例子:
select ename,job from emp where job=‘MANAGER’ union select ename from emp where job=‘SALESMAN’;
在这里插入图片描述
(2)select ename,job from emp where job=‘MANAGER’ union select ename,sal from emp where job=‘SALESMAN’;
在这里插入图片描述
很明显这句话有问题,因为图中的job竟然出现了数字,不过在mysql中并不会报错,而Oracle的语法更加严格会报错。
所以,结果集合合并时列和列的数据类型应该也相同。

limit的用法

limit将查询结果集的一部分取出来,通常使用在分页查询中。

完整用法:limit startIndex,length;//起始下标,长度

缺省用法:limit 5; 取前五

例子:
(1)按照薪资降序,取出排名在前5名的员工。
select ename,sal from emp order by sal desc limit 5;
在这里插入图片描述
注意:mysql中limit在order by之后执行

(2)取出工资排名在3-5名的员工
select ename,sal from emp order by sal desc limit 2,3;
在这里插入图片描述
这里limit后面为什么是2,3呢?
2:下标从0开始 0 1 2 3 4 5
很明显第三名是开始下标为2的
3:长度为3。
取下标为2,3,4的员工,对应3-5名。

分页

每页显示3条记录
第一页: limit 0,3 第0,1,2页
第二页:limit 3,3 第3,4,5页
第三页:limit 6,3 第6,7,8页
第四页:limit 9,3 第9,10,11页

每页显示pageSize条记录
第pageNo页:limit (pageNo-1)*pageSize,pageSize

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值