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

数据库管理系统 (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;
    

查询结果:
全外连接查询

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

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

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/266894.html

(0)
上一篇 2022年6月12日
下一篇 2022年6月12日

相关推荐

发表回复

登录后才能评论