クエリの実行結果を取得する際に、
ORDER BYの最適化処理に関しては、
今回はORDER BY句の使用方法に関して説明していきます。
検証環境
今回は、
ORDER BYを使用してみる
ここから、
- カラム名
- ポジション
- 式
次に、
ORDER BY句にカラム名を指定して使用する
この方法は、
以下のクエリは、
SELECT zip_code FROM zipcode ORDER BY zip_code limit 10;
実行すると、
+----------+ | zip_code | +----------+ | 0010000 | | 0010010 | | 0010011 | | 0010012 | | 0010013 | | 0010014 | | 0010015 | | 0010016 | | 0010017 | | 0010018 | +----------+ 10 rows in set (0.30 sec)
結果から、
ORDER BYは複数のカラムを同時に指定することもできます。old_
SELECT old_zipcode, zip_code FROM zipcode ORDER BY old_zipcode DESC, zip_code limit 10;
結果は以下のようになります。
mysql> SELECT old_zipcode, zip_code FROM zipcode ORDER BY old_zipcode DESC, zip_code limit 10; +-------------+----------+ | old_zipcode | zip_code | +-------------+----------+ | 99985 | 9998521 | | 99985 | 9998522 | | 99985 | 9998523 | | 99985 | 9998524 | | 99985 | 9998525 | | 99985 | 9998531 | | 99984 | 9998421 | | 99984 | 9998422 | | 99984 | 9998423 | | 99984 | 9998431 | +-------------+----------+ 10 rows in set (0.17 sec)
old_
ORDER BY句にポジションを使用する
ORDER BY句には、
SELECT zip_code FROM zipcode ORDER BY 1 limit 10;
結果は以下のようになります。
+----------+ | zip_code | +----------+ | 0010000 | | 0010010 | | 0010011 | | 0010012 | | 0010013 | | 0010014 | | 0010015 | | 0010016 | | 0010017 | | 0010018 | +----------+ 10 rows in set (0.15 sec)
このようにカラムのポジションを指定することでもソートすることができます。このポジションを表す数字は、
複数のカラムで順序をソートする場合も、
SELECT old_zipcode, zip_code FROM zipcode ORDER BY 1 DESC, 2 limit 10;
上記の結果は以下のようになります。
mysql> SELECT old_zipcode, zip_code FROM zipcode ORDER BY 1 DESC, 2 limit 10; +-------------+----------+ | old_zipcode | zip_code | +-------------+----------+ | 99985 | 9998521 | | 99985 | 9998522 | | 99985 | 9998523 | | 99985 | 9998524 | | 99985 | 9998525 | | 99985 | 9998531 | | 99984 | 9998421 | | 99984 | 9998422 | | 99984 | 9998423 | | 99984 | 9998431 | +-------------+----------+ 10 rows in set (0.15 sec)
こちらORDER BY句にカラム名を指定したときのものと同じ結果になっていることがわかります。
このように、
カラムのポジションを間違えた場合や、
ORDER BY句に式を使用する
ORDER BY句には式を利用することもできます。zipcodeテーブルを例に考えると47都道府県のデータが入っていますが、
たとえば東京都を上に表示したい場合に、
SELECT prefecture FROM zipcode GROUP BY prefecture ORDER BY CASE prefecture WHEN '東京都' THEN 1 ELSE 2 END limit 1;
上記を実行すると以下のようになります。
mysql> SELECT prefecture FROM zipcode GROUP BY prefecture ORDER BY CASE prefecture WHEN '東京都' THEN 1 ELSE 2 END limit 1; +------------+ | prefecture | +------------+ | 東京都 | +------------+
このように、
まとめ
今回はちょっと特殊なORDER BY句の使用方法も含めて紹介しました。これらのORDER BY句の処理に関して詳しく正確に知りたい方は、
今回紹介したとおり、