SQL中的JOIN

????????最近在學(xué)習(xí)JavaWeb的時候,對之前學(xué)過的數(shù)據(jù)庫的知識又進(jìn)行了一次學(xué)習(xí)。這次總結(jié)了SQL中利用JOIN進(jìn)行多表查詢的幾種方式。JOIN主要有三種類型:內(nèi)聯(lián)接,外連接,交叉連接。在這三種分類中一共又擁有以下七種情況:

內(nèi)連接 inner join


內(nèi)連接

? ??????僅列出兩表能按照join條件連接起來的信息,其他的信息不顯示。不以某一個表為基礎(chǔ),僅取出匹配的內(nèi)容。使用SQL語句操作如下:SELECT <select_list> ?FROM Table A INNER JOIN Table B ON A.key = B.key。

外連接?outer join

? ? (1)左外連接 left out join = left join


情況一

????????顯示左表的所有記錄,右表符合join條件的信息顯示,不符合的置空。以A表作為基礎(chǔ),首先取出A表中所有的數(shù)據(jù),B表值取出與A表有關(guān)的數(shù)據(jù)。使用SQL語句操作如下:SELECT <select_list>?FROM Table A LEFT JOIN Table B ON A.key = B.key。


情況二

?????????顯示左表中符合join條件的數(shù)據(jù)(A中存在,B中不存在)。使用SQL語句操作如下:SELECT <seclect_list>?FROM Table A LEFT JOIN Table B ON A.key = B.key WHERE B.key IS NULL。


? ? (2)右外連接 right out join = right join


情況一

????????顯示右表的所有記錄,左表符合join條件的信息顯示,不符合的置空。以B表作為基礎(chǔ),首先取出B表中所有的數(shù)據(jù),A表值取出與B表有關(guān)的數(shù)據(jù)。使用SQL語句操作如下:SELECT <select_list> FROM Table A RIGHT JOIN Table B ON A.key = B.key。


情況二

? ? ? ? ?顯示右表中符合join條件的數(shù)據(jù)(B中存在,A中不存在)。使用SQL語句操作如下:SELECT <select_list> FROM Table A RIGHT JOIN Table B ON A.key = B.key WHERE A.key IS NULL。

? ? (3)全外連接 full outer join = full join


情況一

????????左右兩表的信息都全部顯示,符合join條件的信息顯示,不符合的置空。使用SQL語句操作如下:SELECT <select_list> FROM Table A FULL OUTER JOIN Table B ON A.key = B.key。在這里也可以用左外連接和右外連接來實現(xiàn)這個情況的全外連接,使用SQL語句操作如下:SELECT <select_list> FROM Table A LEFT JOIN Table B ON A.key = B.key UNION SELECT <select_list> FROM Table A RIGHT JOIN Table B ON A.key = B.key。其中使用了UNION關(guān)鍵字用于合并與去重。


情況二

? ? ? ? 顯示兩個表中特有的部分。使用SQL語句操作如下:SELECT <select_list> FROM Table A FULL OUTER JOIN Table B ON A.key = B.key WHERE A.key IS NULL OR B.key IS NULL。在這里也可以用左外連接和右外連接來實現(xiàn)這個情況的全外連接,使用SQL語句操作如下:SELECT <select_list> FROM Table A LEFT JOIN Table B ON A.key = B.key WHERE B.key IS NULL UNION SELECT <select_list> FROM Table A RIGHT JOIN Table B ON A.key = B.key WHERE A.key IS NULL。其中使用了UNION關(guān)鍵字用于合并與去重。

交叉連接 cross join

? ? ? ? 生成兩張表的笛卡兒積。得到的記錄相當(dāng)于兩表的乘積,結(jié)果集合中的數(shù)據(jù)行數(shù)等于第一個表中符合查詢條件的數(shù)據(jù)行數(shù)乘以第二個表中符合查?詢條件的數(shù)據(jù)行數(shù)。使用SQL語句操作如下:SELECT <select_list>? FROM Table A CROSS Table B。

? ? ? ? 在交叉連接后面,不可以使用ON,只能使用WHERE。

????????通常來說,在大表關(guān)聯(lián)的時候,建議使用inner join或者left join,不建議使用cross join或者where(先進(jìn)行笛卡兒積,在進(jìn)行選擇,效率太低)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容