微信号:rigongyizu365

介绍:一线码农不端不装的「日拱一卒」,关注技术、书籍、创业、GTD、以及一切个人成长周边的话题,每周一到五更新.

关于SQL中的Join

2015-07-04 20:56 lazybios

关于SQL中的Join

SQL Join (发音: see quill join),是常见关系型数据库中一条多表查询指令。

实际使用中join的分类要略微复杂一些。

分类

Inner Join(内连接)

内连接取的是两张表得公共部分,韦恩图表示如下:


Left Outer Join (左连接)

通过左连接得到的结果是表A的全部,以及表B中符合要求部分,其中表A与表B没有匹配的部分用null来占位代替,韦恩图表示如下:


Right Outer Join (右连接)

与上面的Left Outer Join 类似,只不过前者以表A为主(即显示表A全部,只显示表B匹配成功的部分),而右连接则是以表B为主,韦恩图表示如下:


Full Outer Join (全连接)

Mysql不支持全连接,实际上全连接的取得的结果是两张表的全集,其中如果不满足条件的,部分则会以null来占位代替。韦恩图表示如下:


此外如果需要取得下图中的部分,可以通过上面提到的几种join语法同时结合SQL中的where子句来做出限定。


Cross Join (交叉连接)

交叉连接得到的是两张表得笛卡尔集,例如表A中有4个条目,表B中也有4个条目,那么得到的结果就是4x4=16的一张表

SELECT * FROM table_a  CROSS JOIN table_b;
Self Join (自连接)

你也可以为单张表,进行自连接,其结果就是可以使用同一张表两次,在同一张表内更加灵活的进行连接筛选。

SELECT G1.gid, G2.gid FROM Gardners G1 INNER JOIN Gardners G2 ON G1.first_name = G2.first_name



最后附上一张CheatSheet:


参考

http://www.sql-join.com/
http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/


 
日拱一卒 更多文章 使用Retry处理异常的套路 | Ruby 视图的使用 101 | MySQL 使用存储过程 | MySQL 触发器的使用 | MySQL 什么是康威定律 | 三分钟
猜您喜欢 App界面交互设计规范 Android ViewDragHelper源码解析1 浅谈数据处理中的相关分析 大数据实战:站在JMP分析平台上的FIT足迹识别技术 通过spark-redshift工具包读取Redshift上的表