内连接 外链接等着知识汇总

原创 2012年03月29日 09:24:34

这个是我在网上查找并总结的:

 

SQL查询中需要跨越多个表时就需要使用连接查询,今天我把自己的实验心得写下来,就当做备忘录吧。
    首先是内连接,是用的比较多的一种,内连接是指多个表通过连接条件中共享列的相等值进行的匹配连接,它主要有两种形式:等价连接和自然连接。等价连接会产生冗余列,因为它将连接条件中的共享列显示两次,而自然连接则清除了等价连接产生的冗余列,因此我们所说的内连接在没有特殊说明书的情况下都指的自然连接。(这个过程中好像等价连接包含大小小于,等于三个条件的)
  外连接用的比较多的是在一个学生表 课程表 选修表里面 查询所有的学生选课情况,这里里面就包含了没有选修任何课的学生,只有用外连接才能查询出来的!
 
 
 
 
在之前,我对MSSQL中的内连接和外连接所得出的数据集不是很清楚。这几天重新温习了一下SQL的书本,现在的思路应该是很清楚了,现在把自己的理解发出来给大家温习下。希望和我一样对SQL的连接语句不太理解的朋友能够有所帮助。(发这么菜的教程,各位大大们别笑话偶了,呵:D )
有两个表A和表B。
表A结构如下:
Aid:int;标识种子,主键,自增ID
Aname:varchar
数据情况,即用select * from A出来的记录情况如下图1所示:

图1:A表数据
表B结构如下:
Bid:int;标识种子,主键,自增ID
Bnameid:int
数据情况,即用select * from B出来的记录情况如下图2所示:

图2:B表数据
为了把Bid和Aid加以区分,不让大家有误解,所以把Bid的起始种子设置为100。
有SQL基本知识的人都知道,两个表要做连接,就必须有个连接字段,从上表中的数据可以看出,在A表中的Aid和B表中的Bnameid就是两个连接字段。
下图3说明了连接的所有记录集之间的关系:

图3:连接关系图
现在我们对内连接和外连接一一讲解。
1.内连接:利用内连接可获取两表的公共部分的记录,即图3的记录集C
语句如下:Select * from A JOIN B ON A.Aid=B.Bnameid
运行结果如下图4所示:

图4:内连接数据
其实select * from A,B where A.Aid=B.Bnameid与Select * from A JOIN B ON A.Aid=B.Bnameid的运行结果是一样的。
2.外连接:外连接分为两种,一种是左连接(Left JOIN)和右连接(Right JOIN)
   (1)左连接(Left JOIN):即图3公共部分记录集C+表A记录集A1。     
      语句如下:select * from A Left JOIN B ON A.Aid=B.Bnameid
      运行结果如下图5所示:

图5:左连接数据
      说明:
            在语句中,A在B的左边,并且是Left Join,所以其运算方式为:A左连接B的记录=图3公共部分记录集C+表A记录集A1
            在图3中即记录集C中的存在的Aid为:2 3 6 7 8           
            图1中即表A所有记录集A中存在的Aid为:1 2 3 4 5 6 7 8 9
            表A记录集A1中存在的Aid=(图1中即A表中所有Aid)-(图3中即记录集C中存在的Aid),最终得出为:1 4 5 9
            由此得出图5中A左连接B的记录=图3公共部分记录集C+表A记录集A1,
            最终得出的结果图5中可以看出Bnameid及Bid非NULL的记录都为图3公共部分记录集C中的记录;Bnameid及Bid为NULL的Aid为1 4 5 9的四笔记录就是表A记录集A1中存在的Aid。
   (2)右连接(Right JOIN):即图3公共部分记录集C+表B记录集B1。
      语句如下:select * from A Right JOIN B ON A.Aid=B.Bnameid
      运行结果如下图6所示:

图6:右连接数据
      说明:
            在语句中,A在B的左边,并且是Right Join,所以其运算方式为:A右连接B的记录=图3公共部分记录集C+表B记录集B1
            在图3中即记录集C中的存在的Aid为:2 3 6 7 8           
            图2中即表B所有记录集B中存在的Bnameid为:2 3 6 7 8 11
            表B记录集B1中存在的Bnameid=(图2中即B表中所有Bnameid)-(图3中即记录集C中存在的Aid),最终得出为:11
            由此得出图6中A右连接B的记录=图3公共部分记录集C+表B记录集B1,
            最终得出的结果图6中可以看出Aid及Aname非NULL的记录都为图3公共部分记录集C中的记录;Aid及Aname为NULL的Aid为11的记录就是表B记录集B1中存在的Bnameid。
总结:
通过上面的运算解说,相信很多人已经想到,上面的情况(包括图3的关系图)说明的都只是A在B的左边的情况,
以下语句B在A的右边的又会出现什么情况呢??
select * from B Left JOIN A ON A.Aid=B.Bnameid
select * from B Right JOIN A ON A.Aid=B.Bnameid
其实对图3左右翻转一下就可以得出以下结论:
select * from B Left JOIN A ON A.Aid=B.Bnameid和select * from A Right JOIN B ON A.Aid=B.Bnameid所得出的记录集是一样的

select * from B Right JOIN A ON A.Aid=B.Bnameid和select * from A Left JOIN B ON A.Aid=B.Bnameid所得出的记录集也是一样的。
第一次写类似教程的贴子,希望和我一样对SQL的连接语句不太理解的朋友能够有所帮助。谢谢大家支持。

内链接与外连接的区别

两个表的连接,是通过将一个表中的一列或者多列同另一个表中的列链接而建立起来的。用来连接两张表的表达式组成了连接条件。当连接成功后,第二张表中的数据就同第一张表连接起来了,并形成了复合结果集--包括两张...
  • limm33
  • limm33
  • 2016年03月23日 15:49
  • 2428

内连接,外链接(左连接、右连接、全连接),交叉连接大总结

1.什么是连接查询呢?     概念:根据两个表或多个表的列之间的关系,从这些表中查询数据。     目的:实现多个表查询操作。 2.分类: 首先划分一下,连接分为三种:内...
  • basycia
  • basycia
  • 2016年08月14日 20:17
  • 3470

SQL内连接与外连接

概述 1、内联接(典型的联接运算,使用像 = 或 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。 2、外联接...
  • qq877507054
  • qq877507054
  • 2016年08月26日 14:22
  • 1091

数据库-内连接与外连接的区别(举例说明)

内连接,也被称为自然连接,只有两个表相匹配的行才能在结果集中出现。返回的结果集选取了两个表中所有相匹配的数据,舍弃了不匹配的数据。由于内连接是从结果表中删除与其他连接表中没有匹配的所有行,所以内连接可...
  • Dove_Knowledge
  • Dove_Knowledge
  • 2017年05月08日 15:58
  • 1406

深入理解MySQL的外连接、内连接、交叉连接

1、内联接(典型的联接运算,使用像 =  或 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。    ...
  • GarfieldEr007
  • GarfieldEr007
  • 2017年04月06日 22:41
  • 2633

数据库的内连接和外连接

          内连接典型的连接用算,使用如 = ,之类的比较用算符,包括相等连接和自然连接。内连接根据各个表中共有的列来匹配表中的行!      比如用户表(M-USER)中有部门编号(BUME...
  • tang08
  • tang08
  • 2007年11月21日 11:33
  • 5821

数据库的内连接、外连接(左外连接、右外连接、全外连接)以及交叉连接

SQL数据库的连接:内连接、和外连接(左外连接、右外连接、和全连接) 本次实验在MySQL数据库中进行,数据库初始表如下: 一、内连接:结果仅包含符合连接条件的两表中的行。如下: 二、...
  • u012050154
  • u012050154
  • 2016年09月10日 22:30
  • 4632

SQL内连接、左外链接、右外连接、交叉链接区别

SQL内连接、左外链接、右外连接、交叉链接区别                                                                — —你可以做到任何事,...
  • chajinglong
  • chajinglong
  • 2016年08月12日 20:40
  • 893

SQL内链接,外连接,交叉连接,联合连接区别详解

一、准备工作:创建数据表并填写信息 class表: student表: 二、详解1、内链接INNER JOIN 用于取得两个表中存在连接匹配关系的记录(例如:某一列相等)。通常配合比较运算符...
  • calm_thinker
  • calm_thinker
  • 2017年03月16日 17:53
  • 897

MySQL学习笔记(二):内连接和外连接实现多表查询

注:内连接用的比较多 select a.studentno, a.studentname, b.classname from students a, classes b where ...
  • Jalon2015
  • Jalon2015
  • 2015年07月02日 11:25
  • 1330
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:内连接 外链接等着知识汇总
举报原因:
原因补充:

(最多只允许输入30个字)