-
MySQL - 조인(JOIN)Database/MySQL 2023. 2. 23. 15:30
조인(JOIN)
조인(JOIN)이란?
- JOIN은 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현해 주는 연산이다.
- 표준 SQL에서는 레코드를 조합하는 방식에 따라 JOIN을 아래와 같이 구분한다.
1. INNER JOIN
2. LEFT JOIN
3. RIGHT JOIN
INNER JOIN
FROM 테이블명01 INNER JOIN 테이블명02 ON 조건
- INNER JOIN은 ON 절과 함께 사용되며, ON 절의 조건을 만족하는 데이터만을 가져온다.
- ON 절에서는 WHERE 절에서 사용할 수 있는 모든 조건을 사용할 수 있다.
- 또한, 표준 SQL과는 달리 MySQL에서는 JOIN, INNER JOIN, CROSS JOIN이 모두 같은 의미로 사용된다.
- INNER JOIN의 결과를 벤 다이어그램으로 나타내면 위와 같다.
- 예약 정보를 담고 있는 RESERVATION 테이블이 있다고 가정해 보겠다.
- 고객 정보를 담고 있는 CUSTOMER 테이블이 있다고 가정해 보겠다.
SELECT * FROM RESERVATION R INNER JOIN CUSTOMER C ON R.NAME = C.NAME;
- 위 예제는 RESERVATION 테이블의 NAME 필드와 CUSTOMER 테이블의 NAME 필드가 서로 일치하는 레코드만을 기준으로 INNER JOIN 연산을 실행하는 예제이다.
- 앞선 쿼리문의 실행결과는 위와 같다.
LEFT JOIN
FROM 테이블명01 LEFT JOIN 테이블명02 ON 조건
- LEFT JOIN은 첫 번째 테이블을 기준으로, 두 번째 테이블을 조합하는 JOIN 연산이다.
- 이때, ON 절의 조건을 만족하지 않는 경우에는 첫 번째 테이블의 필드 값을 그대로 가져온다.
- 하지만, 해당 레코드의 두 번째 테이블의 필드 값은 모두 NULL로 표시된다.
- LEFT JOIN의 결과를 벤 다이어그램으로 나타내면 위와 같다.
SELECT * FROM RESERVATION R LEFT JOIN CUSTOMER C ON R.NAME = C.NAME WHERE RESERVE_DATE > '2016-02-01';
- 위 예제는 RESERVATION 테이블의 NAME 필드를 기준으로 CUSTOMER 테이블의 NAME 필드와 일치하는 레코드만을 LEFT JOIN으로 가져온 후, RESERVE_DATE 필드값이 '2016-02-01' 이후인 레코드만을 조회하는 예제이다.
- 위 예제에서 두 테이블의 NAME 필드값이 일치하면, INNER JOIN과 같이 두 테이블의 모든 필드를 그대로 가져온다.
- 하지만, 두 테이블의 NAME 필드값이 일치하지 않는 경우에는 CUSTOMER 테이블의 모든 필드를 NULL로 표시한다.
- 마지막으로, RESERVE_DATE 필드값이 '2016-02-01' 이후인 레코드만을 조회한다는 조건이 있기 때문에, 결과는 위와 같다.
RIGHT JOIN
FROM 테이블명01 RIGHT JOIN 테이블명02 ON 조건
- RIGHT JOIN은 LEFT JOIN과는 반대로 두 번째 테이블을 기준으로, 첫 번째 테이블을 조합하는 JOIN 연산이다.
- 이때, ON 절의 조건을 만족하지 않는 경우, 두 번째 테이블의 필드 값은 그대로 가져오지만, 첫 번째 테이블의 필드 값은 모두 NULL로 표시된다.
- RIGHT JOIN의 결과를 벤 다이어그램으로 나타내면 위와 같다.
SELECT * FROM RESERVATION R RIGHT JOIN CUSTOMER C ON R.NAME = C.NAME;
- 위 예제는 CUSTOMER 테이블의 NAME 필드값을 기준으로 RESERVATION 테이블의 NAME 필드와 일치하는 레코드만을 RIGHT JOIN으로 가져오는 예제이다.
- 위 예제에서 두 테이블의 NAME 필드값이 일치하면, INNER JOIN과 같이 두 테이블의 모든 필드를 그대로 가져온다.
- 하지만, 두 테이블의 NAME 필드값이 일치하지 않는 경우에는 CUSTOMER 테이블의 모든 필드를 NULL로 표시한다.
출처
ㆍ http://www.tcpschool.com/mysql/mysql_multipleTable_join
728x90'Database > MySQL' 카테고리의 다른 글
MySQL - 서브쿼리(Subquery) (0) 2023.02.23 MySQL - 패턴 매칭(LIKE, REGEXP) (0) 2023.02.22 MySQL - 데이터 조회(SELECT) (0) 2023.02.22 MySQL - 데이터 추가(INSERT), 수정(UPDATE), 삭제(DELETE) (0) 2023.02.22 MySQL - DB 구조 정의 (0) 2022.07.27