Sql 简明教程
SQL - Full Join
The SQL Full Join
SQL Full Join 通过整体连接两个表来创建一个新表。连接表包含来自两个表的全部记录,并用 NULL 值填充任一侧缺少的匹配项。简而言之,满连接是一种外部连接,它将左连接和右连接的结果集组合在一起。
让我们通过以下韦恩图详细了解这个概念。假设我们有两个表作为两组(由圆圈表示)。使用满连接获取的结果集(或新连接表)正是这两个集合的并集。
Syntax
以下是 SQL 中满连接的基本语法:
SELECT column_name(s)
FROM table1
FULL JOIN table2
ON table1.column_name = table2.column_name;
Example
假设我们创建了一个名为 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 |
以下查询在 SQL Server 中连接 CUSTOMER 和 ORDERS 两个表:
SELECT ID, NAME, AMOUNT, DATE
FROM CUSTOMERS
FULL JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
Joining Multiple Tables with Full Join
Full Join 查询也可用于连接不只是两个表。要做到这一点,我们需要一次顺序组合两个表,直到所有表连接在一起。
请注意,在 MySQL 数据库中,没有直接使用 FULL JOIN 关键字来对多张表执行联接操作的条款。相反,在两张表上对 LEFT JOIN 和 RIGHT JOIN 计算 UNION,直到所有表连接在一起。
Syntax
使用 Full Join 连接多张表的语法如下:
SELECT column1, column2, column3...
FROM table1
FULL JOIN table2
ON condition_1
FULL JOIN table3
ON condition_2
....
....
FULL JOIN tableN
ON condition_N;
Example
为了演示 Full Join,我们考虑我们之前创建的示例表 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_NAMENAME |
SALES_MADE |
102 |
SARIKA |
4500 |
100 |
ALEKHYA |
3623 |
101 |
REVATHI |
1291 |
103 |
VIVEK |
3426 |
让我们使用下面给出的 full join 查询连接这三张表:
SELECT CUSTOMERS.ID, CUSTOMERS.NAME, ORDERS.DATE, EMPLOYEE.EMPLOYEE_NAME
FROM CUSTOMERS
FULL JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
FULL JOIN EMPLOYEE
ON ORDERS.OID = EMPLOYEE.EID;
通过此查询,我们将显示客户的 id、名称以及创建订单的日期和销售该商品的员工的名称。
Full Join with WHERE Clause
连接操作默认使用 ON 子句来筛选记录。我们假设需要根据某个条件/限制来进一步筛选这些记录,我们还可以将 WHERE 子句与连接操作一起使用。
Syntax
当与 WHERE 子句一起使用时,Full Join 的语法如下:
SELECT column_name(s)
FROM table1
FULL JOIN table2
ON table1.column_name = table2.column_name
WHERE condition;