MySQL——连接查询(3)外连接

内连接查询中,返回的结果只包含符合查询条件和连接条件的数据,然而有时还需要包含没有关联的数据,即返回查询结果中不仅包含符合条件的数据,而且还包括左表(左连接或左外连接)、右表(右连接或右外连接)或两个表(全外连接)中的所据,此时就需要使用外连接查询,外连接分为左连接和右连接。

外连接的语法格式如下:

sql 复制代码
SELECT 所查字段 FROM 表1 LEFT|RIGHT [OUTER] JOIN 表2
ON 表1.关系字段=表2.关系字段 WHERE 条件

外连接的语法格式和内连接类似,只不过使用的是 LEFT JOIN、RIGHT JOIN 关键字,其中关键字左边的表被称为左表,关键字右边的表被称为右表。

在使用左连接和右连接查询时,查询结果是不一致的,具体如下。

(1)LEFT JOIN(左连接):返回包括左表中的所有记录和右表中符合连接条件的记录。

(2)RIGHT JOIN(右连接):返回包括右表中的所有记录和左表中符合连接条件的记录。

接下来就针对外连接中的左连接和右连接进行详细的讲解。

1. LEFT JOIN(左连接)

左连接的结果包括LEFTJOIN 子句中指定的左表的所有记录,以及所有满足连接条件的记录。如果左表的某条记录在右表中不存在,则在右表中显示为空。

例如,在 department 表和 employee 表之间使用左连接查询,SQL 语句如下:

sql 复制代码
SELECT department.did,department.dname,employee.name FROM department LEFT JOIN employee on department.did=employee.did;

上述语句执行成功后,结果如下:

sql 复制代码
mysql> SELECT department.did,department.dname,employee.name FROM department LEFT JOIN employee on department.did=employee.did;
+-----+-----------+--------+
| did | dname     | name   |
+-----+-----------+--------+
|   1 | 网络部    | 小强   |
|   1 | 网络部    | 小红   |
|   2 | 媒体部    | 小明   |
|   3 | 研发部    | NULL   |
|   5 | 人事部    | NULL   |
+-----+-----------+--------+
5 rows in set (0.00 sec)

从上述结果可以看出,显示了5条记录,并且人事部没有 did 等于5的员工。

2.RIGHT JOIN(右连接)

右连接与左连接正好相反,返回右表中所有指定的记录和所有满足连接条件的记录。如果右表的某条记录在左表中没有匹配,则左表将返回空值。

例如,在 department 表和 employee 表之间使用右连接査询,SQL语句如下:

sql 复制代码
SELECT department.did,department.dname,employee.name FROM department RIGHT JOIN employee ON department.did=employee.did;

上述语句执行成功后,结果如下:

sql 复制代码
mysql> SELECT department.did,department.dname,employee.name FROM department RIGHT JOIN employee ON department.did=employee.did;
+------+-----------+--------+
| did  | dname     | name   |
+------+-----------+--------+
|    1 | 网络部    | 小红   |
|    1 | 网络部    | 小强   |
|    2 | 媒体部    | 小明   |
| NULL | NULL      | 小刚   |
+------+-----------+--------+
4 rows in set (0.00 sec)

从上述结果可以看出,显示了4条记录,并且 name 值为小刚的员工并没有被分配部门。

相关推荐
0xDevNull43 分钟前
MySQL数据冷热分离详解
后端·mysql
科技小花1 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸1 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain1 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希2 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神2 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员2 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java2 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿2 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴2 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存