数据库表与表连接的方式(内连接、外连接[左连接、右连接、全连接]、交叉连接)

摘要:
第一部分:查询理论联接查询的方法有:内部联接、外部联接、交叉联接左联接和右联接的区别:左联接查询基于左表,将显示左表中的所有数据。如果右表中的数据与左表中的匹配,则将显示相应字段中的数据。如果不匹配,则显示为NULL;正确的连接正好相反。以下外部连接和交叉连接的操作方式相同。

第一部分、查询理论

连接查询的方式有:

内连接、外连接(左连接、右连接、全连接)、交叉连接

左连接和右连接的区别:

左连接以左表为基准进行查询,左表数据会全部显示出来,右表如果和左表匹配的数据则显示相应字段的数据,如果不匹配,则显示为NULL;右连接刚好相反。

全连接就是先以左表进行左外连接,然后以右表进行右外连接。

说明:所谓的基准,就是以某张表的限制条件查询条件为准!

具体如下:

一、内连接

内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:

1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

2、不等连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<、!=和<>。

3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。

二、外连接

返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。

三、交叉连接

交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。

第二部分、实例说明

  • 实例

Book表:

数据库表与表连接的方式(内连接、外连接[左连接、右连接、全连接]、交叉连接)

 Student表:

数据库表与表连接的方式(内连接、外连接[左连接、右连接、全连接]、交叉连接)

一、内连接

select *

from [Book] as b,[Student] as s

where b.StudentId=s.StudentId

等价于如下(也可以不要关键字inner,此为系统默认),但这种方法不能再用left join等外连接了

select *

from [Book] as b inner join [Student] as s

ON b.StudentId=s.StudentId

这种方法还可以加and条件,并且后面可能接着用left join等外连接

         结果为:

数据库表与表连接的方式(内连接、外连接[左连接、右连接、全连接]、交叉连接)

         执行过程

相当于内连接的向右连接。以from  [Book] inner join [Student]等式右边为基准,即以Student表(等式右表,s表)的s.StudentId为基准,遍历Book表(等式左表,Book表)中与之匹配的b.StudentId,然后拼接返回。结果含有重复的列,b.StudentId和s.StudentId。

说明

这与where b.StudentId=s.StudentId或者s.StudentId=b.StudentId位置没有关系。它仅仅代表满足条件而已,不判定谁为基准。以下外连接,交叉连接相同操作。

二、外连接

1、左外连接

代码

select *

from [Book] as b left join [Student] as s

ON b.StudentId=s.StudentId

结果

数据库表与表连接的方式(内连接、外连接[左连接、右连接、全连接]、交叉连接)

执行过程

即以from [Book] left join [Student]的Book表为基准,即以Book表(b表)的b.StudentId为基准。遍历Student表(s表)中与之匹配的b.StudentId。若b.StudentId含有s.StudentId匹配项,则进行拼接,然后遍历Student表的下一条s.StudentId,当查询完毕则进入下一条b.StudentId。若b.StudentId没有相应s.StudentId匹配项时,则显示左表的项,拼接右表的项显示为NULL。

2、右外连接

代码

select *

from [Book] as b right join [Student] as s

ON b.StudentId=s.StudentId

结果

数据库表与表连接的方式(内连接、外连接[左连接、右连接、全连接]、交叉连接)

执行过程

即以from [Book] right join [Student]的Student表为基准,即以Student表(s表)的s.StudentId为基准。遍历Book表(b表)中与之匹配的s.StudentId。若s.StudentId含有b.StudentId匹配项,则进行拼接,然后遍历Book表的下一条b.StudentId,当查询完毕则进入下一条s.StudentId。若s.StudentId没有相应b.StudentId匹配项时,则显示右表的项,拼接左表的项显示为NULL。

3、全外连接

代码

select *

from [Book] as b full outer join [Student] as s

ON b.StudentId=s.StudentId

结果

数据库表与表连接的方式(内连接、外连接[左连接、右连接、全连接]、交叉连接)

执行过程

即以from [Book] full outer join [Student]中先以Book表进行左外连接,然后以Student表进行右外连接。

三、交叉连接

代码

select *

from [Book] as b CROSS Join [Student] as a

Order by b.BookId

结果

数据库表与表连接的方式(内连接、外连接[左连接、右连接、全连接]、交叉连接)

执行过程

即是按照Order排序的Id,把要Join的右表无条件拼接过来。这样依次执行,这样这种记录便为两个表的记录的笛卡尔积。

免责声明:文章转载自《数据库表与表连接的方式(内连接、外连接[左连接、右连接、全连接]、交叉连接)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL server数据库创建代码,filegroup文件组修改,Mac OS下SVN的使用:服务的和客户端下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle SQL外连接

SQL提供了多种类型的连接方式,它们之间的区别在于:从相互交叠的不同数据集合中选择用于连接的行时所采用的方法不同。连接类型        定义内连接           只连接匹配的行左外连接        包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行右外连接        包含右边表的全部行(不管左边的表中是否存在...

Oracle数据库4--多表关联

1. 92语法多表关联 1.1笛卡尔积 --笛卡尔积 select * from emp,dept 1.2等值连接 --等值连接--需求:查询雇员的部门名称 selecte.ename,e.deptno,d.dname fromemp e,dept d where e.deptno = d.deptno 1.3不等值连接 --不等值连接--查询每个雇员的...

Oracle【多表查询操作(SQL92&amp;amp;SQL99)】

多表联合查询:需要获取的数据分布在多张表中 SQL92: 1 --笛卡尔积:将多个表的数据进行一一对应,所得的结果为多表的笛卡尔积 2 select * from emp; 3 select * from dept; 4 select * from emp,dept;--进行全排列 14*5=70 1 --等值连接:先笛卡尔积,然后筛选,筛选条件为等值...

oracle连接总结(内连接、外连接、自然连接,交叉连接,自连接)

1.简述 1) 两个表的连接,是通过将一个表中的一列或者多列同另一个表中的列链接而建立起来的。用来连接两张表的表达式组成了连接条件。当连接成功后,第二张表中的数据就同第一张表连接起来了,并形成了复合结果集   2) 有5种基本类型的的连接,inner,outer,natural,cross连接,自连接。   2.说明与例子 1)内连接(inner join...

MySQL的多表查询(笛卡尔积原理)

先确定数据要用到哪些表。 将多个表先通过笛卡尔积变成一个表。 然后去除不符合逻辑的数据(根据两个表的关系去掉)。 最后当做是一个虚拟表一样来加上条件即可。 注意:列名最好使用表别名来区别。 笛卡尔积 Demo: 左,右连接,内,外连接 l 内连接: 要点:返回的是所有匹配的记录。 2. select * from a,b where a.x =...

MYSQL学习笔记——连接以及存储过程

连接                                                                                                     当我们需要从多个表查询数据时,我们就需要使用到连接操作,mysql支持内连接,左连接以及右连接三种连接方式。 数据库准备       首先我们创建两个表...