08. SQL(Join)
08. SQL(Join)
[toc]
Join이란?
- 여러 테이블의 연관된 데이터를 합치는 연산을 Join이라 한다.
- 관계형 데이터베이스(RDBMS)는 이를 통해 다양한 형태의 데이터 분석을 가능하게 한다.
카티션곱 vs 이너조인
- 카티션곱(Cartesian Product): 테이블 A의 모든 행 × 테이블 B의 모든 행 (조건 없이 모든 조합 생성)
- 이너조인(Inner Join): 공통 컬럼을 기준으로 일치하는 행만 출력
SELECT * FROM class.student s, class.major m; - 위 쿼리는 카티션곱이 발생해, 5 × 3 = 15개의 행이 출력됨
SELECT * FROM class.student s JOIN class.major m ON s.major_id = m.major_id; - 공통 컬럼(major_id)을 기준으로 JOIN → 정확히 일치하는 행만 출력됨
ANSI SQL vs Non-ANSI SQL
✅ ANSI SQL
- SQL 표준 문법에 따라 작성된 조인
JOIN키워드와ON절을 이용해 조건을 명시적으로 표현- 가독성이 좋고, 다양한 DBMS에서 호환성 우수
- WHERE 조건은 조인 이후 필터링 역할
SELECT s.name, m.major_title FROM class.student s JOIN class.major m ON s.major_id = m.major_id; ✅ Non-ANSI SQL (Oracle 등에서 사용됨)
FROM절에 여러 테이블을 나열하고,WHERE절에서 조인 조건을 명시- 오래된 방식이며 가독성이 떨어지고 유지보수에 불리함
SELECT s.name, m.major_title FROM class.student s, class.major m WHERE s.major_id = m.major_id; 실습 내용 정리
🔹 student 테이블
| student_id | name | major_id | bl_prfs_id |
|---|---|---|---|
| 1 | Mike | 1 | 1 |
| 2 | John | 2 | 2 |
| 3 | Cole | 3 | 2 |
| 4 | Jordan | 1 | 1 |
| 5 | Curry | 3 | 3 |
🔹 major 테이블
| major_id | major_title | major_student_cnt |
|---|---|---|
| 1 | Computer | 2 |
| 2 | Business | 1 |
| 3 | Sports Education | 2 |
🔹 professor 테이블
| prfs_id | name | major_id |
|---|---|---|
| 1 | 김철수 | 1 |
| 2 | 박영희 | 2 |
| 3 | 최자영 | 3 |
다양한 Join 실습
✅ 학과 정보 + 학생 정보
SELECT s.student_id, s.name, m.major_title FROM class.student s JOIN class.major m ON s.major_id = m.major_id; → 학생 이름과 학과명을 함께 출력
✅ 교수 정보 + 학생 정보
SELECT s.name AS student, p.name AS professor FROM class.student s JOIN class.professor p ON s.bl_prfs_id = p.prfs_id; → 학생별 담당 교수를 연결
✅ 조건부 Join with Subquery (학과 인원 수 < 300명)
SELECT s.major_id, s.student_id, s.name, m.major_title, m.major_student_cnt FROM class.student s JOIN ( SELECT * FROM class.major WHERE major_student_cnt < 300 ) AS m ON s.major_id = m.major_id; Non-equi Join
- 등호(=)가 아닌 조건을 사용하는 조인
- 예: 포인트 범위에 따른 선물 제공 기준
SELECT * FROM class.customer c JOIN class.gift g ON c.point BETWEEN g.point_s AND g.point_e; Summary
- Join은 SQL에서 가장 중요한 연산 중 하나
- INNER JOIN은 공통 키 값을 기준으로 데이터를 연결
- ANSI SQL은 가독성과 유지보수성, 호환성이 좋음
- Non-equi Join은
BETWEEN,<,>같은 비교 연산자를 사용한 조인 방식
End
