👯

[SQL] 私なりのチートシート

2024/09/22に公開

はじめに

この記事では、基本的なSQLコマンドを解説します。

参考資料

前提条件

itemsというテーブルに下記のデータが保存しております。

id
1
2
3

salesというテーブルに下記のデータが保存しております。

id date item_name item_cont price customer discount discount_rate
1 2024-01-01 リンゴ 3 260 A さん True 0.1
2 2024-01-02 バナナ 2 340 B さん False null
3 2024-01-03 イチゴ 4 550 C さん False null
4 2024-01-04 リンゴ 5 670 D さん False null
5 2024-01-05 バナナ 1 560 E さん False null
6 2024-01-06 バナナ 4 340 F さん True 0.5
7 2024-01-07 イチゴ 6 230 G さん False null
8 2024-01-08 リンゴ 2 410 H さん True 0.3

CREATE

1. テーブルを作成する

基本構文
CREATE TABLE テーブル名 (
    カラム名A データ型,
    カラム名B データ型,
    カラム名C データ型,
    ...
)
サンプル
-- sales を下記データ型で設定する
CREATE TABLE sales (
    id SERIAL PRIMARY KEY,
    date DATE,
    item_name VARCHAR(50),
    item_cont INT,
    price INT,
    customer VARCHAR(50),
    discount BOOLEAN,
    discount_rate REAL
);

DELETE

1. 全てデータを削除する

基本構文
DELETE FROM テーブル名
サンプル
-- sales のテーブルの全データを削除する
DELETE FROM sales WHERE

2. データを削除する

基本構文
DELETE FROM テーブル名 WHERE 条件式
サンプル
2024-01-01 のデータを削除する
DELETE FROM sales WHERE date = '2024-01-01'

DROP

1. テーブルを削除する

基本構文
DROP TABLE テーブル名
サンプル
-- sales のテーブルを削除する
DROP TABLE sales

INSERT

1. データを作成する

基本構文
INSERT INTO テーブル名 VALUES
    (カラム名Aのデータ1, カラム名Bのデータ1, カラム名Cのデータ1),
    (カラム名Aのデータ2, カラム名Bのデータ2, カラム名Cのデータ2),
    (カラム名Aのデータ3, カラム名Bのデータ3, カラム名Cのデータ3),
サンプル
-- sales に 8 件のデータを作成する
INSERT INTO sales VALUES
    (1, '2024-01-01', 'リンゴ', 3, 260, 'Aさん', TRUE, 0.1),
    (2, '2024-01-02', 'バナナ', 2, 340, 'Bさん', FALSE, NULL),
    (3, '2024-01-03', 'イチゴ', 4, 550, 'Cさん', FALSE, NULL),
    (4, '2024-01-04', 'リンゴ', 5, 670, 'Dさん', FALSE, NULL),
    (5, '2024-01-05', 'バナナ', 1, 560, 'Eさん', FALSE, NULL),
    (6, '2024-01-06', 'バナナ', 4, 340, 'Fさん', TRUE, 0.5),
    (7, '2024-01-07', 'イチゴ', 6, 230, 'Gさん', FALSE, NULL),
    (8, '2024-01-08', 'リンゴ', 2, 410, 'Hさん', TRUE, 0.3);

JOIN

1. テーブルを結合してデータを取得する

基本構文
SELECT カラム FROM テーブル名A
INNER JOIN テーブル名B ON テーブル名A.カラム名 = テーブル名B.カラム名
サンプル
-- sales と items の id が同じの items のデータを取得する
SELECT item_name FROM sales
INNER JOIN items ON sales.id = items.id

2. 条件を含めてテーブルを結合してデータを取得する

基本構文
SELECT カラム FROM テーブル名A
INNER JOIN テーブル名B ON テーブル名A.カラム名 = テーブル名B.カラム名
WHERE 条件式
サンプル
-- sales と items の id が同じの items のデータの中で item_cont が 2 より多いデータを取得する
SELECT item_name FROM sales
INNER JOIN items ON sales.id = items.id
WHERE item_cont > 2

UPDATE

1. データを更新する

基本構文
UPDATE テーブル名 SET カラム名 = 設定したい値 WHERE 条件式
サンプル
-- 2024-01-01 のデータを 2024-01-15 に更新する
UPDATE sales SET date = '2024-01-15' WHERE date = '2024-01-01'

SELECT

1. 全データを取得する

基本構文
SELECT * FROM テーブル名
サンプル
-- sales の全てのカラムの値を取得する
SELECT * FROM sales

2. AND 条件を満たすデータを取得する

基本構文
SELECT * FROM テーブル名 WHERE 条件式1 AND 条件式2
サンプル
-- item_name = `リンゴ`かつ`2024-01-04`以降に該当する値を取得する
SELECT * FROM sales WHERE item_name = 'リンゴ' AND date >= '2024-01-04'

3. カラムを別名にしてデータを取得する

基本構文
SELECT カラム名 AS 別カラム名 FROM テーブル名
サンプル
-- item_name -> 商品名として値を取得する
SELECT item_name AS 商品名 FROM sales

4. データの平均値を取得する

基本構文
SELECT AVG(カラム名) FROM テーブル名
サンプル
-- price の平均値を取得する
SELECT AVG(price) FROM sales

5. 特定の範囲を満たすデータを取得する

基本構文
SELECT * FROM テーブル名 WHERE カラム名 BETWEEN 条件A AND 条件B
サンプル
-- price が 300 と 400 の間に該当する値を取得する
SELECT * FROM sales WHERE price BETWEEN 300 AND 400

6. 計算した値を取得する

基本構文
SELECT 計算 FROM テーブル名
サンプル
-- item_name と price の乗算を取得する
SELECT item_cont * price as 合計値段 FROM sales

7. データ数を取得する

基本構文
SELECT COUNT(*) FROM テーブル名
サンプル
-- sales のデータ数を取得する
SELECT COUNT(*) FROM sales

8. 重複を取り除いたデータを取得する

基本構文
SELECT DISTINCT カラム名 FROM テーブル名
サンプル
-- item_name の値を取得し重複を取り除く
SELECT DISTINCT item_name FROM sales

9. グループ化する条件を加えてデータを取得する

基本構文
SELECT カラム名A, 集計関数 FROM テーブル名 GROUP BY カラム名A HAVING 条件式
サンプル
-- 各 item_name のデータ数で 3 回以上のデータを取得する
SELECT item_name, COUNT(*) FROM sales GROUP BY item_name HAVING COUNT(*) >= 3

10. データをグループ化して取得する

基本構文
SELECT カラム名A, 関数(引数) FROM テーブル名 GROUP BY カラム名A
サンプル
-- 各 item_name のデータ数を取得する
SELECT item_name, COUNT(*) FROM sales GROUP BY item_name

11. IN 条件を満たすデータを取得する

基本構文
SELECT * FROM テーブル名 WHERE カラム名 IN (データ名1, データ名2, ...)
サンプル
-- item_name で`リンゴ`, `バナナ`に該当する値を取得する
SELECT * FROM sales WHERE item_name IN ('リンゴ', 'バナナ')

12. データの最大値を取得する

基本構文
SELECT MAX(カラム名) FROM テーブル名
サンプル
-- price の最大値を取得する
SELECT MAX(price) FROM sales

13. データの最低値を取得する

基本構文
SELECT MIN(カラム名) FROM テーブル名
サンプル
-- price の最低値を取得する
SELECT MIN(price) FROM sales

14. 複数カラムのデータを取得する

基本構文
SELECT カラム名1, カラム名2, ... FROM テーブル名
サンプル
-- item_name と customer の値を取得する
SELECT item_name, customer FROM sales

15. 特定の範囲を満さないデータを取得する

基本構文
SELECT * FROM テーブル名 WHERE カラム名 NOt BETWEEN 条件A AND 条件B
サンプル
-- price が 300 と 400 の間に該当しない値を取得する
SELECT * FROM sales WHERE price NOt BETWEEN 300 AND 400

16. NOT IN 条件を満たすデータを取得する

基本構文
SELECT * FROM テーブル名 WHERE カラム名 NOT IN (データ名1, データ名2, ...)
サンプル
-- item_name で`リンゴ`, `バナナ`に該当しない値を取得する
SELECT * FROM sales WHERE item_name NOT IN ('リンゴ', 'バナナ')

17. 条件を満たさないデータを取得する

基本構文
SELECT * FROM テーブル名 WHERE NOT 条件式
サンプル
-- item_name = `リンゴ`に該当しない値を取得する
SELECT * FROM sales WHERE NOT item_name = 'リンゴ'

18. OR 条件を満たすデータを取得する

基本構文
SELECT * FROM テーブル名 WHERE 条件式1 OR 条件式2
サンプル
-- item_name = `リンゴ`か item_name != バナナに該当する値を取得する
SELECT * FROM sales WHERE item_name = 'リンゴ' OR item_name <> 'バナナ'

19. 降順にデータを並べ替える

基本構文
SELECT * FROM テーブル名 ORDER BY 並べ替え基準のカラム名 DESC
サンプル
-- price が高い順に値を取得する
SELECT * FROM sales ORDER BY price DESC

20. 昇順にデータを並べ替える

基本構文
SELECT * FROM テーブル名 ORDER BY 並べ替え基準のカラム名 ASC
サンプル
-- price が安い順に値を取得する
SELECT * FROM sales ORDER BY price ASC

21.複数の条件でデータを並べ替える

基本構文
SELECT * FROM テーブル名 ORDER BY 並べ替え基準のカラム名A, 並べ替え基準のカラム名B, ...
サンプル
-- price が安い順に並べた後に item_cont の小さい順に値を取得する
SELECT * FROM sales ORDER BY price, item_cont

22. データの合計値を取得する

基本構文
SELECT SUM(カラム名) FROM テーブル名
サンプル
-- price の合計値を取得する
SELECT SUM(price) FROM sales

23. 条件を満たすデータを取得する

基本構文
SELECT SUM(カラム名) FROM テーブル名
サンプル
-- item_name = 'リンゴ'に該当する値を取得する
SELECT * FROM sales WHERE item_name = 'リンゴ'

備考

記号の種類

記号 意味
= 左辺と右辺が同じ
< 左辺が右辺より小さい
> 左辺が右辺より大きい
<= 左辺が右辺以下
= 左辺が右辺以上
<> 左辺と右辺が異なる

算術演算子

演算子 意味
+ 足し算
引き算
* 掛け算
/ 割り算
% 割り算の余りを求める

SQL 実行順番

優先順位 説明
1 データを取り出すテーブルを指定する
2 テーブルを結合す INNER JOIN 句, ON 句
3 取り出すデータの条件を付ける WHERE 句
4 グループ化 GROUP BY 句
5 グループ化した後に条件を付ける HAVING 句
6 取り出すカラムを指定する SELECT 句
7 レコードを並べ替える ORDER BY 句
GitHubで編集を提案

Discussion