多表连接查询(内,外,交叉连接)
连接查询实际上是通过各个表之间共同列的关联性来查询数据的,它是关系数据库查询最主要的特征.
select 表1.字段名1,表2.字段名2,...
from 表1,表2
where 连接条件
SQL-92标准所定义的FROM子句的连接语法格式为:
FROM 表名 join_type 表名 [ON (连接条件)]
连接操作中的ON (连接条件) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构
成。
连接查询分类:
1.自连接查询,对同一个表进行连接操作(可以理解为两个不同表的内连接,有时可与嵌套查询等价)
2.内连接查询,<又分为:自然连接、等值连接、不等值连接三种>
3.外连接查询,<又分为:左外连接、右外连接、全外连接三种>
4.交叉连接查询,也作无条件查询。
5.联合查询
一.自连接查询:
一个表自己与自己建立连接称为自连接或自身连接。
进行自连接就如同两个分开的表一样,可以把一个表的某一行与同一表中的另一行连接起来。
例:
查询选学“101”课程的成绩高于“9505201”号学生成绩的所有学生记录,
并按成绩从高到低排列。
select x.* from sclass x,sclass y
where x.cno=''101'' and x.degree>y.degree and y.sno=''9505201'' and y.cno=''101''
order by x.degree desc
二. 内连接查询
内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。
1、等值连接:
所谓等值连接,是指表之间通过“等于”关系连接起来,产生一个临时表,
然后对该临时表进行处理后生成最终结果。其查询结果中列出被连接表中的所有列,
包括其中的重复列。
SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
我们可以有两种方式,这两种是等效的
一种是: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
3、自然连接:
在等值连接中消除重复列就是自然连接。(state,city在两个表中都存在)
SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
三 外连接查询 (左外连接、右外连接、全外连接)
左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
A left join B 的连接的记录数与A表的记录数同
A right join B 的连接的记录数与B表的记录数同 这种说法是错误的,只有当表A与表B是一对一时才成立。
首先我们做两张表:员工信息表和部门信息表,在此,表的建立只为讲述连接的概念,所以字段非常的简单
EmployeeTB(员工信息表):
employeeid employeename deptid
0001 张三 01
0002 李四 01
0003 王五 02
0004 赵六 02
0005 郑七 NULL
DeptTB(部门信息表)
deptid deptname
01 技术部
02 市场部
03 工程部
1左外联结
但是有些情况下,我们需要知道所有员工的信息,即使他不属于任何部门。这样我们就可以采用外连接,在这里为左外连接,也就是连接中的左表的表中的记录,无论能不能在右表中找到匹配的项,都要检索,如果没有匹配的项目,那么右表中的字段值为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是在连接的右边的表中,“工程部”在左表中不存在任何的记录,所以不会被检索。这里关注的是“连接中的左边的表”
2、右外连接
有时,我们需要知道,全部部门的信息,即使它没有任何的员工。在我们的查询中部门表在连接的右边,如果我们想知道右边表中的所有记录信息,那么就可以采用右外连接,如果此记录在左边的表中找不到匹配项,则相应字段(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 工程部
但在这里,郑七是不会被检索了,因为它在右表中找不到匹配项,这里关注的是“连接中的右边的表”
3、完全外连接
如果我们想知道所有的记录呢?无论员工有没有部门,部门有没有员工,我们都需要检索。这里就可以使用完全外连接。关注连接中的两部分。如果没有部门,部门为空,没有员工,员工信息为空。
检索语句为:
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 工程部
四.交叉连接
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数
据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等
于6*8=48行。
满意答案
内连接又分为等值连接、自然连接和不等连接三种。
外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。
交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。
无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。例如:
SELECT p1.pub_id,p2.pub_id,p1.pr_info
FROM pub_info AS p1 INNER JOIN pub_info AS p2
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)
(一) 内连接
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!& lt;和<>。
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:
SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):
SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
(二) 外连接
内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。
如下面使用左外连接将论坛内容和作者信息连接起来:
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
ON a.username=b.username
下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:
SELECT a.*,b.*
FROM city as a FULL OUTER JOIN user as b
ON a.username=b.username
(三) 交叉连接
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48 行。
SELECT type,pub_name
FROM titles CROSS JOIN publishers
ORDER BY type
介绍了表连接,更确切的说是inner joins內连接.
內连接仅选出两张表中互相匹配的记录.因此,这会导致有时我们需要的记录没有包含进来。
为更好的理解这个概念,我们介绍两个表作演示。苏格兰议会中的政党表(party)和议员表 (msp)。
party(Code,Name,Leader)
Code: 政党代码
Name: 政党名称
Leader: 政党领袖
msp(Name,Party,Constituency)
Name: 议员名
Party: 议员所在政党代码
Constituency: 选区
数据库的内连接和外连接有什么区别?
满意答案
内连接只能查询两个表中关系匹配的记录
外连接不仅能查询两个表中关系匹配的记录,而且可以查询不匹配的纪录
分享到:
相关推荐
【数据库表连接详解】 在关系型数据库管理中,表连接是一种重要的查询操作,它允许从多个相关表中检索数据。连接使得数据间的关联性得以展现,增强了数据查询的灵活性。通常,一个实体的信息可能分散在多个表中,...
本文主要探讨了四种基本的表连接类型:内连接、外连接(包括左外连接、右外连接)以及交叉连接。 首先,内连接(INNER JOIN)基于指定的连接条件,返回两个表中匹配的行。它又分为等值连接、自然连接和不等连接。...
MySQL中的左右内连接是数据库操作中的重要概念,用于在多个表之间进行复杂的数据查询。这里我们将深入探讨左连接、右连接以及内连接的用法,通过具体的实例来帮助理解。 一、左连接(Left Join) 左连接以左表(本...
例如,美国的配电自动化覆盖率已经超过了 90%,日本的配电自动化覆盖率也达到了 80%左右。这些国家的配电自动化技术发展主要体现在以下几个方面: * 技术创新:不断推出新的配电自动化产品和技术,如智能配电网、...
在 2007 至 2013年间,欧盟为信息和通信技术研发所投入的资金将达 20 亿欧元左右。最近欧盟委员会更将信息和通信技术列为欧洲 2020年的战略发展重点,制定了《物联网战略研究路线图》。 在美国,迪比克市与 IBM ...
本文主要探讨了装配式梁柱外环板高强螺栓连接节点的抗弯承载力,这是一种用于连接方钢管柱与H型钢梁的新型连接方式,旨在解决焊接应力和闭口截面高强螺栓安装问题。研究采用了理论分析、数值模拟分析方法,对外环板...
- **空间顺序**:依据空间位置的变化进行阐述,包括上下、内外、前后、左右等方向。 - **逻辑顺序**:根据事物内在的逻辑关系组织内容,如因果、主次、分类等。 4. **说明对象** - 明确文章说明的主要人或事物,...
卷积层可以看作一个神经元的输出,神经元只观察一小部分输入数据,并与空间左右两侧的所有神经元共享参数。卷积层还可以减少参数数量,减少计算开销,防止出现因参数过多而导致过拟合现象。 池化层(Pooling):也...
- **支付迭代:** 微信红包的推出,利用社交属性激活了支付业务,而在线下,腾讯则依靠高频消费场景吸引商家,使移动支付市场份额稳定在40%左右。 - **信用延伸:** 微信支付分的推出,不仅丰富了应用场景,还为...
OpenCV的`stereoCalibrate()`和`stereoRectify()`函数可以校正相机的内外参数,`stereoMatch()`函数则用于找到左右图像间的对应点。最后,`StereoBM`或`StereoSGBM`类可用于计算深度图,例如: ```python stereo = ...
Interlib 系统是一个基于 Internet 的文献检索服务信息系统,能够实现城域网、校内网和 Internet 网络的连接,将其联合起来组成一个虚拟的图书馆群。汇文文献信息服务系统是一个基于图书馆文献资源共享和服务共享的...
1. **行政管理的角色**:行政管理是企业中的关键职能,它起到了承上启下、沟通内外、协调左右的作用,是连接公司上下、内外联系的桥梁,对公司的日常运营和管理工作起到枢纽作用。 2. **工作内容与职责**: - **...
1. 管道轴测图画法:遵循“上下左右不变,前后变成45°线”的口诀,根据立面图和平面图绘制,注意检查立面图的准确性。 2. 管道连接形式:包括焊接、螺纹连接、承插连接、法兰连接、热熔连接和胶粘连接,每种连接...
1. **内勤工作的重要性**:内勤人员是公司运营中的重要角色,他们承担着承上启下、沟通内外、协调左右的角色,是连接公司各部门和外部客户的桥梁。 2. **日常工作内容**: - **客户服务**:包括处理客户咨询、抱怨...
大脑由左右两半球组成,通过第三脑室前端的终板连接。每个半球又由大约 10 个互相连接的单元体组成,每个单元体称做神经元。神经元之间的信号传递是通过突触进行的。 脑电信号的本质是离子跨膜流动而不是电子的流动...
14. 导游的纽带作用体现在承上启下(连接旅行社与游客),连接内外(沟通内外信息),协调左右(平衡各方需求)。 15. 游客至上的三层含义:游客优先、尊重游客权利、以游客的利益为中心。 16. 导游服务的跨文化性...
但在转弯时,由于内外侧车轮行程长度不同,差速器允许车轮自由旋转,避免了轮胎打滑和机械应力过大。传统的开式差速器中,输入小齿轮通过齿圈和小齿轮组将扭矩传递给两侧驱动轮,当汽车转弯时,小齿轮会在保护架内...
汽车的变速器和差速器是汽车传动系统...差速器解决了转弯时车轮转速差异的问题,而离合器则实现了发动机与变速器之间的灵活连接和断开,保证了驾驶的平顺性和操控性。了解这些基本原理对于理解汽车的工作机制至关重要。