SQL 内连接,外连接
假设一堆男女在教堂,有夫妇有单身的,假设男为左表,女为右表
教父说:结了婚的人请出去,结了婚的人请手拉手,于是结了婚的男女站了起来,这就是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 内连接,外连接相关推荐
- SQL语法 自然连接 外连接 内连接
文章目录 笛卡尔积 连接 内连接 自连接 自然连接 外连接 左外连接 右外连接 区分连接 自然连接 内连接 内连接.外连接 on 和 where 条件过滤的区别 参考链接 笛卡尔积 结果集数目为多个表 ...
- Oracle 表连接方式(内连接/外连接/自连接) 详解
Oracle 表之间的连接分为三种: 1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左 ...
- MySQL 表的增删改查(进阶篇②)· 联合查询 内连接 外连接 · 自连接 · 子查询 exists · 合并查询 union
接进阶篇①,我们继续学习. 一.联合查询 1.1 内连接 1.2 外连接 1.3 内连接和左右外连接的区别 二.自连接 三.子查询 3.1 单行子查询 3.2 多行子查询 使用 in 范围匹配多行 另 ...
- 简述SQL中的外连接
简述SQL中的"外连接" 1.SQL中外连接分为三种:左外连接.右外连接.全外连接. 2.英文书写格式: 左外连接:LEFT OUTER JOIN(LEFT JOIN): 右外连接 ...
- MySQL--基础知识点--64--等值连接/自连接/自然连接/外连接
该篇文章基于以下三个表进行解析 student表 DROP TABLE IFEXISTS `student`;CREATE TABLE student (`sid` INT NOT NULL AUTO ...
- SQL内连接-外连接join,left join,right join,full join
1.创建测试表test1及test2 SQL> CREATE TABLE TEST1(ID NUMBER,NAME VARCHAR2(20)); 表已创建.SQL> create tabl ...
- java内连接外连接_SQL中的内连接与外连接--Java学习网
核心提示:连接运算格式链接运算由两部分构成:连接类型和连接条件连接类型可分为:INNER JOIN 内连接LEFT OUTER JOIN 左外连接RIGHT OUTER JOIN 右外连接FULL O ...
- Oracle 内、外连接
一.Oracle连接类型 ☆说明:按照自己的理解划分的类型,并不是官方定义. 1.内连接 ①等值连接 ②非等值连接 ③自然连接 2.外连接 ①左外连接 ②右外连接 ③全外连接 二.表数据准备 ...
- oracle内连接使用,Oracle中的联合查询-自然连接/外连接/内连接
自然连接 select * from r1 natural [inner] join r2 natural [inner] join r3 where P; select A1,A2 from r1 ...
最新文章
- leetcode--删除链表的倒数第N个节点--python
- junit5_JUnit 5和Selenium –使用Selenium内置的`PageFactory`实现页面对象模式
- python安装百度aip_PIL+百度aip
- codevs 4768 跳石头
- ASP.NET Core分布式项目实战(Consent Controller Get请求逻辑实现)--学习笔记
- Autodesk招聘开发咨询顾问(北京或上海),需要内推的扔简历过来啊
- cif是目的港交货吗_刚接手出口业务,搞不懂FOB? CIF? 为你科普→
- 二叉树寻找祖先C语言,微软算法面试题:给定两个二叉树节点,寻找其最近共同祖先...
- ktor HTTP API 练习
- CentOS6.4 安装MongoDB
- Atitit.android js 的键盘按键检测Back键Home键和Menu键事件
- 多帧点云数据拼接合并_点云拼接
- 夜神模拟器与MAC之间传文件
- PHP 实现防抖功能(防重复请求)
- php解析psd文件,PSD解析工具实现(二)
- Just to do!!!Just to do!!!
- 随机函数(随机取数)
- 1.2.5 层次模型
- 四、变量与基本数据类型
- 【云盒子企业网盘】安全又便捷的桌面书签你想拥有吗?
热门文章
- 入党积极分子思想汇报
- matlab标注legend居中,MATLAB批量标注legend
- 自制简易加湿器(PCB版)
- 小程序(十)小程序缓存
- linux命令mv作用,每天学一个 Linux 命令(18):mv
- 网页中商业产品展示页制作方法探讨
- 拼多多,拼什么?商业模式+店铺运营+爆品打造
- 一个人最重要的不是修生命,而是生命在哪里显现
- 甲骨文收购kuku后首个完整财季净利润同比增25%
- 【文献笔记】【部分精读】【CIR】Angle of Arrival Estimation based on Channel Impulse Response Measurements