当前位置: 首页 > news >正文

SQL Server从入门到项目实践(超值版)读书笔记 22

9.6 数据的外连接查询

几乎所有的查询语句,查询结果全部都是需要符合条件才能查询出来。即,如果执行查询语句后没有符合条件的结果,那么在结果中就不会显示任何记录。

而外连接查询则与之相反,通过外连接查询,可以在查询出符合条件的结果后还能显示出某张表中不符合条件的数据。

9.6.1 认识外连接查询

外连接查询包括左外连接、右外连接以及全外连接。具体语法如下:

SELECT col_name1,col_name2,...
FROM table1 LEFT|RIGHT|FULL OUTER JOIN table2
ON conditions

各参数说明:

  • table1:数据表1,通常在外连接中被称为左表;
  • table2:数据表2,通常在外连接中被称为右表;
  • LEFT OUTER JOIN:左外连接,使用左外连接时得到的查询结果中,除了符合条件的查询部分结果,还要加上左表中余下的数据;
  • RIGHT OUTER JOIN:右外连接,使用右外连接时得到的查询结果中,除了符合条件的查询部分结果,还要加上右表中余下的数据;
  • FULL OUTER JOIN:全外连接,使用全外连接时得到的查询结果中,除了符合条件的查询部分结果,还要加上左表和右表中余下的数据;
  • ON conditions:设置外连接中的条件,与WHERE子句后面的写法一样。

为了演示三种外连接的效果,我们先将往员工表中,插入一条记录:

INSERT INTO employee
VALUES(115,'胡萌萌','女',5,'保洁',2500)

再将表“employee”与“dept”通过部门编号相等的条件,整合为一张“表”:

SELECT * FROM employee A,dept B
WHERE A.deptcode=B.deptid

从查询结果可以看出,左侧是表employee中符合条件的所有数据,右侧是表“dept”中符合条件的所有数据。

下面就分别使用三种外连接来根据A.deptcode=B.deptid这个条件查询数据,请注意观察查询结果的区别。

9.6.2 左外连接的查询

左连接的结果包括LEFT OUTER JOIN关键字左边连接表的所有行,而不是连接列所匹配的行。如果表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择表字段均为空值。

例:使用左外连接查询,将员工信息表作为左表,部门信息表作为右表

SELECT * FROM employee A
LEFT OUTER JOIN dept B
ON A.deptcode=B.deptid

结果最后显示的一条记录,部门编号等于5的部门,在部门信息表中没有相应记录,所有该条只取出了employee中的相应值,而从dept中取出的值为空。

9.6.3 右外连接的查询

右连接是左连接的反向连接。

将返回RIGHT OUTER JOIN关键字右表中的所有行。如果右表的某行在左边中没有匹配行,左表将返回空值。

例:使用右外连接查询,将员工信息表作为左表,部门信息表作为右表

SELECT * FROM employee A
RIGHT OUTER JOIN dept B
ON A.deptcode=B.deptid

结果最后显示的一行,部门编号等于4的记录,在员工信息表中没有匹配成功,所以该条记录只取了部门表中的相应值,而员工表中的取值为空。

9.6.4 全外连接的查询

全外连接又称为完全连接,该连接查询方式返回两个连接中所有的记录数据。根据匹配条件,如果满足,则返回数据,如果不满足,则返回空值,全外连接返回的结果集中包含两个完全表的所有数据。全外连接使用关键字FULL OUTER JOIN。

例:使用全外连接查询,将员工信息表作为左表,部门信息表作为右表

SELECT * FROM employee A
FULL OUTER JOIN dept B
ON A.deptcode=B.deptid

结果最后显示的两条记录,是左表和右表中的全部数据。

PS:

到这里,数据库的【基础知识】和【核心技术】就学习完了。从下一期开始,我们要学习数据库的核心应用,如:视图、游标、存储过程等更为复杂的数据库技巧,如果你还觉得自己的基础不够扎实,希望你能够返回去再看一遍,学习讲究的是循序渐进,切勿囫囵吞枣。

通过这4个月的学习,我觉得自己已经入门,现在在工作中,也能够灵活运用所学的知识,设计数据逻辑,实现一些简单的功能。

只要持之以恒,我相信我们都会有成功的一天。

菜鸟与诸君共勉!我们下期间。

2025-08-02

http://www.dtcms.com/a/311715.html

相关文章:

  • 内网穿透系列十:高性能内网穿透工具 rathole,支持Docker一键部署
  • 什么是DOM和BOM?
  • 机器学习-KNN
  • springboot大学生成绩管理系统设计与实现
  • Git 的基本使用指南(1)
  • 人类学家与建筑师:区分UX研究和项目管理的需求分析
  • TFS-2022《A Novel Data-Driven Approach to Autonomous Fuzzy Clustering》
  • LVGL代码框架简介
  • 从底层架构到多元场景:计算机构成与应用的深度剖析
  • Mac电脑安装HomeBrew
  • 从AI智能体出发,重构数据中台:迈向Agentic时代的数据能力体系
  • 微积分基础 | 核心概念 / 公式推导
  • 【51单片机6位数码管密码锁】2022-10-15
  • 入门MicroPython+ESP32:安装逗脑IDE及驱动
  • 深入 Go 底层原理(十一):Go 的反射(Reflection)机制
  • ESP32 外设控制基础:GPIO 应用详解与输入输出案例
  • Text2SQL:如何通过自然语言直接获取数据,打破技术壁垒?
  • ventoy 是一个非常棒的开源工具,可以制作多系统的usb启动盘
  • Allegro降版本工具
  • Python 全局解释器锁
  • 如何静态链接 YARA 库,实现免依赖的独立可执行文件部署
  • MySqL(加餐)
  • 代码随想录Day36:动态规划(最后一块石头的重量 II、目标和、一和零)
  • 在线问诊系统源码解析:图文+视频双模式架构开发全攻略
  • 【07】VisionMaster入门到精通——Blob分折
  • IDM下载失败排查
  • 北京-4年功能测试2年空窗-报培训班学测开-今天来聊聊我的痛苦
  • 浪漫温柔的表白
  • 在linux(ubuntu)服务器上安装NTQQ并使用
  • 链表【数据结构】