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

相关推荐
不像程序员的程序媛1 小时前
系统cpu内存负载资源分析
运维·服务器·数据库
Jane Chiu2 小时前
Oracle DBMS_REDEFINITION(在线重定义)
数据库·oracle·分区表
我叫黑大帅3 小时前
MySQL 并发插入竞态问题:原子写入实践指南
后端·mysql·面试
全栈前端老曹3 小时前
【MongoDB】安全与权限管理 —— 用户认证、角色权限、SSL 加密
前端·javascript·数据库·安全·mongodb·nosql·ssl
怕孤单的草丛3 小时前
缓存管理面临的主要问题
java·数据库·缓存
我会尽全力 乐观而坚强4 小时前
MySQL零基础入门(二)
数据库·mysql·adb
kali-Myon5 小时前
某校园门禁系统高危 SQL 注入漏洞挖掘复盘
数据库·sql·安全·web安全
程序员在囧途6 小时前
likeadmin-api API 中转站怎么做统一报价?从 /pricing、/user/balance 到 task_id 回执的落地方法
运维·服务器·数据库·likeadmin-api·api中转站·token计费
龙石数据7 小时前
MySQL 全量同步到 Hive 怎么做?三步配置教程
数据库·hive·mysql·数据治理·数据中台