
- 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 連線
- 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 - 檢查約束
- SQL - 預設約束
- 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 中的右連線或右外連線查詢返回右表中的所有行,即使左表中沒有匹配項。簡而言之,右連線返回右表中的所有值,以及左表中的匹配值,如果沒有匹配的連線謂詞,則返回 NULL。

如果 ON 子句在左表中匹配零條記錄;連線仍將返回結果中的一行,但在左表的每一列中都包含 NULL 值。
語法
以下是 SQL 中右連線的基本語法:
SELECT table1.column1, table2.column2... FROM table1 RIGHT JOIN table2 ON table1.common_field = table2.common_field;
示例
我們在這個示例中使用的表名為 CUSTOMERS 和 ORDERS。
假設我們正在建立一個名為 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 RIGHT 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 |
使用右連線連線多個表
與左連線一樣,右連線也連線多個表。但是,差異在於返回的是第二個表而不是第一個表。
此外,第一個表的行與第二個表中的行匹配。如果記錄不匹配,並且第二個表的記錄數大於第一個表,則第一個表中的值為 NULL。
語法
以下是使用右連線連線多個表的語法:
SELECT column1, column2, column3... FROM table1 RIGHT JOIN table2 ON condition_1 RIGHT JOIN table3 ON condition_2 .... .... RIGHT JOIN tableN ON condition_N;
示例
在這裡,讓我們考慮之前建立的 CUSTOMERS 和 ORDERS 表;並使用以下查詢建立一個名為 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 |
以下查詢使用右連線查詢連線這三個表:
SELECT CUSTOMERS.ID, CUSTOMERS.NAME, ORDERS.DATE, EMPLOYEE.EMPLOYEE_NAME FROM CUSTOMERS RIGHT JOIN ORDERS ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID RIGHT JOIN EMPLOYEE ON ORDERS.OID = EMPLOYEE.EID;
透過此查詢,我們將顯示客戶的 ID、姓名以及訂單日期以及銷售該商品的員工姓名。
輸出
獲得的結果表如下所示:
ID | 姓名 | 日期 | 員工姓名 |
---|---|---|---|
3 | Kaushik | 2009-10-08 00:00:00 | SARIKA |
3 | Kaushik | 2009-10-08 00:00:00 | ALEKHYA |
2 | Khilan | 2009-11-20 00:00:00 | REVATHI |
4 | Chaitali | 2008-05-20 00:00:00 | VIVEK |
帶 WHERE 子句的右連線
WHERE 子句用於篩選滿足其指定條件的記錄。此子句可與右連線查詢一起使用,以對連線的結果集應用某些過濾器。
語法
與 WHERE 子句一起使用右連線的語法如下所示:
SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name WHERE condition;
示例
可以使用 WHERE 子句過濾組合資料庫表中的記錄。考慮之前的兩個表 CUSTOMERS 和 ORDERS;並透過使用 WHERE 子句應用某些約束來使用右連線查詢連線它們。
SELECT ID, NAME, DATE, AMOUNT FROM CUSTOMERS RIGHT JOIN ORDERS ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID WHERE ORDERS.AMOUNT > 1000.00;
輸出
應用 WHERE 子句和右連線後,結果表包含金額值大於 1000.00 的行:
ID | 姓名 | 日期 | 金額 |
---|---|---|---|
3 | Kaushik | 2009-10-08 00:00:00 | 3000.00 |
3 | Kaushik | 2009-10-08 00:00:00 | 1500.00 |
2 | Khilan | 2009-11-20 00:00:00 | 1560.00 |
4 | Chaitali | 2008-05-20 00:00:00 | 2060.00 |