【SQL】INSERTでソート(sort)・並び替えは無効

このページでは、ORACLEデータベースのSQLで、INSERT文を実行したときにソート(sort)・並び替えが無効になる理由と対処方法を解説しています。

INSERT文のサンプルは↓で多数紹介していますので参考にしてください。
>>【SQL】INSERT文の書き方:サンプル多数あり

INSERTでソート(sort)・並び替えは無効とは

INSERTを実行するとき、レコードをソート(sort)・並び替えしても無効になります。

次のSQLのように、COL1列の値でソートしてデータを登録します。
このとき、COL1列の値が「1」、「2」、「3」という値のレコードをソートして登録します。

INSERT INTO tab1 SELECT * FROM tab2 ORDER BY col1;

次のSQLを実行し、TAB1テーブルのレコードをSELECTします。

SELECT COL1 FROM tab1;

SELECTした結果は、COL1列の値が2,3,1の順で並ぶこともあれば3,2,1の場合や1,2,3とソートした順に並ぶこともあります。

つまり、INSERTするときにソートした順序とSELECTした結果の順序は必ず一致しないということです。

データベース上は、データを格納した順というものを持ちませんし、SELECTするときの順序も定められていないためです。

あるときは、たまたまINSERTした順で表示されることもあれば、全く関係のない順番で並ぶこともよくあります。

INSERTのときに無駄なソートがあると、SQLはその分遅くなるので、不要な場合は削除することをおすすめします。

INSERTのソート・並び替えた順で取得する方法

INSERTするときにソート(sort)・並び替えの順序で、レコードを取得するには、SELECT文でORDER BY句を使います。

先ほどのSQLにORDER BY句を追加しました。
ORDER BY句の後ろには、並び替えしたい列を追加します。

SELECT col1 FROM tab1 ORDER BY col1;

取得結果はCOL1列の値が1,2,3となります。

SELECT文にORDER BY句を追加することで、レコードの取得結果を指定した順序で並び替えることが出来ます。

ORDER BY句については、「【SQL】昇順・降順・複数条件でソートする方法」で詳しく解説していますのでぜひ参考にしてください。

まとめ

INSERT文でソート(sort)・並び替えをしても、無効になります。SELECTした結果に順序の定めはありません。

SELECTした結果を順序通りにするためには、ORDER BY句で並び順を指定します。

この他にも、INSERT文の様々な書き方を解説しております。
詳しくは「【SQL】INSERT文の書き方:サンプル多数あり」で解説しているのでぜひ参考にしてください。