SQLのSELECT文の時に使える検索の絞り込みについての簡単なまとめ(前半)となります。
今回取り上げるワード
キーワード | 詳細 |
---|---|
DISTINCT | 重複を除外 |
ORDER BY 列名 (ASC or DESC) | 順序の並び替え ASCで昇順 DESCで降順 |
OFFSET- FETCH | 件数を限定して取得 |
DISTINCT
重複を除外することのできるキーワードなので、
SELECT DISTINCT 列名1
FROM テーブル名
SELECT DISTINCT 列名と指定する事でその列の値で重複するものを除外して結果を検出してくれる。
ORDER BY
列名 ASC or DESCで順番を指定して並び替え。
メッセージの投稿順や売れ筋ランキングなどの並び替えの際に使用することが多い。
ひとつ目の絞り込みで同じ値がある場合、その中からさらに順番を並び替えすることができる。
その場合は
SELECT *
FROM テーブル名
ORDER BY 列名1 DESC, 列名2 DESC
のように「,」で区切ればOK。
列名は列番号(SELECTした列に対し順に割り当てた番号)にすることもできるが、
この場合*で全選択せずに列名で指定すると指定した列名の順序に気をつけないとSELECT文の選択列リストを修正した時に結果が変わってしまうので注意が必要。
基本的には列名を指定した方が安全である。
OFFSET - FETCH
必要に応じて並び替えした結果を限定したい時はOFFSETとFETCHで行うことができる。
SELECT 列名A, 列名B FROM テーブル名
<!-- まずは並び替え -->
ORDER BY 列名B DESC
<!-- 結果の上から何番目から取得するかを指定 -->
OFFSET 0 ROWS
<!-- OFFSETの結果から何番目までを取得するかを指定 -->
FETCH NEXT 5 ROWS ONLY
この様に書けば5番目までのランキングを取得できる。
ランキングでなくても特定の番数のみ取得したい場合はこの様に書く。↓
SELECT 列名A, 列名B FROM テーブル名
<!-- まずは並び替え -->
ORDER BY 列名B DESC
<!-- 結果の上から何番目から取得するかを指定 -->
OFFSET 4 ROWS
<!-- OFFSETの結果から何番目までを取得するかを指定 -->
FETCH NEXT 1 ROWS ONLY
これで5番目のみ取得できる。
OFFSET - FETCH に対応していないDBMSもあるようで、その場合に取得方法には別の方法もある。
私の使っているPostgreSQLの場合
SELECT 列名1, 列名2 FROM テーブル名
ORDER BY 列名2 DESC LIMIT 5
とすればOK!
続く