概要(SQL とは)
構造化照会言語 (SQL) は、リレーショナルデータベースに情報を格納および処理するためのプログラミング言語です。リレーショナルデータベースは、情報を表形式で格納します。行と列は、さまざまなデータ属性と、データ値間のさまざまな関係を表します。SQL ステートメントを使用して、データベースから情報を格納、更新、削除、検索、および取得できます。また、SQL を使用して、データベースのパフォーマンスを維持したり、最適化したりすることもできます。引用:© 2024, Amazon Web Services
1. データを取得する(SELECT)
▶ 基本構文
SELECT カラム名 FROM テーブル名;
▶ すべてのデータを取得
SELECT * FROM users;
→ 「users」テーブルのすべてのカラムを取得します。
▶ 特定のカラムを取得
SELECT name, age FROM users;
→ 「name」と「age」だけを取り出します。
▶ 計算式を使う
SELECT name, age * 2 AS double_age FROM users;
→ 「年齢 × 2」を「double_age」という名前で表示します。
▶ 重複を除く
SELECT DISTINCT country FROM users;
→ 重複しない国名だけを取得します。
2. データを作成する(INSERT)
▶ 基本構文
INSERT INTO テーブル名 (カラム名1, カラム名2)
VALUES (値1, 値2);
▶ 例
INSERT INTO users (name, age)
VALUES ('Alice', 25);
→ 新しいユーザー「Alice(25歳)」を追加します。
3. データを更新する(UPDATE)
▶ 基本構文
UPDATE テーブル名
SET カラム名 = 新しい値
WHERE 条件;
▶ 例
UPDATE users
SET age = 26
WHERE name = 'Alice';
→ 名前が「Alice」の人の年齢を26に更新します。
4. データを削除する(DELETE)
▶ 基本構文
DELETE FROM テーブル名
WHERE 条件;
▶ 例
DELETE FROM users
WHERE name = 'Alice';
→ 「Alice」のデータを削除します。
5. データを集計する(GROUP関数)
| 関数 | 内容 | 例 |
|---|---|---|
| COUNT(カラム) | 件数を数える | COUNT(*) AS num |
| SUM(カラム) | 合計を出す | SUM(price) |
| AVG(カラム) | 平均を出す | AVG(age) |
| MAX(カラム) | 最大値を出す | MAX(score) |
| MIN(カラム) | 最小値を出す | MIN(score) |
▶ 例:グループごとに件数を数える
SELECT country, COUNT(*) AS num
FROM users
GROUP BY country;
→ 国ごとにユーザーの人数を集計します。
6. データの条件を指定する(WHERE / HAVING)
▶ WHERE:行ごとに条件を絞る
SELECT * FROM users
WHERE age >= 20 AND country = 'Japan';
→ 20歳以上かつ日本のユーザー。
▶ HAVING:集計結果に条件をつける
SELECT country, COUNT(*) AS num
FROM users
GROUP BY country
HAVING COUNT(*) >= 3;
→ 3人以上のユーザーがいる国を表示。
▶ 条件式
| 条件式 | 意味 |
|---|---|
IS NULL / IS NOT NULL
|
値がNULLかどうか |
AND / OR
|
条件の組み合わせ |
LIKE '%文字%' |
部分一致検索 |
<> |
等しくない(≠) |
IN (サブクエリ) |
特定の集合に含まれるか |
▶ サブクエリ例
SELECT name
FROM users
WHERE id IN (
SELECT user_id FROM orders WHERE total > 1000
);
→ 合計金額1000以上の注文をしたユーザー名を取得。
7. 並べ替えと件数制限
▶ 並べ替え
SELECT * FROM users
ORDER BY age DESC;
→ 年齢の高い順に表示。
| オプション | 説明 |
|---|---|
ASC |
昇順(小さい→大きい) |
DESC |
降順(大きい→小さい) |
▶ 件数を制限する
SELECT * FROM users
LIMIT 5;
→ 上位5件だけ取得。
8. テーブルを結合する(JOIN)
▶ INNER JOIN(内部結合)
SELECT A.name, B.title
FROM users AS A
INNER JOIN books AS B
ON A.id = B.user_id;
→ 両方のテーブルで「対応するデータ」があるものだけを取得。
▶ LEFT JOIN(左外部結合)
SELECT A.name, B.title
FROM users AS A
LEFT JOIN books AS B
ON A.id = B.user_id;
→左側(users)のすべてのデータを取得。
(対応する右側(books)がなければ NULL)
▶ RIGHT JOIN(右外部結合)
SELECT A.name, B.title
FROM users AS A
RIGHT JOIN books AS B
ON A.id = B.user_id;
→右側(books)のすべてのデータを取得。
(左側(users)に対応がなければ NULL)
▶ FULL OUTER JOIN(完全外部結合)
SELECT A.name, B.title
FROM users AS A
FULL OUTER JOIN books AS B
ON A.id = B.user_id;
→左右どちらかに存在するデータをすべて取得。
(どちらかが存在しない場合は NULL)
▶ CROSS JOIN(クロス結合)
SELECT A.name, B.title
FROM users AS A
CROSS JOIN books AS B;
→両テーブルの全データを組み合わせて表示。
▶ JOINまとめ表
| JOINの種類 | 表示されるデータ | NULLが入る側 | MySQL対応 |
|---|---|---|---|
| INNER JOIN | 両方に共通する行のみ | なし | ○ |
| LEFT JOIN | 左テーブルのすべて | 右 | ○ |
| RIGHT JOIN | 右テーブルのすべて | 左 | ○ |
| FULL OUTER JOIN | 両方のすべて | どちらも | ×(UNIONで代用) |
| CROSS JOIN | 全組み合わせ | なし | ○ |
学習におすすめのサイト
学習におすすめの書籍