当前位置:   article > 正文

SQL exists 和 not exists等关键字学习

SQL exists 和 not exists等关键字学习

前言

关于这个知识点,因为一眼看不懂,当时又没时间,所以我很早就定下了计划要好好了解,但是一直拖到现在,才有时间好好看看整理整理。

一、exist 和 not exist

看得懂exists是有结果就返回,但是就不是很理解具体效果,所以决定敲一敲

大概我理解是这样的
假设有a,b两张表

a(id, name)
1 a1
2 a2
3 a3
b(id, name)
1 b1
3 b3

select * 
from a
where EXISTS (select * from b where a.id = b.id)
  • 1
  • 2
  • 3

得出的结果会是

1  	a1
3	a3
  • 1
  • 2

这个可以理解为a left jion b, 或者说是用a的数据去b表中找,a表中的数据在b表中exist(存在或者说符合exist()里的条件),exist方法为真,当条记录就返回

select name from user where exist(sql语句)
  • 1

从上面这句话来解析就是 “exist(sql语句)” 这一段当成整体,只要是里面的sql语句条件满足的记录就返回。

not exist同理

二、 intersect、except、union和minux

  • UNION(并集): 这里面个人最熟悉的就是union,作用就是可以将多个select语句的结果合并
    • tips:会去除相同的结果,如果只查询name,相同name只会出现一次,如果是记录,记录只有每个字段值都一样才会被去除
  • INTERSECT(交集):也会自动去除重复,如果想保留所有的重复,必须用INTERSECT ALL代替INTERSECT,结果中出现的重复元组数等于两集合出现的重复元组数里较少的那个。
    • tips :在oracle这个关键字可以直接使用,但mysql不支持intersect关键字查询,我们在使用mysql查询两个语句的结果集的时候可以使用inner join的方式来替代intersect实现交集查询
  • EXCEPT(除):自动去除重复,如果想保留所有的重复,必须用EXCEPT ALL代替EXCEPT,结果中出现的重复元组数等于两集合出现的重复元组数之差(前提是差是正值)。(也是ORACLE才能使用,mysql 用not in)
  • MINUS(差集):比较两个查询的结果,返回在第一个查询结果集中,但不是第二个查询结果集中的行记录,也就是说不包含两个查询返回集合的相交部分。mysql还是不能用,mysql可以用not exists找出差集
select sno 
from t_student t1 
where not exists(select 1 from t_score t2 where t2.sno = t1.sno)
   
  • 1
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/447785
推荐阅读
相关标签
  

闽ICP备14008679号