Oracle中的where部分的各个条件的执行顺序(右->左)

原网址:http://blog.sina.com.cn/s/blog_7e4ac8b50100vcwv.html

SQL 条件字段(Where 部分)的分析和执行顺序[ 右——>左 ]
实验一:证明了SQL的语法分析是从右到左的
下面的试验在9i和10G都可以得到相同的结果: 第1条语句执行不会出错,第2条语句会提示除数不能为零。
1.Select 'ok' From Dual Where 1 / 0 = 1 And 1 = 2;
2.Select 'ok' From Dual Where 1 = 2 And 1 / 0 = 1;
证明了SQL的语法分析是从右到左的。


实验二:证明了SQL条件的执行是从右到左的
drop table temp;
create table temp( t1 varchar2(10),t2 varchar2(10));
insert into temp values('zm','abcde');
insert into temp values('sz','1');
insert into temp values('sz','2');
commit;
1. select * from temp where to_number(t2)>1 and t1='sz';
2. select * from temp where t1='sz' and to_number(t2)>1;
在9i上执行, 第1条语句执行不会出错,第2条语句会提示“无效的数字”
在10G上执行,两条语句都不会出错。
说明:9i上,SQL条件的执行确实是从右到左的,但是10G做了什么调整呢?


还有几个网址:

http://blog.csdn.net/sforiz/article/details/5345359

要提高SQL查询效率where语句条件的先后次序应如何写

SQL中的where的条件的执行顺序
http://bbs.csdn.net/topics/350234598
Oracle 执行计划(Explain Plan) 说明
http://blog.chinaunix.net/uid-21187846-id-3022916.html

未完待续。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mysql> CREATE TABLE users ( -> id INT AUTO_INCREMENT PRIMARY KEY, -> username VARCHAR(255) NOT NULL, -> password VARCHAR(255) NOT NULL -> ); Query OK, 0 rows affected (0.06 sec) mysql> Welcome to the MySQL monitor. Commands end with ; or \g. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Welcom e to the MySQL monitor. Commands end with' at line 1 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'or' at line 1 -> Your MySQL connection id is 54623110 -> Server version: 8.0.32 Source distribution -> Copyright (c) 2000, 2022, Oracle and/or its affiliates. -> Oracle is a registered trademark of Oracle Corporation and/or its -> affiliates. Other names may be trademarks of their respective -> owners. -> Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. -> mysql> CREATE TABLE users ( -> -> id INT AUTO_INCREMENT PRIMARY KEY, -> -> username VARCHAR(255) NOT NULL, -> -> password VARCHAR(255) NOT NULL -> -> ); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '. Your MySQL connection id is 54623110 Server version: 8.0.32 Source distributio' at line 1 mysql> Query OK, 0 rows affected (0.06 sec) -> mysql> -> SHOW TABLES; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Query OK, 0 rows affected (0.06 sec) mysql> SHOW TABLES' at line 1 mysql>
07-14

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值