外连接sql的一个问题
来源:互联网 发布:詹姆斯历届总决赛数据 编辑:程序博客网 时间:2024/05/22 01:42
当在内连接查询中加入条件时,无论是将它加入到join子句,还是加入到where子句,其效果是完全一样的,但对于外连接情况就不同了。当把条件加入到 join子句时,会返回外连接表的全部行,然后使用指定的条件返回第二个表的行。如果将条件放到where子句中,将会首先进行连接操作,然后使用where子句对连接后的行进行筛选。例如:
(1)
select u.id, u.p_plan_id, u.unit_name, p.id, p.plan_name
from t_baidu_p_units u
left outer join t_baidu_p_plans p on u.p_plan_id = p.id
and p.id = 3176
where 1 = 1
order by u.p_plan_id desc
它会返回t_baidu_p_units表中所有行,t_baidu_p_plans表中符合join条件的字段不为null
(2)
select u.id, u.p_plan_id, u.unit_name, p.id, p.plan_name
from t_baidu_p_units u
left outer join t_baidu_p_plans p on u.p_plan_id = p.id
and p.id = 3176
where p.id is null
order by u.p_plan_id desc
查询的结果集中没有符合join条件的数据
(3)
select u.id, u.p_plan_id, u.unit_name, p.id, p.plan_name
from t_baidu_p_units u
left outer join t_baidu_p_plans p on u.p_plan_id = p.id
and p.id = 3176
where p.id is not null
order by u.p_plan_id desc
结果集中只包含join条件的数据
分析一下:
(1)where1=1对其进行过滤时,由于都符合此条件,因此没有改变结果集
(2)根据where p.id is null对于join后的结果集进行筛选,凡是p.id不为null的都要过滤掉,因此自然没有p.id=3176的结果
(3)凡是p.id为null的过滤掉,所以只有符合join条件p.id=3176的没有被过滤掉
- 外连接sql的一个问题
- SQL一个外连接查询的理解
- 一个sql问题深入理解左连接
- SQL中内连接和外连接的问题
- SQL中内连接和外连接的问题!
- SQL Server 2008 能用机器名连接,不能用IP地址连接问题 的一个解决方法
- sql连接的优化问题
- SQL中连接的问题
- 连接库的一个问题
- 一个SQL Server左连接的问题,和理解的不一样
- 请高手帮帮忙,一个hibernate连接MS SQL出现的问题,谢谢!
- ado.net连接sql server 2000数据库一定要连网(连一个路由也可以)的问题
- 连接sql server2005不成功的一个原因
- 一个易误的左连接sql
- 一个C++连接sql的简单实例
- 一个有趣的SQL问题。
- SQL的一个排序问题
- 一个有趣的SQL问题。
- 详解Linux内核之双向循环链表(转)
- .net C# 调用 XFire发布的Webservice 安全访问控制
- 拷贝文件夹 删除文件夹
- Flex Netbeans 开发环境环境搭建
- AIX 做网卡聚合绑定
- 外连接sql的一个问题
- 批处理move 使用注意
- 一个二维数组指针的问题
- asp.net javascript 文件无刷新上传实例代码
- encodeURI和encodeURIComponent的比较
- DLL on Symbian
- AIX 做nfs文件系统
- 企业OA选型目前遇到的误区
- GradeView中,数字转换成中文显示