728x90

MSSQL 테이블 관계 설정과 JOIN 활용법 – 관계형 데이터 설계부터 실전 쿼리까지
관계형 데이터베이스의 핵심은 테이블 간 관계를 정의하고, 이를 활용한 JOIN 쿼리를 효과적으로 사용하는 것입니다.
이 글에서는 FOREIGN KEY로 관계를 설정하는 방법과, 다양한 종류의 JOIN을 T-SQL로 어떻게 활용하는지를 설명합니다.
1. 테이블 간 관계 설정 (FOREIGN KEY)
FOREIGN KEY는 한 테이블의 열이 다른 테이블의 기본 키를 참조하게 함으로써, 데이터 간의 연결을 보장합니다.
CREATE TABLE Users (
UserId INT PRIMARY KEY,
UserName NVARCHAR(100)
);
CREATE TABLE Orders (
OrderId INT PRIMARY KEY,
UserId INT,
OrderDate DATETIME,
CONSTRAINT FK_Orders_Users FOREIGN KEY (UserId)
REFERENCES Users(UserId)
);
- Users → Orders 관계는 1:N(일대다) 관계
- Order 테이블의 UserId는 Users의 UserId를 참조
2. JOIN의 기본 개념
JOIN은 두 개 이상의 테이블을 조건에 따라 연결하여 결과를 반환하는 SQL 연산입니다.
대표적인 JOIN 유형은 다음과 같습니다:
- INNER JOIN: 두 테이블에 모두 존재하는 데이터만
- LEFT JOIN: 왼쪽 테이블의 모든 데이터 + 일치하는 오른쪽 데이터
- RIGHT JOIN: 오른쪽 테이블의 모든 데이터 + 일치하는 왼쪽 데이터
- FULL OUTER JOIN: 양쪽 모두의 모든 데이터 + 일치하는 데이터
3. 실전 JOIN 예제
▶ INNER JOIN
양쪽 테이블 모두에 데이터가 있는 경우만 조회:
SELECT o.OrderId, o.OrderDate, u.UserName
FROM Orders o
INNER JOIN Users u ON o.UserId = u.UserId;
▶ LEFT JOIN
모든 주문과, 주문한 사용자의 이름 (사용자가 없으면 NULL):
SELECT o.OrderId, o.OrderDate, u.UserName
FROM Orders o
LEFT JOIN Users u ON o.UserId = u.UserId;
▶ RIGHT JOIN
모든 사용자와, 그 사용자가 한 주문 (주문 없으면 NULL):
SELECT o.OrderId, o.OrderDate, u.UserName
FROM Orders o
RIGHT JOIN Users u ON o.UserId = u.UserId;
▶ FULL OUTER JOIN
사용자 또는 주문 중 어느 한 쪽에만 있어도 모두 조회:
SELECT o.OrderId, o.OrderDate, u.UserName
FROM Orders o
FULL OUTER JOIN Users u ON o.UserId = u.UserId;
---
4. 별칭과 JOIN 조건을 활용한 실무 최적화
SELECT o.OrderId, u.UserName, p.ProductName
FROM Orders o
JOIN Users u ON o.UserId = u.UserId
JOIN OrderItems oi ON o.OrderId = oi.OrderId
JOIN Products p ON oi.ProductId = p.ProductId;
위 예제는 4개 테이블을 JOIN하여 주문 내역과 제품명을 함께 조회하는 실전 쿼리입니다.
---5. 실무 팁 💡
- JOIN은 조건이 명확하지 않으면 카르테시안 곱(모든 조합)이 발생하므로 항상 ON 절을 정확히 설정하세요.
- 대용량 테이블 JOIN 시, 인덱스를 활용한 실행 계획 분석을 통해 성능을 확인하세요.
- FOREIGN KEY 제약조건은 JOIN뿐만 아니라 데이터 무결성을 유지하는 데 필수입니다.
마무리
테이블 관계 설정과 JOIN은 MSSQL에서 가장 핵심적인 설계 및 쿼리 개념입니다.
JOIN 유형과 조건을 명확히 이해하면 복잡한 데이터를 효율적으로 연결해 조회할 수 있습니다.
관계형 모델을 구성할 때는 FK 설정과 JOIN 설계를 함께 고려해야 성능과 유지보수 면에서 유리합니다.
728x90
'Database > MSSQL' 카테고리의 다른 글
| MSSQL INSERT, UPDATE, DELETE 문 사용법 (0) | 2025.05.21 |
|---|---|
| MSSQL SELECT 문 기본 사용법과 WHERE 절 활용 (0) | 2025.05.20 |
| MSSQL 인덱스(Index)의 종류와 생성 방법 (0) | 2025.05.18 |
| MSSQL 기본 키(Primary Key)와 외래 키(Foreign Key) 설정 방법 (0) | 2025.05.17 |
| MSSQL DROP TABLE 제대로 사용하기 (0) | 2025.05.16 |