JOIN은 SQL에서 서로 다른 테이블에 저장된 데이터를 연결하여 하나의 조회 결과로 가져올 때 사용하는 구문입니다. 관계형 데이터베이스에서는 하나의 테이블에 모든 데이터를 저장하기보다 회원, 상품, 주문과 같이 목적에 따라 데이터를 여러 테이블로 나누어 관리하는 경우가 많습니다. 이때 서로 다른 테이블의 관련 데이터를 함께 조회하기 위해 JOIN을 사용합니다.

JOIN이 필요한 이유

관계형 데이터베이스에서는 데이터를 효율적으로 관리하기 위해 하나의 테이블에 모든 정보를 저장하지 않습니다. 예를 들어 쇼핑몰에서는 회원 정보와 주문 정보를 각각 다른 테이블에 저장할 수 있습니다.

member
id | name
1  | 김철수
2  | 이영희

orders
id | member_id | price
101 | 1        | 50000
102 | 2        | 30000

member 테이블에는 회원의 기본 정보를 저장하고 orders 테이블에는 주문 정보를 저장하는 구조입니다.

이때 주문 번호와 주문 금액뿐만 아니라 해당 주문을 한 회원의 이름까지 함께 조회하려면 두 테이블을 연결해야 합니다.

각 테이블에는 서로의 데이터를 연결하기 위한 값이 존재합니다. 위 예시에서는 member.id와 orders.member_id가 연결 관계를 가지고 있습니다.

JOIN은 이러한 연결 조건을 이용하여 서로 다른 테이블의 데이터를 하나의 결과로 만들어줍니다.

예를 들어 회원 이름과 주문 금액을 함께 조회하려면 다음과 같이 작성할 수 있습니다.

SELECT member.name, orders.price
FROM member
JOIN orders
ON member.id = orders.member_id;

위 쿼리는 member와 orders 테이블을 연결하고 member.id와 orders.member_id가 같은 데이터를 찾아 회원 이름과 주문 금액을 함께 조회합니다.

결과는 다음과 같은 형태가 될 수 있습니다.

name   | price
김철수  | 50000
이영희  | 30000

이처럼 JOIN을 사용하면 각각의 테이블에 나누어 저장되어 있는 관련 데이터를 하나의 조회 결과에서 확인할 수 있습니다.

JOIN의 기본 구조

JOIN을 이해하기 위해서는 기본적인 SQL 구조를 확인할 필요가 있습니다.

SELECT 컬럼
FROM 테이블1
JOIN 테이블2
ON 연결조건;

FROM 뒤에 기준이 되는 테이블을 작성하고 JOIN 뒤에 연결할 테이블을 작성합니다. 그리고 ON 뒤에 두 테이블을 어떤 조건으로 연결할 것인지 지정합니다.

가장 일반적인 연결 조건은 한 테이블의 기본 키와 다른 테이블의 외래 키를 비교하는 방식입니다.

SELECT member.name, orders.price
FROM member
JOIN orders
ON member.id = orders.member_id;

여기에서 member.id가 회원 테이블의 기본 키이고 orders.member_id가 회원을 참조하는 외래 키라고 가정할 수 있습니다.

이러한 구조를 사용하면 한 회원이 여러 개의 주문을 가지고 있는 관계도 표현할 수 있습니다.

예를 들어 김철수의 회원 ID가 1이고 주문 테이블에 회원 ID가 1인 주문이 세 개 있다면 JOIN 결과에는 김철수의 이름과 세 개의 주문 정보가 각각 나타날 수 있습니다.

name   | price
김철수  | 50000
김철수  | 30000
김철수  | 80000

JOIN은 테이블의 데이터를 실제로 합쳐서 하나의 테이블로 만드는 기능이 아닙니다. SQL 조회 과정에서 서로 관련된 데이터를 연결하여 결과를 만들어내는 기능입니다. 원래의 테이블 구조는 그대로 유지됩니다.

여러 테이블을 연결하기

JOIN은 두 개의 테이블뿐만 아니라 여러 테이블을 연결하는 데에도 사용할 수 있습니다.

예를 들어 회원, 주문, 상품 정보가 각각 다른 테이블에 저장되어 있다고 가정할 수 있습니다.

member
id | name

orders
id | member_id | product_id

product
id | product_name

주문한 회원의 이름과 상품명을 함께 조회하려면 여러 테이블을 JOIN할 수 있습니다.

SELECT member.name, product.product_name
FROM member
JOIN orders
ON member.id = orders.member_id
JOIN product
ON orders.product_id = product.id;

먼저 회원 테이블과 주문 테이블을 회원 ID를 기준으로 연결하고, 주문 테이블과 상품 테이블을 상품 ID를 기준으로 연결합니다.

이를 통해 다음과 같이 하나의 조회 결과를 만들 수 있습니다.

name   | product_name
김철수  | 노트북
이영희  | 키보드

이러한 방식은 실제 서비스에서 매우 흔하게 사용됩니다. 회원 정보, 주문 정보, 상품 정보가 각각 독립적인 테이블로 관리되더라도 JOIN을 사용하면 필요한 순간에 서로 관련된 정보를 연결하여 조회할 수 있습니다.

또한 JOIN을 사용할 때는 어떤 컬럼을 기준으로 연결할 것인지 정확하게 지정해야 합니다. 연결 조건을 잘못 작성하면 데이터가 예상보다 많이 생성되거나 서로 관계가 없는 데이터가 연결될 수 있습니다.

특히 여러 테이블에서 동일한 이름의 컬럼을 사용하는 경우에는 테이블 이름을 함께 작성하는 것이 좋습니다.

SELECT member.id, member.name, orders.id, orders.price
FROM member
JOIN orders
ON member.id = orders.member_id;

이처럼 member.id, orders.id와 같이 작성하면 어느 테이블의 컬럼을 사용하는지 명확하게 구분할 수 있습니다.

테이블에 별칭을 지정하면 긴 테이블 이름을 짧게 작성할 수도 있습니다.

SELECT m.name, o.price
FROM member AS m
JOIN orders AS o
ON m.id = o.member_id;

여기에서는 member를 m, orders를 o라는 별칭으로 지정했습니다. JOIN을 여러 번 사용하거나 테이블 이름이 긴 경우에는 별칭을 사용하면 SQL을 보다 간결하게 작성할 수 있습니다.

JOIN에는 여러 종류가 있으며 대표적으로 INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN 등이 있습니다. 각각 어떤 데이터를 결과에 포함하는지가 다르기 때문에 JOIN을 사용할 때는 필요한 결과에 맞는 JOIN 종류를 선택해야 합니다.

결국 JOIN은 서로 다른 테이블에 나누어 저장된 관련 데이터를 연결하여 하나의 조회 결과로 가져오기 위한 SQL 구문입니다. 관계형 데이터베이스에서는 데이터를 여러 테이블로 분리하여 관리하는 경우가 많기 때문에 JOIN은 이러한 테이블 간의 관계를 활용하는 핵심 기능입니다. 다음 단계에서는 JOIN의 종류 중 가장 기본적인 INNER JOIN과 OUTER JOIN의 차이에 대해 알아보겠습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

글쓴이

rjsan46@koreabites.com

관련 게시물

복합 인덱스란 무엇인가

복합 인덱스는 데이터베이스에서 두 개 이상의 컬럼을 하나의 인덱스로 묶어 사용하는 방식입니다. 하나의 컬럼만 검색하는 단일 인덱스와 달리 여러 컬럼을 함께 조건으로...

모두 읽어보기

인덱스가 빠른 이유

인덱스가 빠른 이유는 데이터베이스가 검색할 때 테이블의 모든 데이터를 처음부터 끝까지 확인하지 않고, 별도로 구성된 검색 구조를 이용하여 필요한 데이터의 위치를 빠르게...

모두 읽어보기

인덱스란 무엇인가

인덱스는 데이터베이스에서 원하는 데이터를 빠르게 찾기 위해 사용하는 자료 구조입니다. 데이터가 많아질수록 모든 데이터를 하나씩 확인하는 방식은 검색 시간이 증가하기 때문에 인덱스를...

모두 읽어보기

서브쿼리란 무엇인가

서브쿼리는 SQL 문 안에 다른 SQL 문을 포함하여 사용하는 쿼리입니다. 하나의 SQL 문에서 필요한 데이터를 먼저 조회한 다음 그 결과를 바깥쪽 쿼리에서...

모두 읽어보기

INNER JOIN과 OUTER JOIN 차이

INNER JOIN과 OUTER JOIN은 서로 다른 테이블의 데이터를 연결할 때 어떤 데이터를 조회 결과에 포함할 것인지 결정하는 JOIN 방식입니다. INNER JOIN은 두...

모두 읽어보기

DELETE란 무엇인가

DELETE는 SQL에서 테이블에 저장된 기존 데이터를 삭제할 때 사용하는 구문입니다. INSERT가 새로운 데이터를 추가하고 UPDATE가 기존 데이터를 수정한다면 DELETE는 더 이상 필요하지...

모두 읽어보기