SQL - 聯接



SQL Join 子句

SQL 的Join 子句用於組合資料庫中兩個或多個表中的資料。當相關資料儲存在多個表中時,聯接可幫助您使用其外部索引鍵檢索組合這些表中的欄位的記錄。

Join 子句中指定兩個或多個表中記錄聯接的列的部分稱為聯接謂詞。此謂詞通常與 ON 子句一起指定,並使用各種比較運算子,例如 <、>、<>、<=、>=、!=、BETWEEN、LIKE 和 NOT 等。我們還可以使用邏輯運算子 AND、OR 和 NOT 連線多個聯接謂詞。

我們可以將 JOIN 與更新刪除 SQL 查詢一起使用,以更新和刪除多個表中的記錄。當您使用聯接檢索表時,顯示的結果表不會儲存在資料庫中的任何位置。

語法

以下是 SQL JOIN CLAUSE 的基本語法:

SELECT column_name(s)
FROM table1
JOIN table2;

示例

假設我們使用以下查詢建立了一個包含組織客戶詳細資訊的 CUSTOMERS 表:

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),       
   PRIMARY KEY (ID)
);

現在,使用 INSERT 語句將值插入此表,如下所示:

INSERT INTO CUSTOMERS VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );

將建立如下所示的 CUSTOMERS 表:

ID 姓名 年齡 地址 薪資
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

以下是另一個 ORDERS 表,其中包含客戶的訂單詳細資訊。

CREATE TABLE ORDERS (
   OID INT NOT NULL,
   DATE VARCHAR (20) NOT NULL,
   CUSTOMER_ID INT NOT NULL,
   AMOUNT DECIMAL (18, 2)
);

使用 INSERT 語句,將值插入此表,如下所示:

INSERT INTO ORDERS VALUES 
(102, '2009-10-08 00:00:00', 3, 3000.00),
(100, '2009-10-08 00:00:00', 3, 1500.00),
(101, '2009-11-20 00:00:00', 2, 1560.00),
(103, '2008-05-20 00:00:00', 4, 2060.00);

將建立如下所示的 ORDERS 表:

OID 日期 客戶ID 金額
102 2009-10-08 00:00:00 3 3000.00
100 2009-10-08 00:00:00 3 1500.00
101 2009-11-20 00:00:00 2 1560.00
103 2008-05-20 00:00:00 4 2060.00

以下查詢對錶 CUSTMERS 和 ORDERS 執行聯接操作:

SELECT ID, NAME, AGE, AMOUNT 
FROM CUSTOMERS 
JOIN ORDERS 
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

輸出

透過執行上述查詢,將顯示結果表,其中包含 CUSTOMERS 表中 ID、NAME、AGE 欄位以及 ORDERS 表中 AMOUNT 欄位的值。

ID 姓名 年齡 金額
3 Kaushik 23 3000
3 Kaushik 23 1500
2 Khilan 25 1560
4 Chaitali 25 2060

SQL 中的聯接型別

SQL 提供了各種型別的聯接,這些聯接根據跨多個表聯接資料的方式進行分類。它們列出如下:

內連線

一個INNER JOIN 是預設聯接,它檢索兩個表的交集。它將第一個表的每一行與第二個表的每一行進行比較。如果這些行的對滿足聯接謂詞,則將它們連線在一起。

外連線

與內連線不同,外連線檢索兩個表中的所有記錄,即使一個表中沒有另一個表的對應行。外聯接進一步分為三種子型別 - 左聯接、右聯接和全聯接。

以下是不同型別的外部聯接:

  • LEFT JOIN - 即使右表中沒有匹配項,也返回左表中的所有行。

  • RIGHT JOIN - 即使左表中沒有匹配項,也返回右表中的所有行。

  • FULL JOIN - 當其中一個表中有匹配項時返回行。

其他聯接

除此之外,還有另外兩個聯接:

  • SELF JOIN - 用於將表本身聯接起來,就好像該表是兩個表一樣,在 SQL 語句中臨時重新命名至少一個表。

  • CROSS Join - 返回兩個或多個聯接表中記錄集的笛卡爾積。

廣告