SQL - Left Join vs Right Join: 입문자를 위한 종합 가이드
안녕하세요, SQL 열망하는 여러분! SQL 조인의 세계를 함께 탐험하게 되어 기쁩니다. 컴퓨터 과학을 몇 년 동안 가르쳐온 경험을 바탕으로, 조인을 마스터하면 데이터베이스 분야에서 슈퍼파워를 풀어냄을 알 수 있습니다. 그麼, Left Join과 Right Join의 미스터리를 함께 풀어보겠습니다!
조인 이해: 기초
Left와 Right Join의 세부 사항에 들어가기 전에, SQL에서 조인이 무엇인지 간단히复習해 보겠습니다. 파티를 계획할 때 손님들의 이름과 좋아하는 음료 목록 두 개가 있다고 상상해 보세요. 조인은 마법의 지팡이처럼 이 두 목록을 다양한 방법으로 결합하여 필요한 정보를 얻어주는 것입니다.
Left Join 작동 방식
Left Join이란?
Left Join은 손님 목록에 있는 모든 사람을 파티에 초대하는 것처럼, 좋아하는 음료를 알지 못해도 상관 없이 모든 기록을 반환합니다. 왼쪽 테이블(쿼리에서 먼저 언급된 테이블)의 모든 기록과 일치하는 오른쪽 테이블의 기록을 반환합니다.
Left Join 문법
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
Left Join 예제
이를 설명하기 위해 두 개의 간단한 테이블을 생성해 보겠습니다:
CREATE TABLE Guests (
GuestID INT PRIMARY KEY,
GuestName VARCHAR(50)
);
CREATE TABLE Drinks (
DrinkID INT PRIMARY KEY,
GuestID INT,
FavoriteDrink VARCHAR(50)
);
INSERT INTO Guests (GuestID, GuestName) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie'),
(4, 'David');
INSERT INTO Drinks (DrinkID, GuestID, FavoriteDrink) VALUES
(1, 1, 'Mojito'),
(2, 2, 'Beer'),
(3, 3, 'Wine');
이제 Left Join을 사용하여 모든 손님과 그들의 좋아하는 음료( 알고 있다면)를 얻어보겠습니다:
SELECT Guests.GuestName, Drinks.FavoriteDrink
FROM Guests
LEFT JOIN Drinks ON Guests.GuestID = Drinks.GuestID;
결과:
GuestName | FavoriteDrink |
---|---|
Alice | Mojito |
Bob | Beer |
Charlie | Wine |
David | NULL |
David는 좋아하는 음료가 알려지지 않았지만 결과에 나타납니다. 이것이 Left Join의 마법입니다!
Right Join 작동 방식
Right Join이란?
Right Join은 음료 목록에 중점을 두고 각 음료를 좋아하는 손님을 확인하는 것처럼, 오른쪽 테이블의 모든 기록과 왼쪽 테이블의 일치하는 기록을 반환합니다.
Right Join 문법
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
Right Join 예제
이전 테이블을 사용하여 Right Join을 수행해 보겠습니다:
SELECT Guests.GuestName, Drinks.FavoriteDrink
FROM Guests
RIGHT JOIN Drinks ON Guests.GuestID = Drinks.GuestID;
결과:
GuestName | FavoriteDrink |
---|---|
Alice | Mojito |
Bob | Beer |
Charlie | Wine |
David는 음료 목록에 없기 때문에 결과에 나타나지 않습니다.
Left Join vs Right Join 비교
이제 두 가지 조인을 모두 확인해 보았으므로, 비교해 보겠습니다:
요소 | Left Join | Right Join |
---|---|---|
중점 | 왼쪽(첫 번째) 테이블의 모든 기록 | 오른쪽(두 번째) 테이블의 모든 기록 |
NULL 값 | 오른쪽 테이블 컬럼에서 일치하지 않는 경우 | 왼쪽 테이블 컬럼에서 일치하지 않는 경우 |
사용 사례 | 주요 테이블에서 모든 기록을 원할 때 | 결합된 테이블에서 모든 기록을 원할 때 |
결과 집합 크기 | 항상 왼쪽 테이블의 모든 기록을 포함 | 항상 오른쪽 테이블의 모든 기록을 포함 |
Left Join vs Right Join 사용 시기
- Left Join을 사용할 때:
- 주요(왼쪽) 테이블의 모든 기록을 유지하고 싶을 때.
- 오른쪽 테이블과 일치하지 않는 기록에 대해 NULL 값을 허용할 때.
- Right Join을 사용할 때:
- 보조(오른쪽) 테이블의 모든 기록을 유지하고 싶을 때.
- 왼쪽 테이블과 일치하지 않는 기록에 대해 NULL 값을 허용할 때.
프로 팁
제가 가르치는 동안 많은 개발자들이 Left Join을 Right Join보다 선호하는 것을 발견했습니다. 왜냐하면 Left Join은 더 직관적이고 이해하기 쉬우едь니다. Right Join을 Left Join으로 쉽게 변환할 수 있으므로, Right Join이 혼란스러울 경우 Left Join을 사용하시도록 권장합니다!
실습 문제
이제 이해를 더욱 공고히 하기 위해 재미있는 실습 문제를 해결해 보겠습니다. 책 구독 클럽을 조직하는 상황을 상상해 보세요. 두 개의 테이블이 있습니다: Members
와 Books
.
CREATE TABLE Members (
MemberID INT PRIMARY KEY,
MemberName VARCHAR(50)
);
CREATE TABLE Books (
BookID INT PRIMARY KEY,
MemberID INT,
BookTitle VARCHAR(100)
);
INSERT INTO Members (MemberID, MemberName) VALUES
(1, 'Emma'),
(2, 'James'),
(3, 'Sophia'),
(4, 'Oliver');
INSERT INTO Books (BookID, MemberID, BookTitle) VALUES
(1, 1, 'Pride and Prejudice'),
(2, 2, '1984'),
(3, 2, 'To Kill a Mockingbird'),
(4, 3, 'The Great Gatsby');
이제 다음 쿼리를 시도해 보세요:
- Left Join을 사용하여 모든 회원과 그들의 책( 있으면)을 얻는다:
SELECT Members.MemberName, Books.BookTitle
FROM Members
LEFT JOIN Books ON Members.MemberID = Books.MemberID;
- Right Join을 사용하여 모든 책과 그 책의 주인( 있으면)을 얻는다:
SELECT Members.MemberName, Books.BookTitle
FROM Members
RIGHT JOIN Books ON Members.MemberID = Books.MemberID;
결과를 비교해 보세요. 차이점을 찾아보세요.
결론
축하합니다! SQL에서 Left와 Right 조인의 예술을 마스터했습니다. 연습이 완벽을 이루는 열쇠이므로, 다양한 시나리오를 사용하여 이 조인을 실험해 보세요.
마지막으로, 제 학생들에게 항상 말씀드리는 것은 이입니다: "SQL 조인은 퍼즐 조각입니다. 그것을 더 많이 놀이하면, 데이터의 큰 그림을 더 잘 맞추는 데 능숙해집니다!"
Happy querying, 그리고 조인이 항상 정확하게 맞춰지기를 바랍니다!
Credits: Image by storyset