温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何理解mysql中的union limit exists关键字

发布时间:2021-10-21 15:15:54 阅读:164 作者:柒染 栏目:大数据
亿速云mysql数据库,读写分离,安全稳定,弹性扩容,低至0.3元/天!! 点击查看>>

这篇文章给大家介绍如何理解mysql中的union limit exists关键字,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

 

1.union:可以将查询结果相加

union用于将查询结果相加,尤其是将两张毫无关系的表中的数据,拼接在一起显示的时候。

但是有一个前提条件:不同结果进行拼接的时候,列数必须相同。

利用下方的数据说明union的用法:

如何理解mysql中的union limit exists关键字  
 
1)union all:不能去重
如何理解mysql中的union limit exists关键字  
 
2)union:可以达到去重的效果。
如何理解mysql中的union limit exists关键字  
 

2.limit:分页查询全靠它

 
1)对limit用法的一些说明
  • ① limit是MySQL中特有的,其他数据库中没有,不通用;
  • ② limit取结果集中的部分数据,这是它的作用;
  • ③ limit是sql语句最后执行的一个环节;
  • ④       limit的使用语法:      limit startIndex,length; 其中startIndex表示起始位置,从0开始,0表示第一条数据,length表示取几个。
 
2)案例说明

数据源如下:

如何理解mysql中的union limit exists关键字  
 ① 取出工资前五名的员工,显示其信息。
如何理解mysql中的union limit exists关键字  
 ②找出工资排名在第4到第9名的员工。
如何理解mysql中的union limit exists关键字  
 
3)通用的标准分页SQL
如何理解mysql中的union limit exists关键字  

根据上图可以发现:

如何理解mysql中的union limit exists关键字

拿百度浏览器进行说明:

如何理解mysql中的union limit exists关键字  
 

3.exists用法:又称"相关子查询"

如何理解mysql中的union limit exists关键字  
 
1)带你理解exists的执行原理

数据源如下:

如何理解mysql中的union limit exists关键字  
 ① 当返回结果是一行记录的情况
如何理解mysql中的union limit exists关键字  
 ② 当返回结果是多行记录的情况
如何理解mysql中的union limit exists关键字  
 ③ 原理解释

从上图演示可以发现,不管exists关键字后面的SQL语句,不管是查询出一条结果,还是多条结果,只要查出结果,整个结果就是True,而MySQL中True就用1表示,所以最终结果就是1。

一旦exists关键字后面的SQL语句,查询不出任何一条结果的时候,最终的返回值就是False,在MySQL中False就用0表示,所以最终结果就是0。

 
2)案例演示

利用下方的数据源,完成如下两个练习题。

如何理解mysql中的union limit exists关键字  
 ① 查询jobs表中,哪个工作有人做?
如何理解mysql中的union limit exists关键字  
 ② 查询jobs表中,哪个工作没有人做?
如何理解mysql中的union limit exists关键字  
 
3)一张图说明exists子查询的原理
如何理解mysql中的union limit exists关键字  

解释如下:

"有一个A公司,公司中所有的工作都在jobs表,emp表中可以看到哪些工作已经被做了"select jobs.job from jobswhere not exists(select * from emp where jobs.job=emp.job);1)搞清楚你要得到的结果是什么。   这里你要得到的是"哪些工作没有人做",也就是说返回的结果来自于jobs表,但是   "怎么知道哪些工作有人做,哪些没人做呢?",这就需要我们对照emp表。2)首先从jobs表中,取出第一条记录,扔进到emp表中和该表的每一行进行匹配。当匹   配到第一行的时候,由于emp表中的每一行都有8列,你究竟想匹配什么呢?是不是应该明   确指明一下,也就是"where jobs.job=emp.job"这个条件,这个条件表明,我从jobs   表中取出第一条记录,去和emp中每一行进行匹配,并且我更为明确,我是和你第一行的   job字段进行匹配,你只需要看看jobs.job和emp.job是否相等,如果相等,返回该条记   录,接着,拿着第一行再往下依次匹配,只要是jobs.job和emp.job是否相等,就返回   该条记录。因此jobs中的第一行和emp中每一行进行匹配,就会返回一个结果集。3)再看exists关键字,exists()返回的结果是true或者false,当括号中有值的时候,   就是存在,返回的是true;当括号中没有值的时候,返回的是false。根据(1)中,我们   已经知道,jobs中的第一行和emp中每一行匹配后,返回了一个结果集,也就证明有返回   值,因此exists()返回的结果是true4)当在exists()前面加了一个not,表示取反。exists()返回的是truenot exists()   返回的就是false5)根据上述叙述,当not exists()变为false后,原始语句就相当于变为:   select jobs.job from jobs where false;   因此,第一行clerk不能被取出来。   6)接着,再拿jobs中的第二行"SALESMAN",去和emp表中的每一行进行一一匹配,依然重   复上述步骤。

关于如何理解mysql中的union limit exists关键字就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

亿速云「云数据库 MySQL」免部署即开即用,比自行安装部署数据库高出1倍以上的性能,双节点冗余防止单节点故障,数据自动定期备份随时恢复。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:https://my.oschina.net/u/4579597/blog/4409464

AI

开发者交流群×