SQL 内连接、左连接、右连接和完全连接详解:使用 EMP 和 DEPT 表举例
SQL 内连接、左连接、右连接和完全连接详解:使用 EMP 和 DEPT 表举例
本文将通过两个表 emp (员工表) 和 dept (部门表) 的示例,详细解释 SQL 中内连接、左连接、右连接和完全连接的区别。
表结构:
-
部门表 (DEPT):
| DEPTNO | DNAME | LOC | |---|---|---| | 1 | 开发部 | 北京 | | 2 | 测试部 | 上海 | | 3 | 设计部 | 广州 | | 4 | 财务部 | 深圳 |
-
员工表 (EMP):
| EMPNO | ENAME | JOB | DEPTNO | |---|---|---|---| | 1 | 张三 | 初级工程师 | 1 | | 2 | 小明 | 中级工程师 | 2 | | 3 | 小黑 | 会计 | 3 |
emp 表中的 deptno 为外键,对应 dept 表的主键 deptno。
1) 通过不同连接方式查询每个员工的姓名 (ename) 和部门名称 (dname):
a) 内连接 (INNER JOIN):
SELECT e.ename, d.dname
FROM emp e
INNER JOIN dept d
ON e.deptno = d.deptno;
b) 左连接 (LEFT JOIN):
SELECT e.ename, d.dname
FROM emp e
LEFT JOIN dept d
ON e.deptno = d.deptno;
c) 右连接 (RIGHT JOIN):
SELECT e.ename, d.dname
FROM emp e
RIGHT JOIN dept d
ON e.deptno = d.deptno;
d) 完全连接 (FULL JOIN):
SELECT e.ename, d.dname
FROM emp e
FULL JOIN dept d
ON e.deptno = d.deptno;
2) 执行结果集:
| 连接类型 | ename | dname | |---|---|---| | 内连接 | 张三 | 开发部 | | 内连接 | 小明 | 测试部 | | 内连接 | 小黑 | 设计部 | | 左连接 | 张三 | 开发部 | | 左连接 | 小明 | 测试部 | | 左连接 | 小黑 | 设计部 | | 左连接 | NULL | 财务部 | | 右连接 | 张三 | 开发部 | | 右连接 | 小明 | 测试部 | | 右连接 | 小黑 | 设计部 | | 右连接 | NULL | 财务部 | | 完全连接 | 张三 | 开发部 | | 完全连接 | 小明 | 测试部 | | 完全连接 | 小黑 | 设计部 | | 完全连接 | NULL | 财务部 |
总结:
- 内连接 (INNER JOIN): 只返回两个表中匹配的行,即只返回部门表中存在的部门名称。
- 左连接 (LEFT JOIN): 返回员工表中的所有行,以及部门表中与其匹配的行。如果没有匹配的行,部门名称列将显示为 NULL。
- 右连接 (RIGHT JOIN): 返回部门表中的所有行,以及员工表中与其匹配的行。如果没有匹配的行,员工姓名列将显示为 NULL。
- 完全连接 (FULL JOIN): 返回两个表中的所有行,如果没有匹配的行,对应的列将显示为 NULL。
希望本文能够帮助您更好地理解 SQL 连接操作,并能够在实际应用中灵活运用。
原文地址: http://www.cveoy.top/t/topic/bfyM 著作权归作者所有。请勿转载和采集!