在本教學中,我們將演示如何使用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;
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
子句如何工作,並知道如何應用它來查詢來自多個表的資料。