sqlserver 查詢中使用Union或Union All

?

   在 程序人生網站上 看到了 這篇文章 就收藏了 哈 http://www.ourcodelife.com/article-415-1.html?

?  首先,在程序人生網站上,需要負責任的指出的是在SQL Server查詢中使用Union或Union All后Order by排序無效,我不確認是不是微軟的bug,不過這里卻是我實際編程工作的經驗,但愿大家看到這篇文章后,不要再走彎路,不要再為做一個快樂的程序員而苦惱。

?

下面以可操作性的代碼說明這個bug,權且先認為是bug吧。

?

比如有一張學生表student 和教師表 teacher , 我們要查詢所有的教師學生的姓名和年齡,教師排前面,學生排后面,分別按字母順序,則可能會想寫一個這樣的Sql語句: (注意,這個語句只是為了說明問題,這并不是一個正確的語句)

SELECT Name,Age FROM Teacher ORDER BY Name?
UNION?
SELECT Name,Age FROM Student ORDER BY Name

實際上,MSSQL并不允許我們寫這樣的語句,因此將會報錯 UNION 附近有語法錯誤.

其實我們只需要繞開,讓ORDER BY 和UNION 不在同一層, 讓ORDER 在子查詢內而 UNION 在外面(因為我們要先教師學生分開,然后再名字) 這樣得到了另外一個Sql語句:(注意,這依然不是一個正確的語句)

SELECT * FROM (SELECT Name,Age FROM Teacher ORDER BY Name) A?
UNION?
SELECT * FROM (SELECT Name,Age FROM Student ORDER BY Name) B

這句Sql語句依然無法通過,因為這又觸犯了MSSQL的另外一條語法規定,在子查詢中, 如果不存在TOP語句則ORDER BY子句無效. 但是我們需要的是全部結果,并不需要TOP的功能. 顯然, TOP 100% 是個解決的方法. 因為100%就是全部了.

?

最后,這條蹩腳的Sql語句出爐了:

SELECT * FROM (SELECT TOP 100 PERCENT Name,Age FROM Teacher ORDER BY Name) A?
UNION?
SELECT * FROM (SELECTTOP 100 PERCENT Name,Age FROM Student ORDER BY Name) B

這就是最后的結果, 為了讓ORDER BY 和UNION同時發揮作用,繞了2個彎.

如果想Union前面和后面的集合分開,使用Union all,但要去除重復的記錄。

?

但是在使用Union All的時候需要特別注意,在使用Union All的時候,上面講到的規則,也就是Order by 仍然會失效。

讓程序員朋友們又苦惱了吧,下面的解決方法就是重點了。

Select TOP 99.999999 PERCENT Name,Age FROM Teacher ORDER BY Name

在使用了99.999999這個特殊數字后,該問題最終得到解決 ,真是神奇啊。

?

另外補充一點:UNION和UNION ALL的區別 ,UNION在進行表鏈接后會篩選掉重復的記錄,所以在表鏈接后會對所產生的結果集進行排序運算,刪除重復的記錄再返回結果。(應該就是這種算法讓程序員自己編碼的Order by排序失效了)。

UNION ALL只是簡單的將兩個結果集進行鏈接返回,所以如果我們只是為了鏈接兩個結果集,只要用UNION ALL就可以了,并且從效率上來說UNION ALL也比UNION快,因為它不需要進行篩選排重的。

轉載于:https://www.cnblogs.com/dragon-L/archive/2013/04/22/3035937.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259822.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259822.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259822.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

word標題大綱級別_快速按標題層級把Word轉Excel—附詳細操作步驟

如何快速把層級分明的word文檔轉換成橫向從屬結構的excel表格一、問題描述文檔如下圖所示。文檔一共三個層次,大綱級別分別是1、2、3級,左則是其文檔結構圖,可以看出文檔層級分明。最終要將文檔轉換成如下橫向從屬結構的表格。一個層次的內容…

生成GUID唯一值的方法匯總(dotnet/javascript/sqlserver)

一、在 .NET 中生成1、直接用.NET Framework 提供的 Guid() 函數,此種方法使用非常廣泛。GUID(全局統一標識符)是指在一臺機器上生成的數字,它保證對在同一時空中的任何兩臺計算機都不會生成重復的 GUID 值(即保證所有…

Thread.CurrentPrincipal HttpContext.Current.User

據說要這樣寫才穩妥 // This principal will flow throughout the request.VoyagerPrincipal principal new VoyagerPrincipal(yada, yada, yada); // Attach the new principal object to the current HttpContext objectHttpContext.Current.User principal; // Make sure …

江森系統設置服務器日期,江森自控METASYS操作手冊

? Alarm? Trend顯示窗口中的按鈕編號 A B按鈕說明允許您編輯所示項目的屬性。選擇Save按鈕可保存修改。 顯示這個窗口中以前顯示過的內容。每個窗口最多可顯示5個歷史項目。顯示已保存的下一個窗口中的內容。鎖定選中的顯示窗口(防止被其他拖拽來的項目覆蓋)。您可調整被鎖定…

servlet中getWriter和getOutputStream的區別

getWriter();getOutputStream();區別:1、getWriter()用于向客戶機回送字符數據2、getOutputStream()返回的對象,可以回送字符數據,也可以回送字節數據(二進制數據)如何選擇:若果我們回送字符數據&#xff0…

execve系統調用_張凱捷—系統調用分析(3) (基于最新Linux5.0版本系統調用日志收集系統)...

在上一篇文章《系統調用分析(2)》中介紹和分析了32位和64位的快速系統調用指令——sysenter/sysexit和syscall/sysret,以及內核對快速系統調用部分的相關代碼,并追蹤了一個用戶態下的系統調用程序運行過程。本篇中將基于最新的Linux-5.0內核,…

批量下載小說網站上的小說(python爬蟲)

隨便說點什么 因為在學python,所有自然而然的就掉進了爬蟲這個坑里,好吧,主要是因為我覺得爬蟲比較酷,才入坑的。 想想看,你可以批量自動的采集互聯網上海量的資料數據,是多么令人激動啊! 所以我…

Playground

題意 :求被兩點分割的凸包面積的較小值 題意已經給出順時針啦 就是求以某一個點 和其他所有相鄰點組成三角形的面積,然后sum存和求兩點的時候就求出那兩點的之間所有三角形的和再減掉0點和那兩點的面積一減就是其中一個三角形的面積。轉載于:https://…

華為歐拉系統服務器開接口,華為操作系統 euleros

華為操作系統 euleros 內容精選換一換Atlas 900 AI集群安裝上架、服務器基礎參數配置、安裝操作系統等操作,請根據集群配置參見對應的手冊:《Atlas 900 PoD 用戶指南 (型號9000, 直流)》《Atlas 900 PoD 用戶指南 (型號9000, 交流)》《Atlas 900 計算節點…

對勾函數_對勾函數?2020福建省中考壓軸題分析

訓練營機密視頻大公開歡迎轉發、分享傳播知識,傳播力量!福建也是全省統一考選擇題:這題考的是二次函數的性質,先求出對稱軸就好了填空題:這題看似有反比例,確實會用到反比例函數的對稱性。但其實重點是考察…

這個textview有問題嗎 為什么一使用就崩潰

問題描述<TextViewandroid:id"id/textview1"android:layout_columnSpan"4"android:layout_gravity"fill"android:gravity"right"android:text"0" />public class MainActivity extends Activity {Button one;TextView…

通過Ajax解析和jQuery寫了一個小小的導航條

最近在用ajax和jquery做開發&#xff0c;所以閑來無事寫了些小導航條&#xff0c;通過ajax解析XML文件動態的創建WEB網站的導航條。 <link href"css/style.css" rel"stylesheet" type"text/css" /><script src"js/jquery-1.8.2.mi…

一次生產事故的優化經歷

在一次正常的活動促銷之后&#xff0c;客服開始陸續反饋有用戶反應在搶標的時候打不開網頁或者APP&#xff0c;在打開的時候標的就已經被搶光了&#xff0c;剛開始沒有特別的上心&#xff0c;覺得搶標不就是這樣嗎&#xff0c;搶小米手機的時候也不就這樣嗎&#xff1f;隨著活動…

mysql over rank_SQL學習筆記 - 窗口函數OVER

Window Function 窗口函數Perform calculations on an already generated result set ( a window).&#xff08;在已生成的結果集上執行計算&#xff09;Aggregate calculation(without having to group your data)&#xff08;允許使用聚合函數時不用進行GROUP BY分組&#xf…

用boost庫實現traceroute小工具

參考了網上幾個 traceroute的實現版本&#xff0c;存在一些缺陷&#xff0c;比如沒有做超時處理&#xff0c;或者只能在window下使用。自己用boost實現了一個traceroute小工具&#xff0c;在window下正常運行。 先來看下面實現的原理。這些說明來自維基百科。traceroute&#x…

Win系統利用本地安全策略全面禁止360等軟件的安裝與運行-1

這個理論應該也可以用在域對下設域用戶上.各位不知道有沒有這種經歷&#xff0c;機子讓別人玩了一上午&#xff0c;回來發現&#xff0c;自己干干凈凈的系統多了一堆某某安全助手&#xff0c;某某殺毒&#xff0c;某某手機助手等等&#xff0c;最可恨的還是不知一系列的&#x…

php配置文件php.ini的詳細解析(續)

file_uploads On //是否允許文件上傳 upload_tmp_dir "d:/wamp/tmp" //上傳文件的臨時目錄&#xff0c;默認為“/wamp/tm…

服務器iis7.5 配置文件,使用注冊表項 - Internet Information Services | Microsoft Docs

Internet 信息服務使用的注冊表項的說明07/21/2020本文內容本文介紹了 Microsoft Internet Information Services (IIS) 在 Windows 上使用的注冊表項。原始產品版本&#xff1a; Internet information Services原始 KB 數&#xff1a; 954864簡介本文還包含有關如何修改注…

access考試素材_NCRE考試當天常見問題處理辦法及各科目注意事項大匯總

溫馨提醒為了方便大家在21-22號討論考試抽中的題目&#xff0c;請自覺加入QQ群&#xff1a;776167039考試當天常見問題及處理辦法大匯總問題一&#xff1a;考試當天忘記帶身份證和準考證原因&#xff1a;這種情況&#xff0c;要么是忘了&#xff0c;要么真沒有提前領到準考證。…

騰訊開源手游熱更新方案,Unity3D下的Lua編程

寫在前面\\xLua是Unity3D下Lua編程解決方案&#xff0c;自2016年初推廣以來&#xff0c;已經應用于十多款騰訊自研游戲&#xff0c;因其良好性能、易用性、擴展性而廣受好評。現在&#xff0c;騰訊已經將xLua開源到GitHub。\\2016年12月末&#xff0c;xLua剛剛實現新的突破&…