问题一: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 首先判断哪个条件,是从一到四,还是从四到一问题三:类似以上问题可以在哪本书中得到解答。
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 首先判断哪个条件,是从一到四,还是从四到一问题三:类似以上问题可以在哪本书中得到解答。
问题二,如果没有索引可用的情况下,and条件是从右到左
1.根据where子句选择行
2.根据group by子句组合行
3.为每个组计算分组函数结果
4.再根据having子句选择和排除组
5.根据order by 子句中的分组函数的结果对组进行排序. order by 子句必须使用分组函数或者在group by指定的列 问题三:---------------------------google 是最好的书
靠别人还不如靠google! (这是我同事说的一句经典的话)
嘿嘿!~~
问题二, 一般而言,执行SQL都是以CBO的方式优化的,而且基本不可能说所有表都没有索引,这时数据库会基于代价选择执行路径,而不是以你写代码的顺序,所以这时where语句,from表名这两个部分的顺序对性能没有太大关系。但如果你以RBO的方式执行,那就有一个驱动表的问题,默认是from 中最后面的那个表做为驱动表,由右向左关联,这是表名的顺序就很重要,而where语句顺序我认为不是主要的。