萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> Mysql數據庫union和order by優先級

Mysql數據庫union和order by優先級

下面我們一起來看看在使用Mysql數據庫union和order by優先級一些問題與解決方法,希望本文章對大家會有所幫助哦。

在Mysql的參考手冊中,並沒有對union和order by的優先級進行說明

它建議的方法是,對SQL語句加上(),這樣能使SQL的語義更清晰

例如,需要對union後的結果進行order by,則:

(SELECT a FROM tbl_name WHERE a=10 AND B=1)

UNION

(SELECT a FROM tbl_name WHERE a=11 AND B=2)

ORDER BY a LIMIT 10;

如果,需要對單個SQL語句進行order by,則應把order by子句放入圓括號中,如下:

(SELECT a FROM tbl_name WHERE a=10 AND B=1 ORDER BY a LIMIT 10)

UNION

(SELECT a FROM tbl_name WHERE a=11 AND B=2 ORDER BY a LIMIT 10);

另外注意:圓括號中用於單個SQL語句的ORDER BY只有當與LIMIT結合後,才起作用。否則,ORDER BY被優化去除。

我在innodb引擎的2個表上測試了沒有加(),進行union和order by的操作,如下:

SELECT a FROM tbl_name WHERE a=10 AND B=1

UNION

SELECT a FROM tbl_name WHERE a=11 AND B=2

ORDER BY a LIMIT 10;

發現,它默認的結果也是先進行union,然後再order by,和第一種情況執行結果相同

不過,為了邏輯清晰,最好還是加上對應的()比較好

另外:Mysql中union可以有union,union distinct,union all這3中形式

union和union distinct會對union後的結果進行排重,保證所有返回的行都是唯一的

union all則會返回所有SELECT語句中得到所有匹配的行

copyright © 萬盛學電腦網 all rights reserved