在写开头的时候我想到了两个开始,比较一下
第一个开头:sql几种常见的查询连接方式在准备写这篇博客的过程中米老师给我们上了一堂课叫做“再谈编织知识网”。这堂课的中心思想我总结了两个方面。
第一个:学习新东西的时候要联系我们以前的东西。
第二个:全局观,"不谋万世者,不足谋一时;不谋全局者,不足谋一域。"对于我来说最大的收获不是老师讲的这两点,而是老师在讲第二点的时候无意之间提到的一句话,原话记不清出了大概的意思是:一定要有全局观,这样子才可以找到新东西里哪是你以前学习过的旧知识。这样子你的学习会轻松快乐的很多。好了现在开始进入正题,查询的几种连接方法。
SQL提供了多种类型的连接方式,它们之间的区别在于:从相互交叠的不同数据集合中选择用于连接的行时所采用的方法不同。
我们最常用的连接方式有三种,分别是内连接,外连接;外连接又细分为左外连接,右外连接。除了这三种还有三种连接方式,分别是:全外连接,自身连接和交叉连接。
这几种连接方式的定义就简单的了解写一下吧
inner join(内连接):只返回两个表中联结字段相等的行
left outer join(左外连接):返回包括左表中的所有记录和右表中联结字段相等的记录
right outer join(右外连接):返回包括右表中的所有记录和左表中联结字段相等的记录
full outer(全外连接):返回左表和右表中全部的记录
自身连接:同一个表自己与自己连接。
cross join(交叉连接):交叉连接返回左表中的所有行,左表中的每一行与右表中的所有行组合
光看这些定义可以会有一种讲的都是什么的感觉,下面就用一种图形将它们简单的介绍一下,然后再通过具体的实例进行测试。
下图中一个圆圈代表一个表,其中蓝色的代表左表,白色的代表右表
从图上再来看几种连接就会清楚很多。
内连接:就是图中的C部分
左外连接:就是图中的A+C部分
右外联结:就是图中的B+C部分
建立两种表分别是Table_a Table_b,在表中添加几条记录;如下图
--内连接(inner) 可以省略inner select a_UserID,b_StudentID from Table_a inner join Table_b on a_UserID = b_StudentID
--外连接之左连接 也可以写成left join(省略outer) select a_UserID,b_StudentID from Table_a left outer join Table_b on a_UserID = b_StudentID
--外连接之右连接 也可以写成 right join(省略outer) select a_UserID,b_StudentID from Table_a right outer join Table_b on a_UserID = b_StudentID
--全外连接 select a_UserID , b_StudentID from Table_a full outer join Table_b on a_UserID=b_StudentID
--自身连接 select s.a_ID , s.a_UserName, i.a_UserID, i.a_UserName from Table_a i join Table_a s on i.a_UserID = s.a_ID
--交叉连接 select i.a_UserID,t.b_StudentID from Table_a i cross join Table_b t select count(*) from Table_a i cross join Table_b t
结果
这篇文章介绍常用的查询方法的使用方法,通过图形将它的定义图形化,使得理解起来更加的简单。
原文地址:http://blog.csdn.net/y_love_f/article/details/24720217