MariaDB | JOIN 유형

2025. 1. 25. 13:40Backend/Database

테이블 예시 

TABLE_1, TABLE_2

 

1. INNER JOIN

 

두 테이블의 교집합의 결과만 가져온다. 

SELECT *
FROM table_1 t1 
JOIN table_2 t2 -- INNER 생략 가능 
ON t1.num = t2.num; -- USING(num) 컬럼명이 같을 경우 USING 사용가능

INNER JOIN 결과

 

 

2. LEFT OUTER JOIN

 

조인문의 왼쪽에 있는 테이블의 모든 결과를 가져 온 후

-> 오른쪽 테이블의 데이터를 매칭하고

-> 매칭되는 데이터가 없는 경우 NULL로 표시한다.

SELECT *
FROM table_1 t1 
LEFT JOIN table_1 t2 --OUTER 생략가능 
ON t1.num = t2.num;

 

3. RIGHT OUTER JOIN

조인문의 오른쪽에 있는 테이블의 모든 결과를 가져온 후

-> 왼쪽의 테이블의 데이터를 매칭하고

-> 매칭되는 데이터가 없는 경우 NULL을 표시한다.

SELECT *
FROM table_1 t1 
RIGHT JOIN table_1 t2  --OUTER 생략가능 
ON t1.num = t2.num;

RIGHT JOIN 결과

 

4. FULL OUTER JOIN (Oracle에만 있음)

LEFT OUTER JOIN + RIGHT OUTER JOIN
즉, 두 테이블의 모든 행을 포함하며, 일치하는 데이터가 없으면 NULL로 채운다. 

 

MYSQL에서는 FULL OUTER JOIN을 지원하지 않으므로

LEFT JOIN과 RIGHT JOIN을 UNION으로 결합하여 비슷한 결과를 낼 수 있다.

-- ORACLE
SELECT *
FROM table_1 t1 
FULL JOIN table_1 t2 --OUTER 생략가능 
ON t1.num = t2.num;

-- MYSQL
SELECT * from test_1 t1
LEFT JOIN test_2 t2
ON t1.NUM = t2.NUM
UNION
SELECT * from test_1 t1
RIGHT JOIN test_2 t2
ON t1.NUM = t2.NUM

FULL OUTER JOIN 결과

 

5. NATURAL JOIN (자연 조인)

두 테이블에서 같은 이름을 가진 컬럼을 자동으로 찾아 조인하는 방식
즉, ON 조건 없이도 같은 컬럼명이 있으면 자동으로 매칭된다. 

SELECT *
FROM table_1 t1 
NATURAL JOIN table_1 t2 -- INNER JOIN과 동일하게 동작 
NATURAL LEFT JOIN table_1 t2 -- LEFT OUTER JOIN과 동일하게 동작 
NATURAL RIGHT JOIN table_1 t2 -- RIGHT OUTER JOIN과 동일하게 동작

 

그러나 table_1과 table_2 테이블에서 동일한 컬럼명 num을 찾아 자동으로 조인

의도치 않게 다른 컬럼까지 조인될 수 있어서 잘 사용하지 않는 편이다. 

 

* NATURAL JOIN은 오라클과 MySQL이 다르게 동작한다.  

오라클은 컬럼명과 값이 모두 같은 경우에만 조인되고, MySQL은 컬럼명만 같아도 INNER JOIN을 진행하므로 같은 SQL문이어도 결과 값이 다르다. 그러므로 NATURAL JOIN보다 명시적인 JOIN을 사용하는 것이 바람직하다.   

 

6. CROSS JOIN (교차 조인)

두 테이블의 모든 행을 곱집합(카테시안 곱) 형태로 반환

즉, 하나의 테이블에 있는 모든 행과 다른 테이블의 모든 행을 조합해 모든 경우의 수를 생성

SELECT *
FROM table_1 t1 
CROSS JOIN table_1 t2

CROSS JOIN 결과

 

JOIN 유형 정리

JOIN 유형 설명 NULL 표함 여부
INNER JOIN 조인 조건을 만족하는 행만 가져옴
LEFT OUTER JOIN 왼쪽 테이블의 모든 행 + 오른쪽 테이블에서 일치하는 행 ✅ (오른쪽 NULL)
RIGHT OUTER JOIN 오른쪽 테이블의 모든 행 + 왼쪽 테이블에서 일치하는 행 ✅ (왼쪽 NULL)
FULL OUTER JOIN 두 테이블의 모든 행 포함 (일치하지 않으면 NULL) ✅ (양쪽 NULL)
NATURAL JOIN 같은 이름의 컬럼을 자동으로 찾아 조인 ❌ (자동 매칭)
CROSS JOIN 두 테이블의 모든 행을 곱집합으로 조인 ❌ (모든 조합 생성)