日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

图解SQL的inner join、left join、right join、full outer join、union、union all的区别

發布時間:2023/12/10 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图解SQL的inner join、left join、right join、full outer join、union、union all的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對于SQL的Join,在學習起來可能是比較亂的。我們知道,SQL的Join語法有很多inner的,有outer的,有left的,有時候,對于Select出來的結果集是什么樣子有點不是很清楚。Coding Horror上有一篇文章,通過文氏圖 Venn diagrams 解釋了SQL的Join。我覺得清楚易懂,轉過來。

假設我們有兩張表。Table A 是左邊的表。Table B 是右邊的表。其各有四條記錄,其中有兩條記錄name是相同的,如下所示:讓我們看看不同JOIN的不同

A表
idname
1Pirate
2Monkey
3Ninja
4Spaghetti
B表
idname
1Rutabaga
2Pirate
3Darth Vade
4Ninja

1.INNER JOIN

SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name

結果集
(TableA.)(TableB.)
idnameidname
1Pirate2Pirate
3Ninja4Ninja

Inner join 產生的結果集中,是A和B的交集。

2.FULL [OUTER] JOIN? (1) SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name?
結果集
(TableA.)(TableB.)
idnameidname
1Pirate2Pirate
2Monkeynullnull
3Ninja4Ninja
4Spaghettinullnull
nullnull1Rutabaga
nullnull3Darth Vade
Full outer join 產生A和B的并集。但是需要注意的是,對于沒有匹配的記錄,則會以null做為值。 可以使用IFNULL判斷。 (2) SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name
WHERE TableA.id IS null OR TableB.id IS null
結果集
(TableA.)(TableB.)
idnameidname
2Monkeynullnull
4Spaghettinullnull
nullnull1Rutabaga
nullnull3Darth Vade
產生A表和B表沒有交集的數據集。 3.LEFT [OUTER] JOIN (1) SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name
結果集
(TableA.)(TableB.)
idnameidname
1Pirate2Pirate
2Monkeynullnull
3Ninja4Ninja
4Spaghettinullnull
Left outer join 產生表A的完全集,而B表中匹配的則有值,沒有匹配的則以null值取代。 (2) SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name WHERE TableB.id IS null
結果集
(TableA.)(TableB.)
idnameidname
2Monkeynullnull
4Spaghettinullnull

產生在A表中有而在B表中沒有的集合。

4.RIGHT [OUTER] JOIN RIGHT OUTER JOIN 是后面的表為基礎,與LEFT OUTER JOIN用法類似。這里不介紹了。 5.UNION UNION ALL UNION 操作符用于合并兩個或多個 SELECT 語句的結果集。
請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同。UNION 只選取記錄,而UNION ALL會列出所有記錄。 (1)SELECT?name FROM?TableA UNION SELECT name FROM TableB
新結果集
name
Pirate
Monkey
Ninja
Spaghetti
Rutabaga
Darth Vade
選取不同值 (2)SELECT?name FROM?TableA UNION ALL?SELECT name FROM TableB
新結果集
name
Pirate
Monkey
Ninja
Spaghetti
Rutabaga
Pirate
Darth Vade
Ninja

全部列出來

(3)注意:

SELECT?* FROM?TableA UNION SELECT * FROM TableB
新結果集
idname
1Pirate
2Monkey
3Ninja
4Spaghetti
1Rutabaga
2Pirate
3Darth Vade
4Ninja
由于 id 1 Pirate?? 與 id 2 Pirate 并不相同,不合并 還需要注冊的是我們還有一個是“交差集” cross join, 這種Join沒有辦法用文式圖表示,因為其就是把表A和表B的數據進行一個N*M的組合,即笛卡爾積。表達式如下:SELECT * FROM TableA CROSS JOIN TableB 這個笛卡爾乘積會產生 4 x 4 = 16 條記錄,一般來說,我們很少用到這個語法。但是我們得小心,如果不是使用嵌套的select語句,一般系統都會產生笛卡爾乘積然再做過濾。這是對于性能來說是非常危險的,尤其是表很大的時候。


感謝!http://blog.diyiye.com/?post=10

轉載于:https://www.cnblogs.com/andy-wcl/archive/2013/03/09/3218144.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的图解SQL的inner join、left join、right join、full outer join、union、union all的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。