[Mysql]SQL 中JOIN 的总结与使用
来源:互联网 发布:天猫数据直播间 编辑:程序博客网 时间:2024/06/05 19:50
0x0 前言
总的来说,四种JOIN的使用/区别可以描述为:
left join
做链接:会从左表那里返回所有的记录,即使在右表中没有匹配的行。
right join
右连接:返回右表中的所有记录,即使在左表中没有记录与它匹配
full join
全连接:返回左右表中的所有记录
inner join
内连接:在表中存在至少一个匹配, 关键字inner可省略。具体可以看stackoverflow上,Difference between Inner Join & Full join这个问题,说得蛮清楚的,我就搬运一下这个问题的答案好了。
0x1 三种JOIN
一共有三种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
0x1_1 LEFT JOIN
现在执行如下SQL语句(左连接,LEFT 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 JOIN
)会输出左边的表中的所有结果,如果右边的表中有相应项,则会输出,否则为NULL
因此,如果要找出在AA(左边的表)中有,而在BB(右边的表)中没有的数据项,可以使用如下的SQL语句:
SELECT * FROM A LEFT OUTER JOIN B ON AA = BBWHERE BB is NULL
0x1_2 RIGHT JOIN
如果使用右连接(RIGHT 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
0x1_3 FULL 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。
0x1_4 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
0x1_5 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
0x_2 图解SQL的JOIN操作
这边也有一张图清楚的说明了每个JOIN操作。建议把上面的内容浏览一边后,再好好看下这张图片,相信对JOIN的操作应该就完全明白了。
0x3 参考文献
- http://www.powerxing.com/sql-join/
- Difference between Inner Join & Full join – stackoverflow
0x4 关于我
- @Author:Zemo
- @Email:zemochen#126.com
- 欢迎转载,让更多的人学到东西
- [Mysql]SQL 中JOIN 的总结与使用
- sql语句中left join、right join 以及inner join之间的使用与区别
- SQL中JOIN的使用
- sql 中 join的使用
- SQL中Left Join 与Right Join 与 Inner Join 与 Full Join的区别
- SQL中Left Join 与Right Join 与 Inner Join 与 Full Join的区别
- SQL中Left Join 与Right Join 与 Inner Join 与 Full Join的区别
- SQL中Left Join 与Right Join 与 Inner Join 与 Full Join的区别
- SQL中Left Join 与Right Join 与 Inner Join 与 Full Join的区别
- SQL中Left Join 与Right Join 与 Inner Join 与 Full Join的区别
- SQL中Left Join 与Right Join 与 Inner Join 与 Full Join的区别
- SQL中Left Join 与Right Join 与 Inner Join 与 Full Join的区别
- SQL中Left Join 与Right Join 与 Inner Join 与 Full Join的区别
- [黑马程序员]sql中join的总结
- sql中left join与rignt join的区别
- sql语句中left join、 inner join的使用
- sql 中使用join 的通俗解释。
- sql语句中JOIN ON 的使用
- MFC的消息处理函数
- CCF 201612-4 压缩编码
- 读取js压缩为gzjs格式文件
- Numpy学习笔记(一)
- 2017网易游戏雷火盘古实习生招聘笔试:最大和
- [Mysql]SQL 中JOIN 的总结与使用
- MySQL外键设置中的 Cascade、NO ACTION、Restrict、SET NULL
- BZOJ 4318 OSU!
- MongoDB TTL索引
- java中equals方法的用法以及==的用法(转)
- 浅显理解 设计模式-工厂模式(一)
- 在VUE中遇到了一个过渡问题
- android activity四种启动模式介绍及应用场景以及实例演示
- 从浏览器web端跳转到本地app(从h5跳native)