SQL - 右連線



SQL 連線用於根據給定條件從多個表中檢索記錄。連線包括滿足給定條件的記錄,而外連線的結果表包含匹配的行和不匹配的行。

如之前的教程中所述,左外連線用於查詢關於左表的兩個表的並集。在本教程中,讓我們討論一下右外連線。

SQL 右連線

SQL 中的右連線右外連線查詢返回右表中的所有行,即使左表中沒有匹配項。簡而言之,右連線返回右表中的所有值,以及左表中的匹配值,如果沒有匹配的連線謂詞,則返回 NULL。

Right Join
如果 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
廣告