SQL - 全結合: 初心者向けの包括的なガイド
こんにちは、未来のSQLマエストロたち!私は、SQLの全結合の世界に飛び込むこのエキサイティングな旅であなたのガイドを務めることができてとても嬉しいです。私は多年間コンピュータサイエンスの教師をしており、この強力な概念をFinally理解した生徒たちが光り続けるのを見てきました。では、袖をまくって一緒に潜りましょう!
SQLの全結合
什么は全結合?
大きなパーティを計画していて、友達と家族の2つのゲストリストがあるとします。全結合は、そのリストを組み合わせて、どちらのリストにも載っている人全てを含めるようなものです。SQLの言葉で言うと、全結合は2つのテーブルの全ての行を返し、一致しているかどうかにかかわらずです。
全結合の構文
以下は全結合の基本的な構文です:
SELECT columns
FROM table1
FULL JOIN table2
ON table1.column = table2.column;
これを分解すると:
-
SELECT columns
:結果に欲しい列を指定します。 -
FROM table1
:これはあなたの最初のテーブルです。 -
FULL JOIN table2
:これはSQLに、2番目のテーブルで全結合を行いたいと伝えます。 -
ON table1.column = table2.column
:これは結合条件で、テーブルがどのように関連しているかを指定します。
シンプルな例
例えば、私たちが2つのテーブル、「Employees」と「Departments」を持っているとします。
-- Employeesテーブルを作成
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
Name VARCHAR(50),
DepartmentID INT
);
-- Departmentsテーブルを作成
CREATE TABLE Departments (
DepartmentID INT PRIMARY KEY,
DepartmentName VARCHAR(50)
);
-- データをインサート
INSERT INTO Employees VALUES (1, 'Alice', 1), (2, 'Bob', 2), (3, 'Charlie', NULL);
INSERT INTO Departments VALUES (1, 'HR'), (2, 'IT'), (3, 'Finance');
-- 全結合を実行
SELECT e.Name, d.DepartmentName
FROM Employees e
FULL JOIN Departments d ON e.DepartmentID = d.DepartmentID;
このクエリは以下の結果を返します:
Name | DepartmentName |
---|---|
Alice | HR |
Bob | IT |
Charlie | NULL |
NULL | Finance |
Charlie(部門に割り当てられていない)とFinance(従業員のいない部門)がまだ結果に含まれていることに注意してください。これが全結合の魔法です!
複数のテーブルを全結合で結合
では、一段階進んでみましょう。もし私たちが2つ以上のテーブルを結合したい場合どうでしょうか?問題ありません!全結合はそれもできます。
3つのテーブルを結合する例
先の例に「Projects」テーブルを追加してみましょう:
-- Projectsテーブルを作成
CREATE TABLE Projects (
ProjectID INT PRIMARY KEY,
ProjectName VARCHAR(50),
DepartmentID INT
);
-- データをインサート
INSERT INTO Projects VALUES (1, 'Website Redesign', 2), (2, 'Employee Survey', 1), (3, 'Cost Cutting', 3);
-- 3つのテーブルで全結合を実行
SELECT e.Name, d.DepartmentName, p.ProjectName
FROM Employees e
FULL JOIN Departments d ON e.DepartmentID = d.DepartmentID
FULL JOIN Projects p ON d.DepartmentID = p.DepartmentID;
このクエリは以下の結果を返します:
Name | DepartmentName | ProjectName |
---|---|---|
Alice | HR | Employee Survey |
Bob | IT | Website Redesign |
Charlie | NULL | NULL |
NULL | Finance | Cost Cutting |
このようにして、従業員、その部署、関連するプロジェクトを一括で確認することができます。素晴らしいですね!
全結合でWHERE句を使用する
時折、全結合の結果をフィルタリングしたいことがあります。WHERE句が役に立ちます。
全結合結果をフィルタリングする
先のクエリを修正して、プロジェクトがある部署だけを表示するようにします:
SELECT e.Name, d.DepartmentName, p.ProjectName
FROM Employees e
FULL JOIN Departments d ON e.DepartmentID = d.DepartmentID
FULL JOIN Projects p ON d.DepartmentID = p.DepartmentID
WHERE p.ProjectName IS NOT NULL;
これは以下の結果を返します:
Name | DepartmentName | ProjectName |
---|---|---|
Alice | HR | Employee Survey |
Bob | IT | Website Redesign |
NULL | Finance | Cost Cutting |
Charlieが結果から消えたことに注意してください。彼はどのプロジェクトにも関連していないためです。
NULL値を処理する
全結合を使用すると、NULL値を頻繁に遭遇します。以下のプロヒブを覚えておくと良いでしょう:NULL値をデフォルト値に置き換えるためにCOALESCEを使用します:
SELECT
COALESCE(e.Name, 'Unassigned') AS EmployeeName,
COALESCE(d.DepartmentName, 'No Department') AS DepartmentName,
COALESCE(p.ProjectName, 'No Project') AS ProjectName
FROM Employees e
FULL JOIN Departments d ON e.DepartmentID = d.DepartmentID
FULL JOIN Projects p ON d.DepartmentID = p.DepartmentID;
これは以下のよりユーザーフレンドリーな出力を提供します:
EmployeeName | DepartmentName | ProjectName |
---|---|---|
Alice | HR | Employee Survey |
Bob | IT | Website Redesign |
Charlie | No Department | No Project |
Unassigned | Finance | Cost Cutting |
これはずっと良いでしょう?今私たちは組織全体の明確なイメージを持っています。従業員がいない部署やプロジェクトに従業員がいない部署も含まれています。
結論
そして、皆さん!SQLの全結合の土地を旅しました。基本的概念から高度な技術まで、全結合は「パーティの招待状のように包括的」です。一致しているかどうかにかかわらず、誰もが歓迎されます。
これらの概念を練習すると、全結合はデータ分析やレポート作成に非常に強力なツールであることがわかります。欠けている部分も含めて、データの全体像を見ることができます。
実験を続け、結合を続け、最も重要なのは、SQLを楽しむことです!間もなく、あなたはチームの中の全結合の ninja になるでしょう。ハッピーコーディング!
Credits: Image by storyset