基本構文 - Basic Syntax
SELECT / FROM / WHERE 列とテーブルを指定し、条件で行を絞り込みます。
SELECT name, age FROM users WHERE age >= 25;
SELECT * FROM orders WHERE price > 10000;
ORDER BY / LIMIT 結果の並び替えと取得件数の制限。 SELECT * FROM users ORDER BY age DESC;
SELECT * FROM orders LIMIT 3;
DISTINCT 重複した行を除外して一意の値を取得。 SELECT DISTINCT city FROM users;
高度な構文 - Advanced Syntax
GROUP BY / HAVING
グループ化とグループ化後のフィルタ。
SELECT city, COUNT(*) FROM users GROUP BY city;
SELECT user_id, SUM(price) FROM orders GROUP BY user_id HAVING SUM(price) > 50000;
JOIN (INNER / LEFT / FULL)
複数テーブルを関連する列で結合。
SELECT u.name, o.item FROM users u JOIN orders o ON u.id = o.user_id;
SELECT u.name, o.item FROM users u LEFT JOIN orders o ON u.id = o.user_id;
UNION / INTERSECT
複数の結果セットを統合または積集合を取得。
SELECT id FROM table_a UNION SELECT id FROM table_b;
ウィンドウ関数 - Window Functions
ROW_NUMBER / RANK / DENSE_RANK
行番号や順位の付与。
SELECT name, ROW_NUMBER() OVER(ORDER BY age DESC) FROM users;
SELECT item, RANK() OVER(ORDER BY price DESC) FROM orders;
LAG / LEAD / PARTITION BY
前後行の参照や範囲の分割計算。
SELECT name, age, LAG(age) OVER(ORDER BY age) FROM users;
SELECT name, city, SUM(age) OVER(PARTITION BY city) FROM users;
条件分岐とサブクエリ - Conditional & Subqueries
CASE WHEN
条件に応じた値の出し分け(条件分岐)。
SELECT name, CASE WHEN age >= 20 THEN 'Adult' ELSE 'Child' END FROM users;
WITH (CTE)
一時的な結果セットを定義(共通テーブル式)。
WITH high_sales AS (SELECT * FROM orders WHERE price > 1000) SELECT * FROM high_sales;
EXISTS / IN
サブクエリの結果に存在するかを判定。
SELECT * FROM users WHERE id IN (SELECT user_id FROM orders);
データ操作 - Data Manipulation
INSERT INTO
テーブルに新しいレコードを追加。
INSERT INTO users (name, age) VALUES ('Tanaka', 30);
UPDATE / SET
既存のレコードの内容を更新。
UPDATE users SET age = 31 WHERE name = 'Tanaka';
DELETE
条件に一致するレコードを削除。
DELETE FROM users WHERE id = 10;
関数と演算子 - Functions & Operators
LIKE / ILIKE
パターンマッチング(部分一致検索)。
SELECT * FROM users WHERE name LIKE 'S%';
COALESCE
NULL値を指定したデフォルト値に置換。
SELECT COALESCE(phone, 'No Number') FROM users;
CAST / CONVERT
データ型の変換。
SELECT CAST(price AS SIGNED) FROM orders;