INNER JOIN이란?
INNER JOIN은 두 테이블 사이의 조인 조건에 일치하는 행만 반환하는 조인 방식이다.
두 테이블에 공통으로 존재하는 데이터만 결과에 포함되고, 조건에 맞지 않는 데이터는 제외된다. 쉽게 말하면 교집합만 가져오는 조인이라고 생각하면된다

예시) 회원 테이블에 A0001,A0002,A0003이 있고 회원 연락처 테이블에 A0001, A0002, A0004가 있을때 두테이블에 모두 존재하는 정보 구하기
SELECT A.회원ID
, A.이름
, B.연락처
FROM 회원 A
, 회원연락처 B
WHERE A.회원ID = B.회원ID;
회원ID 기준으로 INNER JOIN하면 두 테이블에 모두 존재하는 A0001, A0002만 결과에 포함된다. A0003은 연락처 정보가 없어서 빠지고, A0004는 회원 정보가 없어서 빠진다.
INNER JOIN의 실행 흐름
INNER JOIN도 기본 흐름은 같다.
먼저 FROM절에서 두 테이블이 함께 들어오면 가능한 모든 조합이 만들어지고, 그다음 WHERE절에서 조인 조건에 맞는 행만 남긴다. 마지막으로 SELECT절에서 원하는 컬럼만 출력한다. 결국 INNER JOIN은 “처음부터 딱 맞는 값만 붙는 것”이 아니라, 가능한 조합을 만든 뒤 조인 조건으로 걸러낸다
OUTER JOIN이란?
OUTER JOIN은 조인 조건에 일치하지 않는 데이터도 결과에 포함시키는 조인 방식이다.
특정 테이블의 모든 데이터를 기준으로 유지하고, 반대편 테이블에서 일치하는 값이 없으면 NULL을 채워 보여준다.
INNER JOIN이 교집합만 반환한다면, OUTER JOIN은 한쪽에만 있는 값도 버리지 않고 보여주는 방식이다.
OUTER JOIN이 필요한 이유
INNER JOIN으로 회원과 회원연락처를 조인하면 연락처가 없는 A0003 회원은 결과에서 사라진다.
하지만 연락처가 없더라도 회원 자체는 조회해야 할 때가 있다. 이럴 때 OUTER JOIN을 사용하면 회원 테이블의 모든 행을 유지하면서, 연락처가 없는 경우에는 연락처 컬럼만 NULL로 채워서 보여줄 수 있다.
Oracle 방식의 OUTER JOIN
Oracle 전용 문법인 (+) 기호를 사용한다
SELECT A.회원ID
, A.이름
, B.연락처
FROM 회원 A
, 회원연락처 B
WHERE A.회원ID = B.회원ID(+);
여기서 (+)는 반대편 테이블 쪽에 붙는다.
따라서 B.회원ID(+)라고 적었기 때문에 B 테이블에 일치하는 값이 없어도 A 테이블의 행은 유지하겠다는 뜻이다. Oracle 전용이고 SQL Server에서는 사용할 수 없다
ANSI 표준 조인
ANSI는 여러 DBMS 간 SQL 문법을 통일하기 위해 표준 SQL 문법을 제정한 기관이다.
Oracle 전용 문법인 (+)는 MySQL, SQL Server 등에서는 지원되지 않기 때문에, 보다 보편적으로 ANSI 표준 문법을 사용하는 것이 좋다
INNER JOIN, LEFT OUTER JOIN, ON, USING 같은 문법이 표준 조인 문법이다.
ANSI 방식의 INNER JOIN 구조
ANSI 방식으로 INNER JOIN을 쓰면 조인 조건은 ON 뒤에 적고, 일반 조건은 WHERE절에 적는다.
SELECT A.회원ID, B.연락처
FROM 회원 A
INNER JOIN 회원연락처 B
ON (A.회원ID = B.회원ID)
WHERE A.회원ID = 'A0001'
AND B.구분코드 = '휴대폰';
이 구조가 기존의 Oracle 스타일 조인과 같은 의미이고 INNER JOIN 자체는 두 테이블을 어떻게 연결할지 나타내고, ON은 조인 조건, WHERE는 일반 조건을 적는 자리라고 정리하면 된다.
ON과 USING 문법
ON 문법
ON은 조인 조건을 직접 명시하는 문법이다.
두 테이블을 어떤 컬럼으로 연결할지 정확하게 적을 수 있어서 가장 많이 쓰이는 방식이다. 특히 컬럼명이 다르거나, 조인 조건을 명확하게 보여주고 싶을 때 ON이 더 직관적이다.
USING 문법
USING은 두 테이블이 같은 이름의 공통 컬럼을 가지고 있을 때 사용할 수 있는 문법이다.
예시) 두 테이블 모두 회원ID라는 컬럼을 가지고 있다면, 그 컬럼명을 USING 안에 적는 것만으로 동등 조인을 할 수 있다.
SELECT 회원ID, B.연락처
FROM 회원 A
INNER JOIN 회원연락처 B
USING (회원ID);
USING은 공통 컬럼을 기준으로 자동 동등 조인을 만든다. 그리고 USING에 적은 공통 컬럼은 하나로 병합되어 보며, 별칭을 붙일 수 없다. 또 SQL Server에서는 지원되지 않고, 제약이 많아서 실무에서는 USING보다 ON을 더 많이 쓴다
NATURAL JOIN이란?
NATURAL JOIN은 조인 조건을 직접 쓰지 않아도, 두 테이블 간 동일한 컬럼명을 자동으로 찾아 조인 조건으로 설정하는 방식이다.
따라서 ON이나 USING 없이도 공통 컬럼명이 있으면 자동으로 INNER JOIN처럼 동작한다.
SELECT *
FROM 회원 NATURAL JOIN 회원연락처;
NATURAL JOIN의 특징
NATURAL JOIN이 ON, USING보다 더 간단해 보이지만 실무에서는 거의 사용되지 않는다
이유는 모든 공통 컬럼이 자동 조인 대상이 되기 때문에 예기치 못한 결과가 나올 수 있기 때문이다. 또 별칭 사용에 제약이 있고, 컬럼명이 다르면 조인이 되지 않으며, SQL Server는 NATURAL JOIN을 지원하지 않는다. 그래서 문법적으로는 간단하지만, 실무에서는 명시적인 ON을 사용하는 것이 더 안전하다.
LEFT OUTER JOIN이란?

LEFT OUTER JOIN은 왼쪽 테이블의 모든 행을 기준으로 결과를 반환하는 조인이다.
오른쪽 테이블에 일치하는 데이터가 있으면 붙이고, 없으면 오른쪽 컬럼을 NULL로 채운다.
SELECT A.회원ID, B.연락처
FROM 회원 A
LEFT OUTER JOIN 회원연락처 B
ON A.회원ID = B.회원ID;
회원 테이블 A를 기준으로 모든 회원 데이터를 출력하고, 연락처 테이블 B에 매칭되지 않는 A0003은 연락처를 NULL로 보여준다
RIGHT OUTER JOIN이란?

RIGHT OUTER JOIN은 오른쪽 테이블의 모든 행을 기준으로 결과를 반환하는 조인이다.
왼쪽 테이블과 일치하는 값이 있으면 붙이고, 없으면 왼쪽 컬럼을 NULL로 채운다. LEFT OUTER JOIN의 기준 방향만 반대로 생각하면 된다.
SELECT A.회원ID AS 회원_회원ID
, B.회원ID AS 회원연락처_회원ID
, B.연락처 AS 연락처
FROM 회원 A
RIGHT OUTER JOIN 회원연락처 B
ON A.회원ID = B.회원ID;
회원연락처 테이블 B를 기준으로 모든 데이터를 유지하기 때문에, 회원 정보에는 없는 A0004 연락처도 결과에 포함되고, 그때 회원 테이블 쪽 컬럼은 NULL로 표시된다
FULL OUTER JOIN이란?

FULL OUTER JOIN은 LEFT OUTER JOIN과 RIGHT OUTER JOIN을 합친 형태다.
즉 양쪽 테이블 모두를 기준으로 해서 조인을 수행하고, 공통된 값은 매칭하고, 어느 한쪽에만 있는 데이터도 모두 결과에 포함한다. 매칭되지 않는 쪽 컬럼에는 NULL이 들어간다.
SELECT A.회원ID AS 회원_회원ID
, B.회원ID AS 회원연락처_회원ID
, B.연락처 AS 연락처
FROM 회원 A
FULL OUTER JOIN 회원연락처 B
ON A.회원ID = B.회원ID;
FULL OUTER JOIN은 사실상 LEFT OUTER JOIN 결과와 RIGHT OUTER JOIN 결과를 UNION 한 것과 같은 의미라고 설명한다. 그래서 양쪽에만 존재하는 값도 전부 포함된다는 점이 핵심이다.
INNER JOIN과 OUTER JOIN 차이
INNER JOIN은 조인 조건에 일치하는 행만 반환한다.
반면 OUTER JOIN은 조인에 실패한 데이터도 한쪽 기준 테이블에 속해 있다면 결과에 포함시킨다. 따라서 INNER JOIN은 교집합 중심이고, OUTER JOIN은 기준 테이블의 데이터 보존이 목적이라고 보면 된다.
예를 들어 회원 목록 전체를 보고 싶다면 LEFT OUTER JOIN이 맞고, 둘 다 존재하는 데이터만 보고 싶다면 INNER JOIN이 맞다.
ON, USING, NATURAL JOIN 비교
ON은 가장 명시적이고 제약이 적어서 실무에서 가장 많이 사용한다.
USING은 공통 컬럼명이 같을 때 간단하게 쓸 수 있지만 제약이 있다. NATURAL JOIN은 더 짧게 쓸 수 있지만 자동 조인이라는 점 때문에 예측하기 어려운 결과가 나올 수 있어서 실무에서는 거의 쓰지 않는다. 결국 “시험용으로 개념은 알아두되, 실무에서는 ON 중심으로 기억하면 된다” 의 흐름이다
'📘꼬부기의 성장서재 > 이기적SQLD 기출문제' 카테고리의 다른 글
| 그룹 함수 (0) | 2026.04.08 |
|---|---|
| 집합연산자 (0) | 2026.04.07 |
| JOIN (0) | 2026.04.01 |
| ORDER BY절 (0) | 2026.03.31 |
| GROUP BY, HAVING절 (0) | 2026.03.30 |