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 值为小刚的员工并没有被分配部门。

相关推荐
vvw&34 分钟前
如何在 Ubuntu 22.04 上安装 phpMyAdmin
linux·运维·服务器·mysql·ubuntu·php·phpmyadmin
SEO-狼术39 分钟前
Enhance Security in Software Crack
数据库
计算机毕设定制辅导-无忧学长1 小时前
Redis 初相识:开启缓存世界大门
数据库·redis·缓存
奥顺互联V1 小时前
深入理解 ThinkPHP:框架结构与核心概念详解
大数据·mysql·开源·php
Rverdoser1 小时前
redis延迟队列
数据库·redis·缓存
weisian1512 小时前
Redis篇--常见问题篇6--缓存一致性1(Mysql和Redis缓存一致,更新数据库删除缓存策略)
数据库·redis·缓存
MrJson-架构师3 小时前
4.银河麒麟V10(ARM) 离线安装 MySQL
arm开发·mysql
中草药z3 小时前
【Spring】深入解析 Spring 原理:Bean 的多方面剖析(源码阅读)
java·数据库·spring boot·spring·bean·源码阅读
地球资源数据云3 小时前
全国30米分辨率逐年植被覆盖度(FVC)数据集
大数据·运维·服务器·数据库·均值算法
Ahern_3 小时前
Oracle 普通表至分区表的分区交换
大数据·数据库·sql·oracle