外连接sql的一个问题
当在内连接查询中加入条件时,无论是将它加入到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的结果
(
相关文档:
我们在数据库中使用表的时候,经常会遇到两种使用表的方法,分别就是使用临时表及表变量。在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们实现的功能基本上是一样的,可如何在一个存储过程中有时候去使用临时表而不使用表变量,有时候去使用表变量而不使用临时表呢?
临时表
临时表与永久表相似, ......
1。如果装sql server中未出现异常的话,且一些自选参数,账户,密码等没有错误的话。一旦出现诸如socket建立不起,连接不上等问题。最有效的解决方法是打补丁,其中sp4:http://www.microsoft.com/downloads/details.aspx?DisplayLang=zh-cn&FamilyID=8e2dfc8d-c20e-4446-99a9-b7f0213f8bc5,sp3a:http://www.microsof ......
也是SQL Server 2005带来的新特性,部分备份(partial backup)自动创建数据库中主文件组和所有激活读写功能的文件组的备份。如果备份存在只读文件组的数据库,部分备份将只对主文件组进行备份。这个选项对于那些存在只读文件组的超大型数据库是理想的,它不需要像那些可写的文件组备份得那么频繁。
除了需要指定READ_WRIT ......
先来一段代码:
WITH OrderedOrders AS
(SELECT *,
ROW_NUMBER() OVER (order by [id])as RowNumber --id是用来排序的列
from table_info ) --table_info是表名
SELECT *
from OrderedOrders
WHERE RowNumber between 50 and 60;
在windows server 2003, sql server 2005 CTP,P4 2.66GHZ,1GB 内存下测试,执行时 ......