【今日のアウトプット】SQLの基礎学習

SQLの基礎構文を学習したので、アウトプットしていきます。

SQLとは

Structured Query Language の略で、RDB(リレーショナルデータベース)に命令する言語。
命令(Query)は大きく3種類ある。

  • データ定義(DDL)Definition
  • データ操作(DML)Manipulation
  • データ制御(DCL)Controll

基本の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 5202091日以前に作成されたデータの中でも最新の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の記述自体ももっと増えていくと思うので、どんどん知識の幅を広げていかないといけないなと。