SQL JOIN JOIN子句用於基於它們之間的相關列合併來自兩個或更多表的行。 讓我們看一下“Orders”表的一部分選擇: OrderID CustomerID OrderDate 10308 2 1996-09-18 10309 37 1996-09-19 10310 77 1996-09-2 ...
SQL JOIN
JOIN子句用於基於它們之間的相關列合併來自兩個或更多表的行。
讓我們看一下“Orders”表的一部分選擇:
OrderID | CustomerID | OrderDate |
---|---|---|
10308 | 2 | 1996-09-18 |
10309 | 37 | 1996-09-19 |
10310 | 77 | 1996-09-20 |
然後,看一下“Customers”表的一部分選擇:
CustomerID | CustomerName | ContactName | Country |
---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mexico |
註意,“Orders”表中的“CustomerID”列是指“Customers”表中的“CustomerID”。上述兩個表之間的關係是“CustomerID”列。
然後,我們可以創建以下SQL語句(包含INNER JOIN),選擇在兩個表中具有匹配值的記錄:
示例
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;
它將產生類似於以下的結果:
OrderID | CustomerName | OrderDate |
---|---|---|
10308 | Ana Trujillo Emparedados y helados | 9/18/1996 |
10365 | Antonio Moreno Taquería | 11/27/1996 |
10383 | Around the Horn | 12/16/1996 |
10355 | Around the Horn | 11/15/1996 |
10278 | Berglunds snabbköp | 8/12/1996 |
不同類型的SQL JOIN
以下是SQL中不同類型的JOIN:
- (INNER) JOIN:返回在兩個表中具有匹配值的記錄
- LEFT (OUTER) JOIN:返回左表中的所有記錄以及右表中匹配的記錄
- RIGHT (OUTER) JOIN:返回右表中的所有記錄以及左表中匹配的記錄
- FULL (OUTER) JOIN:在左表或右表中有匹配時返回所有記錄
這些JOIN類型可以根據您的需求選擇,以確保檢索到所需的數據。希望這能幫助你理解SQL中JOIN的概念。如果有其他問題,請隨時告訴我。
SQL INNER JOIN
INNER JOIN關鍵字選擇在兩個表中具有匹配值的記錄。
讓我們看一下Products
表的一部分選擇:
ProductID | ProductName | CategoryID | Price |
---|---|---|---|
1 | Chais | 1 | 18 |
2 | Chang | 1 | 19 |
3 | Aniseed Syrup | 2 | 10 |
以及Categories
表的一部分選擇:
CategoryID | CategoryName | Description |
---|---|---|
1 | Beverages | Soft drinks, coffees, teas, beers, and ales |
2 | Condiments | Sweet and savory sauces, relishes, spreads, and seasonings |
3 | Confections | Desserts, candies, and sweet breads |
我們將使用兩個表的CategoryID
欄位連接Products
表和Categories
表:
示例
使用INNER JOIN關鍵字連接Products
和Categories
:
SELECT ProductID, ProductName, CategoryName
FROM Products
INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID;
SQL INNER JOIN
註意:INNER JOIN關鍵字僅返回兩個表中具有匹配值的行。這意味著如果您有一個沒有CategoryID
的產品,或者CategoryID
在Categories
表中不存在的記錄,該記錄將不會在結果中返回。
語法
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
指定列名
在SQL語句中指定列時,最好在列名前包含表名。
示例
指定表名:
SELECT Products.ProductID, Products.ProductName, Categories.CategoryName
FROM Products
INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID;
上面的示例在不指定表名的情況下也可以工作,因為指定的列名在兩個表中都不存在。如果嘗試在SELECT語句中包含CategoryID
,則如果不指定表名,將會出現錯誤(因為CategoryID
在兩個表中都存在)。
JOIN或INNER JOIN
JOIN和INNER JOIN將返回相同的結果。
INNER是JOIN的預設連接類型,因此當您寫JOIN時,解析器實際上會寫INNER JOIN。
示例
JOIN與INNER JOIN相同:
SELECT Products.ProductID, Products.ProductName, Categories.CategoryName
FROM Products
JOIN Categories ON Products.CategoryID = Categories.CategoryID;
連接三個表
以下SQL語句選擇具有客戶和承運商信息的所有訂單:
示例
SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
FROM ((Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);
INNER JOIN用於將多個表中的數據連接在一起,以便根據關聯列的匹配情況檢索相應的數據。希望這幫助你理解INNER JOIN的使用方式。如果有其他問題,請隨時提出。
SQL LEFT JOIN關鍵字
SQL LEFT JOIN關鍵字返回左表(table1)中的所有記錄以及右表(table2)中的匹配記錄。如果沒有匹配,則右側的結果為0條記錄。
LEFT JOIN語法
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
註意:在某些資料庫中,LEFT JOIN被稱為LEFT OUTER JOIN。
SQL LEFT JOIN
演示資料庫
在本教程中,我們將使用著名的Northwind示例資料庫。
以下是“Customers”表的部分選擇:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
以及“Orders”表的部分選擇:
OrderID | CustomerID | EmployeeID | OrderDate | ShipperID |
---|---|---|---|---|
10308 | 2 | 7 | 1996-09-18 | 3 |
10309 | 37 | 3 | 1996-09-19 | 1 |
10310 | 77 | 8 | 1996-09-20 | 2 |
示例
假設我們想要檢索所有客戶以及他們的訂單(如果有的話)。我們可以使用LEFT JOIN將兩個表連接在一起,以便即使某些客戶沒有訂單,它們仍然會在結果中顯示。
SELECT Customers.CustomerID, Customers.CustomerName, Orders.OrderID, Orders.OrderDate
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
在這個例子中,LEFT JOIN確保了所有的客戶都會出現在結果中,而與之關聯的訂單信息(如果存在的話)也會被檢索出來。如果某個客戶沒有訂單,相應的OrderID和OrderDate列將顯示為NULL。
希望這能幫助你理解SQL中LEFT JOIN的使用方式。如果有其他問題,請隨時提出。
最後
為了方便其他設備和平臺的小伙伴觀看往期文章:公眾號搜索Let us Coding
,或者掃描下方二維碼,關註公眾號,即可獲取最新文章。
看完如果覺得有幫助,歡迎點贊、收藏和關註