sql交集

吉云

今天闲着没事,我就琢磨着怎么在数据库里找出几个表里相同的数据,说人话就是找交集。我一开始想,这还不简单,但我一上手,发现还真有点门道。

我先是试试平时用得最多的 SELECT 语句,想看看能不能直接把几个表连起来查,结果发现这玩意儿只能查一个表,或者把几个表的结果拼一起,但找相同的数据还真不行。

然后我就开始翻各种数据库的书,在网上也搜半天,发现原来 SQL 里有个叫 INTERSECT 的东西,专门干这个的。我心想这下可算找对地方!

sql交集

我建两个表,一个叫 "表一",一个叫 "表二",里面随便放点数字,就像这样:

  • 表一:1, 2, 3, 4, 5
  • 表二:3, 4, 5, 6, 7

然后我写个 SQL 语句:

sql交集

SELECT 列名 FROM 表一 INTERSECT SELECT 列名 FROM 表二;

一运行,还真出来!结果是:

  • 3
  • 4
  • 5
  • sql交集

这不就是两个表里都有的数字吗?我当时就觉得,这 INTERSECT 还真挺好用的。

不过我又想,要是我想找出三个表,或者更多表里的相同数据?我又试试,发现 INTERSECT 也能搞定,只要把几个查询语句用 INTERSECT 连起来就行。简单,真简单。

我还发现,这个 INTERSECT 默认会把重复的数据去掉,比如两个表里都有两个3,结果里就只有一个3。如果想保留重复的数据,还可以在 INTERSECT 后面加个 ALL,变成 INTERSECT ALL,这个我也试,确实管用。

今天这一通折腾,算是把 SQL 里找交集这事儿给弄明白。以后再遇到这种问题,我就知道该怎么解决。

数据库里还有一些类似于 INTERSECT 的命令,比如找并集的 UNION,找差集的 EXCEPT,这些我也顺便看看,感觉也挺有意思的,下次有时间再好好研究研究。今天就先分享到这里,希望对大家有点帮助!

sql交集

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]