2017-10-17 104 views
0

集合操作是否具有規定的執行順序(例如,第一個UNION,然後是MINUS,然後是INTERSECT),還是按照它們的腳本和評估順序執行?'設置操作'是否具有規定的執行順序,還是按照評估順序執行?

例如,假設我想要有一個customer_ids的開始隊列,然後刪除一些,然後再添加一些。設置的運算符是否會在此執行爲Qry 1 minus Qry 2 union Qry 3?

select cust_id from tbl A 
MINUS 
select cust_id from tbl B where field = 'abc' 
UNION 
select cust_id from tbl A where field = 'xyz' 

回答

1

所有集合運算符具有相同的優先級。 documentation表示

如果一個SQL語句包含多個集合運算符,那麼Oracle數據庫會從左到右評估它們,除非括號顯式指定另一個順序。

0

由於您沒有指定RDBMS,我將添加SQL Server以確保完整性。 This是操作順序:

  1. 圓括號中的表達式

  2. 相交操作者

  3. 除非(甲骨文MINUS的等同物)和UNION評價從左至右基於它們的位置表達式

0

那麼,不完全是「執行順序」。 SQL查詢代表結果集。 它們既不指定正在運行的確切操作,也不指定執行順序。

也就是說,設置操作有一個優先順序。因此,您的查詢將被解釋爲:

(select cust_id from tbl A 
MINUS 
select cust_id from tbl B where field = 'abc' 
) 
UNION 
select cust_id from tbl A where field = 'xyz' 

這是由 - 或更準確地說,從ANSI規則中設定的操作指定的。

僅僅因爲查詢是解釋這種方式並不意味着它是這樣執行