MySQL

MySQL - JOIN

powergirl 2025. 8. 25. 20:08

JOIN 은 두 개 이상의 테이블을 연결해서 한꺼번에 데이터를 조회하는 방법이다.

 

 

즉,
두 테이블의 공통된 컬럼을 기준으로 데이터를 합쳐서 보여주는 기능

 

INNER JOIN

두 테이블에서 조건이 일치하는 데이터만 보여준다.

공통되는 값이 없으면 결과가 나타나지 않음

SELECT *
FROM A
INNER JOIN B ON A.key = B.key;

 

예제

SELECT students.name, courses.title
FROM students
INNER JOIN enrollments
ON students.id = enrollments.student_id
INNER JOIN courses
ON enrollments.course_id = courses.id;

 

결과: 수강 신청이 있는 학생만, 그 학생이 수강한 과목 제목 표시

 

ON students.id = enrollments.student_id

students 테이블과 enrollments 테이블을 students.id = enrollments.student_id로 연결

 

ON enrollments.course_id = courses.id;

enrollments와 courses를 course_id 기준으로 연결

 

 

 

LEFT JOIN

왼쪽 테이블의 모든 데이터를 표시

오른쪽에 매칭되는 데이터가 없으면 NULL로 표시됨

SELECT *
FROM A
LEFT JOIN B ON A.key = B.key;

 

예제

SELECT students.name, courses.title
FROM students
LEFT JOIN enrollments
ON students.id = enrollments.student_id
LEFT JOIN courses
ON enrollments.course_id = courses.id;

결과: 모든 학생 표시

수강 신청 안 한 학생은 title이 NULL

 

 

 

RIGHT JOIN

오른쪽 테이블의 모든 데이터 표시

왼쪽 테이블에 매칭되는 값이 없으면 NULL로 표시

SELECT *
FROM A
RIGHT JOIN B ON A.key = B.key;

 

예제

SELECT students.name, courses.title
FROM students
RIGHT JOIN enrollments
ON students.id = enrollments.student_id;

enrollments에 있는 모든 레코드 표시

학생 정보 없는 수강 기록은 name이 NULL

참고: LEFT JOIN을 쓰고 테이블 순서를 바꾸면 RIGHT JOIN과 같음

 

 

 

CROSS JOIN

두 테이블의 모든 조합(Cartesian Product) 생성

조건 없이 무조건 모든 조합을 보여줌

데이터가 많으면 결과가 급격히 많아질 수 있음

SELECT students.name, courses.title
FROM students
CROSS JOIN courses;

학생 10명, 과목 5개 → 결과 50행

 

 

 

SELF JOIN (자기 자신과 JOIN)

테이블을 자기 자신과 연결

통 계층 구조나 관계 데이터를 조회할 때 사용

SELECT e1.name AS employee, e2.name AS manager
FROM employees e1
LEFT JOIN employees e2
ON e1.manager_id = e2.id;

 

 

 

 

 

예제 테이블
더보기
students 테이블
+----+-------+
| id | name  |
+----+-------+
| 1  | 철수   |
| 2  | 영희   |
| 3  | 민수   |
+----+-------+

enrollments 테이블
+----+-----------+-----------+
| id | student_id | course_id|
+----+-----------+-----------+
| 1  | 1         | 101       |
| 2  | 2         | 102       |
+----+-----------+-----------+

courses 테이블
+-----+---------+
| id  | title   |
+-----+---------+
| 101 | 수학    |
| 102 | 영어    |
| 103 | 과학    |
+-----+---------+

INNER JOIN 결과
철수  수학
영희  영어

LEFT JOIN 결과
철수  수학
영희  영어
민수  NULL

 

 

'MySQL' 카테고리의 다른 글

CREATE TABLE  (3) 2025.08.26
SELECT 문  (5) 2025.08.25
MySQL C API 주요 함수  (1) 2025.07.10