采用自下而上的顺序解析where子句
|
|--(根据这个原理)
|--1.表之间的连接必须写在其他where条件之前
|--2.那些可以过滤掉最大数量记录的条件必须写在where子句的末尾
引发效率问题举例
|
|--(低效)|---select … from emp e where
| | sal > 50000
| | and job = 'manager'
| | and 25 < (select count(*) from emp where mgr=e.empno);
|
|--(高效)|---select … from emp e where
| | 25 < (select count(*) from emp where mgr=e.empno)
| | and sal > 50000
| | and job = 'manager';
引发正确性问题举例
|
|\
| \______table:demo_________________
| | id id01 id02 id03 |
| | 1 55 55 md |
| | 2 66 abced eeeee |
| |__3_____300______200______rt_____|
|
|--报错语句|---update demo a set id01 = 100 where
| | a.id03 in ('md','rt')
| | and to_number(a.id02) < 100;
| --------------------------------------------------(to_number(a.id02),转换异常)
|
|--正确语句|---update demo a set id01 = 100 where
| | to_number(a.id02) < 100
| | and a.id03 in ('md','rt');