一言で言うと、SQLとは何ですか?
SQL (Structured Query Language) — データベースに事実を尋ねるための言語:「注文は何件ですか?」「50以上の商品はどれですか?」「誰が何も買っていないのか?」
読み取りのための基本的なコマンドセット:
SELECT— 取得する列;FROM— どのテーブルから;WHERE— どの行を残すか;ORDER BY— 並べ替え方法;LIMIT— 返す行数;JOIN—表同士をどのように結合するか。GROUP BY+ 集計 (COUNT,SUM,AVG,MIN,MAX) — グループ化して計算します。
サンプル用のミニベース
表 users
id | name | city | |
|---|---|---|---|
1 | Anna Ivanova | anna@example.com | Moscow |
2 | Ivan Petrov | ivan@company.ru | Saint-P |
3 | Lee Kim | lee.kim@example.com | — |
表 products
id | title | price |
|---|---|---|
1 | Keyboard | 39.9 |
2 | Mouse | 19.9 |
3 | Monitor 24" | 149.0 |
表 orders
id | user_id | product_id | qty | created_at |
|---|---|---|---|---|
1 | 1 | 1 | 1 | 2025-09-01 |
2 | 1 | 3 | 1 | 2025-09-03 |
3 | 2 | 2 | 2 | 2025-09-05 |
最初のリクエスト:
SELECT *
FROM users;
SELECT name, city
FROM users;
フィルタリング:WHERE
SELECT name, email
FROM users
WHERE city = 'Moscow';
SELECT title, price
FROM products
WHERE price > 20;
SELECT title, price
FROM products
WHERE price BETWEEN 20 AND 150;
SELECT name, city
FROM users
WHERE city IN ('Moscow', 'Saint-P');
SELECT email
FROM users
WHERE email LIKE '%@example.com';
SELECT name
FROM users
WHERE city IS NULL;
並べ替えと制限: ORDER BY + LIMIT
SELECT title, price
FROM products
ORDER BY price ASC
LIMIT 2;
SELECT id, user_id, created_at
FROM orders
ORDER BY created_at DESC
LIMIT 5;
一意の値: DISTINCT
SELECT DISTINCT city
FROM users
WHERE city IS NOT NULL;
グループと集計:GROUP BY
SELECT user_id, COUNT(*) AS orders_count
FROM orders
GROUP BY user_id;
SELECT p.title, SUM(o.qty * p.price) AS total_revenue
FROM orders o
JOIN products p ON p.id = o.product_id
GROUP BY p.title
ORDER BY total_revenue DESC;
SELECT p.title, SUM(o.qty * p.price) AS total_revenue
FROM orders o
JOIN products p ON p.id = o.product_id
GROUP BY p.title
HAVING SUM(o.qty * p.price) > 100;
簡単なJOIN
SELECT u.name, p.title, o.qty, o.created_at
FROM orders o
JOIN users u ON u.id = o.user_id
JOIN products p ON p.id = o.product_id
ORDER BY o.created_at DESC;
SELECT u.name, MAX(o.created_at) AS last_order
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.name
ORDER BY last_order DESC NULLS LAST;

仕事に役立つ12のクイックレシピ
-- 1. Последние 5 заказов
SELECT * FROM orders ORDER BY created_at DESC LIMIT 5;
-- 2. Пользователи с доменом example.com
SELECT name, email FROM users WHERE email LIKE '%@example.com';
-- 3. Топ-3 товара по выручке
SELECT p.title, SUM(o.qty * p.price) AS revenue
FROM orders o JOIN products p ON p.id = o.product_id
GROUP BY p.title
ORDER BY revenue DESC
LIMIT 3;
-- 4. Пользователи без города
SELECT * FROM users WHERE city IS NULL;
-- 5. Товары в ценовом коридоре
SELECT * FROM products WHERE price BETWEEN 20 AND 150;
-- 6. Количество заказов по дням
SELECT DATE(created_at) AS day, COUNT(*) AS cnt
FROM orders
GROUP BY DATE(created_at)
ORDER BY day;
-- 7. Сколько разных городов
SELECT COUNT(DISTINCT city) FROM users WHERE city IS NOT NULL;
-- 8. Сумма корзины конкретного заказа
SELECT SUM(o.qty * p.price) AS total
FROM orders o JOIN products p ON p.id = o.product_id
WHERE o.id = :id;
-- 9. Все товары, которые покупал Иван
SELECT p.title
FROM orders o
JOIN users u ON u.id = o.user_id
JOIN products p ON p.id = o.product_id
WHERE u.name = 'Ivan Petrov';
-- 10. Заказы за последние 7 дней
SELECT * FROM orders
WHERE created_at >= CURRENT_DATE - INTERVAL '7 DAY';
-- 11. Первые N строк для быстрой проверки
SELECT * FROM users LIMIT 10;
-- 12. Уникальные домены email
SELECT DISTINCT SUBSTRING(email FROM POSITION('@' IN email) + 1) AS domain
FROM users;
練習と簡単な説明が必要な場合は、 コディック 私たちは、単純なサンプルから集計を使用した分析まで、実際のタスクでSQLを分析します。水なし、インタラクティブ。
また、アクティブな テレグラムチャンネル、ここでは素晴らしいアイデアについて話し合い、経験を共有し、課題を一緒に分析します。学習は有益であるだけでなく、楽しいものになります。
質問: SQLのどの部分が最も恐ろしいですか? JOIN, GROUP BYまたは謎めいたNULL?次の記事で理解したいことを書いてください。
