【sql】チートシート【ソート編】

スポンサーリンク

※このページにはプロモーションが含まれています。当サイトは各種アフィリエイトプログラムから一定の収益を得ています。

昇順・降順

 

-- 省略したときは昇順
ORDER BY COL1
-- 昇順を明示したい時はASCを付ける
ORDER BY COL1 ASC

降順
-- 降順はDESC
ORDER BY COL1 DESC

複数の列でソート
-- COL1、COL2の昇順
ORDER BY COL1, COL2

-- COL1降順、COL2昇順
ORDER BY COL1 DESC, COL2 ASC

部分文字列でソート

-- 2文字目以降でソート
ORDER BY SUBSTR(COL1,2) 

-- 最後の二文字でソート
ORDER BY SUBSTR(COL1,LENGTH(COL1) -1) 

置き換え文字でソート

ORDER BY REPLACE(COL1, 'AAA', 'BBB' )

NULLのソート

-- Oracleのみ使える
-- NULLが先頭に来る
ORDER BY COL1 NULLS FIRST

-- NULLが最後に来る
ORDER BY COL1 NULLS LAST

ソートの分岐

-- COL1がAAAのデータはCOL2
-- それ以外はCOL3でソート
ORDER BY CASE WHEN COL1 = 'AAA' THEN COL2 ELSE COL3 END

性能について

  • ソートは性能への影響が大きい
  • レスポンスが悪いSQLはソートを外すだけで改善する場合もある
  • システム稼働時はそうでもないが、データが増えていくと性能劣化する場合がある
  • 「ソートした結果から上位〇件を取得」のような場合、全体のソートが走っている
  • なので件数を絞っていない場合と処理時間はさほど変わらない
  • SUBSTRやREPLACEを使うとソート時にインデックスが効かなくなる
  • 副問い合わせなどで不要なソートは避ける
  • ソートしてから結合したほうが早い場合もあるが稀にしかない

スポンサーリンク

sql