SQL server的一些注意事项

  这篇博客主要用来说一下,SQL server数据库的一些注意事项,会持续更新。这些注意事项都是我自己平时编写SQL server 数据库时经常遇到的。

1、子查询

-- 子查询不需要临时表别名
select * 
from student 
where student.sid in 
(select * from teacher);
-- 而这种from后面接表的,要临时表别名
select * from 
(select * from student) temp_student;


2、分组查询

-- 分组查询的where条件放在group by前面,having 条件放在group by后面
-- 分组后还要按照一定的条件进行筛选,则需要使用having子句
select sNo 
from student 
where dept='计算机' 
group by sNO
having count(sNo)>2;

3、exists与不用exists的效率

在某些查询时,如果要用到in,尽量用exists来替代,因为exists的效率比in的效率更好。

4、根据不同条件更新值

  很多时候,我们经常会遇到某些情况,要根据某个字段的不同值更新字段,这时候就可以用case语句了。

格式

case <表达式>
    when <表达式> then <表达式>
    ...
    when <表达式> then <表达式>
    [else <表达式>]
end
-- 或
case 
    when <表达式> then <表达式>
    ...
    when <表达式> then <表达式>
    [else 表达式]
end

例子

use teach 
go
-- 定义显式事务,为了方便回滚
begin transaction update_table
update TableTest 
set name=
    case id
     when '1' then 'wangwu'
     when '2' then 'zhangsan'
     when '3'  then 'lisi'
     else id
    end
commit transaction update_table
rollback transaction update_table

执行前
这里写图片描述
执行后
这里写图片描述

5、选择不存在记录的查询语句,很容易产生笛卡尔乘积

猜你喜欢

转载自blog.csdn.net/weixin_37610397/article/details/80872331