SQLでテーブル結合を使って一致するデータを抽出する方法について、具体的なサンプルコードと共に解説します。初心者でも理解できる内部結合から応用的な外部結合まで、実践的な使い方を学んでみませんか?
SQL JOIN の使い方とテーブル結合の実践的な手法
SQLのJOINを使ったテーブル結合の基本から応用まで、実践的なコード例を交えて解説します。複数のテーブルを効率的に結合して必要なデータを取得するにはどうすればよいのでしょうか?
INNER JOINは最も基本的な結合方法で、両方のテーブルに存在するデータのみを取得します。以下のような構文で使用します:
SELECT employees.name, departments.dept_name
FROM employees
INNER JOIN departments
ON employees.dept_id = departments.id
このクエリでは、従業員テーブルと部署テーブルを部署IDで結合し、共通するレコードのみを取得します。
LEFT JOINは、左側のテーブルのすべてのレコードと、右側のテーブルの一致するレコードを取得します。以下は実装例です:
SELECT customers.name, orders.order_date
FROM customers
LEFT JOIN orders
ON customers.id = orders.customer_id
注文履歴がない顧客も含めて全顧客の情報を取得したい場合に有効です。
RIGHT JOINは左右が逆のLEFT JOINで、FULL OUTER JOINは両方のテーブルの全レコードを取得します。
SELECT products.name, categories.category_name
FROM products
FULL OUTER JOIN categories
ON products.category_id = categories.id
このクエリは商品とカテゴリの関係を完全に把握する際に役立ちます。
3つ以上のテーブルを結合する場合は、以下のように記述します:
SELECT e.name, d.dept_name, p.project_name
FROM employees e
INNER JOIN departments d ON e.dept_id = d.id
INNER JOIN projects p ON e.project_id = p.id
結合順序やインデックスの活用が重要で、実行計画を確認しながら最適化を行います。
集計関数とJOINを組み合わせることで、より詳細な分析が可能です:
SELECT d.dept_name,
COUNT(e.id) as employee_count,
AVG(e.salary) as avg_salary
FROM departments d
LEFT JOIN employees e ON d.id = e.dept_id
GROUP BY d.dept_name
このクエリは部署ごとの従業員数と平均給与を算出します。