摘要:
下文讲述我们平常使用子查询的注意事项,如下所示:
实验环境:sql server 2008 R2
子查询注意事项:
1.子查询为放在括号中
2.子查询中不能使用order by 关键字,
如果子查询为 top N 选择时,可以使用order by
3. 子查询可返回单行和多行
对等于 子查询必须使用返回单行子查询
4.依赖外部查询的子查询的效率问题
在子查询的编写上,需注意子查询的语句写法和连接及临时表进行性能对比,避免出现低效的sql脚本写法。
摘要:
下文讲述我们平常使用子查询的注意事项,如下所示:
实验环境:sql server 2008 R2
摘要:
下文讲述in和exists子查询的用法,如下所示:
实验环境:sql server 2008 R2
in 子查询一次只能对一列等值操作,
而exists子查询可以同时对主表的多列进行比对操作(like 大于 小于 等等比较运算符)
摘要:
在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]