T-SQL: JOIN的几种关系
来源:互联网 发布:三毛淘宝小号网 编辑:程序博客网 时间:2024/05/16 06:01
SQL Server提供了多种JOIN机制,在联机丛书FROM (Transact-SQL)中列举了四种JOIN操作.
1.INNER JOIN(交集)
INNER JOIN在数学上是指两个集合的交集,数学符号∩。如下图所示,图中红色部分则为INNER JOIN的结果。
例如:
{1, 2} ∩ {1, 2} = {1, 2}.
{1, 2} ∩ {2, 3} = {2}.
{2, 5,8} ∩ {3, 7,9} = ∅(空集).
在SQL Server数据库中,两表或者多表之间的交集关系通过INNER JOIN来实现两个或者多个表之间的相同部分。
USE AdventureWorks2012;GOSET STATISTICS IO ON;-- INNER JOINPRINT '--INNER JOIN--' SELECT [PSN].* ,[PWD].* FROM [Person].[Person] AS [PSN] INNER JOIN [Person].[Password] AS [PWD] ON [PWD].[BusinessEntityID] = [PSN].[BusinessEntityID] WHERE [PSN].[BusinessEntityID] =1001 ;SET STATISTICS IO OFF;
在实际的应用中,经常会遇到查询两个表或者几个表中的相同部分的结果,则可以通过INNER JOIN来实现。比如说,需要从员工信息表和员工考勤表中获取员工的员工信息以及考勤信息,则可以通过INNER JOIN来实现。
2. LEFT JOIN/RIGHT JOIN (左连接或者右连接)
LEFT JOIN 在数学中就是指当前集合。如下图所示,红色部分就是LEFT JOIN的结果。
在SQL Server数据库中,两表或者多表之间的左连接关系通过LEFT JOIN来实现两个或者多个表之间的连接后部分。
USE AdventureWorks2012;GOSET STATISTICS IO ON;--LEFT JOIN/RIGHT JOIN PRINT '--LEFT JOIN/RIGHT JOIN--' SELECT [PSN].* ,[PWD].* FROM [Person].[Person] AS [PSN] LEFT JOIN [Person].[Password] AS [PWD] ON [PWD].[BusinessEntityID] = [PSN].[BusinessEntityID] WHERE [PSN].[BusinessEntityID] =1001 ;SET STATISTICS IO OFF;
在实际应用中,经常会遇到查询两个表或者几个表中的连接的结果,则需要通过LEFT JOIN来实现。比如说,需要从员工信息表和员工请假表中获取员工信息和请假信息,则可以通过 LEFT JOIN来实现。
对于右连接RIGHT JOIN来说,通常都可以通过左连接 LEFT JOIN来实现,在实际操作中,90%以上的操作都是通过左连接LEFT JOIN来实现的,通过RIGHT JOIN来实现的很少。通常不建议使用右连接RIGHT JOIN来实现数据的查询,这是因为如果右连接 RIGHT JOIN的情况下,很难预估结果集,会导致一些异常情况出现。
3. FULL JOIN(并集)
FULL JOIN在数学上是指两个集合的并集,数学符号为 ∪ 。如下图所示,图中红色部分则为FULL JOIN的结果。
例如:
{1, 2} ∪ {1, 2} = {1, 2}.
{1, 2} ∪ {2, 3} = {1, 2, 3}.
{1, 2, 3} ∪ { 4, 5,6} = {1, 2, 3, 4, 5,6}.
{1, 2, 3} ∪∅ ={1, 2, 3}.
在SQL Server数据库中,两表或者多表之间的并集关系通过FULL JOIN来实现两个或者多个表之间的合并后部分。
USE AdventureWorks2012;GOSET STATISTICS IO ON;-- FULL JON PRINT '--FULL JOIN--' SELECT [PSN].* ,[PWD].* FROM [Person].[Person] AS [PSN] FULL JOIN [Person].[Password] AS [PWD] ON [PWD].[BusinessEntityID] = [PSN].[BusinessEntityID] WHERE [PSN].[BusinessEntityID] =1001 ;SET STATISTICS IO OFF;
在实际应用中,经常会遇到查询两个表或者几个表中的合并的结果,则可以通过FULL JOIN来实现。比如说,需要从员工考勤表和员工加班表中获取员工的考勤与加班信息,则可以通过FULL JOIN来实现考勤和加班信息的汇总。
4.CROSS JOIN(笛卡尔积)
CROSS JOIN 在数学中称为笛卡尔积,表示两个集合的乘积,数学符号为X。如下图所示,
在SQL Server数据库中,两表或者多表之间的笛卡尔积关系通过CROSS JOIN来实现两个或者多个表之间的连接后部分。
USE AdventureWorks2012;GOSET STATISTICS IO ON;--CORSS JOIN PRINT '--CORSS JOIN--' SELECT [PSN].* ,[PWD].* FROM [Person].[Person] AS [PSN] CROSS JOIN [Person].[Password] AS [PWD] WHERE [PWD].[BusinessEntityID] = [PSN].[BusinessEntityID] AND [PSN].[BusinessEntityID] =1001 ;SET STATISTICS IO OFF;
在实际应用中,偶尔会遇到查询两个表或者几个表中的交叉相乘的结果,则需要通过CROSS JOIN来实现。
上述简单介绍了T-SQL中几种JOIN 的基本语法和基本关系,通常来说,INNER JOIN的结果集 <= LEFT JOIN的结果集 <= FULL JOIN的结果集 <= CROSS JOIN的结果集。只有在特定情况下,等号关系才会成立。如文中提到的这个例子。
相关连接:
1. https://msdn.microsoft.com/en-us/library/ms177634.aspx
2. http://www.mssqltips.com/sqlservertip/1667/sql-server-join-example/
2. http://en.wikipedia.org/wiki/Cartesian_product
3. http://en.wikipedia.org/wiki/Intersection_%28set_theory%29
4. http://en.wikipedia.org/wiki/Union_%28set_theory%29
文中部分图片来自网络http://en.wikipedia.org。
- T-SQL: JOIN的几种关系
- SQL中的几种join的方法
- SQL JOIN 连接的几种方式
- SQL SERVER几种Join的区别
- T-SQL语句的几种写法
- T-SQL - left join, right join, inner join, outer join的区别
- SQL 几种JOIN用法实例
- SQL 几种JOIN用法实例
- SQL 几种JOIN用法实例
- SQL 几种JOIN用法实例
- T-SQL:取最值的几种方式的简单比较.
- join的几种实现
- mysql的几种join
- MySQL的几种join
- T-SQL Tips: update / delete 与 inner join 的组合
- MySQL的几种连接 join/inner join/cross join/逗号/left join/right join/natural join
- MySQL的几种连接 join/inner join/cross join/逗号/left join/right join/natural join
- T-SQL中,View视图的应用:Left Join 和 Right Join的区别
- 页面报出uncaught exception: out of memory异常
- 扩大进口螺丝结顶,数量多考虑空间速度快决定书!
- 企鹅2015校招笔试之(三)C/S模型压力算法设计实现
- 小白的白盒测试之路——用例设计篇
- Linux终端神器tmux
- T-SQL: JOIN的几种关系
- 了解 Git 的工作方式,而不仅仅是了解命令
- 匿名App项目小总结
- 学习 JAVA,有什么书籍推荐?学习的方法和过程是怎样的?
- AndroidStudio 使用技巧:LogCat 过滤正则表达设置
- HTTP协议详解(转)
- 世界那么大,我想去看看
- 两个数的平方和
- JavaScript语言精粹 读书笔记(一)