【ITニュース解説】The Ultimate Guide to SQL Joins and Subqueries Explained
2025年09月08日に「Dev.to」が公開したITニュース「The Ultimate Guide to SQL Joins and Subqueries Explained」について初心者にもわかりやすく解説しています。
ITニュース概要
SQLで複数のテーブルからデータを取得する方法を解説。関連する列をキーにテーブル同士を結合する「JOIN」の各種使い方や、クエリの中に別のクエリを埋め込み結果を条件に使う「サブクエリ」の基本を学ぶ。(109文字)
ITニュース解説
データベースでデータを管理する際、情報を複数の「テーブル」という表に分けて整理するのが一般的です。例えば、「従業員」の情報と「部署」の情報を別々のテーブルに保存します。しかし、実際の業務では「どの従業員が、どの部署で働いているか」といったように、これらのテーブルを横断して情報を取得する必要があります。このような場合に不可欠な技術が、SQLの「JOIN」と「サブクエリ」です。これらを使いこなすことで、分割されたデータから意味のある情報を効率的に引き出すことができます。
まず、JOINについて解説します。JOINは、複数のテーブルを特定の関連する列を基準に結合し、一つの大きな表のように扱うための命令です。この関連付けには、多くの場合「主キー」と「外部キー」が用いられます。主キーとは、テーブル内の一つ一つの行をユニークに識別するための列であり、例えば部署テーブルの「部署ID」がこれにあたります。一方、外部キーは、他のテーブルの主キーを参照するための列で、従業員テーブルに「部署ID」列を設けることで、部署テーブルと関連付けることができます。このキーによる関連付けが、リレーショナルデータベースの根幹をなし、JOIN処理の土台となります。
JOINにはいくつかの種類があり、取得したいデータに応じて使い分ける必要があります。最も頻繁に使われるのが「INNER JOIN」です。これは、結合する両方のテーブルに共通のデータが存在する行だけを返します。例えば、従業員テーブルと部署テーブルを部署IDでINNER JOINすると、いずれかの部署に所属している従業員の情報だけが表示されます。部署に所属していない従業員や、従業員が一人もいない部署の情報は結果に含まれません。
次に「LEFT JOIN」は、命令文の左側に指定したテーブルのすべての行を返し、それに対応するデータが右側のテーブルにあれば結合します。もし対応するデータがなければ、その部分は空の値(NULL)として表示されます。これを使えば、部署に所属していない従業員も含めた全従業員の一覧を取得できます。その逆の動作をするのが「RIGHT JOIN」で、右側に指定したテーブルのすべての行を基準にします。従業員が一人もいない部署の情報も確認したい場合に有効です。さらに「FULL OUTER JOIN」は、LEFT JOINとRIGHT JOINを組み合わせたもので、両方のテーブルのすべての行を返し、対応関係がない部分もすべて結果に含めます。従業員と部署の全体像を把握したいときに使用します。
JOINがテーブルを横方向に結合するのに対し、クエリをより柔軟にするもう一つの強力な機能が「サブクエリ」です。サブクエリとは、クエリの中に埋め込まれた別のクエリのことで、外側のメインクエリが実行される前に実行されます。この仕組みにより、段階的なデータ抽出が可能になります。例えば、「全従業員の平均給与よりも高い給与を受け取っている従業員」を検索したい場合を考えます。この場合、まずサブクエリで全従業員の平均給与を算出し、その結果をメインクエリの条件として使用することで、目的の従業員を絞り込むことができます。
サブクエリは、特に「IN」や「EXISTS」といった演算子と組み合わせることで真価を発揮します。「IN」演算子は、サブクエリが返した値のリスト内に、特定の列の値が含まれているかどうかを判定します。例えば、人事部とIT部の部署IDをサブクエリで取得し、そのリストに含まれる部署IDを持つ従業員をメインクエリで抽出するといった使い方ができます。一方、「EXISTS」演算子は、サブクエリが一件でもデータを返すかどうか、つまり条件に合致するデータが存在するかどうかだけを確認します。例えば、各従業員に対して、その従業員の部署IDが部署テーブルに存在するかどうかをサブクエリでチェックし、存在する場合にのみその従業員の情報を返す、といった処理が可能です。「IN」が具体的な値のリストと比較するのに対し、「EXISTS」は存在有無のみを判定するため、データの特性によってはより効率的に動作することがあります。
さらに、複雑なクエリを記述する際には、「WITH」句が非常に役立ちます。これは、クエリの実行中に使用できる一時的な名前付きの結果セット(共通テーブル式)を定義する機能です。例えば、まずWITH句を使って部署ごとの平均給与を計算した一時テーブルを作成し、その後のメインクエリで、その一時テーブルをあたかも通常のテーブルのように扱って従業員テーブルとJOINすることができます。これにより、長いサブクエリを何度も記述する必要がなくなり、クエリの構造が明確になって可読性やメンテナンス性が大幅に向上します。
以上のように、JOINとサブクエリは、リレーショナルデータベースから必要な情報を引き出すための基本的ながらも強力なツールです。JOINでテーブル同士を関連付け、サブクエリやWITH句で複雑な条件や段階的な処理を組み立てることで、単純なデータ検索から高度な分析まで、幅広い要求に応えることが可能になります。