T-SQL查询学习心得
相关子查询
引用了外部查询的列的子查询。逻辑上子查询会为外部查询的每一行计算一次。在物理上,它是一个动态的查询过程,子查询的值随变化而相应变化,有多种方法处理相关子查询。
EXISTS
EXISTS 的输入是一个子查询,一般会关联到外部查询,根据子查询是否返回行,返回false或者true,而且不返回unkkown;
exists与in的区别:
当输入列表包涵null时,in实际上会产生一个unkkown的逻辑结果。在筛选器中unkown与false是一样的处理,因而会产生与exists一样的执行计划。
not exists与not in的区别:
当子查询返回的列表中不包含null时,not in 与not exists的结果是一样的。
当子查询返回的列表中包含null时,not in 返回not ture 或者not unkown (= unknown) 而not exists返回 false或者ture 。
应用: missing value (最小缺失值)
假设dbo.T1的keycol是递增的现在,需要找出最小的缺失的记录。解决方案:
表表达式(Tale Exprressions)
派生表 一种从查询表达式派生出虚拟结果表的表表达式。
FROM (derived_table_query expression) AS derived_table_alias
规则:所有列必需有名称 且唯一 不准用 ORDER BY (除非有指定TOP)不能用作相关表。