假设一堆男女在教堂,有夫妇有单身的,假设男为左表,女为右表

教父说:结了婚的人请出去,结了婚的人请手拉手,于是结了婚的男女站了起来,这就是INNER 内连

教父说:男的并且和这些男的结婚的女的请出去,结了婚的人请手拉手,于是,结了婚的夫妇手拉手出去,单身的男的也出去了。这就是 LEFT 左连

教父说:女的并且和这些女的结婚的男的请出去,结了婚的人请手拉手,于是,结了婚的夫妇手拉手出去,单身的女的也出去了。这就是 RINGT 右连

教父又说:请全部人都出去,结了婚的人请手拉手,于是 结了婚的夫妇手拉手出去,单身的男的和女的各自出去了。 这就是全外连

http://blog.sina.com.cn/s/blog_4b02f18e0100cgwt.html

例子:

有两个表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 内连接,外连接相关推荐

  1. SQL语法 自然连接 外连接 内连接

    文章目录 笛卡尔积 连接 内连接 自连接 自然连接 外连接 左外连接 右外连接 区分连接 自然连接 内连接 内连接.外连接 on 和 where 条件过滤的区别 参考链接 笛卡尔积 结果集数目为多个表 ...

  2. Oracle 表连接方式(内连接/外连接/自连接) 详解

    Oracle 表之间的连接分为三种: 1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制)        (2)右外连接(右边的表不加限制)         (3)全外连接(左 ...

  3. MySQL 表的增删改查(进阶篇②)· 联合查询 内连接 外连接 · 自连接 · 子查询 exists · 合并查询 union

    接进阶篇①,我们继续学习. 一.联合查询 1.1 内连接 1.2 外连接 1.3 内连接和左右外连接的区别 二.自连接 三.子查询 3.1 单行子查询 3.2 多行子查询 使用 in 范围匹配多行 另 ...

  4. 简述SQL中的外连接

    简述SQL中的"外连接" 1.SQL中外连接分为三种:左外连接.右外连接.全外连接. 2.英文书写格式: 左外连接:LEFT OUTER JOIN(LEFT JOIN): 右外连接 ...

  5. MySQL--基础知识点--64--等值连接/自连接/自然连接/外连接

    该篇文章基于以下三个表进行解析 student表 DROP TABLE IFEXISTS `student`;CREATE TABLE student (`sid` INT NOT NULL AUTO ...

  6. SQL内连接-外连接join,left join,right join,full join

    1.创建测试表test1及test2 SQL> CREATE TABLE TEST1(ID NUMBER,NAME VARCHAR2(20)); 表已创建.SQL> create tabl ...

  7. java内连接外连接_SQL中的内连接与外连接--Java学习网

    核心提示:连接运算格式链接运算由两部分构成:连接类型和连接条件连接类型可分为:INNER JOIN 内连接LEFT OUTER JOIN 左外连接RIGHT OUTER JOIN 右外连接FULL O ...

  8. Oracle 内、外连接

    一.Oracle连接类型     ☆说明:按照自己的理解划分的类型,并不是官方定义. 1.内连接 ①等值连接 ②非等值连接 ③自然连接 2.外连接 ①左外连接 ②右外连接 ③全外连接 二.表数据准备 ...

  9. oracle内连接使用,Oracle中的联合查询-自然连接/外连接/内连接

    自然连接 select * from r1 natural [inner] join r2 natural [inner] join r3 where P; select A1,A2 from r1 ...

最新文章

  1. leetcode--删除链表的倒数第N个节点--python
  2. junit5_JUnit 5和Selenium –使用Selenium内置的`PageFactory`实现页面对象模式
  3. python安装百度aip_PIL+百度aip
  4. codevs 4768 跳石头
  5. ASP.NET Core分布式项目实战(Consent Controller Get请求逻辑实现)--学习笔记
  6. Autodesk招聘开发咨询顾问(北京或上海),需要内推的扔简历过来啊
  7. cif是目的港交货吗_刚接手出口业务,搞不懂FOB? CIF? 为你科普→
  8. 二叉树寻找祖先C语言,微软算法面试题:给定两个二叉树节点,寻找其最近共同祖先...
  9. ktor HTTP API 练习
  10. CentOS6.4 安装MongoDB
  11. Atitit.android js 的键盘按键检测Back键Home键和Menu键事件
  12. 多帧点云数据拼接合并_点云拼接
  13. 夜神模拟器与MAC之间传文件
  14. PHP 实现防抖功能(防重复请求)
  15. php解析psd文件,PSD解析工具实现(二)
  16. Just to do!!!Just to do!!!
  17. 随机函数(随机取数)
  18. 1.2.5 层次模型
  19. 四、变量与基本数据类型
  20. 【云盒子企业网盘】安全又便捷的桌面书签你想拥有吗?

热门文章

  1. 入党积极分子思想汇报
  2. matlab标注legend居中,MATLAB批量标注legend
  3. 自制简易加湿器(PCB版)
  4. 小程序(十)小程序缓存
  5. linux命令mv作用,每天学一个 Linux 命令(18):mv
  6. 网页中商业产品展示页制作方法探讨
  7. 拼多多,拼什么?商业模式+店铺运营+爆品打造
  8. 一个人最重要的不是修生命,而是生命在哪里显现
  9. 甲骨文收购kuku后首个完整财季净利润同比增25%
  10. 【文献笔记】【部分精读】【CIR】Angle of Arrival Estimation based on Channel Impulse Response Measurements