The Office Lover
PostgreSQL Joins 본문
소개
조인(JOIN)은 두 개 이상의 데이블을 연결하여 필요한 데이터를 효과적으로 가져오는 데 사용되는 기능입니다. 일반적으로는 데이터베이스에는 여러 개의 테이블이 있고, 이러한 테이블들은 서로 연관되어 있습니다. 조인(JOIN)을 사용하여 이러한 테이블들을 결합하면 하나의 쿼리로 더 많은 정보를 얻을 수 있습니다.
PostgreSQL 조인(JOIN)은 관련 테이블 간의 공통 칼럼값을 기반으로 하나 이상의 테이블에서 칼럼들을 결합하여 원하는 값을 가져오는 데 사용합니다.
일반적으로 첫 번째 테이블의 기본 키(Primary Key)와 두 번째 테이블의 외래 키(Foreign Key)를 결합하는데 사용합니다.
예제 테이블 설정
CREATE TABLE basket_a (
a INT PRIMARY KEY,
fruit_a VARCHAR (100) NOT NULL
);
CREATE TABLE basket_b (
b INT PRIMARY KEY,
fruit_b VARCHAR (100) NOT NULL
);
INSERT INTO basket_a (a, fruit_a)
VALUES
(1, 'Apple'),
(2, 'Orange'),
(3, 'Banana'),
(4, 'Cucumber');
INSERT INTO basket_b (b, fruit_b)
VALUES
(1, 'Orange'),
(2, 'Apple'),
(3, 'Watermelon'),
(4, 'Pear');
아래 설명과 함께 위 예제를 통해 직접 쿼리를 작성하면 이해하는데 도움이 됩니다.
PostgreSQL이 지원하는 Join 문법의 종류
- inner join
- left join
- right join
- full outer join
- cross join
- natural join
- self join
여기서 위 1~4번에 해당되는 JOIN 문법만 알아보겠습니다.
각 Join 문법별 설명
1. INNER JOIN
SELECT
a,
fruit_a,
b,
fruit_b
FROM
basket_a
INNER JOIN basket_b
ON fruit_a = fruit_b;
INNER JOIN은 두 테이블 간의 일치하는 값을 가져옵니다. 조인 기준 컬럼의 값이 두 테이블에 모두 존재하는 경우에만 결과로 반환됩니다.
2. LEFT JOIN (or LEFT OUTER JOIN)
SELECT
a,
fruit_a,
b,
fruit_b
FROM
basket_a
LEFT JOIN basket_b
ON fruit_a = fruit_b;
LEFT JOIN은 왼쪽 테이블(basket_a)의 모든 레코드를 가져오고, 오른쪽 테이블(basket_b)과 조인 기준 칼럼의 값이 일치하는 경우 오른쪽 테이블의 해당 레코드를 가져옵니다. 오른쪽 테이블에 일치하는 값이 없어도 왼쪽 테이블의 모든 레코드는 결과에 포함됩니다.
오른쪽 테이블에 일치하는 값이 없는 왼쪽 테이블의 값만 조회하려면 WHERE 조건절을 아래와 같이 사용할 수 있습니다.
SELECT
a,
fruit_a,
b,
fruit_b
FROM
basket_a
LEFT JOIN basket_b
ON fruit_a = fruit_b
WHERE b IS NULL;
3. RIGHT JOIN (or RIGHT OUTER JOIN)
SELECT
a,
fruit_a,
b,
fruit_b
FROM
basket_a
RIGHT JOIN basket_b ON fruit_a = fruit_b;
LEFT JOIN의 반대 버전이 RIGHT JOIN입니다. 오른쪽 테이블(basket_b)의 모든 레코드를 가져오고, 왼쪽 테이블(basket_a)과 조인 기준 칼럼의 값이 일치하는 경우 왼쪽 테이블의 해당 레코드를 가져옵니다. 왼쪽 테이블에 일치하는 값이 없어도 오른쪽 테이블의 모든 레코드는 결과에 포함됩니다.
왼쪽 테이블에 일치하는 값이 없는 오른쪽 테이블의 값만 조회하려면 WHERE 조건절을 아래와 같이 사용할 수 있습니다.
SELECT
a,
fruit_a,
b,
fruit_b
FROM
basket_a
RIGHT JOIN basket_b
ON fruit_a = fruit_b
WHERE a IS NULL;
4. FULL OUTER JOIN (or FULL JOIN)
SELECT
a,
fruit_a,
b,
fruit_b
FROM
basket_a
FULL OUTER JOIN basket_b
ON fruit_a = fruit_b;
FULL JOIN은 LEFT JOIN과 RIGHT JOIN의 결과 모두를 합한 것입니다. 두 테이블 간의 모든 레코드를 가져오고, 조인 기준 컬럼의 값이 일치하는 경우에 해당 레코드를 가져오며, 한쪽 테이블에만 일치하는 값이 있는 경우에도 해당 레코드를 가져옵니다.
WHERE 조건절을 이용하여 각 테이블에만 해당되는 값만을 반환할 수 있습니다.
SELECT
a,
fruit_a,
b,
fruit_b
FROM
basket_a
FULL JOIN basket_b
ON fruit_a = fruit_b
WHERE a IS NULL OR b IS NULL;
마무리
위 내용을 참조로 조인 쿼리를 사용하여 익숙해지면 자연스럽게 쿼리 실력이 늘게 됩니다. 중요한 점은 항상 조회된 데이터 값에 대한 검증이 필요합니다. 복잡한 조인 쿼리 일 수록 항상 반대로 검증 쿼리먼저 작성하는 습관이 중요합니다.
출처
https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-joins/
'DataBase' 카테고리의 다른 글
Commit과 Rollback (0) | 2023.07.31 |
---|---|
PostgreSQL - RDBMS (0) | 2023.07.24 |