MySQL基礎知識——JOIN關聯

JOIN鏈接的做用
JOIN 鏈接用於把來自兩個或多個表的行結合起來,基於這些表之間的共同字段。數據庫

最多見的 JOIN 類型:INNER JOIN(簡單的 JOIN)。INNER JOIN 從多個表中返回知足 JOIN 條件的全部行。ide

注意:鏈接不是物理實體,它在數據庫的物理表中是不存在的,只有當MySQL須要使用鏈接來進行查詢時纔會使用到。3d


示例數據庫*code

讓咱們看看選自 "Orders" 表的數據:blog

MySQL基礎知識——JOIN關聯

而後,看看選自 "Customers" 表的數據:it

MySQL基礎知識——JOIN關聯

請注意,"Orders" 表中的 "客戶ID" 列指向 "Customers" 表中的"客戶ID"。上面這兩個表是經過 "客戶ID" 列聯繫起來的。table

JOIN實例
咱們想知道每一個訂單ID都是哪些客戶訂購的,以及具體的訂單時間。咱們運行下面的 SQL 語句(包含 INNER JOIN):class

SELECT o.訂單ID, c.姓名, o.訂單日期
FROM Orders o
INNER JOIN Customers c
ON o.客戶ID=c.客戶ID;

運行結果以下所示:基礎

MySQL基礎知識——JOIN關聯

不一樣的 JOIN
在咱們繼續講解實例以前,咱們先列出您可使用的不一樣的 SQL JOIN 類型:語法

  • INNER JOIN:若是表中有至少一個匹配,則返回行

  • LEFT JOIN:即便右表中沒有匹配,也從左表返回全部的行

  • RIGHT JOIN:即便左表中沒有匹配,也從右表返回全部的行

  • FULL JOIN:只要其中一個表中存在匹配,則返回行

INNER JOIN

內部連接INNER JOIN關鍵字選擇兩個表中具備匹配值的記錄。

SQL INNER JOIN 語法
SELECT column_name(s)FROM table1
INNER JOIN table2 ON
table1.column_name = table2.column_name;

註釋:INNER JOIN 與 JOIN 是相同的,上面的示例就是INNER JOIN

MySQL基礎知識——JOIN關聯

LEFT JOIN
SQL左連接LEFT JOIN關鍵字返回左表(表1)中的全部行,即便在右表(表2)中沒有匹配。若是在正確的表中沒有匹配,結果是NULL。

SQL LEFT JOIN 語法
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;

或:

SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;

註釋:在一些數據庫中,LEFT JOIN稱爲LEFT OUTER JOIN。

MySQL基礎知識——JOIN關聯

LEFT JOIN示例

咱們想看看客戶Customers表中的全部用戶是否都有下單,可使用以下查詢語言:

SELECT c.姓名,o.訂單ID,  o.訂單日期
FROM Customers c
LEFT JOIN Orders o
ON o.客戶ID=c.客戶ID;

結果:

MySQL基礎知識——JOIN關聯

咱們發現劉二,李四,趙七沒有對應的訂單ID和訂單日期,是由於他們沒有在訂單表Orders中存在,沒有匹配上他們的信息。可是因爲是左鏈接,就把主表Customers的信息所有顯示出來了,就是對應上圖的table1。


RIGHT JOIN

SQL右連接 RIGHT JOIN 關鍵字返回右表(table2)的全部行,即便在左表(table1)上沒有匹配。若是左表沒有匹配,則結果爲NULL。

SQL RIGHT JOIN 語法
SELECT column_name(s) FROM table1
RIGHT JOIN table2 ON
table1.column_name = table2.column_name;

註釋:在一些數據庫中,RIGHT JOIN 稱爲 RIGHT OUTER JOIN。

MySQL基礎知識——JOIN關聯

右鏈接與左鏈接的主表恰好相反,會將table2中的數據徹底顯示,若是table1中沒有匹配上的就不顯示。

FULL OUTER JOIN
當左(表1)或右(表2)表記錄匹配時,FULL OUTER JOIN關鍵字將返回全部記錄。
注意: FULL OUTER JOIN可能會返回很是大的結果集!

SQL FULL OUTER JOIN 語法
SELECT column_name(s) FROM table1
FULL OUTER JOIN table2 ON
table1.column_name = table2.column_name;

MySQL基礎知識——JOIN關聯

全鏈接就是將table1和table2的內容徹底顯示,無論有沒有匹配上。

WHERE鏈接

除了上面的JOIN鏈接,咱們在上一個子查詢中其實有講解到使用WHERE也能夠進行鏈接。

例如:要查詢每一個客戶的訂單數量,咱們能夠這樣寫

SELECT 
`姓名`,
`客戶ID`,
(
SELECT COUNT(*)
FROM orders o
WHERE o.`客戶ID`=c.`客戶ID` 
) AS '數量'
FROM customers c

結果爲:

MySQL基礎知識——JOIN關聯

這裏使用SELECT COUNT(*)對錶中的行進行計數,而且經過提供一條WHERE子句的鏈接來匹配某個特定的客戶ID 。

相關文章
相關標籤/搜索