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

? ??????僅列出兩表能按照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)行選擇,效率太低)。