SQL - 左結合: 初心者向けの包括ガイド
こんにちは、SQLに興味を持つ皆さん!今日は、SQLの左結合の世界に楽しく飛び込んでみましょう。プログラミングが初めてであれば心配しないでください。あなたの親切なガイドとして、ステップバイステップですべてを説明します。コーヒーを淹れて、一緒に潜りましょう!
外部結合とは?
左結合に詳しくなる前に、まず外部結合とは何かを理解しましょう。パーティを計画しているとします。その際、友人たちの名前のリストと、彼らの好きな飲み物のリストの2つがあります。外部結合は、友人たちが好きな飲み物を指定していない場合や、飲み物が誰にでも割り当てられていない場合でも、これらのリストを結合することに似ています。
SQLの用語では、外部結合は、関連する列に基づいて2つ以上のテーブルの行を結合する东西があります。一致しないテーブルでも結合が可能です。外部結合には3つの種類があります:
結合タイプ | 説明 |
---|---|
左結合 | 左テーブルのすべての行と右テーブルの一致する行を返します |
右結合 | 右テーブルのすべての行と左テーブルの一致する行を返します |
全結合 | 左テーブルまたは右テーブルのいずれかで一致する場合すべての行を返します |
このチュートリアルでは、最も一般的に使用される外部結合である左結合に焦点を当てます。
SQLの左結合
左結合は、左テーブル(クエリで最初に挙げられたテーブル)のすべての記録と、右テーブルの一致する記録を返します。一致しない場合、右側の結果はNULLになります。
例をみてみましょう。Students
テーブルとCourses
テーブルの2つがあるとします。
-- Studentsテーブル
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
Name VARCHAR(50)
);
INSERT INTO Students VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');
-- Coursesテーブル
CREATE TABLE Courses (
CourseID INT PRIMARY KEY,
CourseName VARCHAR(50),
StudentID INT
);
INSERT INTO Courses VALUES
(101, 'SQL Basics', 1),
(102, 'Advanced SQL', 2),
(103, 'Data Analysis', NULL);
さて、左結合を使用して、すべての学生と彼らの科目(場合によっては)を見てみましょう:
SELECT Students.Name, Courses.CourseName
FROM Students
LEFT JOIN Courses ON Students.StudentID = Courses.StudentID;
結果は以下のようになります:
Name | CourseName |
---|---|
Alice | SQL Basics |
Bob | Advanced SQL |
Charlie | NULL |
Charlieが結果に表示されているように、彼は科目に登録していないにも関わらず、左結合の魔法の効果です!
複数のテーブルを左結合で結合する
基本を理解したので、少し難易度を上げてみましょう。現実のシナリオでは、しばしば2つ以上のテーブルを結合する必要があります。心配しないでください。左結合はあなたをサポートします!
例に第三个のテーブルを追加してみましょう:Instructors
。
CREATE TABLE Instructors (
InstructorID INT PRIMARY KEY,
InstructorName VARCHAR(50),
CourseID INT
);
INSERT INTO Instructors VALUES
(201, 'Prof. Smith', 101),
(202, 'Dr. Johnson', 102),
(203, 'Ms. Williams', NULL);
さて、すべてのテーブルを結合して、学生、科目、指導教員の包括的なビューを見てみましょう:
SELECT Students.Name AS StudentName,
Courses.CourseName,
Instructors.InstructorName
FROM Students
LEFT JOIN Courses ON Students.StudentID = Courses.StudentID
LEFT JOIN Instructors ON Courses.CourseID = Instructors.CourseID;
このクエリはまずStudents
とCourses
を結合し、その結果をInstructors
と結合します。結果は以下のようになります:
StudentName | CourseName | InstructorName |
---|---|---|
Alice | SQL Basics | Prof. Smith |
Bob | Advanced SQL | Dr. Johnson |
Charlie | NULL | NULL |
複数のテーブルの情報を簡単に結合できるのは素晴らしいですね!
左結合でWHERE句を使用する
時折、左結合の結果をフィルタリングしたい場合があります。WHERE句が役に立ちます。例えば、科目に登録していないすべての学生を見つめたいとします:
SELECT Students.Name
FROM Students
LEFT JOIN Courses ON Students.StudentID = Courses.StudentID
WHERE Courses.CourseID IS NULL;
このクエリは以下の結果を返します:
Name |
---|
Charlie |
WHERE句は結合操作の後で適用されます。右テーブルを結合する前にフィルタリングしたい場合は、ON句を使用する必要があります。
結論
そして、皆さん、ここまでSQLの左結合の世界を旅しました。基本的な概念からより高度なアプリケーションまでです。左結合は、完全な一致がなくてもデータを結合する強力なツールです。
練習を重ねることで、左結合が自然に使えるようになります。左結合はSQLのツールボックスの中で、多様で便利で、いつでも必要なときに利用できる「スイスアーミーナイフ」です。
SQLをマスターする鍵は練習です。ですので、さまざまなクエリやテーブル構造を試してみることをお勧めします。ハッピーコーディング、そしてあなたの結合が常に成功するよう願っています!
Credits: Image by storyset