SQL Inner Join子句
在本教程中,我們將演示如何使用SQL INNER JOIN
子句來查詢來自兩個或多個表的數據。
1. SQL INNER JOIN子句簡介
到目前爲止,您已經學習瞭如何使用SELECT語句從單個表中查詢數據。 但是,SELECT
語句不限於從單個表中查詢數據。 SELECT
語句可以將多個錶鏈接在一起。
連接表的過程稱爲Join
。 SQL提供了多種連接,如內連接,左連接,右連接,全外連接等。本教程重點介紹內連接。
內部連接子句通過兩列之間的關係鏈接兩個(或更多)表。 無論何時使用內連接子句,通常都要考慮交集。
通過一個簡單的例子來理解內連接概念要容易得多。
假設有兩個表:A
和B
。
表A
有四行:(1,2,3,4),表B
有四行:(3,4,5,6)
當表A
使用內部聯接與表B
連接時,我們得到結果集(3,4),它是表A
和表B
的交集。
如下圖所示 -
對於表A
中的每一行,內部連接子句查找表B
中的匹配行。如果匹配行,則它將包含在最終結果集中。
假設A&B
表的列名是n
,以下語句說明了內連接子句:
SELECT
A.n
FROM A
INNER JOIN B ON B.n = A.n;
INNER JOIN
子句出現在FROM
子句之後。 在ON
關鍵字之後指定表A
和表B
之間匹配的條件。這種情況稱爲連接條件,即B.n = A.n
INNER JOIN
子句可以連接三個或更多表,只要它們具有關係,通常是外鍵關係。
例如,以下語句說明了如何連接3
個表:A
,B
和C
:
SELECT
A.n
FROM A
INNER JOIN B ON B.n = A.n
INNER JOIN C ON C.n = A.n;
2. SQL INNER JOIN示例
SQL INNER JOIN 2個表的示例
我們將使用employees
和departments
表來演示INNER JOIN
子句的工作原理。這兩個表的結構和關係如下所示:
每個員工都屬於一個且只有一個部門,而每個部門可以擁有多個員工。 員工和部門表之間的關係是一對多的。
employees
表中的department_id
列是將員工鏈接到departments
表的外鍵列。
要獲取部門ID爲:1
,2
和3
的信息,請使用以下語句。
SELECT
department_id,
department_name
FROM
departments
WHERE
department_id IN (1, 2, 3);
執行上面查詢語句,得到以下結果 -
+---------------+-----------------+
| department_id | department_name |
+---------------+-----------------+
| 1 | 管理 |
| 2 | 市場營銷 |
| 3 | 採購 |
+---------------+-----------------+
3 rows in set
請注意,在WHERE子句中使用IN運算符來獲取department_id
爲1
,2
和3
的行。
要獲取在部門ID爲:1
,2
和3
中工作的員工的信息,請使用以下查詢:
SELECT
first_name,
last_name,
department_id
FROM
employees
WHERE
department_id IN (1, 2, 3)
ORDER BY
department_id;
執行上面查詢語句,得到以下結果 -
要組合這兩個表中的數據,請使用內部連接子句,組成成以下查詢:
SELECT
first_name,
last_name,
employees.department_id,
departments.department_id,
department_name
FROM
employees
INNER JOIN
departments ON departments.department_id = employees.department_id
WHERE
employees.department_id IN (1 , 2, 3);
執行上面查詢語句,得到以下結果 -
對於employees
表中的每一行,該語句檢查department_id
列的值是否等於departments
表中department_id
列的值。
如果滿足條件employees.department_id = departments.department_id
,則employees
和departments
表中行的數據的組合行將包含在結果集中。
請注意,employees
和departments
表都具有相同的列名department_id
,因此我們必須使用語法table_name.column_name
限定department_id
列。
SQL INNER JOIN 3個表的示例
每個員工都有一個工作崗位,而一個工作崗位可能會有多個員工。 jobs
表和employees
表之間的關係是一對多的。
以下數據庫圖說明了employees
, departments
和 jobs
表之間的關係:
以下查詢使用內部聯接子句連接3
個表:員工,部門和工作崗位,以獲取在部門ID爲:1
,2
和3
中工作的員工的名字,姓氏,職位和部門名稱。
SELECT
first_name, last_name, job_title, department_name
FROM
employees e
INNER JOIN departments d ON d.department_id = e.department_id
INNER JOIN jobs j ON j.job_id = e.job_id
WHERE
e.department_id IN (1, 2, 3);
執行上面查詢語句,得到以下結果 -
通過上面的學習,現在您應該瞭解SQL INNER JOIN
子句如何工作,並知道如何應用它來查詢來自多個表的數據。