SQLの学習に役立つ書籍を、初心者から上級者まで幅広くご紹介します。実務で使えるSQLスキルを身につけるには、どの本から始めるべきなのでしょうか?
SQLまとめとデータベース基礎の学習リソース完全ガイド
SQLの基礎から応用まで、実践的な学習方法とおすすめのリソースをまとめました。初心者からエキスパートまで、あなたのレベルに合った学習方法が見つかるのではないでしょうか?
データベースを操作するための基本的なSQL文について解説します。
-- テーブルの作成
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
created_at TIMESTAMP
)
-- データの挿入
INSERT INTO users (id, name, age, created_at)
VALUES (1, '山田太郎', 25, CURRENT_TIMESTAMP)
-- データの検索
SELECT name, age
FROM users
WHERE age >= 20
ORDER BY age DESC
-- データの更新
UPDATE users
SET age = age + 1
WHERE id = 1
-- データの削除
DELETE FROM users
WHERE age < 20
主要なSQLオンライン学習プラットフォームの特徴を比較表で紹介します。
プラットフォーム名 | 特徴 | 料金 | 対象レベル |
---|---|---|---|
Progate | スライド形式で直感的に学習可能 | 有料/一部無料 | 初級〜中級 |
SQL攻略 | 実践的な問題が豊富 | 無料 | 初級〜上級 |
Tech PROjin | 業務レベルの演習問題が充実 | 有料/一部無料 | 中級〜上級 |
1週間で身につくMySQL | 短期集中型のカリキュラム | 無料 | 初級 |
-- サブクエリを使用した高度な検索
SELECT department_name,
(SELECT COUNT(*)
FROM employees
WHERE departments.id = employees.department_id) as employee_count
FROM departments
-- CASE文を使用した条件分岐
SELECT name,
CASE
WHEN age < 20 THEN '未成年'
WHEN age >= 20 AND age < 65 THEN '成人'
ELSE 'シニア'
END as age_category
FROM users
-- ウィンドウ関数を使用した分析
SELECT department_id,
employee_name,
salary,
AVG(salary) OVER (PARTITION BY department_id) as dept_avg_salary
FROM employees
-- 月別売上集計
SELECT
DATE_FORMAT(order_date, '%Y-%m') as order_month,
COUNT(*) as order_count,
SUM(amount) as total_amount,
AVG(amount) as average_amount
FROM orders
GROUP BY DATE_FORMAT(order_date, '%Y-%m')
HAVING total_amount > 1000000
ORDER BY order_month
-- 顧客セグメント分析
SELECT
customer_segment,
COUNT(DISTINCT customer_id) as customer_count,
ROUND(AVG(purchase_amount), 2) as avg_purchase
FROM (
SELECT
customer_id,
SUM(amount) as purchase_amount,
CASE
WHEN SUM(amount) >= 1000000 THEN 'VIP'
WHEN SUM(amount) >= 500000 THEN 'Premium'
ELSE 'Regular'
END as customer_segment
FROM orders
GROUP BY customer_id
) segment_table
GROUP BY customer_segment
ORDER BY avg_purchase DESC