25. WITH子句

     子查询可以简化SQL语句的编写,不过如果使用不当的话子查询会降低系统性能,为了避免子查询带来的性能问题,除了需要优化SQL语句之外还需要尽量降低使用子查询的次数。

     比如下面的子查询用来取得系统中所有年龄或者工资与Tom相同的人员

SELECT * FROM T_Person
WHERE
 FAge=(SELECT FAge FROM T_Person WHERE FName='TOM')  OR
 FSalary=(SELECT FSalary FROM T_Person WHERE FName='TOM') 

     SQL提供了WITH子句用于为子查询定义一个别名,这样就可以通过这个别名来引用这个子查询了,也就是实现“一次定义多次使用”。使用WITH子句来改造上面的SQL语句: 

WITH person_tom AS 
( 
  SELECT * FROM T_Person 
  WHERE FName='TOM' 
) 
SELECT * FROM T_Person 
WHERE FAge=person_tom.FAge OR FSalary=person_tom.FSalary 

     可以看到WITH子句的格式为: WITH 别名 AS (子查询)。还可以在WITH语句中为子查询中的列定义别名,定义的方式就是在子查询别名后列出参数名列表

WITH person_tom(F1,F2,F3) AS 
( 
  SELECT FAge,FName,FSalary FROM T_Person 
  WHERE FName='TOM' 
) 
SELECT * FROM T_Person 
WHERE FAge=person_tom.F1 OR FSalary=person_tom.F3
posted on 2012-10-23 17:01  凡一二三  阅读(304)  评论(0编辑  收藏  举报