inner join, left join, right join, full outer join的区别
总的来说,四种join的区别可以描述为:
left join 会从左表(shop)那里返回所有的记录,即使在右表(sale_detail)中没有匹配的行。
right outer join 右连接,返回右表中的所有记录,即使在左表中没有记录与它匹配
full outer join 全连接,返回左右表中的所有记录
在表中存在至少一个匹配时,inner join 返回行。 关键字inner可省略。
Join
一共有三种OUTER JOIN:
- LEFT OUTER JOIN
- RIGHT OUTER JOIN
- FULL OUTER JOIN
关键字OUTER是可选择的,取决于具体语言,在实现上它们都是遵循标准的,因此FULL JOIN和FULL OUTER JOIN是一样的。
接着将以简化的数据集来说明这些JOIN语句。考虑有如下两个数据集,注意到有些元素在A中有,在B中没有,反过来也是。
- Set "A" Set "B"
- AA BB
- -------- --------
- Item 1 Item 3
- Item 2 Item 4
- Item 3 Item 5
- Item 4 Item 6
LEFT OUTER JOIN
现在执行如下SQL语句(左连接,LEFT OUTER JOIN):
- SELECT * FROM A LEFT OUTER JOIN B ON AA = BB
将会得到如下的结果(空白的元素表示NULL):
- AA BB
- -------- --------
- Item 1
- Item 2
- Item 3 Item 3
- Item 4 Item 4
左连接(LEFT OUTER JOIN)会输出左边的表中的所有结果,如果右边的表中有相应项,则会输出,否则为NULL
因此,如果要找出在AA(左边的表)中有,而在BB(右边的表)中没有的数据项,可以使用如下的SQL语句:
- SELECT * FROM A LEFT OUTER JOIN B ON AA = BB
- WHERE BB is NULL
RIGHT OUTER JOIN
如果使用右连接,结果将会输出BB中所有的数据项和AA中相应的匹配项(注意你现在是获取了右边的表中的所有数据项):
- SELECT * FROM A RIGHT OUTER JOIN B ON AA = BB
- AA BB
- -------- --------
- Item 3 Item 3
- Item 4 Item 4
- Item 5
- Item 6
FULL OUTER JOIN
如果想要取得所有的元素项,则可以使用FULL JOIN:
- SELECT * FROM A FULL JOIN B ON AA = BB
- AA BB
- -------- --------
- Item 1 <-----+
- Item 2 |
- Item 3 Item 3 |
- Item 4 Item 4 |
- Item 5 +--- empty holes are NULL's
- Item 6 |
- ^ |
- | |
- +---------------------+
再次注意,缺失的数据项的值是NULL。
INNER JOIN
INNER JOIN跟JOIN是一样的,一般INNER关键字可以省略。INNER JOIN将只会返回相匹配的元素项,即不会返回结果为NULL的数据项。
- SELECT * FROM A INNER JOIN B ON AA = BB
- AA BB
- -------- --------
- Item 3 Item 3
- Item 4 Item 4
CROSS JOIN
最后还有一个CROSS JOIN,笛卡儿积,将会返回A中每个元素分别匹配B中所有元素的结果,即N*M组合。
- SELECT * FROM A CROSS JOIN B
- AA BB
- -------- --------
- Item 1 Item 3 ^
- Item 1 Item 4 +--- A中第一个元素, 匹配B中所有元素
- Item 1 Item 5 |
- Item 1 Item 6 v
- Item 2 Item 3 ^
- Item 2 Item 4 +--- A中第二个元素, 匹配B中所有元素
- Item 2 Item 5 |
- Item 2 Item 6 v
- Item 3 Item 3 ... and so on
- Item 3 Item 4
- Item 3 Item 5
- Item 3 Item 6
- Item 4 Item 3
- Item 4 Item 4
- Item 4 Item 5
- Item 4 Item 6
inner join, left join, right join, full outer join的区别的更多相关文章
- EntityFramework 使用Linq处理内连接(inner join)、外链接(left/right outer join)、多表查询
场景:在实际的项目中使用EntityFramework都会遇到使用Ef处理连接查询的问题,这里做一些小例子如何通过Linq语法处理内连接(inner join).外连接(left/right oute ...
- oracle 内连接(inner join)、外连接(outer join)、全连接(full join)
转自:https://premier9527.iteye.com/blog/1659689 建表语句: create table EMPLOYEE(EID NUMBER,DEPTID NUMBER,E ...
- 图解SQL的inner join、left join、right join、full outer join、union、union all的区别
转自:http://blog.csdn.net/jz20110918/article/details/41806611 假设我们有两张表.Table A 是左边的表.Table B 是右边的表.其各有 ...
- 图解SQL的inner join、left join、right join、full outer join、union、union all的区别
SQL的Join语法有很多,inner join(等值连接) 只返回两个表中联结字段相等的行,left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录,right join(右 ...
- 图解SQL的inner join(join)、left join、right join、full outer join、union、union all的区别
对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...
- 图解SQL的inner join、left join、right join、full outer join、union、union all的区别【转载】
对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...
- SQL OUTER JOIN
When we want to select out all the record from two table, no matter it's present at second table or ...
- 图解SQL inner join、left join、right join、full outer join、union、union all的区别
转于:http://justcoding.iteye.com/blog/2006487 这是一篇来自Coding Horror的文章. SQL的Join语法有很多:有inner的,有outer的,有l ...
- SQL夯实基础(一):inner join、outer join和cross join的区别
一.数据构建 先建表,再说话 create database Test use Test create table A ( AID ,) primary key, name ), age int ) ...
- left outer join preserving unmatched rows from the first table
https://docs.oracle.com/javadb/10.8.3.0/ref/rrefsqlj18922.html INNER JOIN operation Specifies a join ...
随机推荐
- linux 软件安装目录详解
我一般会在/opt目录下创建 一个software目录,用来存放我们从官网下载的软件格式是.tar.gz文件,或者通过 wget+地址下载的.tar.gz文件 执行解压缩命令,这里以nginx举例 t ...
- 运维都该会的Socket知识!
本篇博客转自赵班长 所有运维都会的Socket知识!!! 原创: 赵班长 新运维社区 什么是Socket? 大家都用电脑上网,当我们访问运维社区https://www.unixhot.com的时候,我 ...
- centos7 yum快速安装LNMP
1.安装nginx yum install nginx ##开启nginx service nginx start 2.安装MYSQL yum localinstall http://dev.mysq ...
- Codeforces Round #581 (Div. 2)A BowWow and the Timetable (思维)
A. BowWow and the Timetable time limit per test1 second memory limit per test256 megabytes inputstan ...
- Spring EntityResolver ".dtd" 和 ".xsd"检验
XmlBeanDefinitionReader 加载xml EntityResolver entityResolver; ErrorHandler errorHandler = new SimpleS ...
- Linux tcpdump命令详解与Wireshark
简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的 ...
- 【每日一包0001】is-sorted
github地址:https://github.com/ABCDdouyae... is-sorted 用于判断数组是否被排序了 文档地址:https://www.npmjs.com/package/ ...
- Nginx动静分离经典案例配置
随着Nginx高性能Web服务器大量被使用,目前Nginx最新稳定版为1.2.6,张宴兄在实际应用中大量使用Nginx,并分享Nginx高性能Web服务器知识,使得Nginx在国内也是飞速的发展.那今 ...
- Avro从入门到入土
avro官网 1.Avro历史 Avro是Hadoop的一个数据序列化系统,由Hadoop的创始人Doug Cutting(也是Lucene,Nutch等项目的创始人)开发,设计用于支持大批量数据交换 ...
- buuctf@[OGeek2019]babyrop
#!/usr/bin/python #coding:utf-8 from pwn import * #context.log_level = 'debug' io = process('./pwn', ...