【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文の書き方:サンプル多数あり」で解説しているのでぜひ参考にしてください。