SQL - Left Join: 초보자를 위한 종합 가이드
안녕하세요, SQL 열망하는 분들! 오늘 우리는 SQL Left Joins의 세계로 흥미로운 여정을 떠납니다. 프로그래밍에 새로운 사람이라고 걱정하지 마세요; 저는 친절한 안내자가 되어 단계별로 모든 것을 설명해 드릴 것입니다. 따뜻한 커피를 한 잔 챙기시고, 이제 다이빙해 보겠습니다!
Outer Join이란?
Left Joins에 들어가기 전에 먼저 Outer Join이 무엇인지 이해해 보겠습니다. 파티를 계획하고 있고, 친구들의 이름과 좋아하는 음료 목록이 두 개 있다고 상상해 보세요. Outer Join은 이 두 목록을 결합하는 것처럼, 어떤 친구가 좋아하는 음료를 지정하지 않았거나 어떤 음료가 어떤 친구에게 할당되지 않았을 때에도 결합할 수 있습니다.
SQL 용어로, Outer Join은 관련 컬럼을 기반으로 두 개 이상의 테이블의 행을 결합할 수 있게 해주며, 테이블 중 하나에 매칭이 되지 않는 경우에도 가능합니다. Outer Join은 세 가지 유형이 있습니다:
Join 유형 | 설명 |
---|---|
Left Join | 왼쪽 테이블의 모든 행과 오른쪽 테이블의 매칭된 행을 반환합니다 |
Right Join | 오른쪽 테이블의 모든 행과 왼쪽 테이블의 매칭된 행을 반환합니다 |
Full Outer Join | 왼쪽 또는 오른쪽 테이블에 매칭이 되는 모든 행을 반환합니다 |
이 튜토리얼에서는 가장 흔히 사용되는 Outer Join인 Left Join에 집중하겠습니다.
SQL Left Join
Left Join은 왼쪽 테이블(쿼리에서 처음 언급된 테이블)의 모든 레코드와 매칭된 오른쪽 테이블의 레코드를 반환합니다. 매칭이 되지 않으면 오른쪽에 NULL이 나타납니다.
예를 들어보겠습니다. 두 개의 테이블이 있다고 가정해 봅시다: Students
와 Courses
.
-- 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);
이제 Left Join을 사용하여 모든 학생과 그들의 과목(있으면)을 보겠습니다:
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는 어떤 과목에도 등록되지 않았지만 결과에 나타나 있습니다. 이것이 Left Join의 마법입니다!
여러 테이블을 Left Join으로 결합하기
이제 기본을 마스터했으니, 더 어려운 것으로 도전해 보겠습니다. 현실 세계에서는 종종 두 개 이상의 테이블을 결합해야 할 때가 많습니다. 걱정하지 마세요; Left Join이 당신을 도와줄 것입니다!
이 예제에 세 번째 테이블을 추가해 보겠습니다: 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 |
다양한 테이블의 정보를 이렇게 쉽게 결합할 수 있어서 놀라지 않나요?
Left Join과 WHERE 절
때로는 Left Join의 결과를 필터링하고 싶을 수 있습니다. 이럴 때 WHERE 절이 유용하게 사용됩니다. 예를 들어, 과목에 등록되지 않은 모든 학생을 찾고 싶다면:
SELECT Students.Name
FROM Students
LEFT JOIN Courses ON Students.StudentID = Courses.StudentID
WHERE Courses.CourseID IS NULL;
이 쿼리는 다음과 같은 결과를 반환합니다:
Name |
---|
Charlie |
WHERE 절은 조인 작업 후에 적용됩니다. 오른쪽 테이블을 조인하기 전에 필터링하고 싶다면, ON 절을 사용해야 합니다.
결론
이제 그대로! 우리는 SQL Left Joins의 세계를 여행하며, 기본 개념에서 고급 애플리케이션까지 다루었습니다. Left Joins은 여러분의 SQL 도구箱에서 매우 강력한 도구로, 완벽한 매칭이 없더라도 다양한 테이블의 데이터를 결합할 수 있게 해줍니다.
연습하고 경험을 쌓을수록 Left Joins이 두 번째 nature가 될 것입니다. 그들은 스위스 아ーノ이 knife처럼 - 다목적, 유용하며, 필요할 때 항상 당신의 손을 잡습니다.
SQL을 마스터하는 열쇠는 연습입니다. 따라서 다양한 쿼리와 테이블 구조를 실험해 보지 마세요. 행복한 코딩을 기원하며, 여러분의 조인이 항상 성공하길 바랍니다!
Credits: Image by storyset