데이터베이스를 다루다 보면, 테이블 간의 관계를 정의하고 데이터를 연결하는 일이 필수적입니다. 그중에서도 JOIN은 관계형 데이터베이스에서 가장 핵심적인 연산 중 하나입니다. 이번 글에서는 PostgreSQL 기준으로 INNER JOIN과 OUTER JOIN의 차이점을 정리하고, 간단한 예시 및 구문 작성 시 주의할 점까지 함께 다뤄보겠습니다.
INNER JOIN은 양쪽 테이블에 모두 존재하는 데이터만 반환합니다. 즉, 조인 조건을 만족하는 레코드만 결과에 포함됩니다.
OUTER JOIN은 한쪽 테이블에만 존재하더라도 결과에 포함시킵니다. 주로 다음 세 가지로 나뉩니다:
-- 테이블 A (users)
id | name
---|------
1 | Alice
2 | Bob
3 | Charlie
-- 테이블 B (orders)
id | user_id | item
---|---------|-----
1 | 1 | Book
2 | 2 | Pen
3 | 4 | Pencil
SELECT u.name, o.item
FROM users u
INNER JOIN orders o ON u.id = o.user_id;
결과:
| name | item |
|---|---|
| Alice | Book |
| Bob | Pen |
* user_id = 4는 users 테이블에 없으므로 제외됩니다.
SELECT u.name, o.item
FROM users u
LEFT OUTER JOIN orders o ON u.id = o.user_id;
결과:
| name | item |
|---|---|
| Alice | Book |
| Bob | Pen |
| Charlie | NULL |
아래 두 방식은 동일한 결과를 반환합니다.
-- 명시적 조인
SELECT *
FROM A
INNER JOIN B ON A.id = B.a_id;
-- 암시적 조인 (WHERE절 이용)
SELECT *
FROM A, B
WHERE A.id = B.a_id;
TIP: 실제 개발에서는
명시적 JOIN 문법 사용을 권장
합니다. 가독성과 명확성이 더 뛰어납니다.
아래는 Oracle DB에서 사용되는 (+) 스타일입니다. PostgreSQL에서는 직접적으로 사용되지 않지만, SQL JOIN을 공부하는 데 중요한 표현법입니다.
-- Oracle 스타일 (LEFT OUTER JOIN)
SELECT *
FROM A, B
WHERE A.id = B.a_id(+);
(+) 기호도 이해해둘 것JOIN을 제대로 이해하는 것은 SQL의 기초이자 핵심입니다. 다양한 실습을 통해 개념을 확실히 다져보시기 바랍니다.
| [POSTGRES] 누적값 , 적산값 SELECT 하기 (0) | 2022.04.25 |
|---|---|
| [POSTGRES] SELECT 배열 & 배열 > 행데이터로 변환 (0) | 2021.09.03 |
| [ORACLE/PostgreSQL] Like 를 여러번 사용 REGEXP_LIKE (0) | 2020.10.21 |
| [POSTGRES] NOT ALL TOKEN PROCESSED (0) | 2020.09.11 |
| [POSTGRES] PgAdmin4 Tool 설치 (0) | 2020.06.25 |
댓글 영역