`
MauerSu
  • 浏览: 513564 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

多表连接原理

 
阅读更多

源:

评:

学习数据库查询的时候对多表连接查询的有些概念还比较模糊。而连接查询是在数据库查询操作的时候肯定要用到的。对于此概念
我用通俗一些的语言和例子来进行讲解。这个例子是我讲课的时候经常采用的例子。
首先我们做两张表:员工信息表和部门信息表,在此,表的建立只为讲述连接的概念,所以字段非常的简单
EmployeeTB(员工信息表):

employeeid employeename deptid
0001  张三  01
0002  李四  01
0003  王五  02
0004  赵六  02
0005  郑七  NULL

DeptTB(部门信息表)
deptid  deptname
01  技术部
02  市场部
03  工程部

我们现在需要进行连接查询,连接两张表检索数据。分别检索员工信息表的员工编号、员工姓名和部门信息表中的部门名称。
显然,两个表的连接条件是 员工表的部门编号=部门表的部门编号
注意:郑七不属于任何部门(新来的员工,还没有分配到任何的部门),而工程部不存在任何的员工(比如是一个新成立的部门,还没有员工)
1、内连接查询
我们可以有两种方式,这两种是等效的 :

Java代码
  1. 一种是:SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e,DeptTB AS d WHERE e.deptid=d.deptid   
  2. 另外一个是: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(空),在这里就代表,此员工不属于任何部门。
检索语句为:

Java代码
  1. 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
检索语句为:

Java代码
  1. 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、完全外连接
如果我们想知道所有的记录呢?无论员工有没有部门,部门有没有员工,我们都需要检索。这里就可以使用完全外连接。关注连接中的两部分。如果没有部门,部门为空,没有员工,员工信息为空。
检索语句为:

Java代码
  1. SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e FULL OUTER JOIN DeptTB AS d ON e.deptid=d.deptid   


检索的结果都是:

Java代码
  1. employeeid employeename deptname   


0001  张三  技术部
0002  李四  技术部
0003  王五  市场部
0004  赵六  市场部
0005  郑七  NULL
NULL  NULL  工程部

分享到:
评论

相关推荐

    SQL多表连接

    本文档为通用SQL数据库查询时所用,讲述的是多表连接!~

    jdbc连接池原理

    关于jdbc连接池连接数据库的原理

    连接池的基本工作原理

    【连接池的基本工作原理】 连接池是数据库管理中一种重要的技术,它的主要目的是优化数据库连接的使用,提高系统性能和资源利用率。连接池的核心思想是通过维持一个预创建的数据库连接池,使得应用程序在需要时可以...

    数据库的连接池原理,基本概念及原理,服务器自带的连接池

    数据库的连接池原理 数据库的连接池原理是指为了解决数据库连接资源的低效管理而采用的技术方法。其基本思想是为数据库连接建立一个“缓冲池”,预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从...

    超声波热量表-原理图

    6. **外部接口**:原理图中还包含了多个用于连接外部设备的接口,如J1、J2、J3、J4、J5,这些接口可能用于连接传感器、电源或其他外部控制系统,增强了设备的扩展性和实用性。 7. **电源管理**:原理图中还包括了...

    数据库连接池的工作原理

    数据库连接池的工作原理涉及到多个层面,包括连接的创建与复用、连接池的管理以及性能优化策略。接下来,我们将深入探讨这些核心知识点。 1. **连接的创建与复用** - **连接初始化**:当应用程序启动时,连接池会...

    几种常用的表连接方式

    在数据库领域,表连接是数据检索和管理的核心技术之一,用于将多个数据表中的信息结合在一起,形成更完整、更有意义的数据集。本文将深入探讨四种常用的表连接方式:嵌套循环连接、排列合并连接、哈希连接以及索引...

    智能燃气表原理图PCB和库文件

    原理图是电子设计的基础,它清晰地描绘了各个元器件的连接方式和工作关系,帮助工程师理解系统的工作流程。使用Protel 99SE设计的这份原理图,可以为电路分析、故障排查以及硬件修改提供依据。 PCB(Printed ...

    收藏各种常用万用表电路原理图

    压缩包内的文件名列表提供了各个万用表的电路图文件,如“FS970X.gif、VC9808.gif”等,这些文件通常会展示电路的连接方式、关键元器件的位置以及信号流程,对于学习和分析非常有用。例如,“FS970X.gif”可能展示了...

    MT6261_GPS定位儿童手表原理图.rar

    MT6261 GPS定位儿童手表的原理涉及到无线通信、GPS定位、WIFI连接等多个技术领域,通过联发科的这款芯片,儿童手表实现了高效、精准的功能。通过深入理解MT6261芯片及其相关原理图,不仅可以了解儿童手表的工作机制...

    三相表安装原理图

    在三相表安装原理图中,3p3pBLV 6平方BV2.52p2p2p1pA插座表示三相四线制(3P4W)的连接方式,其中“3p”代表三相,“3pBLV”指的是三相无接地线的电缆,6平方毫米的截面积则意味着电缆的粗细。BV2.52p2p2p1p则可能...

    VPX连接器J1原理图和PCB封装

    标题“VPX连接器J1原理图和PCB封装”暗示了该压缩包包含的是关于VPX连接器系列中的J1型号的电气原理图和印刷电路板(PCB)布局文件。原理图是电子设计自动化(EDA)过程的关键部分,它以图形方式展示了各个电子元件...

    VPX连接器P0原理图和PCB封装

    在"VPX连接器P0原理图和PCB封装"的资料中,我们主要关注两个关键部分:原理图(Schematic)和PCB封装(Package)。 1. **VPX连接器P0原理图**: 原理图是电路设计的基础,它展示了各个电子元件如何通过导线或信号...

    自制电感表原理图与源码

    本项目提供了自制电感表的原理图和源码,帮助用户理解其工作原理,并可据此制作自己的电感测量设备。 首先,电感表的基本工作原理基于电磁感应定律。当一个交流信号通过一个电感器时,其电压与电流之间的相位差可以...

    CC2530和CC2952连接原理图

    在深入理解CC2530和CC2952的连接原理图之前,我们需要了解它们所应用的领域。CC2530是一款由德州仪器(Texas Instruments,简称TI)公司生产的ZigBee/IEEE 802.15.4系统单芯片解决方案,广泛应用于低功耗无线通信...

    VPX连接器RP1原理图和PCB封装

    本资料包含“VPX连接器RP1原理图”和“PCB封装”,这两个文档都是以Cadence格式提供的,这是一种专业且功能强大的电子设计自动化(EDA)软件工具。Cadence 16.6版本能够顺利打开这些文件,意味着它们遵循了最新的...

    Protel99SE多张原理图生成一张总网表的方法

    2. **检查完整性**:在生成总网表之前,仔细检查每个子原理图的完整性,确保没有遗漏或错误的连接。 3. **版本控制**:对于大型项目来说,使用版本控制系统可以帮助跟踪每次修改的具体内容,这对于团队协作尤其重要...

    CDL网表导出原理图的详细操作及实例.pdf

    在导入CDL网表的过程中,Virtuoso能够将网表中的描述转换为对应的电路组件与连接关系,进而形成可进一步编辑和操作的原理图。 知识点3:导入CDL网表的操作步骤 文档中描述了具体的步骤来导入CDL网表,这些步骤包括...

    连接池实现原理及效率测试

    《连接池实现原理及效率测试》 连接池是数据库应用中的一个重要概念,它在系统设计中扮演着提高性能、优化资源利用的关键角色。本文将深入探讨连接池的实现原理,并通过实际测试分析其效率。 首先,我们需要理解...

Global site tag (gtag.js) - Google Analytics