今天闲着没事,我就琢磨着怎么在数据库里找出几个表里相同的数据,说人话就是找交集。我一开始想,这还不简单,但我一上手,发现还真有点门道。
我先是试试平时用得最多的 SELECT 语句,想看看能不能直接把几个表连起来查,结果发现这玩意儿只能查一个表,或者把几个表的结果拼一起,但找相同的数据还真不行。
然后我就开始翻各种数据库的书,在网上也搜半天,发现原来 SQL 里有个叫 INTERSECT 的东西,专门干这个的。我心想这下可算找对地方!
我建两个表,一个叫 "表一",一个叫 "表二",里面随便放点数字,就像这样:
- 表一:1, 2, 3, 4, 5
- 表二:3, 4, 5, 6, 7
然后我写个 SQL 语句:
SELECT 列名 FROM 表一 INTERSECT SELECT 列名 FROM 表二;
一运行,还真出来!结果是:
- 3
- 4
- 5
这不就是两个表里都有的数字吗?我当时就觉得,这 INTERSECT 还真挺好用的。
不过我又想,要是我想找出三个表,或者更多表里的相同数据?我又试试,发现 INTERSECT 也能搞定,只要把几个查询语句用 INTERSECT 连起来就行。简单,真简单。
我还发现,这个 INTERSECT 默认会把重复的数据去掉,比如两个表里都有两个3,结果里就只有一个3。如果想保留重复的数据,还可以在 INTERSECT 后面加个 ALL,变成 INTERSECT ALL,这个我也试,确实管用。
今天这一通折腾,算是把 SQL 里找交集这事儿给弄明白。以后再遇到这种问题,我就知道该怎么解决。
数据库里还有一些类似于 INTERSECT 的命令,比如找并集的 UNION,找差集的 EXCEPT,这些我也顺便看看,感觉也挺有意思的,下次有时间再好好研究研究。今天就先分享到这里,希望对大家有点帮助!