【今日のアウトプット】SQLの基礎学習
SQLの基礎構文を学習したので、アウトプットしていきます。
SQLとは
Structured Query Language の略で、RDB(リレーショナルデータベース)に命令する言語。
命令(Query)は大きく3種類ある。
基本の4つ
データ取得
SELECT カラム名 FROM テーブル名
カラム名を * とすると、すべてのデータを取得する。
データ追加
INSERT INTO テーブル名 VALUES(1, "きょろ", 23, "2020-11-30")
カラム名は省略して、データの値だけ書いている。
データの値が抜けいてると、nullとなる。
※ ちなみにデータの追加ではなく、カラムを追加したい場合
ALTER TABLE テーブル名 (カラム名 カラムの型)
データ更新
UPDATE テーブル名 SET カラム名 = カラムの値
※ ちなみにデータの更新ではなく、カラムを更新したい場合
ALTER TABLE テーブル名 CHANGE 旧カラム名 新カラム名 新カラムの型
データ削除
DELETE FROM テーブル名 WHERE id = 1 ←条件文(指定したレコードを削除する)
※ ちなみにデータの削除ではなく、カラムを削除したい場合
ALTER TABLE カラム名 DROP データの値
基本構文
WHERE
条件文をつけてデータを取得する。
「=」で完全一致のデータを取得
「LIKE」で部分一致のデータを取得
WHERE カラム名 LIKE "%〇〇%" WHERE カラム名 LIKE "〇〇%" ←前方一致 WHERE カラム名 LIKE "%〇〇" ←後方一致
NOT演算子
「〇〇を含まないデータ」「〇〇に一致しないデータ」「〇〇以外のデータ」を取得したい時に使う。 ※WHEREと併用して使う
IS NULL
WHERE カラム名 IS NULL
とすることで、カラムが空のデータを取得する。
逆に、カラムが空でないデータを取得するには、
WHERE カラム名 IS NOT NULL
BETWEEN演算子
範囲の条件を指定する。
WHERE age BETWEEN 20 AND 25
年齢20歳から25歳で範囲を指定してデータを取得している。
IN演算子
指定のカラムの値に、指定のデータの値があるデータを取得する。
WHERE カラム名 IN ("鈴木", "田中", "佐藤")
AND / OR
条件が複数ある時にWHEREと併用して使う。
ORDER BY
データの並び替えをする。
ORDER BY カラム名 DESC(ASC)
DESC(降順) / ASC(昇順)
LIMIT
データの取得件数を指定する。
SELECT created_at FROM users WHERE created_at <= "2020-09-01" ORDER BY DESC LIMIT 5 ←2020年9月1日以前に作成されたデータの中でも最新の5件を取得
※クエリの末尾に記述する
DISTINCT
重複データを除いて取得する。
SELECT DISTINCT カラム名 FROM テーブル名
SUM関数
指定したカラムのデータ合計を取得する。
SELECT SUM(price) FROM purchases
AVG関数
指定したカラムのデータの平均値を取得する。
SELECT AVG(age) FROM users
COUNT関数
指定したカラムのデータの数を数える。
SELECT COUNT(name) FROM users
※NULLのデータはカウントされない
NULLも含めたレコードの数を数えたい時は、
COUNT(*)
MAX / MIN
指定したカラムのデータの最大・最小の値を一発で取得する。
MAX カラム名 MIN カラム名
JOIN ON
テーブルデータを連結させる。
SELECT * FROM テーブルA JOIN テーブルB ON テーブルA.id = テーブルB.id ←(結合条件: 外部キー = 主キー)
※実行の順番は、先にテーブルを結合してからSELECT*を取得する
※JOINは外部キーがNULLのレコードは取得しない。
NULLのレコードも実行結果に表示したいときは、LEFT JOIN ON を使う。
GROUP BY
グループ化をして、指定したデータごとにまとめる。
GROUP BY カラム名
※GROUP BYを使うとき、SELECTで使えるのは、GROUP BYで指定したカラム名と、集計関数のみ ※WHERE文より後に記述する
HAVING
グループ化したデータに条件をつけて、さらに絞り込む。
HAVING created_at <= "2020-08-31"
WHERE文との違いは、GROUP BYの先に読み込まれるか、後に読み込まれるか。
つまり、WHEREの対象はテーブル全体、HAVINGの対象はグループ化されたデータとなる。
読み込み順
WHERE(テーブル対象の条件検索) ↓ GROUP BY(グループ化) ↓ SUM, COUNT, AVG, などの集計関数 ↓ HAVING(グループ化対象の条件検索)
終わりに
今回は 文末に ; を付けないことで統一しましたが、Sequel PrpでSQLを書く以外、基本的には 文末に ; が必要となるので注意。 実際にSQLに触れながら学習したことで、基礎的な操作はできるようになった。実際はテーブルの数もデータの数もSQLの記述自体ももっと増えていくと思うので、どんどん知識の幅を広げていかないといけないなと。