데이터베이스/SQL
[SQL] 여러 개의 테이블 사용하기(기본키, 외래키, JOIN)
jpocket
2025. 4. 4. 15:19
반응형
학습 내용
- ✅ 기본키(PK), 외래키(FK)
- 기본키(PK : Primary Key)
- 외래키(FK : Foreign Key)
- ✅ 다중 테이블 사용하기(JOIN)
- JOIN
- JOIN의 종류
- 데이터 이어붙이기(UNION)
- 서브쿼리 원리와 방식(Subquery)
- Subquery
- WHERE절 서브쿼리
- 단일행 서브쿼리
- 다중행 서브쿼리
- FROM절 서브쿼리
🛠 기본키 PK: primary key
- PK는 하나의 컬럼이 지정되어 있으며, 해당 컬럼이 데이터는 테이블 내 유일성을 보장한다.
- 유일성을 보장해야 하니까 NULL값은 허용되지 않는다.
🛠 외래키 FK: foreign key
- 다른 테이블과 관계를 맺는 경우, 다른 테이블의 기본키를 참조하는 컬럼
- 기본키를 참조하기 때문에 외래키 값은 참조하는 기본키의 값과 동일하거나 null값이다.
- 🔥즉, 외래키는 기본키와 동일한 값의 종류와 범위를 가진다.
🛠 JOIN ⭐⭐⭐
- 관계형 데이터베이스의 핵심
- 조인 유형을 지정하지 않으면 기본적으로 내부 조인(INNER JOIN)을 실행한다.
- 두 테이블을 조인할 때, 사용한 열의 이름이 동일할 경우, ON대신 USING을 사용할 수 있다.
2개의 테이블 JOIN
mysql("""
SELECT *
FROM orders AS o
JOIN customers AS c
ON o.customerId = c.customerId
""")
ON 에 두 테이블을 합치는 기준을 작성한다.
SELECT orderId, customerId, orderDate, name
FROM orders
JOIN customers
USING (customerId);
🔍 USING을 사용한 이유?
- orders 테이블과 customers 테이블에 customerId 라는 동일한 열이 존재한다고 가정.
- ON orders.customerId = customers.customerId 대신 USING (customerId) 를 사용하면 중복된 열을 한 번만 표시할 수 있다.
- 🔥즉, customerId는 결과에서 한 번만 출력됨.
👉 USING은 동일한 열 이름을 기준으로 조인할 때 깔끔하게 사용할 수 있다.🚀
3개의 테이블 JOIN
mysql("""
SELECT *
FROM orders AS o
JOIN customers AS c
ON o.customerId = c.customerId
JOIN employees AS e
ON c.employeesId = e.employeesId
""")
먼저 2개의 테이블을 JOIN하고 그 결과를 확인한 후에
나머지 1개의 테이블을 JOIN해야 실수를 줄일 수 있다.
🔍JOIN문의 실행 순서는 어떻게 되지?❓
👉 SQL의 JOIN 문은 왼쪽에서 오른쪽으로 순차적으로 실행된다.
따라서 2개의 테이블 조인 결과에 나머지 1개 테이블을 조인한 결과가 출력된다.🚀
🛠 JOIN의 종류
- 🛠 INNER JOIN (INNER생략 가능) : 공통된 부분 기준
- OUTER JOIN
- LEFT JOIN: 왼쪽 테이블 기준, 현업에서 많이 쓰는 방식
- RIGHT JOIN: 오른쪽 테이블 기준, 현업에서 거의 쓰지 않음
- ON절의 조건을 만족하는 데이터만 가져온다.
- 테이블에 일치하는 행이 있으면 가져오고, 일치하는게 없으면 가져오지 않는다.
🛠 OUTER JOIN(LEFT JOIN, RIGHT JOIN)
- 조건을 만족하지 않은 행도 모두 출력하기 위한 조인 기법
- INNER JOIN 조건을 만족하지 못해서 누락되는 행을 출력하기 위해 사용
- 일치하지 않는 데이터를 출력하고자 할 때 유용
- LEFT (OUTER) JOIN으로 사용하며, OUTER는 생략
mysql("""
SELECT *
FROM orders AS o
LEFT JOIN customers AS c
ON o.customerId = c.customerId
ORDER BY o.customerId
""")
테이블 orders 의 모든 행을 기준으로, customerId가 같은 것이 테이블에 있으면 합치고, 없으면 customers쪽 컬럼들은 NULL로 채워서 출력한다.
👉 pandasql에서는 RIGHT JOIN을 사용하면 에러가 뜨므로, 개념 정리에서는 다루지 않을거다.
다음 포스팅에 UNION이랑 서브쿼리 다뤄야겠다.

반응형