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]