SQL 全连接
SQL全连接
SQL全连接 通过将两个表作为整体连接而创建一个新表。连接后的表包含来自两个表的所有记录,并在任一侧的缺失匹配中填充NULL值。简而言之,全连接是将左连接和右连接的结果集合并的一种外连接类型。
MySQL不支持全外连接。相反,您可以通过对左连接和右连接的结果集执行并集操作来模拟其工作。
让我们通过下面的维恩图详细理解这个概念。假设我们有两个表,分别表示为两个集合(由圆表示)。使用全连接获得的结果集(或新连接表)就是这两个集合的并集。
您还可以通过对左连接和右连接的结果集执行UNION操作来实现FULL JOIN的等效结果集。
语法
以下是SQL中FULL JOIN的基本语法−
示例
假设我们已经创建了一个名为CUSTOMERS的表,其中包含客户的个人详细信息,包括姓名、年龄、地址和工资等,使用以下查询:
现在使用INSERT语句将值插入到这个表中,如下所示−
表将被创建为 –
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 | MP | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
让我们创建另一个名为ORDERS的表,其中包含所下订单的详细信息和下单日期。
使用INSERT语句将值插入到此表中,如下所示:
表格显示如下−
ID | 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中连接了两个表CUSTOMERS和ORDERS:
输出
结果表如下所示−
ID | NAME | AMOUNT | DATE |
---|---|---|---|
1 | Ramesh | NULL | NULL |
2 | Khilan | 1560 | 2009-11-20 00:00:00 |
3 | Kaushik | 3000 | 2009-10-08 00:00:00 |
3 | Kaushik | 1500 | 2009-10-08 00:00:00 |
4 | Chaitali | 2060 | 2008-05-20 00:00:00 |
5 | Hardik | NULL | NULL |
6 | Komal | NULL | NULL |
7 | Muffy | NULL | NULL |
使用全连接合并多个表
全连接查询也可以用于合并多个表,方法是依次将两个表合并,直到所有表都被合并。
请注意,在MySQL数据库中,没有直接使用FULL JOIN关键字在多个表上执行合并操作的功能。而是计算每次两个表进行LEFT JOIN和RIGHT JOIN的UNION,直到所有表都合并。
语法
使用全连接合并多个表的语法如下所示:
示例
为了演示全连接,让我们考虑之前创建的示例表CUSTOMERS和ORDERS,并使用以下查询创建另一个名为EMPLOYEE的表:
现在,我们可以使用INSERT语句将值插入到这些空表中,如下所示:
被创建的EMPLOYEE表将如下所示 –
EID | EMPLOYEE_NAMENAME | SALES_MADE |
---|---|---|
102 | SARIKA | 4500 |
100 | ALEKHYA | 3623 |
101 | REVATHI | 1291 |
103 | VIVEK | 3426 |
100 | ALEKHYA | 3456 |
让我们使用下面给出的全连接查询将这三个表连接起来:
通过这个查询,我们将显示客户的编号、姓名,以及订单的日期和销售该商品的员工的姓名。
输出
结果表如下所示−
ID | NAME | DATE | EMPLOYEE_NAME |
---|---|---|---|
1 | Ramesh | NULL | NULL |
2 | Khilan | 2009-11-20 00:00:00 | REVATHI |
3 | Kaushik | 2009-10-08 00:00:00 | ALEKHYA |
3 | Kaushik | 2009-10-08 00:00:00 | ALEKHYA |
3 | Kaushik | 2009-10-08 00:00:00 | SARIKA |
4 | Chaitali | 2008-05-20 00:00:00 | VIVEK |
5 | Hardik | NULL | NULL |
6 | Komal | NULL | NULL |
7 | Muffy | NULL | NULL |
全连接 + WHERE子句
连接默认使用ON子句来过滤记录。假设我们还需要根据特定条件/约束进一步过滤这些记录,我们也可以使用WHERE子句与连接一起使用。
语法
使用WHERE子句的全连接的语法如下所示:
示例
考虑前面的两个表CUSTOMERS和ORDERS;应用一些约束条件使用全连接查询将它们连接起来,使用WHERE子句。
输出
使用全连接后,应用WHERE子句后的结果表包含金额值大于2000.00的行−
ID | NAME | DATE | AMOUNT |
---|---|---|---|
3 | Kaushik | 2009-10-08 00:00:00 | 3000.00 |
4 | Chaitali | 2008-05-20 00:00:00 | 2060.00 |