SQL - 조인 사용법: 초보자를 위한 종합 가이드
안녕하세요, 데이터베이스 열정가 되고자 하는 여러분! 컴퓨터 과학 교사로서 오랜 경험을 가진 저는 SQL 조인의 흥미로운 세계를 안내해 드리게 되어 기쁩니다. 프로그래밍에 처음이라면 걱정 마세요 - 우리는 기초부터 시작해 점진적으로 학습해 나갈 것입니다. 이 튜토리얼의 끝을 맺을 때쯤에는 프로처럼 테이블을 조인할 수 있을 것입니다!
SQL 조인이란?
大型가족 모임을 준비하는 상상해 보세요. 한쪽에는 이름과 나이가 적힌 목록이고, 다른 쪽에는 이름과 좋아하는 음식이 적힌 목록이 있습니다. 이 두 목록을 결합하여 각 가족 구성원에 대한 완전한 정보를 얻는 것이 얼마나 좋을까요? SQL 조인이 데이터베이스 테이블에 대해 정확히 그런 일을 수행합니다!
SQL에서 조인 절은 두 개 이상의 테이블에서 관련된 열을 기준으로 행을 결합하는 데 사용됩니다. 여러 출처의 정보를 포함한 슈퍼 테이블을 생성하는 것과 같습니다.
SQL 조인 절
SQL JOIN의 기본 문법은 다음과 같습니다:
SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name = table2.column_name;
이를 해부해 보면:
- 우리는 결과에서 보고 싶은 열을 SELECT 합니다.
- FROM 절에서 첫 번째 테이블(table1)을 지정합니다.
- JOIN을 사용하여 다른 테이블(table2)과 결합하려는 의도를 표시합니다.
- ON 절은 테이블이 어떻게 일치되어야 하는지 지정합니다.
SQL에서의 조인 유형
이제 SQL에서 사용할 수 있는 다양한 조인 유형을 탐구해 보겠습니다. 이를 우리의 가족 모임에 초대하는 방법으로 생각해 보겠습니다!
1. 내부 조인 (INNER JOIN)
내부 조인은 우리의 목록과 우리의 누나의 목록 모두에 나타나는 사촌만 초대하는 것과 같습니다. 두 테이블에서 일치하는 값을 가진 레코드를 반환합니다.
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
이 쿼리는 모든 주문과 고객 이름을 반환하지만, 주문을 한 고객만 해당됩니다.
2. 왼쪽 ( 외부 ) 조인 (LEFT JOIN)
왼쪽 조인은 우리의 목록에 있는 모든 사람을 포함하는 것과 같습니다. 왼쪽 테이블의 모든 레코드와 오른쪽 테이블의 일치하는 레코드를 반환합니다.
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
이는 모든 고객을 표시하며, 주문이 없는 고객의 OrderID는 NULL이 됩니다.
3. 오른쪽 ( 외부 ) 조인 (RIGHT JOIN)
오른쪽 조인은 우리의 누나의 목록을 주요 목록으로 사용하는 것과 반대입니다. 오른쪽 테이블의 모든 레코드와 왼쪽 테이블의 일치하는 레코드를 반환합니다.
SELECT Orders.OrderID, Employees.LastName
FROM Orders
RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID;
이는 모든 직원을 표시하며, 주문을 처리하지 않은 직원의 OrderID는 NULL이 됩니다.
4. 전체 ( 외부 ) 조인 (FULL JOIN)
전체 조인은 우리와 우리의 누나의 목록을 모두 결합하는 것과 같습니다. 왼쪽이나 오른쪽 테이블에서 일치하는 레코드가 있을 때 모든 레코드를 반환합니다.
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
이는 모든 고객과 모든 주문을 표시하며, 일치하지 않는 경우 NULL 값이 나타납니다.
실제 예제
이제 우리의 지식을 실제 상황에 적용해 보겠습니다!
예제 1: 고객 및 주문 정보 결합
가정해 봅시다. 두 개의 테이블이 있습니다: Customers
와 Orders
. 우리는 모든 고객과 그들의 주문(있다면)을 보고 싶습니다.
SELECT Customers.CustomerName, Orders.OrderID, Orders.OrderDate
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;
이 쿼리는 다음을 수행합니다:
- 모든 고객을 목록에 표시합니다.
- 주문을 한 고객의 OrderID와 OrderDate를 표시합니다.
- 주문이 없는 고객의 OrderID와 OrderDate는 NULL로 표시합니다.
- CustomerName으로 결과를 정렬합니다.
예제 2: 판매를 하지 않은 직원 찾기
우리는 주문을 처리하지 않은 직원을 식별하고 싶다고 가정해 봅시다.
SELECT Employees.EmployeeID, Employees.LastName, Employees.FirstName
FROM Employees
LEFT JOIN Orders ON Employees.EmployeeID = Orders.EmployeeID
WHERE Orders.OrderID IS NULL;
이 쿼리는 다음을 수행합니다:
- 직원과 주문을 조인합니다.
- WHERE 절을 사용하여 주문이 없는 직원을 필터링합니다.
- 주문을 처리하지 않은 직원을 반환합니다.
팁과 트릭
- 항상 간단한 조인부터 시작하고 점진적으로 복잡성을 높입니다.
- 가독성을 높이기 위해 테이블 별칭을 사용합니다:
SELECT c.CustomerName, o.OrderID FROM Customers c LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;
- 큰 데이터셋에서의 성능에 주의하세요. 조인은 자원 소모가 많을 수 있습니다.
일반 조인 방법
다음 표는 우리가 논의한 조인 방법을 요약합니다:
조인 유형 | 설명 |
---|---|
내부 조인 (INNER JOIN) | 두 테이블에서 일치하는 값을 가진 레코드를 반환합니다 |
왼쪽 조인 (LEFT JOIN) | 왼쪽 테이블의 모든 레코드와 오른쪽 테이블의 일치하는 레코드를 반환합니다 |
오른쪽 조인 (RIGHT JOIN) | 오른쪽 테이블의 모든 레코드와 왼쪽 테이블의 일치하는 레코드를 반환합니다 |
전체 조인 (FULL JOIN) | 왼쪽이나 오른쪽 테이블에서 일치하는 레코드가 있을 때 모든 레코드를 반환합니다 |
기억하세요, 연습이 완벽을 이루는 것입니다! 다양한 데이터셋으로 이 조인을 시도해 보세요. 그러면 데이터베이스 마법사가 될 것입니다. 행복하게 코딩하세요, 그리고 여러분의 조인이 항상 성공하길 바랍니다!
Credits: Image by storyset