学习数据库查询的时候对多表连接查询的有些概念还比较模糊。而连接查询是在数据库查询操作的时候肯定要用到的。对于此概念
我用通俗一些的语言和例子来进行讲解。这个例子是我讲课的时候经常采用的例子。
首先我们做两张表:员工信息表和部门信息表,在此,表的建立只为讲述连接的概念,所以字段非常的简单
EmployeeTB(员工信息表):
employeeid employeename deptid
0001 张三 01
0002 李四 01
0003 王五 02
0004 赵六 02
0005 郑七 NULL
DeptTB(部门信息表)
deptid deptname
01 技术部
02 市场部
03 工程部
我们现在需要进行连接查询,连接两张表检索数据。分别检索员工信息表的员工编号、员工姓名和部门信息表中的部门名称。
显然,两个表的连接条件是 员工表的部门编号=部门表的部门编号
注意:郑七不属于任何部门(新来的员工,还没有分配到任何的部门),而工程部不存在任何的员工(比如是一个新成立的部门,还没有员工)
1、内连接查询
我们可以有两种方式,这两种是等效的 :
一种是:SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e,DeptTB AS d WHERE e.deptid=d.deptid
另外一个是:SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e INNER JOIN DeptTB AS d ON e.deptid=d.deptid
检索的结果都是:
employeeid employeename deptname
0001 张三 技术部
0002 李四 技术部
0003 王五 市场部
0004 赵六 市场部
而“郑七”和“工程部”的信息是不会检索出来。因为采用内连接计算的时候必须要保证连接的条件e.deptid=d.deptid匹配,结果才会被检索出来。当我们连接两张检索数据的时候,检索的方式是首先逐行扫描“员工信息表”中的记录,然后根据连接条件来决定此记录是否被检索。比如对于张三,这条记录的deptid是01(部门编号),它在部门表中能找到和它匹配的编号01,而编号01的部门名称(deptname)是“技术部”所以张三这条记录会被检索,最终的结果肯定是:
0001 张三 技术部
同样,李四、王五、赵六也能。但是郑七的部门编号是NULL,它在部门信息表中找不到匹配的项(因为部门信息表中不存在部门编号为NULL的部门),所以郑七不会被检索。
同理,没有任何人员的部门编号为03,所以工程部的记录也不会被检索
2、左外联结
但是有些情况下,我们需要知道所有员工的信息,即使他不属于任何部门。这样我们就可以采用外连接,在这里为左外连接,也就是连接中的左表的表中的记录,无论能不能在右表中找到匹配的项,都要检索,如果没有匹配的项目,那么右表中的字段值为NULL(空),在这里就代表,此员工不属于任何部门。
检索语句为:
SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e LEFT OUTER JOIN DeptTB AS d ON e.deptid=d.deptid
检索的结果都是:
employeeid employeename deptname
0001 张三 技术部
0002 李四 技术部
0003 王五 市场部
0004 赵六 市场部
0005 郑七 NULL
但是在这里,工程部同样不会被检索,因为,deptname是在连接的右边的表中,“工程部”在左表中不存在任何的记录,所以不会被检索。这里关注的是“连接中的左边的表”
3、右外连接
有时,我们需要知道,全部部门的信息,即使它没有任何的员工。在我们的查询中部门表在连接的右边,如果我们想知道右边表中的所有记录信息,那么就可以采用右外连接,如果此记录在左边的表中找不到匹配项,则相应字段(employeeid,employeename)为NULL
检索语句为:
SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e RIGHT OUTER JOIN DeptTB AS d ON e.deptid=d.deptid
检索的结果都是:
employeeid employeename deptname
0001 张三 技术部
0002 李四 技术部
0003 王五 市场部
0004 赵六 市场部
NULL NULL 工程部
但在这里,郑七是不会被检索了,因为它在右表中找不到匹配项,这里关注的是“连接中的右边的表”
4、完全外连接
如果我们想知道所有的记录呢?无论员工有没有部门,部门有没有员工,我们都需要检索。这里就可以使用完全外连接。关注连接中的两部分。如果没有部门,部门为空,没有员工,员工信息为空。
检索语句为:
SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e FULL OUTER JOIN DeptTB AS d ON e.deptid=d.deptid
检索的结果都是:
employeeid employeename deptname
0001 张三 技术部
0002 李四 技术部
0003 王五 市场部
0004 赵六 市场部
0005 郑七 NULL
NULL NULL 工程部
分享到:
相关推荐
本文档为通用SQL数据库查询时所用,讲述的是多表连接!~
关于jdbc连接池连接数据库的原理
【连接池的基本工作原理】 连接池是数据库管理中一种重要的技术,它的主要目的是优化数据库连接的使用,提高系统性能和资源利用率。连接池的核心思想是通过维持一个预创建的数据库连接池,使得应用程序在需要时可以...
6. **外部接口**:原理图中还包含了多个用于连接外部设备的接口,如J1、J2、J3、J4、J5,这些接口可能用于连接传感器、电源或其他外部控制系统,增强了设备的扩展性和实用性。 7. **电源管理**:原理图中还包括了...
在数据库领域,表连接是数据检索和管理的核心技术之一,用于将多个数据表中的信息结合在一起,形成更完整、更有意义的数据集。本文将深入探讨四种常用的表连接方式:嵌套循环连接、排列合并连接、哈希连接以及索引...
原理图是电子设计的基础,它清晰地描绘了各个元器件的连接方式和工作关系,帮助工程师理解系统的工作流程。使用Protel 99SE设计的这份原理图,可以为电路分析、故障排查以及硬件修改提供依据。 PCB(Printed ...
压缩包内的文件名列表提供了各个万用表的电路图文件,如“FS970X.gif、VC9808.gif”等,这些文件通常会展示电路的连接方式、关键元器件的位置以及信号流程,对于学习和分析非常有用。例如,“FS970X.gif”可能展示了...
MT6261 GPS定位儿童手表的原理涉及到无线通信、GPS定位、WIFI连接等多个技术领域,通过联发科的这款芯片,儿童手表实现了高效、精准的功能。通过深入理解MT6261芯片及其相关原理图,不仅可以了解儿童手表的工作机制...
在三相表安装原理图中,3p3pBLV 6平方BV2.52p2p2p1pA插座表示三相四线制(3P4W)的连接方式,其中“3p”代表三相,“3pBLV”指的是三相无接地线的电缆,6平方毫米的截面积则意味着电缆的粗细。BV2.52p2p2p1p则可能...
标题“VPX连接器J1原理图和PCB封装”暗示了该压缩包包含的是关于VPX连接器系列中的J1型号的电气原理图和印刷电路板(PCB)布局文件。原理图是电子设计自动化(EDA)过程的关键部分,它以图形方式展示了各个电子元件...
在"VPX连接器P0原理图和PCB封装"的资料中,我们主要关注两个关键部分:原理图(Schematic)和PCB封装(Package)。 1. **VPX连接器P0原理图**: 原理图是电路设计的基础,它展示了各个电子元件如何通过导线或信号...
本项目提供了自制电感表的原理图和源码,帮助用户理解其工作原理,并可据此制作自己的电感测量设备。 首先,电感表的基本工作原理基于电磁感应定律。当一个交流信号通过一个电感器时,其电压与电流之间的相位差可以...
在深入理解CC2530和CC2952的连接原理图之前,我们需要了解它们所应用的领域。CC2530是一款由德州仪器(Texas Instruments,简称TI)公司生产的ZigBee/IEEE 802.15.4系统单芯片解决方案,广泛应用于低功耗无线通信...
本资料包含“VPX连接器RP1原理图”和“PCB封装”,这两个文档都是以Cadence格式提供的,这是一种专业且功能强大的电子设计自动化(EDA)软件工具。Cadence 16.6版本能够顺利打开这些文件,意味着它们遵循了最新的...
2. **检查完整性**:在生成总网表之前,仔细检查每个子原理图的完整性,确保没有遗漏或错误的连接。 3. **版本控制**:对于大型项目来说,使用版本控制系统可以帮助跟踪每次修改的具体内容,这对于团队协作尤其重要...
《连接池实现原理及效率测试》 连接池是数据库应用中的一个重要概念,它在系统设计中扮演着提高性能、优化资源利用的关键角色。本文将深入探讨连接池的实现原理,并通过实际测试分析其效率。 首先,我们需要理解...
总结来说,SQL多表连接的原理是基于表之间的关联字段进行数据匹配。LEFT JOIN和RIGHT JOIN的关键区别在于它们处理没有匹配记录时的行为。连接顺序也会影响结果,后连接的表的记录将覆盖前连接表中出现的空字段记录。...
在导入CDL网表的过程中,Virtuoso能够将网表中的描述转换为对应的电路组件与连接关系,进而形成可进一步编辑和操作的原理图。 知识点3:导入CDL网表的操作步骤 文档中描述了具体的步骤来导入CDL网表,这些步骤包括...