标签归档:子查询

mssql sqlserver 子查询注意事项说明


摘要:
下文讲述我们平常使用子查询的注意事项,如下所示:
实验环境:sql server 2008 R2


子查询注意事项:
1.子查询为放在括号中
2.子查询中不能使用order by 关键字,
如果子查询为 top N 选择时,可以使用order by
3. 子查询可返回单行和多行
对等于 子查询必须使用返回单行子查询
4.依赖外部查询的子查询的效率问题
在子查询的编写上,需注意子查询的语句写法和连接及临时表进行性能对比,避免出现低效的sql脚本写法。

mssql sqlserver in和exists子查询用法对比简介


摘要:
下文讲述in和exists子查询的用法,如下所示:
实验环境:sql server 2008 R2


下文讲述in和exists关键使用子查询。
在sqlserver中如果我们使用in、ANY、ALL生成的子查询,我们都可以转换为exists子查询进行使用,
但是exists子查询比in子查询具有更强大的功能。

in子查询使用简介

in子查询的语法格式:
select [列1],[列2]…
from tableName
where [列] in (子查询)

select [列1],[列2]…
from tableName
where [列] not in (子查询)



exists子查询使用简介

exists语法如下:
select [列1],[列2]…
from tableName
where exists (子查询)

select [列1],[列2]…
from tableName
where not exists (子查询)



exists子查询不返回任何数据库,如果子查询存在行数据,则返回true
否则返回false代表where条件不成立,
exists中子查询应该是一个包含搜索条件的查询,只需判断是否有行信息返回,
所有exists子查询中出现 select * select 1 select 0 select null 都是等效
————————–

in 子查询一次只能对一列等值操作,
而exists子查询可以同时对主表的多列进行比对操作(like 大于 小于 等等比较运算符)

相关阅读:
mssql sqlserver 数据表存在null导致not in 子查询异常记录

mssql sqlserver 标量子查询的另类实现方式


摘要:
在sql server中,标量子查询是一个非常低效的写法,因为外部查询每行数据都需对子查询进行一次扫描,子查询的写法会加大逻辑读取的次数,
大大的浪费了系统开销,
下文将讲述,采用连接的方式优化“标量子查询”。
实验环境:sql server 2008 R2


   create table [maomao365.com_main] 
    (billNo varchar(30),custName nvarchar(30))
    go
create table [maomao365.com_detail]
    (billNo varchar(30),
     name nvarchar(10),qty int )
go
insert into [maomao365.com_main]
 (billNo,custName)values
  ('a',N'猫猫小屋')
go
 insert into [maomao365.com_detail]
   (billNo,name,qty)
    values('a','玩具汽车',1),
    ('a','橡皮擦',2)
go
---例:使用子查询的方式返回明细表中的客户名
---子查询放入select关键字后
---子查询为一个“标量子查询”
select  a.*,
   (select custName from [maomao365.com_main] 
     where   [maomao365.com_main].billNo = a.billNo
    ) as custName 
 from    [maomao365.com_detail]   a
go
----联接改写子查询举例说明---------
select  a.*,b.custName    as custName 
 from    [maomao365.com_detail]   a 
 left join [maomao365.com_main]  b on a.billNo = b.billNo 
go

truncate table  [maomao365.com_main]
drop table       [maomao365.com_main]


truncate table  [maomao365.com_detail]
drop table       [maomao365.com_detail]