SQL INNER JOIN(内部結合)完全ガイド:基本構文から実践例まで徹底解説
SQLのINNER JOIN(内部結合)は、2つのテーブル間で指定した列の値が一致する行のみを取得するステートメントです。結合は1つの列でも複数の列でも行うことができ、JOIN文は2つのデータベーステーブルをつなぎ、その内容を比較します。
複数のテーブルから同時にデータを取得し、その結果を組み合わせたい場面はよくあります。たとえば、商品の一覧と、その商品を供給したサプライヤーの名前を一緒に取得したい場合などです。商品名とサプライヤー名の情報は、それぞれ別のテーブルに保存されています。
そんなときに役立つのがSQLのJOIN(結合)です。結合条件を使うことで、複数のテーブルの情報を1つの結果セットにまとめられます。INNER JOINは、2つのテーブル間で列の値が一致するレコードだけを返す結合の一種です。この記事では、INNER JOINの使い方について詳しく解説します。
SQL INNER JOINとは
SQLのINNER JOINは、指定した2つのテーブルの両方に存在する列の値を持つすべてのレコードを取得します。INNER JOIN文では、ONキーワードを使って2つのテーブル間でデータを照合します。
INNER JOINは、SQLの結合の中で最もよく使われる種類です。この演算子は、両方のテーブルに一致するデータが存在するレコードのみを返します。
それでは、INNER JOINキーワードの基本構文を見てみましょう。
SELECT name
FROM customers
INNER JOIN plans
ON customers.plan_id = plans.id;
このクエリは、「customers」テーブルと「plans」テーブルの行を結合します。その結果、「plan_id」が「plans」テーブル内のいずれかのIDと一致するすべての顧客のリストが返されます。
テーブルの結合にはINNER JOIN句を使用します。ONキーワードは、結合するテーブル名の後に記述します。また、ONキーワードの後には、カンマで区切ることで複数の結合条件を指定することも可能です。
INNER JOINの実行例
ここで、従業員データベースを例に考えてみましょう。このデータベースでは、employeesテーブルに各従業員の部署IDが保存されています。このテーブルはSQLのCREATE TABLE文で作成したものです。一方、部署名はcompany_departmentsという別のテーブルに保存されています。
employeesテーブルは次のとおりです。
| employees | ||
|---|---|---|
| name | title | department_id |
| Luke | Sales Associate | 1 |
| Mike | Sales Associate | 1 |
| Hannah | Sales Associate | 1 |
| Geoff | Senior Sales Associate | 1 |
| Alexis | Sales Associate | 1 |
| Jonah | Vice President of Sales | 3 |
| Emma | Marketing Director | 2 |
(7行)
こちらが部署テーブルです。
| company_departments | |
|---|---|
| department_id | name |
| 1 | sales |
| 2 | marketing |
| 3 | executive |
(3行)
ここで、すべての従業員の氏名・役職・部署名を取得したいとしましょう。このデータは2つのテーブルに分かれています。従業員の氏名と役職はemployeesテーブルに、部署名はcompany_departmentsテーブルに格納されています。
目的の情報を取得するには、どうすればよいのでしょうか。
employeesテーブルにはdepartment_idという列があり、ここには各従業員が所属する部署のIDが保存されています。
company_departmentsテーブルでも、各部署にID(主キー)が割り当てられています。つまり、従業員のdepartment_idと部署一覧を突き合わせることで、その従業員が所属する部署の名前を特定できるのです。
それでは、従業員の氏名・役職・所属部署名を取得するクエリを書いてみましょう。
SELECT Employees.Name, Employees.Title, Company_Departments.Name
FROM Employees
INNER JOIN Company_Departments
ON Employees.Department_ID = Company_Departments.Department_ID;
このクエリを実行すると、次のような一致する行が返されます。
| name | title | name |
| Alexis | Sales Associate | Sales |
| Geoff | Senior Sales Associate | Sales |
| Hannah | Sales Associate | Sales |
| Mike | Sales Associate | Sales |
| Luke | Sales Associate | Sales |
| Emma | Marketing Director | Marketing |
| Jonah | Vice President of Sales | Executive |
1行目では、employeesテーブルから従業員の氏名と役職を取得するようデータベースに指示しています。同時に、company_departmentsテーブルから会社の部署名も取得します。
2行目では、従業員情報をemployeesテーブルから取得することを指定しています。続いて、INNER JOINを使ってemployeesテーブルと、部署名を含むcompany_departmentsテーブルを接続します。
最後の行では、両テーブルに共通するフィールド(この場合はdepartment_id)を基準に、employeesテーブルとcompany_departmentsテーブルを関連付けています。
まとめ
SQLのINNER JOINは、2つのテーブル間で列の値が一致するレコードを取得するためのステートメントです。ON句を使うことで、内部結合を実行する条件を柔軟に指定できます。
結合(JOIN)をマスターすることは、SQLデータベースを扱ううえで非常に重要なスキルです。この知識は、SQLエキスパートへの道を一歩前進させるものになるでしょう。
SQLの効率的な学習方法をまとめたガイドもぜひご活用ください。おすすめの学習リソースやオンライン講座の一覧に加えて、SQL習得のための具体的なアドバイスを掲載しています。詳細は「How to Learn SQL」ページをご確認ください。
-
SQL ServerのJOIN(結合)とは?4種類の結合方法を構文・図解・実例で徹底解説
SQL Server(Transact-SQL)では、複数のテーブルにまたがるデータを1つのクエリで取得するためにJOIN(結合)を使用します。SQLコマンド内で2つ以上のテーブルを連結する際に使われる、非常に重要な機能です。 SQL Serverで利用できるJOINには、主に次の4種類があります。 INNER JOIN … 内部結合。最も基本的な結合形式です。 LEFT OUTER JOIN … LEFT JOINとも記述できます。 RIGHT OUTER JOIN … RIGHT JOINとも記述できます。 FULL OUTER JOIN … FULL JOINとも記述できます。 以下
-
Fitbit Pay完全ガイド:設定方法からお支払い・セキュリティ対策まで徹底解説
Fitbitは、最も優れたスマートウェアラブルデバイスのひとつです。多彩なモデルと豊富な機能を備えており、その中でも人気の高い機能が「Fitbit Pay」です。Fitbit IonicやFitbit Versaに搭載されたNFC(近距離無線通信)チップにより、非接触決済に対応したあらゆる店舗で、腕時計をつけたまま支払いが可能になります。 この記事では、Fitbit Payの使い方をマスターできるよう、設定方法からセキュリティ対策まで完全ガイドとして詳しく解説します。 Fitbit Payとは? Fitbit Payは、デビットカードやクレジットカードをFitbit IonicおよびVersa