Sql 简明教程

SQL - Right Join

SQL 连接用于根据给定条件从多个表中检索记录。连接包括满足给定条件的记录,而外部连接则生成包含匹配行和不匹配行的表。

如前一个教程中所讨论的,左外连接用于查找两个表相对于左表的并集。在本教程中,我们讨论右外连接。

The SQL Right Join

SQL 中的 Right JoinRight Outer Join 查询会返回来自右侧表格的所有行,即使在左侧表格中没有匹配项。简而言之,右侧连接会返回右侧表格中的所有值,加上来自左侧表格的匹配值,或在没有匹配连接谓词的情况下返回 NULL。

rightjoin 1

Syntax

以下是 SQL 中右侧连接的基本语法:

SELECT table1.column1, table2.column2...
FROM table1
RIGHT JOIN table2
ON table1.common_field = table2.common_field;

Example

此示例中我们使用的表格名为 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

NAME

AGE

ADDRESS

SALARY

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

DATE

CUSTOMER_ID

AMOUNT

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;

Output

这将产生以下结果 -

ID

NAME

AMOUNT

DATE

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

Joining Multiple Tables with Right Join

与左侧连接类似,右侧连接也会连接多个表格。然而,区别在于右侧表格会整体返回,而不是左侧表格。

此外,第一张表格的行会与第二张表格中的行进行匹配。如果记录不匹配,且第二张表格中的记录数大于第一张表格中的记录数,则会返回 NULL 作为第一张表格中的值。

Syntax

以下是使用右侧连接来连接多个表格的语法:

SELECT column1, column2, column3...
FROM table1
RIGHT JOIN table2
ON condition_1
RIGHT JOIN table3
ON condition_2
....
....
RIGHT JOIN tableN
ON condition_N;

Example

这里,让我们考虑之前创建的表格 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

EMPLOYEE_NAME

SALES_MADE

102

SARIKA

4500

100

ALEKHYA

3623

101

REVATHI

1291

103

VIVEK

3426

以下查询使用 Right Join query 连接了这三个表格:

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、名称以及创建订单的日期和销售该商品的员工的名称。

Output

结果表如下:

ID

NAME

DATE

EMPLOYEE_NAME

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

Right Join with WHERE Clause

WHERE 子句用于筛选满足它所指定条件的记录。此子句可与右侧连接查询一起使用,以便对连接结果集应用特定筛选。

Syntax

使用 WHERE 子句时的右侧连接语法如下:

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name
WHERE condition;

Example

可以使用 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;

Output

在使用正确的连接应用 where 子句后,所得表包含数量值大于 1000.00 的行 −

ID

NAME

DATE

Amount

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