
- SQL 教程
- SQL - 首頁
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 資料庫
- SQL - 語法
- SQL - 資料型別
- SQL - 運算子
- SQL - 表示式
- SQL 資料庫
- SQL - 建立資料庫
- SQL - 刪除資料庫
- SQL - 選擇資料庫
- SQL - 重新命名資料庫
- SQL - 顯示資料庫
- SQL - 資料庫備份
- SQL 表
- SQL - 建立表
- SQL - 顯示錶
- SQL - 重命名錶
- SQL - 截斷表
- SQL - 克隆表
- SQL - 臨時表
- SQL - 修改表
- SQL - 刪除表
- SQL - 刪除表資料
- SQL - 約束
- SQL 查詢
- SQL - 插入查詢
- SQL - 選擇查詢
- SQL - SELECT INTO
- SQL - INSERT INTO SELECT
- SQL - 更新查詢
- SQL - 刪除查詢
- SQL - 排序結果
- SQL 檢視
- SQL - 建立檢視
- SQL - 更新檢視
- SQL - 刪除檢視
- SQL - 重新命名檢視
- SQL 運算子和子句
- SQL - WHERE 子句
- SQL - TOP 子句
- SQL - DISTINCT 子句
- SQL - ORDER BY 子句
- SQL - GROUP BY 子句
- SQL - HAVING 子句
- SQL - AND & OR
- SQL - 布林 (BIT) 運算子
- SQL - LIKE 運算子
- SQL - IN 運算子
- SQL - ANY, ALL 運算子
- SQL - EXISTS 運算子
- SQL - CASE
- SQL - NOT 運算子
- SQL - 不等於
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 運算子
- SQL - UNION 運算子
- SQL - UNION vs UNION ALL
- SQL - INTERSECT 運算子
- SQL - EXCEPT 運算子
- SQL - 別名
- SQL 連線
- SQL - 使用連線
- SQL - 內連線
- SQL - 左連線
- SQL - 右連線
- SQL - 交叉連線
- SQL - 全連線
- SQL - 自連線
- SQL - 刪除連線
- SQL - 更新連線
- SQL - 左連線 vs 右連線
- SQL - UNION vs JOIN
- SQL 金鑰
- SQL - 唯一鍵
- SQL - 主鍵
- SQL - 外部索引鍵
- SQL - 組合鍵
- SQL - 備選鍵
- SQL 索引
- SQL - 索引
- SQL - 建立索引
- SQL - 刪除索引
- SQL - 顯示索引
- SQL - 唯一索引
- SQL - 聚集索引
- SQL - 非聚集索引
- 高階 SQL
- SQL - 萬用字元
- SQL - 註釋
- SQL - 注入
- SQL - 託管
- SQL - MIN & MAX
- SQL - NULL 函式
- SQL - CHECK 約束
- SQL - DEFAULT 約束
- SQL - 儲存過程
- SQL - NULL 值
- SQL - 事務
- SQL - 子查詢
- SQL - 處理重複項
- SQL - 使用序列
- SQL - 自動遞增
- SQL - 日期和時間
- SQL - 遊標
- SQL - 公共表表達式
- SQL - GROUP BY vs ORDER BY
- SQL - IN vs EXISTS
- SQL - 資料庫調優
- SQL 函式參考
- SQL - 日期函式
- SQL - 字串函式
- SQL - 聚合函式
- SQL - 數值函式
- SQL - 文字和影像函式
- SQL - 統計函式
- SQL - 邏輯函式
- SQL - 遊標函式
- SQL - JSON 函式
- SQL - 轉換函式
- SQL - 資料型別函式
- SQL 有用資源
- SQL - 問答
- SQL - 快速指南
- SQL - 有用函式
- SQL - 有用資源
- SQL - 討論
SQL - 內連線
SQL 的連線子句用於基於公共欄位/列組合資料庫中的多個相關表。
連線主要分為兩種型別:內連線和外連線。其他連線,如左連線、右連線、全連線等,只是這兩種主要連線的子型別。在本教程中,我們只學習內連線。
SQL 內連線
SQL 內連線是一種連線,它透過檢索兩個表中都具有匹配值(在公共列中)的記錄來組合多個表。
它將第一個表的每一行與第二個表的每一行進行比較,以查詢滿足連線謂詞的所有行對。當滿足連線謂詞時,來自兩個表的列值將組合到一個新表中。

內連線也稱為等值連線。它是預設連線;也就是說,即使使用“連線”關鍵字代替“內連線”,表也是使用公共列的匹配記錄連線的。
解釋
讓我們來看一個示例場景,以便更好地理解。
假設我們有一家公司員工的資訊,分為兩個表:EmpDetails 和 Marital status。其中,
EmpDetails 表包含員工 ID、姓名和工資等詳細資訊。
MaritalStatus 表包含員工 ID、年齡和婚姻狀況等詳細資訊。

當我們根據連線謂詞EmpDetails.EmpID = MaritalStatus.EmpID對這兩個表執行內連線操作時,結果記錄包含以下資訊:匹配記錄的 ID、姓名、工資、年齡和狀態。
語法
以下是 SQL 內連線的基本語法:
SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;
示例
假設我們已經建立了一個名為 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 );
該表將建立為:
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);
該表顯示如下:
OID | 日期 | CUSTOMER_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 |
現在,讓我們使用如下所示的內連線查詢組合這兩個表:
SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS INNER JOIN ORDERS ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
輸出
此查詢的結果如下所示:
ID | 姓名 | 金額 | 日期 |
---|---|---|---|
3 | Kaushik | 3000.00 | 2009-10-08 00:00:00 |
3 | Kaushik | 1500.00 | 2009-10-08 00:00:00 |
2 | Khilan | 1560.00 | 2009-11-20 00:00:00 |
4 | Chaitali | 2060.00 | 2008-05-20 00:00:00 |
使用內連線連線多個表
到目前為止,我們只學習瞭如何使用內連線連線兩個表。但是,我們也可以使用內連線連線儘可能多的表,方法是指定條件(根據該條件連線這些表)。
語法
以下是使用內連線連線多個表的語法:
SELECT column1, column2, column3... FROM table1 INNER JOIN table2 ON condition_1 INNER JOIN table3 ON condition_2 .... .... INNER JOIN tableN ON condition_N;
請注意,即使在這種情況下,也只能根據單個條件將兩個表連線在一起。此過程依次進行,直到所有表都組合在一起。
示例
讓我們使用之前的 CUSTOMERS 和 ORDERS 表以及一個名為EMPLOYEE的新表。我們將使用以下查詢建立 EMPLOYEE 表:
CREATE TABLE EMPLOYEE ( EID INT NOT NULL, EMPLOYEE_NAME VARCHAR (30) NOT NULL, SALES_MADE DECIMAL (20) );
現在,我們可以使用 INSERT 語句將值插入這些空表,如下所示:
INSERT INTO EMPLOYEE VALUES (102, 'SARIKA', 4500), (100, 'ALEKHYA', 3623), (101, 'REVATHI', 1291), (103, 'VIVEK', 3426);
EMPLOYEE 表的詳細資訊如下所示。
EID | 員工姓名 | 銷售額 |
---|---|---|
102 | SARIKA | 4500 |
100 | ALEKHYA | 3623 |
101 | REVATHI | 1291 |
103 | VIVEK | 3426 |
使用以下查詢,我們可以組合 CUSTOMERS、ORDERS 和 EMPLOYEE 三個表。
SELECT OID, DATE, AMOUNT, EMPLOYEE_NAME FROM CUSTOMERS INNER JOIN ORDERS ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID INNER JOIN EMPLOYEE ON ORDERS.OID = EMPLOYEE.EID;
輸出
上述內連線查詢的結果如下所示:
OID | 日期 | 金額 | 員工姓名 |
---|---|---|---|
102 | 2009-10-08 00:00:00 | 3000.00 | SARIKA |
100 | 2009-10-08 00:00:00 | 1500.00 | ALEKHYA |
101 | 2009-11-20 00:00:00 | 1560.00 | REVATHI |
103 | 2008-05-20 00:00:00 | 2060.00 | VIVEK |
帶有 WHERE 子句的內連線
SQL 中的子句用於在使用 SQL 查詢檢索資料時應用約束。SQL 使用各種子句來約束資料;例如 WHERE 子句、GROUP BY 子句、ORDER BY 子句、UNION 子句等。
WHERE 子句用於過濾表中的資料。此子句指定一個條件,僅檢索滿足該條件的記錄。
內連線使用 WHERE 子句對要檢索的資料應用更多約束。例如,在檢索組織的員工記錄時,如果我們只想檢查每月收入超過 25000 的員工的資料,我們需要指定 WHERE 條件 (salary > 25000) 以僅檢索這些員工記錄。
語法
與 WHERE 子句一起使用時的內連線語法如下所示:
SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name WHERE condition;
示例
在此示例中,我們使用內連線查詢連線 CUSTOMERS 和 ORDERS 表,並使用 WHERE 子句對結果應用一些約束。
在這裡,我們從 CUSTOMERS 表中檢索 ID 和 NAME,從 ORDERS 表中檢索 DATE 和 AMOUNT,其中支付的金額高於 2000。
SELECT ID, NAME, DATE, AMOUNT FROM CUSTOMERS INNER JOIN ORDERS ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID WHERE ORDERS.AMOUNT > 2000.00;
輸出
應用內連線和 WHERE 子句後的結果表包含 AMOUNT 值大於 2000.00 的行:
ID | 姓名 | 日期 | 金額 |
---|---|---|---|
3 | Kaushik | 2009-10-08 00:00:00 | 3000.00 |
4 | Chaitali | 2008-05-20 00:00:00 | 2060.00 |