SQL?JOIN?子句合并多個表中相關(guān)行全面指南
SQL JOIN
JOIN子句用于基于它們之間的相關(guān)列合并來自兩個或更多表的行。
讓我們看一下“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”。上述兩個表之間的關(guān)系是“CustomerID”列。
然后,我們可以創(chuàng)建以下SQL語句(包含INNER JOIN),選擇在兩個表中具有匹配值的記錄:
示例
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate FROM Orders INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;
它將產(chǎn)生類似于以下的結(jié)果:
| 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類型可以根據(jù)您的需求選擇,以確保檢索到所需的數(shù)據(jù)。希望這能幫助你理解SQL中JOIN的概念。如果有其他問題,請隨時告訴我。
SQL INNER JOIN
INNER JOIN關(guān)鍵字選擇在兩個表中具有匹配值的記錄。
讓我們看一下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關(guān)鍵字連接Products和Categories:
SELECT ProductID, ProductName, CategoryName FROM Products INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID;
SQL INNER JOIN
注意:INNER JOIN關(guān)鍵字僅返回兩個表中具有匹配值的行。這意味著如果您有一個沒有CategoryID的產(chǎn)品,或者CategoryID在Categories表中不存在的記錄,該記錄將不會在結(jié)果中返回。
語法
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;
上面的示例在不指定表名的情況下也可以工作,因?yàn)橹付ǖ牧忻趦蓚€表中都不存在。如果嘗試在SELECT語句中包含CategoryID,則如果不指定表名,將會出現(xiàn)錯誤(因?yàn)?code>CategoryID在兩個表中都存在)。
JOIN或INNER JOIN
JOIN和INNER JOIN將返回相同的結(jié)果。
INNER是JOIN的默認(rèn)連接類型,因此當(dāng)您寫JOIN時,解析器實(shí)際上會寫INNER JOIN。
示例
JOIN與INNER JOIN相同:
SELECT Products.ProductID, Products.ProductName, Categories.CategoryName FROM Products JOIN Categories ON Products.CategoryID = Categories.CategoryID;
連接三個表
以下SQL語句選擇具有客戶和承運(yùn)商信息的所有訂單:
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用于將多個表中的數(shù)據(jù)連接在一起,以便根據(jù)關(guān)聯(lián)列的匹配情況檢索相應(yīng)的數(shù)據(jù)。希望這幫助你理解INNER JOIN的使用方式。如果有其他問題,請隨時提出。
SQL LEFT JOIN關(guān)鍵字
SQL LEFT JOIN關(guān)鍵字返回左表(table1)中的所有記錄以及右表(table2)中的匹配記錄。如果沒有匹配,則右側(cè)的結(jié)果為0條記錄。
LEFT JOIN語法
SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;
注意:在某些數(shù)據(jù)庫中,LEFT JOIN被稱為LEFT OUTER JOIN。
SQL LEFT JOIN
演示數(shù)據(jù)庫
在本教程中,我們將使用著名的Northwind示例數(shù)據(jù)庫。
以下是“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 |
示例
假設(shè)我們想要檢索所有客戶以及他們的訂單(如果有的話)。我們可以使用LEFT JOIN將兩個表連接在一起,以便即使某些客戶沒有訂單,它們?nèi)匀粫诮Y(jié)果中顯示。
SELECT Customers.CustomerID, Customers.CustomerName, Orders.OrderID, Orders.OrderDate FROM Customers LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
在這個例子中,LEFT JOIN確保了所有的客戶都會出現(xiàn)在結(jié)果中,而與之關(guān)聯(lián)的訂單信息(如果存在的話)也會被檢索出來。如果某個客戶沒有訂單,相應(yīng)的OrderID和OrderDate列將顯示為NULL。
希望這能幫助你理解SQL中LEFT JOIN的使用方式。
以上就是SQL JOIN 子句合并多個表中相關(guān)行全面指南的詳細(xì)內(nèi)容,更多關(guān)于SQL JOIN 子句多表合并的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
一文帶你徹底搞懂MySQL數(shù)據(jù)庫中的內(nèi)外連接
在 MySQL 多表查詢中,表連接是最核心,最常用的知識點(diǎn),這篇博客將用最通俗的語言,帶你徹底搞懂內(nèi)連接、左外連接、右外連接,看完直接上手寫 SQL2026-05-05
MySQL使用觸發(fā)器如何實(shí)現(xiàn)CHECK檢查約束的功能
這篇文章主要介紹了MySQL使用觸發(fā)器如何實(shí)現(xiàn)CHECK檢查約束的功能,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
MySQL數(shù)據(jù)庫雙機(jī)熱備的配置方法詳解
在企業(yè)級應(yīng)用中,數(shù)據(jù)庫的高可用性和數(shù)據(jù)的安全性是至關(guān)重要的,MySQL作為最流行的開源關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,提供了多種方式來實(shí)現(xiàn)高可用性,其中雙機(jī)熱備(Master-Slave)是一種常見的解決方案,本文將詳細(xì)介紹如何配置MySQL的雙機(jī)熱備環(huán)境,需要的朋友可以參考下2025-11-11
GDB調(diào)試Mysql實(shí)戰(zhàn)之源碼編譯安裝
今天小編就為大家分享一篇關(guān)于GDB調(diào)試Mysql實(shí)戰(zhàn)之源碼編譯安裝,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02
MySQL根據(jù)某一個或者多個字段查找重復(fù)數(shù)據(jù)的sql語句
這篇文章主要介紹了MySQL根據(jù)某一個或者多個字段查找重復(fù)數(shù)據(jù)的sql語句,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2018-12-12
mysql 協(xié)議的ping命令包及解析詳解及實(shí)例
這篇文章主要介紹了mysql 協(xié)議的ping命令包及解析詳解及實(shí)例的相關(guān)資料,這里附有簡單實(shí)例代碼并附下載源碼,需要的朋友可以參考下2017-01-01

