问题一:oracle 中表的别名的作用范围有多大?例如:CREATE TABLE test_table AS
SELECT t0.last_name, t0.first_name FROM table_0 t0
UNION ALL 
SELECT t0.last_name, t0.first_name FROM table_1 t0此处表table_0和表table_1的别名都起成了t0。这样的语句可以正常执行,但是统计的数据会正确吗?数据库会不会混淆?问题二:oracle 中 where 子句中有关 and 的执行顺序是怎样的?例如:SELECT * FROM test_table
WHERE 条件一 AND 条件二 AND 条件三 AND 条件四oracle 首先判断哪个条件,是从一到四,还是从四到一问题三:类似以上问题可以在哪本书中得到解答。

解决方案 »

  1.   

    问题一不会出错
    问题二,如果没有索引可用的情况下,and条件是从右到左
      

  2.   

    问题一:---------------------------不同情况下的问题结果不一样问题二:---------------------------where一般是自上而下执行顺序。而oracle中查询语句执行顺序是:
    1.根据where子句选择行
    2.根据group by子句组合行
    3.为每个组计算分组函数结果
    4.再根据having子句选择和排除组
    5.根据order by 子句中的分组函数的结果对组进行排序. order by 子句必须使用分组函数或者在group by指定的列 问题三:---------------------------google 是最好的书
    靠别人还不如靠google! (这是我同事说的一句经典的话)
    嘿嘿!~~
      

  3.   

    问题一,不会出错的
    问题二, 一般而言,执行SQL都是以CBO的方式优化的,而且基本不可能说所有表都没有索引,这时数据库会基于代价选择执行路径,而不是以你写代码的顺序,所以这时where语句,from表名这两个部分的顺序对性能没有太大关系。但如果你以RBO的方式执行,那就有一个驱动表的问题,默认是from 中最后面的那个表做为驱动表,由右向左关联,这是表名的顺序就很重要,而where语句顺序我认为不是主要的。
      

  4.   

    1, 别名在当前完整的语句中生效, 两个语句中相同的别名不会引起误会. 2. 具体根据系统参数optimize_mode参数不同可能会不同, 看执行计划最明确. oracle10g中已经放弃了基于规则的优化器, 使用cbo, 但是仍然允许通过hints来实行rule规则. 3. 在plsql手册中和oracle性能调整手册中有.