贝网博客

我的分类
流水记事
源码下载
Asp.net
其它
数据库
Javascript
.Net技术
我的相册
友情链接
博客园
CSDN博客
Start0
最新回复
嗷嗷的cCC
fasdfasdf
[:..
lz这个东西好厉害,我..
哈哈,好照片
不错,以前一直用黄色..
终于找到支持ff的修正..
终于找到支持ff的修正..
新鲜性
看看,试试,好不好使。
分类 =》数据库
Sql Server 2005学习笔记
发表于:2011-04-28 10:25:59
更新于:2011-11-18 14:08:08

1、Select后面的列指定的别名,可以在Order by中使用,而不能在where中使用,如:
Select id as newName from table where id<100 order by newName

2、在编程时交换2个变量的值,需要中间变量:int tmp = a1; a1 = a2; a2=tmp;
但是在sql中不需要,下面这个sql直接可以运行以交换a1和a2两列的值:Update table1 set a1 = a2, a2 = a1
这个sql也可以给a1加上最大的a1值,而不用担心max(a1)会随着操作变化而变化Update table1 set a1 = a1 + (Select max(a1) from table1)
也就是说,我们要把这些操作理解为瞬间同时发生

3、WITH TIES关键字:只有sql同时指定了TOP和ORDER BY关键字时才能使用:
SELECT TOP 10 * FROM tb1 ORDER BY id -- 只返回前10条记录
SELECT TOP 10 WITH TIES * FROM tb1 ORDER BY id -- 先返回前10条记录,再从剩余记录中找到id等于第10条记录的那些记录返回(最终返回结果可能不止10条)

4、Outer join被Sqlserver当成Inner join的情况
对于Outer join的sql,比如Left outer join,会把左边表未匹配到的右表字段值作为null输出,如果sql对这些字段的null进行了过滤,那么Sqlserver的执行计划,会把它优化为Inner join处理,如下面的2条sql生成的执行计划完全一致:
select * from a left join b on a.id = b.id where b.id > 10;  -- b.id>10导致b.id为null的记录都出不来,所以会被优化为inne
select * from a inner join b on a.id = b.id where b.id > 10;

5、集合操作
UNION ALL:返回前后输入的所有行,包括重复行
UNION:返回前后输入的所有行,重复行只输出一行(类似于加了DISTINCT)
EXCEPT:从前面返回的行,剔除后面的行,再输出
INTERSECT:返回前后两个输入中都出现过的不重复行

发表评论
名称(*):
邮箱:
正文:

©2008 Beinet.cn 版权所有