PostgreSQL JOIN 내부 조인, 왼쪽 조인, 오른쪽 조인 및 완전 외부 조인을 활용하는 방법
- 관련 테이블 간의 공통 열 값을 기반으로 한 개 이상의 테이블 에서 열을 결합하는데 사용합니다.
- 공통 열은 일반적으로 첫 번째 테이블의 기본키 열과 두 번째 테이블의 외래 키 열입니다.
0) 샘플 테이블 지정
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');
1) PostgreSQL 내부 JOIN 연산자
-- basket_a(first)와 basket_b(second)를 fruite_a,b로 조인하는 쿼리
SELECT
a,
fruit_a,
b,
fruit_b
FROM
basket_a
LEFT JOIN basket_b
ON fruit_a = fruit_b
WHERE b IS NULL;
- 내부 조인은 첫 번째 테이블의 각 행을 검사합니다.
- frute_a 열 값을 두 번째 테이블의 각 행 열의 값과 비교합니다.
- 이러한 값이 같다면 내부 조인은 두 테이블의 열을 포함하는 새 행을 만들고 이 새 행을 결과 집합에 추가합니다.
2) PostgreSQL 왼쪽 JOIN 연산자
SELECT
a,
fruit_a,
b,
fruit_b
FROM
basket_a
LEFT JOIN basket_b
ON fruit_a = fruit_b;
- fruit_a 열의 값을 두 번째 테이블의 fruit_b 열 값과 비교합니다.
- 이러한 값이 같으면 왼쪽 조인은 두 테이블의 열을 포함하는 새 행을 만들고 이 새행을 결과 집합에 추가합니다.
- 값이 같지 않은 경우 왼쪽 조인도 두 테이블의 열을 포함하는 새 행을 만들고 NULL이라는 결과로 집합에 추가합니다.
3) PostgreSQL 왼쪽 JOIN 연산자 - ONLY LEFT
-- 오른쪽 테이블에 일치하는 행이 없는 왼쪽 테이블의 행을 선택하는 쿼리
SELECT
a,
fruit_a,
b,
fruit_b
FROM
basket_a
LEFT JOIN basket_b
ON fruit_a = fruit_b
WHERE b IS NULL;
- LEFT JOIN과 동일합니다. LEFT OUTER JOIN을 써도 됩니다.
4) PostgreSQL 오른쪽 JOIN 연산자
SELECT
a,
fruit_a,
b,
fruit_b
FROM
basket_a
RIGHT JOIN basket_b ON fruit_a = fruit_b;
5) PostgreSQL 오른쪽 JOIN 연산자 - ONLY RIGHT
SELECT
a,
fruit_a,
b,
fruit_b
FROM
basket_a
RIGHT JOIN basket_b
ON fruit_a = fruit_b
WHERE a IS NULL;
6) PostgreSQL 외부 JOIN 연산자
SELECT
a,
fruit_a,
b,
fruit_b
FROM
basket_a
FULL OUTER JOIN basket_b
ON fruit_a = fruit_b;
- 전체가 반환에 가능한 경우 양쪽에서 일치하는 행이 모두 포함된 결과를 나타냅니다.
- 일치하는 항목이 없을 경우 테이블의 열이 NULL로 채워집니다.
7) PostgreSQL 외부 JOIN 연산자 - ONLY UNIQUE TO BOTH TABLES
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;
- 다른 테이블에 행이 없는 테이블의 행을 반환하는 전체 외부 조인입니다.
'SW ENGINEERING > Postgres' 카테고리의 다른 글
[PostgreSQL] BASIC - Cross JOIN (0) | 2021.09.02 |
---|---|
[PostgreSQL] BASIC - Table Aliases (0) | 2021.09.02 |
[PostgreSQL] BASIC - IS NULL (0) | 2021.09.02 |
[PostgreSQL] BASIC - LIKE (0) | 2021.09.02 |
[PostgreSQL] BASIC - BETWEEN (0) | 2021.09.02 |
최근댓글