【SQL】SELECT文にだけ使える検索に関する修飾
検索の命令文であるSELECT文でしか利用できない抽出されたものをさらに加工(並び替え)して検索結果を返すことができる「修飾」をメモ書き程度に書き残していく。
DISTINCT(重複した行を除外してくれる)
列(カラム)内の重複した行(row)を除外して、同一で複数あるものを1つだけにしてくれる。同じものは保存されない。↓
・before ・After 列(費目) 列(費目) 食費 食費 食費 → 光熱費 光熱費 水道費 水道費 光熱費
※DISTINCTを使用する時は、必ず最初にSELECT をする。
SQLが読み込まれる順番は、まずはSELECTの様な代表的な命令形で抽出される。
その後にそのSELECTで選択されている結果をさらに加工(修飾)する。
SELECT DISTINCT 入金 FROM 家計簿
Railsで対応するメソッド①
DISTINCTはRailsでのメソッドだと、distinctメソッドがこれに該当する。
User.select(:first_name, :age).distinct
※Railsでdistinctメソッドを利用する場合は、必ずselectメソッドで指定してあげてからじゃないと、重複を除外してくれない。
ORDER BY(検索結果を並び替える)
SELECT文の最後に「ORDER BY」を記述することで、指定した列を好きな様に並び替えられる。
SELECT * FROM 家計簿 ORDER BY 日付 DESC
これを利用すれば、ランキング機能なんかも作れる。
Railsで対応するメソッド②
orderメソッドがこの並び替えの処理をしてくれる。
Client.order(:create_at)
OFFSET - FETCH(任意の場所から数行だけ取得する)
行を限定して取得する。
この修飾を活用すれば、ランキング上位5を表示させるとかもできる様になる。
また、3番目に高いものだけ取得するとか範囲を限定に絞ってもできる。
SELECT 列名… FROM テーブル名 ORDER BY 列名… OFFSET 先頭から除外する行数(数値で) ROWS (FETCH NEXT 1(取得行数) ROWS ONLY)
Railsで対応するメソッド③
limitメソッドやoffsetメソッドで任意で取り出し場所を指定できる。
Book.order(price: :desc).limit(3).offset(6)
この時の数字は、0が1番目で、2番目は1。3は4番目なので、順番数えるの間違えない様に。