MySQL 조인 연산 이해

테이블 구조 예시

도서ID도서명
101Java
102C++
103PHP
도서ID저자
102장길동
103왕서방
104이순신
저자출판년도
장길동2003
마동탁2006
유재석2011

내부 조인(INNER JOIN)

공통 컬럼 값을 기준으로 두 테이블의 교집합 반환

SELECT 도서.도서ID, 도서명, 저자 
FROM 도서 
INNER JOIN 저자정보 USING (도서ID);
+--------+--------+----------+
| 도서ID | 도서명  | 저자     |
+--------+--------+----------+
|    102 | C++    | 장길동   |
|    103 | PHP    | 왕서방   |
+--------+--------+----------+

교차 조인(CROSS JOIN)

두 테이블의 카테시안 곱 생성

SELECT * FROM 도서 CROSS JOIN 저자정보;
+--------+--------+--------+----------+
| 도서ID | 도서명 | 도서ID | 저자     |
+--------+--------+--------+----------+
|    101 | Java   |    102 | 장길동   |
|    102 | C++    |    102 | 장길동   |
|    103 | PHP    |    102 | 장길동   |
|    101 | Java   |    103 | 왕서방   |
|    102 | C++    |    103 | 왕서방   |
|    103 | PHP    |    103 | 왕서방   |
|    101 | Java   |    104 | 이순신   |
|    102 | C++    |    104 | 이순신   |
|    103 | PHP    |    104 | 이순신   |
+--------+--------+--------+----------+

자연 조인(NATURAL JOIN)

동일한 이름의 컬럼을 자동으로 조인 조건으로 사용

SELECT * FROM 도서 NATURAL JOIN 저자정보;
+--------+--------+----------+
| 도서ID | 도서명  | 저자     |
+--------+--------+----------+
|    102 | C++    | 장길동   |
|    103 | PHP    | 왕서방   |
+--------+--------+----------+

좌측 외부 조인(LEFT JOIN)

왼쪽 테이블 전체와 조건에 맞는 오른쪽 테이블 레코드 반환

SELECT 도서.도서ID, 도서명, 저자 
FROM 도서 
LEFT JOIN 저자정보 USING (도서ID);
+--------+--------+----------+
| 도서ID | 도서명  | 저자     |
+--------+--------+----------+
|    101 | Java   | NULL     |
|    102 | C++    | 장길동   |
|    103 | PHP    | 왕서방   |
+--------+--------+----------+

차집합 연산 방법

SELECT 도서.* 
FROM 도서 
LEFT JOIN 저자정보 USING (도서ID) 
WHERE 저자정보.도서ID IS NULL;
+--------+--------+
| 도서ID | 도서명 |
+--------+--------+
|    101 | Java   |
+--------+--------+

USING vs ON 절 차이

SELECT * FROM 도서 JOIN 저자정보 USING (도서ID);
+--------+--------+----------+
| 도서ID | 도서명  | 저자     |
+--------+--------+----------+
|    102 | C++    | 장길동   |
|    103 | PHP    | 왕서방   |
+--------+--------+----------+
SELECT * FROM 도서 JOIN 저자정보 ON 도서.도서ID = 저자정보.도서ID;
+--------+--------+--------+----------+
| 도서ID | 도서명 | 도서ID | 저자     |
+--------+--------+--------+----------+
|    102 | C++    |    102 | 장길동   |
|    103 | PHP    |    103 | 왕서방   |
+--------+--------+--------+----------+

STRAIGHT_JOIN 활용

테이블 읽는 순서를 강제 지정할 때 사용

SELECT * FROM 작은테이블 STRAIGHT_JOIN 큰테이블 
ON 작은테이블.id = 큰테이블.id;

조인 연산 우선순위

괄호를 명시적으로 사용하여 연산 순서 제어

SELECT * 
FROM 테이블1, (테이블2 JOIN 테이블3 ON 조건);

태그: MySQL SQL조인 데이터베이스 내부조인 외부조인

7월 11일 18:35에 게시됨