Post

08. SQL(Join)

08. SQL(Join)

[toc]

Join이란?

  • 여러 테이블의 연관된 데이터를 합치는 연산을 Join이라 한다.
  • 관계형 데이터베이스(RDBMS)는 이를 통해 다양한 형태의 데이터 분석을 가능하게 한다.

카티션곱 vs 이너조인

  • 카티션곱(Cartesian Product): 테이블 A의 모든 행 × 테이블 B의 모든 행 (조건 없이 모든 조합 생성)
  • 이너조인(Inner Join): 공통 컬럼을 기준으로 일치하는 행만 출력
1
2
SELECT * 
FROM class.student s, class.major m;
  • 위 쿼리는 카티션곱이 발생해, 5 × 3 = 15개의 행이 출력됨
1
2
3
4
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 조건은 조인 이후 필터링 역할
1
2
3
4
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 절에서 조인 조건을 명시
  • 오래된 방식이며 가독성이 떨어지고 유지보수에 불리함
1
2
3
SELECT s.name, m.major_title
FROM class.student s, class.major m
WHERE s.major_id = m.major_id;

실습 내용 정리

🔹 student 테이블

student_idnamemajor_idbl_prfs_id
1Mike11
2John22
3Cole32
4Jordan11
5Curry33

🔹 major 테이블

major_idmajor_titlemajor_student_cnt
1Computer2
2Business1
3Sports Education2

🔹 professor 테이블

prfs_idnamemajor_id
1김철수1
2박영희2
3최자영3

다양한 Join 실습

✅ 학과 정보 + 학생 정보

1
2
3
4
SELECT s.student_id, s.name, m.major_title
FROM class.student s
JOIN class.major m
ON s.major_id = m.major_id;

→ 학생 이름과 학과명을 함께 출력


✅ 교수 정보 + 학생 정보

1
2
3
4
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명)

1
2
3
4
5
6
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

  • 등호(=)가 아닌 조건을 사용하는 조인
  • 예: 포인트 범위에 따른 선물 제공 기준
1
2
3
4
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 JoinBETWEEN, <, > 같은 비교 연산자를 사용한 조인 방식

End