記事一覧

暗黙ソートについて | SQL

卓球用品通販ショップ

暗黙ソート

・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文を発行してはいけないと思います。
他の人のプログラムを修正したときのトラップのうちの一つですね。


コメント

コメントの投稿

広告

プロフィール

石河 純


著者名 :石河 純
自己紹介:素人上がりのIT技術者。趣味は卓球・車・ボウリング

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語・データベース】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
Oracle10g SQLServer2008R2 SQLAnywhere8/11/16
ActiveReport CrystalReport ReportNet(IBM)
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS IIS6/7 apache2

休みの日は卓球をやっています。
現在、卓球用品通販ショップは休業中です。