SQL チートシート


# SQL チートシート

### 1. **基本的なSELECT文**
```sql
-- テーブルからすべての列を取得
SELECT * FROM table_name;

-- 特定の列を取得
SELECT column1, column2 FROM table_name;
```

### 2. **WHERE句でデータをフィルタリング**
```sql
-- 条件に一致するレコードを取得
SELECT * FROM table_name WHERE column1 = 'value';

-- 複数条件を指定 (AND、ORを使用)
SELECT * FROM table_name WHERE column1 = 'value' AND column2 > 10;
SELECT * FROM table_name WHERE column1 = 'value' OR column2 < 100;
```

### 3. **LIKE句を使って部分一致検索**
```sql
-- 部分一致でレコードを取得
SELECT * FROM table_name WHERE column1 LIKE 'A%'; -- Aで始まる
SELECT * FROM table_name WHERE column1 LIKE '%B'; -- Bで終わる
SELECT * FROM table_name WHERE column1 LIKE '%C%'; -- Cを含む
```

### 4. **NULLの取り扱い**
```sql
-- NULL値を条件に指定
SELECT * FROM table_name WHERE column1 IS NULL;
SELECT * FROM table_name WHERE column1 IS NOT NULL;
```

### 5. **データの並び替え（ORDER BY）**
```sql
-- 昇順で並び替え
SELECT * FROM table_name ORDER BY column1 ASC;

-- 降順で並び替え
SELECT * FROM table_name ORDER BY column1 DESC;
```

### 6. **GROUP BYと集計関数**
```sql
-- COUNT, SUM, AVG, MIN, MAXを使って集計
SELECT column1, COUNT(*), SUM(column2), AVG(column3)
FROM table_name
GROUP BY column1;

-- HAVINGで集計結果にフィルターをかける
SELECT column1, COUNT(*)
FROM table_name
GROUP BY column1
HAVING COUNT(*) > 1;
```

### 7. **JOIN（テーブル結合）**
```sql
-- INNER JOIN: 両方のテーブルに存在するデータのみ取得
SELECT A.column1, B.column2
FROM table1 A
INNER JOIN table2 B ON A.id = B.id;

-- LEFT JOIN: 左のテーブルのデータをすべて取得、右のテーブルで一致しない場合はNULL
SELECT A.column1, B.column2
FROM table1 A
LEFT JOIN table2 B ON A.id = B.id;

-- RIGHT JOIN: 右のテーブルのデータをすべて取得、左のテーブルで一致しない場合はNULL
SELECT A.column1, B.column2
FROM table1 A
RIGHT JOIN table2 B ON A.id = B.id;

-- FULL OUTER JOIN: 両方のテーブルのデータをすべて取得し、どちらかに一致しない場合はNULL
SELECT A.column1, B.column2
FROM table1 A
FULL OUTER JOIN table2 B ON A.id = B.id;
```

### 8. **サブクエリ**
```sql
-- サブクエリを使ったデータの取得
SELECT * FROM table_name
WHERE column1 = (SELECT MAX(column1) FROM table_name);

-- サブクエリをFROM句で使用
SELECT sub.column1
FROM (SELECT column1 FROM table_name WHERE column2 > 100) sub;
```

### 9. **INSERT INTO文（データの挿入）**
```sql
-- データを新規挿入
INSERT INTO table_name (column1, column2, column3)
VALUES ('value1', 'value2', 'value3');

-- 複数行を一度に挿入
INSERT INTO table_name (column1, column2, column3)
VALUES ('value1', 'value2', 'value3'), ('value4', 'value5', 'value6');
```

### 10. **UPDATE文（データの更新）**
```sql
-- 条件に一致するレコードを更新
UPDATE table_name
SET column1 = 'new_value', column2 = 'another_value'
WHERE column3 = 'some_value';

-- 条件を省略するとすべてのレコードが更新されるので注意
UPDATE table_name
SET column1 = 'new_value';
```

### 11. **DELETE文（データの削除）**
```sql
-- 条件に一致するレコードを削除
DELETE FROM table_name WHERE column1 = 'value';

-- 条件を省略するとすべてのレコードが削除されるので注意
DELETE FROM table_name;
```

### 12. **LIMIT句で取得する行数を制限**
```sql
-- 先頭から5行だけ取得
SELECT * FROM table_name LIMIT 5;

-- 6行目から5行取得 (オフセット付き)
SELECT * FROM table_name LIMIT 5 OFFSET 5;
```

### 13. **DISTINCTを使って重複排除**
```sql
-- 重複を除いたデータを取得
SELECT DISTINCT column1 FROM table_name;
```

### 14. **CASE文を使った条件分岐**
```sql
-- 条件に応じて異なる値を返す
SELECT column1,
       CASE
           WHEN column2 > 100 THEN 'High'
           WHEN column2 BETWEEN 50 AND 100 THEN 'Medium'
           ELSE 'Low'
       END as column2_category
FROM table_name;
```

### 15. **データベースやテーブルの作成**
```sql
-- データベースを作成
CREATE DATABASE database_name;

-- テーブルを作成
CREATE TABLE table_name (
    column1 INT PRIMARY KEY,
    column2 VARCHAR(100),
    column3 DATE
);

-- テーブルを削除
DROP TABLE table_name;
```

### 16. **データ型**
```sql
-- INT: 整数型
-- VARCHAR: 可変長文字列型
-- DATE: 日付型
-- TIMESTAMP: 日時型
-- BOOLEAN: 真偽値
```

### 17. **インデックスの作成**
```sql
-- テーブルにインデックスを作成して検索を高速化
CREATE INDEX idx_column1 ON table_name (column1);
```