개발자공부일기
SQL JOIN 본문
INNER JOIN
INNER JOIN은 교집합을 의미하며, 이를 사용하면 두 테이블의 공통값이 매칭되는 데이터만을 조회합니다.
SELECT A.*, B.*
FROM TableA A
INNER JOIN TableB B ON A.id = B.id;
OUTER JOIN
FULL OUTER JOIN은 합집합을 의미한다. 두 테이블간의 공통으로 매칭되는 값뿐만 아니라 매칭되지 않는 데이터까지 조회한다.
SELECT A.*, B.*
FROM TableA A
FULL JOIN TableB B ON A.id = B.id;
LEFT OUTER JOIN은 A테이블을 기준으로 결합하는 것이다.
SELECT A.*, B.*
FROM TableA A
LEFT JOIN TableB B ON A.id = B.id;
RIGHT OUTER JOIN은 B테이블을 기준으로 결합하는 것이다.
SELECT A.*, B.*
FROM TableA A
RIGHT JOIN TableB B ON A.id = B.id;
OUTER JOIN의 종류
- LEFT OUTER JOIN: 왼쪽 테이블의 모든 값이 출력되는 조인
- RIGHT OUTER JOIN: 오른쪽 테이블의 모든 값이 출력되는 조인
- FULL OUTER JOIN: 왼쪽 외부 조인과 오른쪽 외부 조인이 합쳐진 것
CROSS JOIN
두 테이블의 모든 행을 조합하여 곱집합(Cartesian Product)을 생성합니다.
SELECT A.*, B.*
FROM TableA A
CROSS JOIN TableB B;
예제
간단한 데이터 테이블을 만들고 JOIN을 적용하는 예제
1. Customers (고객 테이블)
id | name | city |
1 | Alice | Seoul |
2 | Bob | Busan |
3 | Charlie | Daegu |
2. Orders (주문 테이블)
id | customer_id | product |
1 | 1 | Laptop |
2 | 2 | Phone |
3 | 4 | Tablet |
INNER JOIN 예제 (일치하는 데이터만 조회)
SELECT Customers.id, Customers.name, Orders.product
FROM Customers
INNER JOIN Orders ON Customers.id = Orders.customer_id;
🔹 결과 (id=3인 Charlie는 주문 내역이 없어서 제외됨)
id | name | product |
1 | Alice | Laptop |
2 | Bob | Phone |
LEFT JOIN 예제 (고객은 모두 출력, 주문이 없으면 NULL)
SELECT Customers.id, Customers.name, Orders.product
FROM Customers
LEFT JOIN Orders ON Customers.id = Orders.customer_id;
🔹 결과 (Charlie도 포함되지만 주문이 없어서 NULL)
id | name | product |
1 | Alice | Laptop |
2 | Bob | Phone |
3 | Charlie | NULL |
RIGHT JOIN 예제 (주문이 있는 고객만 출력, 없는 고객 제외)
SELECT Customers.id, Customers.name, Orders.product
FROM Customers
RIGHT JOIN Orders ON Customers.id = Orders.customer_id;
🔹 결과 (Charlie는 주문이 없어서 제외, customer_id=4인 주문은 Customers 테이블에 고객 정보가 없어 NULL)
id | name | product |
1 | Alice | Laptop |
2 | Bob | Phone |
NULL | NULL | Tablet |
FULL JOIN 예제 (모든 데이터 출력, 일치하지 않으면 NULL)
SELECT Customers.id, Customers.name, Orders.product
FROM Customers
FULL JOIN Orders ON Customers.id = Orders.customer_id;
🔹 결과 (Charlie와 customer_id=4인 주문도 포함)
id | name | product |
1 | Alice | Laptop |
2 | Bob | Phone |
3 | Charlie | NULL |
NULL | NULL | Tablet |
CROSS JOIN 예제 (모든 조합 생성)
SELECT Customers.name, Products.product, Products.price
FROM Customers
CROSS JOIN Products;
🔹 결과 (모든 고객이 모든 상품과 조합됨)
name | product | price |
Alice | Laptop | 1000 |
Alice | Phone | 500 |
Bob | Laptop | 1000 |
Bob | Phone | 500 |
'CS지식 > 데이터베이스' 카테고리의 다른 글
무결성 (0) | 2025.02.24 |
---|---|
ER 모델,Primary Key ,Foreign Key (0) | 2025.02.21 |
데이터베이스 정규화 (0) | 2024.12.03 |