SQLのORDER BY句を使ったデータのソート方法や応用テクニックを詳しく解説します。効率的なデータ管理のためのソートとは何か、その重要性とは?
SQLのテーブル結合とサブクエリーの実践的な使い方と応用例
SQLのテーブル結合について、基本から応用まで実践的なコード例を交えて解説します。複数テーブルの効率的な結合方法や、実務でよく使うパターンとは?
内部結合は最も基本的な結合方法で、両方のテーブルに存在するデータのみを取得します。以下のような実装が一般的です。
SELECT e.employee_name, d.department_name
FROM employees e
INNER JOIN departments d
ON e.department_id = d.department_id
このクエリでは、社員テーブルと部署テーブルを部署IDで結合しています。結合条件に一致しないデータは除外されます。
外部結合には LEFT、RIGHT、FULL の3種類があり、片方のテーブルにデータがない場合でも結果を取得できます。
SELECT s.student_id, s.name, c.club_name
FROM students s
LEFT OUTER JOIN clubs c
ON s.club_id = c.club_id
部活動に所属していない学生も含めて全員の情報を取得したい場合などに使用します。
クロス結合は両テーブルの全ての組み合わせを生成します。
SELECT p.product_name, s.size, c.color
FROM products p
CROSS JOIN sizes s
CROSS JOIN colors c
商品の全サイズと色の組み合わせを生成する際などに使用しますが、データ量が多い場合はパフォーマンスに注意が必要です。
サブクエリを使用することで、より複雑な条件での結合が可能になります。
SELECT e.employee_name,
(SELECT d.department_name
FROM departments d
WHERE d.department_id = e.department_id) as dept_name
FROM employees e
WHERE e.salary > (
SELECT AVG(salary)
FROM employees
WHERE department_id = e.department_id
)
部署ごとの平均給与より高い給与の社員を抽出する例です。
結合を使用する際は、以下の点に注意してパフォーマンスを最適化します:
-- インデックスを使用した効率的な結合
CREATE INDEX idx_department_id ON employees(department_id)
CREATE INDEX idx_department_id ON departments(department_id)
SELECT /*+ INDEX(e idx_department_id) */
e.employee_name,
d.department_name
FROM employees e
INNER JOIN departments d
ON e.department_id = d.department_id
結合条件の選択とインデックスの適切な設定により、クエリのパフォーマンスを大幅に改善できます。