oracle sql 语句执行顺序

如:select(选择示列),from,where,groupby,having,orderby;where里面条件and是先执行and前面还是后面条件还有or谢谢解答a... 如: select(选择示列) ,from ,where, group by ,having, order by;
where 里面条件 and 是先执行 and 前面 还是后面条件
还有 or
谢谢解答
and 执行顺序 跟数据库有关系没 如:oracle sql server mysql 他们的顺序是一样吗
展开
 我来答
wangzhiqing999
推荐于2017-12-16 · TA获得超过1.6万个赞
知道大有可为答主
回答量:7048
采纳率:100%
帮助的人:3318万
展开全部
where 里面条件 and 是先执行 and 前面 还是后面条件
这个其实和你写的顺序不大,这个先后顺序,是数据库来根据表/索引的信息来决定的。
例如一个 学生表, 有学号,姓名,性别
其中 学号是主键, 姓名上面有个索引。

找 名字叫 强妹 的女生:
SELECT * FROM 学生 WHERE 姓名='强妹' AND 性别 = '女'

SELECT * FROM 学生 WHERE 性别 = '女' AND 姓名='强妹'

数据库在处理 SQL 以前,都会去分析, 发现 查询的条件中, 姓名上面有索引,而性别上面没有。 那么优先根据 姓名的条件, 去检索,然后再去把通过索引得到的数据,去筛选 性别=女的
比如表里面共有10000行。姓名叫 '强妹' 的只有一个。
那么通过索引,一步就定位到那一行。
然后再判断这一行数据的 性别字段, 是不是 = '女'

假如 姓名/性别 都没有索引呢?
那就是执行 全表扫描。
不分先后。
什么意思呢?
就是假如 表里面10000行数据。
那就是从第一行开始, 查看 姓名与性别 条件。 满足的返回。 不满足的丢弃。 直到100行都处理完。
并不是一口气把所有的数据,都放到内存里面,然后 姓名判断一次, 去掉部分, 性别判断一次,再去掉部分。
追问
在没得索引 应该有关系吧
追答
如果没有索引的话, 我感觉上,条件写前写后,差别应该不会太大
下面是一个测试的例子,仅供参考

SQL> CREATE TABLE my_test AS SELECT * FROM all_objects;
表已创建。

对比分析的结果: [字数限制,删除了部分信息]

SELECT
COUNT(1)
FROM
my_test
WHERE
owner = 'TEST' AND object_name = 'MY_TEST'

call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 4 0.01 0.01 0 690 0 1

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 61 (TEST)

Rows Row Source Operation
------- ---------------------------------------------------
1 SORT AGGREGATE (cr=688 pr=0 pw=0 time=3790 us)
1 TABLE ACCESS FULL MY_TEST (cr=688 pr=0 pw=0 time=3749 us)

Rows Execution Plan
------- ---------------------------------------------------
0 SELECT STATEMENT MODE: ALL_ROWS
1 SORT (AGGREGATE)
1 TABLE ACCESS (FULL) OF 'MY_TEST' (TABLE)

SELECT
COUNT(1)
FROM
my_test
WHERE
object_name = 'MY_TEST' AND owner = 'TEST'

call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 4 0.00 0.00 0 689 0 1

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 61 (TEST)

Rows Row Source Operation
------- ---------------------------------------------------
1 SORT AGGREGATE (cr=688 pr=0 pw=0 time=6035 us)
1 TABLE ACCESS FULL MY_TEST (cr=688 pr=0 pw=0 time=5997 us)

Rows Execution Plan
------- ---------------------------------------------------
0 SELECT STATEMENT MODE: ALL_ROWS
1 SORT (AGGREGATE)
1 TABLE ACCESS (FULL) OF 'MY_TEST' (TABLE)
lxqdg123
2011-02-24
知道答主
回答量:7
采纳率:0%
帮助的人:0
展开全部
oracle 是先执行 and 后面的,是因为解析sql语句的编译器是从右往左编译
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xu54208782
2011-03-02
知道答主
回答量:1
采纳率:0%
帮助的人:0
展开全部
当然会有关系的,首先and越多条件越细,这样数据库检索的速度会更快 where 里面如果没有括号限制,则先执行优先级高的,and 、or
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
googlezhidaole
2011-02-24 · TA获得超过177个赞
知道答主
回答量:137
采纳率:0%
帮助的人:127万
展开全部
执行顺序和数据库有关,不同的数据库有不同的解析顺序。
ORACLE是从后往前解析的,也就是先解析and后面的。
但是在调优上,ORACLE版本是基于CBO规则的(比如10G)就可以不考虑and的先后顺序调优,如果是基于RBO规则(比如8i),调整ANd的先后顺序可以达到优化的效果。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
杂毛老道的幸福
2011-02-28
知道答主
回答量:18
采纳率:0%
帮助的人:5.7万
展开全部
SQL语句从语句结束的位置,从右向左执行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式