程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql數據庫union和order by優先級

Mysql數據庫union和order by優先級

編輯:MySQL綜合教程

下面我們一起來看看在使用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語句中得到所有匹配的行

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved