用外连接来组合表
来源:互联网 发布:免费大数据平台有哪些 编辑:程序博客网 时间:2024/06/18 09:26
2016.12.2
十二.用外连接来组合表
内连接的主要限制是要显示任何结果的话,都要在所有的连接的表中有相应的匹配。SQL中把内连接作为默认连接,所以可以只是用JOIN来指定一个内连接,而不是一定要用INNER JOIN。
与内连接不同,外连接有3种类型:左连接(LEFT OUTER JOIN),右连接(RIGHT OUTER JOIN)和全连接(FULL OUTER JOIN)。可以直接表示为:LEFT JOIN,RIGHT JOIN,FULL JOIN。
12.1 左连接
SELECT
table1.columnlist
Table2.columnlist
Table3.columnlist
FROM table1
LEFT JOIN table2
ON table1.column1=table2.column2
LEFT JOIN table3
ON table2.column2=table3.column3
ORDER BY table1.columnlist,table2.columnlist
对于关键字LEFT JOIN来说,表排列的顺序是非常重要的,当指定一个LEFT JOIN时,LEFT JOIN左边的表一定是主表,LEFT JOIN右边的是从表。当连接主从表时,我们需要主表的所有行,即使从表中没有行与之匹配。
12.2 与WHERE一起使用判断NULL值
SELECT
table1.columnlist
Table2.columnlist
Table3.columnlist
FROM table1
LEFT JOIN table2
ON table1.column1=table2.column2
LEFT JOIN table3
ON table2.column2=table3.column3
WHERE conditionlist
ORDER BY table1.columnlist,table2.columnlist
12.3 右连接
右连接与左连接的不同在于列出两个表的顺序不同。右连接中,主表出现在RIGHT JOIN的右边,从表出现在RIGHT JOIN的左边,
SELECT
table1.columnlist
Table2.columnlist
Table3.columnlist
FROM table3
RIGHT JOIN table2
ON table3.column2=table2.column2
RIGHT JOIN table1
ON table2.column1=table1.column1
ORDER BY table1.columnlist,table2.columnlist
RIGHT JOIN前后列出表的顺序至关重要,但是ON后面列出的列的顺序则并不重要。建议使用左连接,人的直觉上,先列出的表更重要。
12.4 全连接(MySql中没有)
在内连接中,两个表都是主表,当匹配两个表时,对于选中的行数据,在两个表中必须有一个匹配。在左连接或者右连接中,一个主表,一个从表(可选)。
在全连接中,两个表都是从表,如果表A和表B进行全连接,则会显示:
(1)表A 的所有行,即使它在表B中没有匹配的行
(2)表B的所有行,即使它在表A中没有匹配的行
SELECT
table1.columnlist
Table2.columnlist
FROM table1
FULL JOIN table2
ON table1.column1=table2.column1
ORDER BY table1.columnlist,table2.columnlist
全连接显示了两个表之间双向都没有匹配的数据,这中表之间的关系很少见,所以,全连接很少用到。
- 用外连接来组合表
- 用内连接组合表
- Oracle外连接与条件的组合
- 用ODBC来连接dbf
- 使用StringBuilder 比使用String 来组合连接字符串更加有效率
- MySQL 内连接 左连接 右连接 外连接(union组合查询)
- 用递归法来实现字符集合的所有组合
- 继承的拓展(利用组合来实现复用)
- 用动态规划的思想来解决组合数问题
- 增加表连接来优化SQL
- 安全连接:用SSH来替代Telnet
- 用SSL来连接MySQL数据库
- 用 emacsclient 来连接 emacs server
- 用Proxool来配置连接池
- PHP用mysqli来连接数据库
- 三框架组合用tomcat配置的连接池
- 数据库与连接池组合
- 用组合模式、策略模式、观察者模式结合来实现一个MVC
- 安卓单页面多种状态切换(使用了Fragment技术,包含正常页面,网络访问失败页面和网络访问成功页面)
- unity3D-游戏/AR/VR在线就业班 C#入门方法学习笔记
- MySQL数据库中delimiter的作用概述
- css选择器
- test
- 用外连接来组合表
- 设计模式博客网址
- 关于定时执行任务的解决方法,PendingIntent alarm braocastRecevier等等
- 关于C++ 从命令行输入数据 常用输方法cin的一些理解总结
- 计算机是如何启动的?
- Xcode7与Xcode8及Xcode8.1之间兼容的那些事(持续更新)
- Cannot find the tag library descriptor for http://jakarta.apache.org/struts/tags-tiles
- 卖家必知:10个淘宝刷单技巧轻松提高店铺销量
- html——float与clear详解(深度好文)