1月阅读周·MySQL数据库入门:连接查询之外连接和复合条件连接查询篇
背景
去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。
没有计划的阅读,收效甚微。
新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出1~2个非连续周,完整阅读一本书籍。
这个“玩法”虽然常见且板正,但是有效,已经坚持阅读十二个月。
已读完书籍:《架构简洁之道》、《深入浅出的Node.js》、《你不知道的JavaScript(上卷)》、《你不知道的JavaScript(中卷)》、《你不知道的JavaScript(下卷)》、《数据结构与算法JavaScript描述》、《WebKit技术内幕》、《前端架构:从入门到微前端》、《秒懂算法:用常识解读数据结构与算法》、《JavaScript权威指南》、《JavaScript异步编程设计快速响应的网络应用》、《编写可测试的JavaScript代码》。
当前阅读周书籍:《MySQL数据库入门》。
外连接
内连接查询中,返回的结果只包含符合查询条件和连接条件的数据,然而有时还需要包含没有关联的数据,即返回查询结果中不仅包含符合条件的数据,而且还包括左表(左连接或左外连接)、右表(右连接或右外连接)或两个表(全外连接)中的所有数据,此时就需要使用外连接查询,外连接分为左连接和右连接。
外连接的语法格式如下:
SELECT 所查字段 FROM 表1 LEFT|RIGHT [OUTER] JOIN 表2
ON 表1.关系字段=表2.关系字段 WHERE 条件
外连接的语法格式和内连接类似,只不过使用的是LEFT JOIN、RIGHT JOIN关键字,其中关键字左边的表被称为左表,关键字右边的表被称为右表。
在使用左连接和右连接查询时,查询结果是不一致的,具体如下。
(1)LEFT JOIN(左连接):返回包括左表中的所有记录和右表中符合连接条件的记录。
(2)RIGHT JOIN(右连接):返回包括右表中的所有记录和左表中符合连接条件的记录。
为了让初学者更好地学习外连接查询,接下来就针对外连接中的左连接和右连接进行详细的讲解。
LEFT JOIN(左连接)
左连接的结果包括LEFT JOIN子句中指定的左表的所有记录,以及所有满足连接条件的记录。如果左表的某条记录在右表中不存在,则在右表中显示为空。
【例1-1】 在department表和employee表之间使用左连接查询,SQL语句如下:
SELECT department.did,department.dname,employee.name FROM department
LEFT JOIN employee on department.did=employee.did;
上述语句执行成功后,结果如下:
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的员工。
RIGHT JOIN(右连接)
右连接与左连接正好相反,返回右表中所有指定的记录和所有满足连接条件的记录。如果右表的某条记录在左表中没有匹配,则左表将返回空值。
【例1-2】 在department表和employee表之间使用右连接查询,SQL语句如下:
SELECT department.did,department.dname,employee.name FROM department
RIGHT JOIN employee ON department.did=employee.did;
上述语句执行成功后,结果如下:
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-3】 在department表和employee表之间使用内连接查询,并将查询结果按照年龄从大到小进行排序,SQL语句如下:
SELECT employee.name, employee.age, department.dname FROM department
JOIN employee
ON department.did=employee.did order by age;
上述语句执行成功后,结果如下:
mysql>SELECT employee.name, employee.age, department.dname FROM department JOIN
employee ON department.did=employee.did order by age;
+------+------+--------+
| name | age | dname |
+------+------+--------+
| 赵四 | 20 | 媒体部 |
| 王红 | 20 | 网络部 |
| 李强| 22 | 网络部 |
+------+------+--------+
3 rows in set (0.02 sec)
从上述结果可以看出,使用复合条件查询的结果更加精确,符合实际需求。
总结
在关系型数据库管理系统中,建立表时各个数据之间的关系不必确定,通常将每个实体的所有信息存放在一个表中,当查询数据时,通过连接操作查询多个表中的实体信息,当两个或多个表中存在相同意义的字段时,便可以通过这些字段对不同的表进行连接查询,连接查询包括交叉连接查询、内连接查询、外连接查询。
查询结果需要包含没有关联的数据,即返回查询结果中不仅包含符合条件的数据,而且还包括左表(左连接或左外连接)、右表(右连接或右外连接)或两个表(全外连接)中的所有数据,此时就需要使用外连接查询,外连接分为左连接和右连接。
复合条件连接查询就是在连接查询的过程中,通过添加过滤条件来限制查询结果,使查询结果更加精确。
作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。
- 点赞
- 收藏
- 关注作者
评论(0)