`

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

 
阅读更多

第一部分、查询理论

连接查询方式有:

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

左连接和右连接的区别:

左连接以左表为基准进行查询,左表数据会全部显示出来,右表如果和左表匹配的数据则显示相应字段的数据,如果不匹配,则显示为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的几种连接:内连接、左联接、右连接、全连接、交叉连接

    SQL的几种连接:内连接、左联接、右连接、全连接、交叉连接

    数据库和ado知识

    SQL中表右连接(右外连接) right join SQL中表交叉连接(两张表的乘积) SQL中表全连接 full join SQL中变量 SQL中的事务 创建存储过程 存储过程带输出参数 调用存储过程 触发器定义 触发器类型: 触发器触发条件: 什么...

    Oracle 数据库连接查询SQL语句

    外连接与内连接不一样,外连接返回的查询结果中不仅包含符合条件的行,还包括左表(左外连接),右表(右外连接)或者两个连接表(全外连接)中的所有不符合条件的数据行。 1.左连接 (left [outer] join) 左外连接就是将左...

    SQL编写规范(数据库操作规范)

     如果有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指那个被其他表所引用的表    例如:  EMP表描述了LOCATION表和CATEGORY表的交集  SELECT *  FROM LOCATION L,  ...

    SQL数据库资源大放送

    ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表...

    精通sql结构化查询语句

    9.4 外连接 9.4.1 左外连接 9.4.2 右外连接 9.4.3 全外连接 9.4.4 在外连接中使用聚合函数 9.5 交叉连接 9.5.l 交叉连接的定义 9.5.2 交叉连接举例 9.6 多表连接的综合应用 9.6.1 内连接与左外连接的综合应用 ...

    SQL语法大全

    1. ASP与Access数据库连接: dim conn,mdbfile mdbfile=server.mappath("数据库名称.mdb") set conn=server.createobject("adodb.connection") conn.open "driver={microsoft access driver (*.mdb)};uid=admin;...

    数据库设计与应用.pdf

    如表、树、图、数组… 物理结构:数据在计算机内的存储方式,如顺序方式、链接方式… 数据库:人们收集并抽取出一个应用所需要的大量数据之后,应将其保存起来以供进一步 加工处理,进一步抽取有用信息。数据库的...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    说明:断开与当前数据库的连接并会退出 用法:exit 6. 编辑脚本(edit/ed) 说明:编辑指定或缓冲区的sql脚本 用法:edit [文件名] 列子: 7. 运行脚本 (start/@) 说明:运行指定的sql脚本 用法:start/@ 文件名 ...

    21天学会SQL

    11.2.6 交叉连接查询 230 11.2.7 连接查询中使用聚合函数 232 11.2.8 高级连接查询实例 233 11.3 组合查询 235 11.3.1 使用组合查询 236 11.3.2 使用UNION的规则 237 11.3.3 使用UNION得到复杂的统计 汇总样式 238 ...

    精通SQL 结构化查询语言详解

    9.3.5 交叉连接(CROSS JOIN)  9.4 UNION与UNION JOIN  9.4.1 关系的集合运算  9.4.2 UNION运算符  9.4.3 ORDER BY子句排序UNION运算结果  9.4.4 对多表进行UNION运算  9.4.5 UNION JOIN 连接表  9.5 ...

    程序员的SQL金典6-8

     7.4 交叉连接  7.5 自连接  7.6 外部连接  7.6.1 左外部连接  7.6.2 右外部连接  7.6.3 全外部连接 第8章 子查询  8.1 子查询入门  8.1.1 单值子查询  8.1.2 列值子查询  8.2 SELECT列表中的标量子查询 ...

    程序员的SQL金典7-8

     7.4 交叉连接  7.5 自连接  7.6 外部连接  7.6.1 左外部连接  7.6.2 右外部连接  7.6.3 全外部连接 第8章 子查询  8.1 子查询入门  8.1.1 单值子查询  8.1.2 列值子查询  8.2 SELECT列表中的标量子查询 ...

    程序员的SQL金典4-8

     7.4 交叉连接  7.5 自连接  7.6 外部连接  7.6.1 左外部连接  7.6.2 右外部连接  7.6.3 全外部连接 第8章 子查询  8.1 子查询入门  8.1.1 单值子查询  8.1.2 列值子查询  8.2 SELECT列表中的标量子查询 ...

    程序员的SQL金典3-8

     7.4 交叉连接  7.5 自连接  7.6 外部连接  7.6.1 左外部连接  7.6.2 右外部连接  7.6.3 全外部连接 第8章 子查询  8.1 子查询入门  8.1.1 单值子查询  8.1.2 列值子查询  8.2 SELECT列表中的标量子查询 ...

    程序员的SQL金典.rar

     7.4 交叉连接  7.5 自连接  7.6 外部连接  7.6.1 左外部连接  7.6.2 右外部连接  7.6.3 全外部连接 第8章 子查询  8.1 子查询入门  8.1.1 单值子查询  8.1.2 列值子查询  8.2 SELECT列表中的标量子查询 ...

Global site tag (gtag.js) - Google Analytics