SQL连接(right join,left join,full join,inner join,cross join,self join)
2012-09-24 16:09
756 查看
1. 右连接(right join, right outer join)
解释:以右表(Sys_Employee)为准,而左表(Sys_Department)中的记录只有当其DepartmentId在右表中存在时才会查询出来;
![](http://pic002.cnblogs.com/images/2012/280495/2012092416202089.jpg)
2. 左连接(left join, left outer join)
解释:以左表(Sys_Department)为准,而右表(Sys_Employee)中的记录只有当其DepartmentId在左表中存在时才会查询出来;
![](http://pic002.cnblogs.com/images/2012/280495/2012092416252031.jpg)
3. 全连接(full join, full outer join)
解释:两个表中DepartmentId的并集(U)记录;
![](http://pic002.cnblogs.com/images/2012/280495/2012092416375264.jpg)
4. 内连接(join, inner join)
解释:两个表中DepartmentId的交集(n)记录;
![](http://pic002.cnblogs.com/images/2012/280495/2012092416331295.jpg)
5. 交叉连接(cross join,完全连接)
解释:没有WHERE子句的交叉连接,它返回被连接的两个表所有数据行的笛卡尔积,返回结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
![](http://pic002.cnblogs.com/images/2012/280495/2012092416400673.jpg)
6. 自连接(self join)
解释:使用自连接可以将自身表的一个镜像当作另一个表来对待;
使用自连接的情况:当表中的某一个字段与这个表中另外字段的相关时,我们可能用到自连接(自连接的本意就是将一张表看成多张表来做连接)。
例如:
数据库中有如下一个部门结构表
![](http://pic002.cnblogs.com/images/2012/280495/2012092416440111.jpg)
下面我们需要将每一个部门自己的名称和上级部门的名称都找出来。
如果有两张表,一个部门表,一个上级部门表,那很好写SQL语句;
但现在部门和上级部门都在一张表中,这种情况用自连接就比较好。
SQL语句及查询结果如下:
![](http://pic002.cnblogs.com/images/2012/280495/2012092416442152.jpg)
这里我们注意到研发部没有出现在部门列表中,是因为在这里研发部是最上级部门,它没有上级部门。如果这时候我们希望研发部也出现在左侧,即使它没有上级部门。
我们可以结合左连接
SQL语句及查询结果如下:
解释:以右表(Sys_Employee)为准,而左表(Sys_Department)中的记录只有当其DepartmentId在右表中存在时才会查询出来;
![](http://pic002.cnblogs.com/images/2012/280495/2012092416202089.jpg)
2. 左连接(left join, left outer join)
解释:以左表(Sys_Department)为准,而右表(Sys_Employee)中的记录只有当其DepartmentId在左表中存在时才会查询出来;
![](http://pic002.cnblogs.com/images/2012/280495/2012092416252031.jpg)
3. 全连接(full join, full outer join)
解释:两个表中DepartmentId的并集(U)记录;
![](http://pic002.cnblogs.com/images/2012/280495/2012092416375264.jpg)
4. 内连接(join, inner join)
解释:两个表中DepartmentId的交集(n)记录;
![](http://pic002.cnblogs.com/images/2012/280495/2012092416331295.jpg)
5. 交叉连接(cross join,完全连接)
解释:没有WHERE子句的交叉连接,它返回被连接的两个表所有数据行的笛卡尔积,返回结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
![](http://pic002.cnblogs.com/images/2012/280495/2012092416400673.jpg)
6. 自连接(self join)
解释:使用自连接可以将自身表的一个镜像当作另一个表来对待;
使用自连接的情况:当表中的某一个字段与这个表中另外字段的相关时,我们可能用到自连接(自连接的本意就是将一张表看成多张表来做连接)。
例如:
数据库中有如下一个部门结构表
![](http://pic002.cnblogs.com/images/2012/280495/2012092416440111.jpg)
下面我们需要将每一个部门自己的名称和上级部门的名称都找出来。
如果有两张表,一个部门表,一个上级部门表,那很好写SQL语句;
但现在部门和上级部门都在一张表中,这种情况用自连接就比较好。
SQL语句及查询结果如下:
![](http://pic002.cnblogs.com/images/2012/280495/2012092416442152.jpg)
这里我们注意到研发部没有出现在部门列表中,是因为在这里研发部是最上级部门,它没有上级部门。如果这时候我们希望研发部也出现在左侧,即使它没有上级部门。
我们可以结合左连接
SQL语句及查询结果如下:
![](http://pic002.cnblogs.com/images/2012/280495/2012092416444946.jpg)
相关文章推荐
- sql多表连接查询inner join, left join , right join ,full join ,cross join
- sql多表连接查询inner join, left join , right join ,full join ,cross join
- sql 多表连接查询inner join, left join , right join ,full join ,cross join
- sql多表连接查询inner join, left join , right join ,full join ,cross join
- SQL中的各种JOIN(inner join,full outer join,left join,right join,cross join )
- SQL表连接查询(inner join、full join、left join、right join)【转载】
- sql多表连接查询inner join, left join , right join ,full join ,cross join
- SQL表连接查询(inner join(join)、full join、left join、right join、cross join)
- sql多表连接查询inner join, left join , right join ,full join ,cross join
- SQL表连接查询(inner join、full join、left join、right join)
- SQL表连接查询(inner join、full join、left join、right join)
- SQL中cross join,left join,right join ,full join,inner join 的区别
- SQL表连接查询(inner join、full join、left join、right join)
- SQL表连接查询(inner join、full join、left join、right join)
- sql各种连接笛卡尔积,inner join,left join,right join,full join等测试与区别
- SQL表连接查询(inner join、full join、left join、right join)
- sql多表连接查询inner join, left join , right join ,full join ,cross join
- SQL表连接查询(inner join、full join、left join、right join)
- sql多表连接查询inner join, left join , right join ,full join ,cross join
- join连接的五种方式的简单使用案例(Inner join,Left join,Right join,Full join,Cross join)