#SQLとは
SQL(Structured Query Language)はリレーショナルデータベース(RDB)の操作を行うための言語です。
リレーショナルデータベースとは、データをテーブルという
表形式の構造で管理するデータベースのことです。
SQLはデータベースやテーブルに対して様々な命令を行うことができます!
##SELECT句
- データベースから、データを取得するためにはSELECTを用います。これを用いてどのカラムのデータを取得するかを選びます。
SELECT name #nameはカラム名
SELECT * #全てのカラムを指定する
##FROM句
- FROMを用いて、SELECTで選んだカラムがどのテーブルのカラムかを指定する必要があります。
SELECT name #カラム名
FROM users; #テーブル名
##WHERE句
- 特定のデータを取得したい時には、WHEREを用います。
SELECT *
FROM users
WHERE name = "山田太郎"; #nameカラムが"山田太郎"であるデータを取得する
##LIKE演算子
- 「ある文字を含むデータ」を取得したい場合は、LIKE演算子を用います。
SELECT *
FROM users
WHERE name LIKE '%佐藤%'; #佐藤という文字を含むデータを取得する
##NOT演算子
- 「○○を含まないデータや「○○に一致しないデータ」のような条件でデータを取得したい場合はNOT演算子を用います。
SELECT *
FROM users
WHERE NOT name LIKE "%佐藤%"; #佐藤を含まないデータを取得する
##AND演算子
- AND演算子を使うと、WHEREに複数の条件を指定することができます。
SELECT * FROM users
WHERE name = "佐藤"
AND age = 20; #どちらの条件も満たすデータを取得する
##OR演算子
- AND演算子と同様に、複数の条件を指定しますが、条件1または条件2のどちらかを満たすデータを検索します。
SELECT *
FROM users
WHERE name = "佐藤"
OR age = 20; #どちらかの条件を満たすデータを取得する
##ORDER BY
- データを並べ替える時はORDER BYを使用します
SELECT *
FROM users
ORDER BY age DESC; #ageの大きい順に並び替える
#WHERE文と併用もできます
##LIMIT
- 何件取得するかを指定するときは、LIMITを用います。
SELECT *
FROM users
ORDER BY age DESC
LIMIT 5; #ageの大きい順に並び替え、上から5番目まで取得する
##DISTINCT
- 検索結果から重複するデータを除くときにDISTINCTを使用します。
SELECT DISTINCT(name)
FROM users; #重複するデータを除いたnameカラムのデータを取得する
##SUM関数
- 数値の合計を計算するときには、SUMを用います。
SELECT SUM(price)
FROM items; #itemsテーブルのpriceカラムの合計を計算する
##AVG関数
- 数値の平均を計算する場合は、AVGを用います。
SELECT AVG(price)
FROM items; #itemsテーブルのpriceカラムの平均を計算する
##COUNT関数
- 指定したカラムのデータの合計数を計算する場合は、COUNTを用います。また、そのカラムがnullになっているデータは計算されません。
SELECT COUNT(*)
FROM users
WHERE age >= 20;
#ageが20以上のデータの合計数を取得します
##MAX・MIN関数
- MAXを用いると、指定したカラムの最大値を取得できます。MINでは最小値を取得します。
SELECT MAX(price)
FROM items #最も値段の高いitemのデータを取得
SELECT MIN(price)
FROM items #最も値段の安いitemのデータを取得
##CONCAT関数
- CONCAT関数は複数の文字列を連結させることができる関数です。
ただし連結させる文字列の中にnullがあった場合、結果はnullになります。
SELECT CONCAT(family_name, first_name)
FROM users;
#苗字と名前を連結させ表示する
##AS句
- SELECT句でデータを取得するとき、ASを使うと、そのカラムに別名をつけることができます。
SELECT CONCAT(family_name, first_name) AS "名前"
FROM users;
#苗字と名前を連結させ、カラム名を"名前"として表示する
##GROUP BY句
- GROUP BYを使用すると、指定したカラムが同じ値を持つデータを1つのグループとしてまとめることができます。
SELECT user_id
FROM shifts
WHERE date = "2018-07-01"
GROUP BY user_id;
#shiftsテーブルからdateが2018-07-01のレコードを取得し、user_idが同じ値のレコードをグループ化して、そのグループ化された一覧のuser_idのみを表示する
##HAVING句
- GROUP BYでグループ化したデータを更に絞り込みたいときはHAVINGを用います。
SELECT SUM(price), purchased_at
FROM purchases
GROUP BY purchased_at
HAVING SUM(price) > 2000;
#日付ごとの合計金額のうち2000円を超えるデータのみを取得する
####WHEHEとHAVINGの違い
WHEREもHAVINGと同じように抽出条件を指定するコマンドですが、呼ばれるタイミングが違うため使い分ける必要があります。
呼ばれるタイミング | コマンド |
---|---|
1 | FROM |
2 | WHERE |
3 | GROUP BY |
4 | HAVING |
5 | SELECT |
6 | ORDER BY |
- このためグループ化したデータから抽出条件を指定するためにはHAVINGを用いる必要があります。
##JOIN
- JOINを使用すると、指定したそれぞれのテーブルの、カラムの値が一致するデータを結合することができます。
FROM shifts
JOIN users ON shifts.user_id = users.id
#shiftsテーブルにusersテーブルを結合させます。そしてshiftsテーブルのuser_idとusersテーブルのidが一致する行を結合させます
##INSERT文
- データにレコードを挿入したいときにはINSERTを用います。
INSERT INTO users(name, age) VALUES("佐藤", 20);
##UPDATE文
- データの更新にはUPDATEを使用します。
- WHEREで指定しないとカラム内の全てのデータが更新してしまうので注意しましょう。
UPDATE users SET age = 23 WHERE id = 2;
#idが2のageカラムを23に書き換える
##DELETE文
- レコードを削除するときはDELETEを用います。
- WHEREで指定しないとテーブル内の全レコードが削除されてしまうので注意しましょう。
DELETE FROM users WHERE id = 2;
##最後に
データベースはとても大事ですが、いざ勉強しようと思っても何すれば良いのか中々難しいと思う方は自分で作った個人アプリのデータベースを使って学習するのもいいのかなと思いました!
これどうするんだっけというときにこの記事を活用して頂けたら幸いです!
> 参考 https://www.sejuku.net/blog/74757