ORDER BY當有多行同名時如何作業?
我執行了一個查詢:
SELECT * FROM XYZ ORDER BY NAME;
在 Oracle 上,我得到以下結果:
| 姓名 | 用戶界面 | 所有者 ID |
|---|---|---|
| 測驗123 | QuuNWWzUJKmZPC | iotNmQNGJKmZPC |
| 測驗123 | 無效的 | 無效的 |
在 SQL Server 上,我得到以下結果
| 姓名 | 用戶界面 | 所有者 ID |
|---|---|---|
| 測驗123 | 無效的 | 無效的 |
| 測驗123 | QuuNWWzUJKmZPC | iotNmQNGJKmZPC |
為什么顯示不同的序列?在 Oracle 中,第 2 行NULL出現,而在 SQL Server 中,第 1 行出現。每個 DBMS 是否有任何默認行為?
有沒有辦法讓 SQL Server 的結果看起來像 Oracle 的?
uj5u.com熱心網友回復:
無序的結果集以不確定的順序交付,并且每次執行查詢時順序可能會發生變化。
如果您應用一個ORDER BY定義結果集總排序的子句,則該結果集將以確定性排序傳遞,并且輸出將與每次執行查詢相同(假設基礎資料集未更改)。
如果應用ORDER BY定義結果集的部分排序的子句,則結果集將部分排序且部分不確定。
例如,如果您有資料集:
| 姓名 | 價值 |
|---|---|
| 愛麗絲 | 1 |
| 綠柱石 | 2 |
| 綠柱石 | 3 |
| 愛麗絲 | 4 |
| 愛麗絲 | 5 |
| 綠柱石 | 6 |
你使用:
SELECT *
FROM table_name
ORDER BY name, value
然后定義結果集的總排序,使其最初按名稱排序,這定義了部分排序,然后,在具有相同名稱的每組行中,將按值排序,并且值是唯一的. 這輸出:
| 姓名 | 價值 |
|---|---|
| 愛麗絲 | 1 |
| 愛麗絲 | 4 |
| 愛麗絲 | 5 |
| 綠柱石 | 2 |
| 綠柱石 | 3 |
| 綠柱石 | 6 |
如果您不定義總排序:
SELECT *
FROM table_name
ORDER BY name
然后,行將按name但在具有相同名稱的行集中排序,各個行可以按任何順序排列,這是部分順序,可以輸出:
| 姓名 | 價值 |
|---|---|
| 愛麗絲 | 5 |
| 愛麗絲 | 4 |
| 愛麗絲 | 1 |
| 綠柱石 | 3 |
| 綠柱石 | 6 |
| 綠柱石 | 2 |
但同樣可以輸出:
| 姓名 | 價值 |
|---|---|
| 愛麗絲 | 5 |
| 愛麗絲 | 1 |
| 愛麗絲 | 4 |
| 綠柱石 | 6 |
| 綠柱石 | 2 |
| 綠柱石 | 3 |
有沒有辦法讓 SQL Server 的結果看起來像 Oracle 的?
不要應用偏序;將列添加到您的ORDER BY子句以使其成為總排序,然后 RDBMS 應以相同的順序輸出結果集。
SELECT *
FROM XYZ
ORDER BY
NAME ASC,
UID ASC NULLS LAST;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/532693.html
上一篇:計算某個時期的天數
下一篇:OracleDBA調度程式流
