WITH子句与子查询

    子查询可以简化sql语句的编写,但是,在数据库的优化方面,除了sql语句之外,还要尽量降低使用子查询的次数,比如:子查询取得系统中所有年龄或工资与‘Sun’相同的人员信息

            select * from T_Person

            where  FAge=(select  FAge from  T_Person  where  FName='Sun') OR FSalary=(select FSalary from T_Person where FName='Sun')

    上面的语句可以实现此功能,但是,子查询被调用了两次,比较消耗系统资源的操作,降低了系统的性能,一个子查询修改其他查询也得修改,造成修改不同步。

    上述问题的原因及解决方案:

          1.子查询只能在定义的时候使用,多次使用就必须多次定义。

          2.sql提供了with子句-----给子查询定义一个别名,这样可以通过别名来引用子查询,实现了一次定义多次使用。

     使用WITH子句改造上面的Sql语句:

      WITH person_Sun  AS

     {

      select * from T_Person where FName='Sun'

     }

      select  * from T_Person

     where FAge=person_Sun .FAge

     OR FSalary=person_Sun .FSalary

尤上可知:WITH子句的格式为:

    WITH  别名  AS(子查询)

定义好别名就可以在sql中通过别名来引用子查询

 

还可以在WITH语句中为子查询中的列定义别名,如下代码:

WITH person_Sun(F1,F2,F3) AS

 {

   SELECT FAge,FName,FSalsry from  T_Person where FName=‘Sun’

 }

SELECT * from T_Person

where FAg=person_Sun.F1

OR FSalsry=person_Sun.F3

 

  

 

posted @ 2016-07-31 13:35  石shi  阅读(5815)  评论(3编辑  收藏  举报