暗黙ソート
・Group By や Distinct によりデータ抽出する場合に Order By を指定しなくても キー項目順でソートされる機能のこと。
---------------------------------------------------------
SQL文
SELECT Key1
,Key2
,[Name]
,SUM(Qty) AS Summary
FROM TABLE
WHERE Key1 >= 0 AND Key1 <= 99999999
GROUP BY Key1
,[Name]
--/*ORDER BY Key1 --省略しても実行結果が変わらない
-- ,Key2
-- ,Name*/
実行結果
---------------------------------------------------------
Key1 Key2 Name Summary
---------------------------------------------------------
1 1 test11 1
1 2 test12 4
2 1 test21 2
2 2 test22 3
3 1 test31 5
3 2 test32 2
---------------------------------------------------------
データベースのバージョンや種類により暗黙ソートがかかるかどうかは分かれています。
【暗黙ソートがかかる】
SQL Anywhere 8 → Where 区の条件に index scan がかかるようにすると暗黙ソートされる。
Oracle 9i
【暗黙ソートがかからない】
SQL Anywhere 11
Oracle10gR2
基本的に「order by区なしでは順序保証されない」と明記されていることが多いようです。
SQL Server では 「primary key」指定時に、「order by」なしでも順序保証しているようです。
ですが、基本的にOrderBy区を省略してSQL文を発行してはいけないと思います。
他の人のプログラムを修正したときのトラップのうちの一つですね。