scopeは、特定のクエリ使用を効率化するものである。
(何度も同じクエリ記載をしなくて良くなる)(メソッド化する)
RailsではSQLを書かなくて良いが、SQLについて大まかな理解をしていないと、後々しんどそう
データ検索の基本
データを検索したり、更新するときは「行」と「列」を指定して、データが存在するフィールドを特定する。
クエリとは
データベースに送る命令のこと
SQLについて
クエリを書くための言語
リレーショナルデータベースに蓄積したデータを操作したり、定義したりするためのプログラム言語
国際標準化されているので、どのDBでも使える
ここでやる(20日の22時から)
https://www.atmarkit.co.jp/ait/articles/1112/20/news130.html
・できること
大量のデータを効率的に取得・更新・削除・追加できる
SQLは二つに分類できる(データを操作-DML)(データを定義-DDL)
DML
データ操作に分類する文法をDMLという(SELECT,UPDATE,DELETE,INSERTなどが基本)
→今回はこっちを深掘りする
DDL
データベースのテーブルの作成や、定義する文法のことを特にDDLと呼ぶ
SQLでのデータベース操作
SELECT
(FROMで取得したテーブルの)カラムを選択して、カラムのデータに処理をする感じ
FROMでテーブル指定
SELECTの後に取得するカラムを書く(コンマを挟んで複数指定可)(*で全選択)
(SELECT:DISTINCTでデータの重複を除去する)
WHEREで条件指定(レコードの内容で絞り込む)(いろんな条件式使える=とか>とか)
データ抽出時の並び替えも可(ORDER BY)
(末尾)表示する検索結果データをLIMITで絞る
順序
どのテーブルのデータ?(FROMで指定)
テーブルのどのカラムのデータ?(動詞で指定)(SELECTなど)
SELECT [表示する要素名(複数指可 A,Bという記載)] FROM [テーブル名];
DISTINCT(重複除去)
SELECT DISTINCT(カラム名)で取得されるカラムの重複をなくすことも可能
四則演算
SELECT カラム名*(+=/)数値
複数取得も可 name, price, price*1.1, price*2みたいな感じも可
テーブル指定のFROMについて
FROMを使って、どのテーブルのカラムかを指定する
条件指定のWHEREについて
WHEREは条件完全一致しか取得できない、なので部分一致は取得できない
なのでLIKEを使う
WHERE food(カラム名) LIKE "%プリン(検索単語)%"(%:どんな文字列にも一致することを示す記号)
→foodというカラムで、プリンという文字を持っているデータを全て取得する(焼きプリン・プリン大福・焼きプリン大福も取得)
条件不一致を検出する際はNOTを使う
WHERE NOT ・・・
NULLの取得
NULL(空のフィールド)を取得したい場合、=ではなく IS NULLを使う(以外の取得はIS NOT NULL)
複数の条件を検索したい場合
ANDやORの使用
WHERE 〜 AND 〜;
データの並び替え ORDER BY
ORDER BY 並び替えたいカラム名 並べ方;
ASC(昇順)(小さい数→大きい数)
DESC(降順)(大きい数→小さい数)
LIMIT
末尾に記載する
データの検索結果の上から個数を絞る