0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SQL SELECTによる検索結果と絞り込み①

Posted at

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!

続く

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?