
한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현한 것
즉, 둘 이상의 테이블을 연결해서 데이터를 검색하는 방법
테이블로서 저장되거나, 그 자체로 이용할 수 있는 결과 셋을 만들어 낸다.
아래 그림은 조인을 쉽게 이해하기 위한 그림이다.

INNER JOIN : 내부조인(교집합)
LEFT/RIGHT JOIN : 부분집합
OUTER JOIN : 외부조인(합집합)
관계형 데이터베이스의 구조적 특징으로 정규화를 수행하면 의미 있는 데이터의 집합으로 테이블이 구성되고, 각 테이블끼리는 관계(Relationship)를 가진다.
이와 같은 특징으로 관계형 데이터베이스는 저장 공간의 효율성과 확장성이 향상된다.
서로 관계있는 데이터가 여러 테이블로 나뉘어 저장되므로, 각 테이블에 저장된 데이터를 효과적으로 검색이 가능하다.
![]() | ![]() |
|---|
여러 어플리케이션에서 사용되는 가증 흔한 결합 방식
공통적인 부분만 SELECT
조인 구문에 기반한 2개의 테이블(A, B)의 컬럼 값을 결합함으로써 새로운 결과 테이블을 생성
명시적 조인 표현(explicit)
: join 키워드와 함께 on 키워드를 사용
SELECT *
FROM STUDENT_TABLE
INNER JOIN DEPARTMENT_TABLE
ON STUDENT_TABLE.DEPARTMENT_ID = DEPARTMENT_TABLE.DEPARTMENT_ID;
SELECT *
FROM STUDENT_TABLE, DEPARTMENT_TABLE
WHERE STUDENT_TABLE.DEPARTMENT_ID = DEPARTMENT_TABLE.DEPARTMENT_ID;

조인 대상 테이블에서 특정 테이블의 데이터가 모두 필요한 상황에서 외부 조인을 활용하여 효과적으로 결과 집합을 생성
두 테이블이 가지고 있는 전체 부분 SELECT
우측 테이블에 조인할 컬럼의 값이 없는 경우 사용
좌측 테이블의 모든 데이터를 포함하는 결과 집합을 생성
공통적인 부분 + LEFT 테이블에 있는 데이터만 SELECT
SELECT *
FROM STUDENT_TABLE S LEFT OUTER JOIN DEPARTMENT_TABLE D
ON S.DEPARTMENT_ID = D.DEPARTMENT_ID;

좌측 테이블에 조인할 컬럼의 값이 없는 경우 사용
우측 테이블의 모든 데이터를 포함하는 결과 집합을 생성
공통적인 부분 + RIGHT 테이블에 있는 데이터만 SELECT
SELECT *
FROM STUDENT_TABLE S RIGHT OUTER JOIN DEPARTMENT_TABLE D
ON S.DEPARTMENT_ID = D.DEPARTMENT_ID;

양쪽 테이블 모두 OUTER JOIN이 필요할 때 사용
두 테이블 모든 데이터 SELECT
✅ 오라클에서는 OUTER JOIN 연산이 있지만, MYSQL은 없다.
그렇기 때문에, MYSQL에서는 LEFT OUTER JOIN + RIGHT OUTER JOIN을 같이 사용하여 FULL OUTER JOIN을 사용한다.-- ORACLE SELECT * FROM STUDENT_TABLE S FULL OUTER JOIN DEPARTMENT_TABLE D ON S.DEPARTMENT_ID = D.DEPARTMENT_ID; -- MYSQL SELECT * FROM STUDENT_TABLE S LEFT OUTER JOIN DEPARTMENT_TABLE D ON S.DEPARTMENT_ID = D.DEPARTMENT_ID UNION SELECT * FROM STUDENT_TABLE S RIGHT OUTER JOIN DEPARTMENT_TABLE D ON S.DEPARTMENT_ID = D.DEPARTMENT_ID;
(1) SQL 문장의 의미를 제대로 파악 필요
SQL 작성하는 방법에 따라 성능이 크게 좌우된다.
어떤 질의를 수행할 것인지를 명확하게 정의한 후, 비효율을 제거하여 최적의 SQL을 작성한다.
(2) 명확한 조인 조건을 제공
(1) 조인할 대상의 집합을 최소화
(2) 효과적인 인덱스 활용