左连接、右连接和全外连接的区别

左连接、右连接和全外连接的区别

数据库管理系统 (DBMS) 允许使用连接从多个表中检索数据。连接主要是两个或多个关系(或表)的笛卡尔积。

SQL 连接大致分为内连接和外连接。内连接从满足连接条件的表中选择行。但是使用内部连接数据,特别是两个表中不满足条件的行都会丢失。外连接可用于防止表中的数据丢失。

外部连接的类型:

外连接再次分为 3 种类型: 左外连接右外连接完全外连接 。这些解释如下:

1. 左外连接:

左外连接返回左侧表中的所有行,右侧表中的列填充为空。左外连接从两个表中检索满足连接条件的所有行以及左表的不匹配行。

语法:

SELECT [column1, column2, ....]
FROM   table1

LEFT OUTER JOIN table2 ON 
table1.matching_column = table2.matching_column

WHERE [condition];

或者:

SELECT [column1, column2, ....]
FROM   table1

LEFT OUTER JOIN table2 
ON table1.matching_column = table2.matching_column

WHERE [condition];

图解表示:

左连接、右连接和全外连接的区别

2. 右外连接:

右外连接返回右侧表中的所有行,左侧表中的列填充为空。右外连接从两个表中检索满足连接条件的所有行以及右表的不匹配行。
语法:

SELECT [column1, column2, ....]
FROM   table1

RIGHT OUTER JOIN table2 ON 
table1.matching_column = table2.matching_column

WHERE [condition];

语法:

SELECT [column1, column2, ....]
FROM   table1

RIGHT OUTER JOIN table2 
ON table1.matching_column(+) = table2.matching_column

WHERE [condition];

图解表示:

左连接、右连接和全外连接的区别

3. 全外连接:

完全外连接返回两个表中的所有行。当左表中的行不存在匹配行时,右表的列被空填充。同样,当右表中的行不存在匹配行时,左表的列被空填充。全外连接是左外连接和右外连接的并集。

语法:

SELECT [column1, column2, ....]
FROM   table1

FULL OUTER JOIN table2 
ON table1.matching_column = table2.matching_column

WHERE [condition];

图解表示:

左连接、右连接和全外连接的区别

例子:

假设有一个员工表,有以下数据:

左连接、右连接和全外连接的区别

假设有一个部门表,有以下数据:

左连接、右连接和全外连接的区别

  1. 左外连接查询:
    Select empid, ename, deptid, deptname
    from employee 
    left outer join department 
    on employee.empdept = department.deptname;

查询结果:

左连接、右连接和全外连接的区别

  1. 右外连接查询:
    Select empid, ename, deptid, deptname 
    from employee right outer join department 
    on employee.empdept = department.deptname;

查询结果:

左连接、右连接和全外连接的区别

  1. 全外连接查询:
    Select empid, ename, deptid, deptname     
    from employee full outer join department 
    on employee.empdept = department.deptname;

查询结果:

左连接、右连接和全外连接的区别

左外连接、右外连接、全外连接的区别:

左外连接 右外连接 完全外连接
从左侧表中获取所有行 从右侧表中获取所有行 从两个表中获取所有行
内连接 + 左表中所有不匹配的行 内连接 + 右表中所有不匹配的行 内连接 + 左表和右表中所有不匹配的行
右表不匹配数据丢失 左表不匹配数据丢失 无数据丢失

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程