在之前,我对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所示:其实select * from A,B where A.Aid=B.Bnameid与Select * from A JOIN B ON A.Aid=B.Bnameid的运行结果是一样的。
 
 
图4:内连接数据

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。

交叉连接:两张表联合没有条件情况下,条数 = 图1 * 图2

交叉连接不带WHERE子句,它返回被连接的两个表所有数据行的笛卡尔积,返回结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

转载于:https://www.cnblogs.com/zhangj391/p/6553371.html

内连接、左外连接、右外连接、交叉连接区别相关推荐

  1. hive 内连接 左外连接 右外连接 满外连接 左半开连接 交叉连接 多表连接 隐式连接

    目录 hive outline hive 内连接 inner join hive 左外连接 left join hive 右外连接 right join hive 满外连接 full join hiv ...

  2. 内连接,外连接(左外,右外),全连接(交集),交叉连接(笛卡尔积)

    内连接,外连接(左外,右外),全连接(交集),交叉连接(笛卡尔积) 先略两个表 首先左连接:SELECT * FROM test1 a LEFT JOIN test2 b ON a.id = b.id ...

  3. mysql外连接插座_深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接...

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和 ...

  4. mysql 左外连接原理_深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接...

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和 ...

  5. 详解SQL的四种连接-左外连接、右外连接、内连接、全连接

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.      内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 stud ...

  6. 深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.      内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 stud ...

  7. 等值连接、内连接、左连接(左外连接)、右连接(右外连接)、全连接、笛卡尔积

    UserInfo表: WorkInfo表: 1.等值连接:从左表中取出每一条记录,去右表中与所有的记录进行匹配:匹配必须是某个条件在左表中与右表中相同最终才会保留结果,否则不保留. 2.内连接 以上可 ...

  8. 数据库学习之MySQL (十六)—— SQL99 外连接 左外连接 右外连接 全外连接 交叉连接

    文章目录 外连接 之 左外连接 与 右外连接 为啥要用外连接 全外连接 总结 内连接 外连接 交叉连接 外连接 之 左外连接 与 右外连接 我们先来看个之前的 女神男朋友的案例 传送:数据库学习之My ...

  9. SQL的四种连接-左外连接、右外连接、内连接、全连接(转)

    今天在看一个遗留系统的数据表的时候发现平时查找的视图是FULL OUT JOIN的,导致平时的数据记录要进行一些限制性处理,其实也可以设置视图各表为右外连接并在视图上设置各列的排序和筛选条件就可以达到 ...

  10. HIVE 中 内连接 外连接 左外连接 右外连接 全外连接 联合操作

    hive的join操作,只支持等值连接 创建customers和orders表,一对多关系 创建customers表 create table customers(id int,name string ...

最新文章

  1. 阿里巴巴为什么让初始化集合时必须指定大小?
  2. BZOJ1012|JSOI最大数maxnumber|线段树
  3. MYSQL中什么是规范化_数据库设计 - 什么是规范化(或规范化)?
  4. js深拷贝和浅拷贝对数组的影响_javaScript中的深拷贝和浅拷贝
  5. .net平台调用(P/Invoking)查询网站
  6. word:多级标题快捷生成
  7. 什么是传统企业电商洪水围城下的诺亚方舟
  8. 加工制造业经销商渠道管理系统:共享上下游信息,加速交易效率
  9. 通过大数据来卸载清理电脑垃圾的软件,到底有多牛?Revo Uninstaller Pro 中文官方网站正版特惠
  10. kaggle数据分析入门之---视频游戏销售分析
  11. day11-random模块-随机
  12. Every Tom,Dick and Harry. 不管张三李四。
  13. java 模拟登录微信_java 微信模拟登录错误,微信改版后不能使用
  14. 程序语言排行榜有哪些
  15. 语音识别芯片LD3320介绍再续
  16. 网信办遇李鬼?“撤稿邮件”需警惕
  17. CREO学习问题——不显示弱尺寸,无法标注线段长度
  18. 21世纪,计算机的普及与互联网的发展,推进服装企业信息化时代
  19. 学习MEF系列(3):导入(Import)和导出(Export) (续)
  20. vue中使用Moment.js

热门文章

  1. Spring Cloud Alibaba —— Sentinel 详细使用
  2. Linux进阶之路————远程登录与vim编辑器
  3. 新手入门教程-------Spring Boot中集成RabbitMQ
  4. int和Integer的比较
  5. c++ 访问控制与封装
  6. java字节流转字符流的步骤_字节流-java入门基础笔记-51CTO博客
  7. SpringCloud面试题分享
  8. java getdelay_java中DelayQueue的一个使用陷阱分析
  9. link url下载php,php脚本生成google play url的下载链接,下载apk并自动反编译后获取android版本号...
  10. Git clone的使用方法