1. 程式人生 > >Oracle中的where部分的各個條件的執行順序(右->左)

Oracle中的where部分的各個條件的執行順序(右->左)

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做了什麼調整呢?

相關推薦

Oraclewhere部分各個條件執行順序->

SQL 條件欄位(Where 部分)的分析和執行順序[ 右——>左 ] 實驗一:證明了SQL的語法分析是從右到左的 下面的試驗在9i和10G都可以得到相同的結果: 第1條語句執行不會出錯,第2條語句會提示除數不能為零。 1.Select 'ok' From Dual Where 1 / 0 = 1 An

具體解釋Redis源代碼部分高速排序算法pqsort.c

|| rtc 寫法 聲明 排序算法 基礎 while 一個數 ng-   看標題。你可能會疑惑:咦?你這家夥。怎麽不解說完整的快排,僅僅講一部分快排……-。- 哎,冤枉。“部分快排”是算法的名字。實際上本文相當具體呢。本文差點兒與普通快排無異。看懂了

Ruby迴圈引用導致lighttpd的ruby fcgi指令碼執行失敗Mac OS

在另外一篇文章中我們說到了Ruby中的迴圈引用及檢查方法,迴圈引用在Ruby解析器看來只是一個警告,但是,這個告警會直接導致專案執行失敗。 我就遇到了這個問題,被這個問題阻塞了好幾天。下面詳細看這個案例。 我有一個執行在ruby中的lighttpd程式。 lighttpd中的配置為: fastcg

ORACLE一個字元佔多少位元組?中文儲存

今天在oracle 10g下測試了下varchar2與nvarchar2這兩種型別,網上有很多關於這兩種型別的區別的帖子,我還是自己測試了下。 varchar2(size type),size最大為4000,type可為char或者byte,預設是byte。 varchar2最多存放4000位元組的資料,不

資料庫的語句執行順序必看

Author:王勤為 1.問題:如下2條語句的具體執行順序是什麼呢,有什麼區別,哪條語句效率更高?    (1).select * from tb1 a join tb2 b on a.id=b.id              where a.time between t

ORACLE查詢語句的執行順及where部分條件執行順序測試 Oracle的一些查詢語句及其執行順序 Select 語句執行順序以及如何提高Oracle 基本查詢效率

Oracle中的一些查詢語句及其執行順序 原文地址:https://www.cnblogs.com/likeju/p/5039115.html 查詢條件:1)LIKE:模糊查詢,需要藉助兩個萬用字元,%:表示0到多個字元;_:標識單個字元。2)IN(list):用來取出符合列表範圍中的資料。3)NOT I

Oracle資料庫Where條件執行順序是從後往前的?

先看下面的一小段程式碼 ORACLE採用自下而上的順序解析WHERE子句,根據這個原理,表之間的連線必須寫在其他WHERE條件之前, 那些可以過濾掉最大數量記錄的條件必須寫在WHERE子句的末尾. 例如:   (低效)    SELECT … FROM EMP

jquery的AJAX各個事件執行順序

.ajax star ajaxstop jquery ajax let start 執行 .com jquery的AJAX中各個事件執行順序如下: 1.ajaxStart(全局事件) 2.beforeSend 3.ajaxSend(全局事件) 4.success 5.aja

oraclewhere條件後用in這樣子查詢後變慢

今日開發一個需求,其中由於需求變態,寫了一個挺複雜的sql,在本地測試環境看不出問題,但到了生產就變得非常慢(由於表資料量比較大),把sql粘貼出來執行了一下大概要42秒...我滴天 我寫的sql大概是這個樣子的(大概描繪下)TABLE_A表資料量大概200w,其中一些關鍵

oraclewhere子句和having子句的區別

max sum 來源 不同 數據 完成 單個 找到 scott 1.where 不能放在GROUP BY 後面2.HAVING 是跟GROUP BY 連在一起用的,放在GROUP BY 後面,此時的作用相當於WHERE3.WHERE 後面的條件中不能有聚集函數,比如SU

mysql left joinwhere和on條件的區別

行記錄 影響 知識 區別 where 相同 beijing 兩張 滿足 left join中關於where和on條件的幾個知識點: 1.多表left join是會生成一張臨時表,並返回給用戶 2.where條件是針對最後生成的這張臨時表進行過濾,過濾掉不符

jquery ajaxsuccess與complete的執行順序

err 執行 stop 我們 -- jquer bsp con ucc jquery ajax中success與complete的執行順序 jquery中各個事件執行順序如下: 1.ajaxStart(全局事件) 2.beforeSend 3.ajaxSend(全局事件)

main入口方法創建線程執行順序的問題

ati csdn () stat 輸出結果 輸出 實現 string tar 1 public static void main(String args[]) { 2 3 4 Thread t1=new Thre

MySQL SQL 多個Join on(表連線) 和Where間的執行順序nest loop join機制【轉】

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/qq_27529917/article/details/78447882 在mysql中,多表連線採用nest loop join,即迴圈巢狀連

淺談Oracleexists與in的執行效率問題

淺談Oracle中exists與in的執行效率問題 原創 Oracle 作者:迷倪小魏 時間:2017-11-29 13:43:30  5149  1 in 是把外表和內表作hash join,而exist

Java面試經常遇到的類執行順序

單類執行順序: 下面是我寫的一個demo: package com.bw; /** * @author brickworker * 關於類Color的描述:測試單個類的執行順序問題 */ public classColor {     //建構函式     public

linux利用shell指令碼條件執行linux命令

linux中利用shell指令碼條件執行命令 在linux環境中,我們總會有一些命令需要經常用,例如經常跳轉到某些目錄下或者執行某些命令,輸入一連串的命令是很煩的,此時我們可以預先寫一些指令碼然後根據我們的選擇自動執行命令,那豈不是完美,本指令碼就是為此而生的(以跳轉不

Java不同情況下的執行順序整理:

      初始化順序:父靜態變數、父靜態程式碼塊、子類靜態變數、子類靜態程式碼塊、父類非靜態變數、父類非靜態程式碼塊、父類構造器、子類非靜態變數、子類非靜態程式碼塊、子類建構函式。       執行順序:父類B靜態程式碼塊->子類A靜態程式碼塊->父類B非靜態

關於sqlor與and的執行順序

<select id="countAssetTab" resultType="Integer" parameterType="HashMap"> SELECT COUNT(1) FROM TTRD_ASSET_MANAGE_PLAN_EXTEND

Oracle部分查詢

1.查詢所有檢視    SELECT * FROM user_views; 2.查詢所有觸發器    SELECT * FROM DBA_SOURCE  WHERE  TYPE='TRIGGER'; 或者 SELECT * FROM USER_SOURCE  WHERE