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 |