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

相关推荐
数据库小学妹4 小时前
MySQL长事务复盘:Sleep连接、MDL排队与undo滞留
运维·数据库·mysql
计算机毕设定制辅导-无忧学长5 小时前
基于Spring Boot的玄幻小说个性化推荐平台设计与实现
java·vue.js·spring boot·后端·mysql·推荐算法
半摆烂日常5 小时前
自建WMS和买成品:三年成本对比
大数据·服务器·数据库·python·深度学习·低代码·numpy
风123456789~5 小时前
【架构专栏】第6章 数据库设计基础知识 1/4
数据库·架构
Nturmoils5 小时前
异构数据同步不只追延迟:用 KFS 守住不停机迁移的每一笔账
数据库
星星落进兜里5 小时前
Redis 内存缓存,面试补充
数据库·redis·面试
棣廷6 小时前
初识MySQL——DQL数据查询语言详解
数据库·mysql
大模型码小白6 小时前
ChatGPT 的回答也能被结构化抓取?AI Bot Scraper 对比测评
服务器·开发语言·数据库·人工智能·spring·chatgpt
天涯柳絮6 小时前
SQL注入
数据库·sql·网络安全
API快乐传递者6 小时前
淘宝海外商品详情接口实战指南:从全球开放平台到跨境铺货的全链路方案
java·前端·数据库