14강 SQL이 뭐지? PostgreSQL Join
PostgreSQL
SQL이 뭐지? 14강 시작합니다.
이번 강의에서는
▶ Join : inner join, left join, right join, full outer join, cross join, natural join, self-join
에 대해서 알아보겠습니다.
오늘 강의는 중요한 시간입니다. 집중해서 학습하시기를 바랍니다.
Introduction
이번 강의에서는 다양한 종류의 PostgreSQL의 조인에 대해 학습합니다.
inner join, left join, right join, full outer join을 포함한 SQL 조인에 대해서 학습합니다.
PostgreSQL 조인은 관련 테이블 간의 공통 열 값을 기반으로 하나 이상의 테이블의 열을 결합하는 데 사용됩니다.
일반적으로 공통 열은 첫 번째 테이블의 기본 키 열과 두 번째 테이블의 외부 키 열입니다.
PostgreSQL은 inner join, left join, right join, full outer join, cross join, natural join, self-join을 지원합니다.
Setting up sample tables
과일을 저장하는 basket_a와 basket_b라는 두 개의 테이블이 있다고 가정합니다.
아래 쿼리를 수행합니다.
commit으로 명령을 확정해주세요.
commit SQL에서 COMMIT은 RDBMS 내에 있는 데이터베이스 트랜잭션을 종결시키고, 모든 변화를 다른 사용자들이 볼 수 있게 만들어 준다. 일반적인 포맷은 BEGIN WORK 구문으로 시작하여, COMMIT 구문이 나온다. 다른 방법으로 ROLLBACK 구문으로 시작될 수 있으며, 이것은 BEGIN WORK로 시작된 모든 작업을 그 이전으로 되돌린다. COMMIT 구문은 또한 현존하는 SAVEPOINT가 사용될 수 있을 것이다. 트랜잭션의 측면에서 커밋의 반대는 트랜잭션의 임시적인 변화를 포기하는 것(롤백)이다. SAVEPOINT는 하위 트랜잭션 (중첩 트랜잭션이라고도 함)을 실현하기 위한 데이터베이스 언어 SQL 구문 중 하나이다. 트랜잭션의 특정 지점에 이름을 지정하고, 그 지점 이전에 수행 한 작업에 영향을 주지 않고 그 지점 이후에 수행한 작업을 롤백(ROLLBACK)할 수 있다. 단일 트랜잭션에서 여러 SAVEPOINT를 만들 수도 있다. 유저는 savepoint이후 수행한 작업에 대해서 commit 또는 rollback을 사용하여, 확정 또는 취소를 해야합니다. |
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')
;
commit
;
생성된 테이블에는 사과와 오렌지와 같은 과일들의 정보가 있습니다.
각자 생성된 basket_a, basket_b 테이블의 데이터를 조회해보세요.
basket_a
basket_b
생성된 테이블을 대상으로 실습을 합니다.
PostgreSQL inner join (A ∩ B)
다음 문은 fruit_a 및 fruit_b 열의 값을 일치시켜 첫 번째 테이블(basket_a)을 두 번째 테이블(basket_b)과 결합합니다.
SELECT
a,
fruit_a,
b,
fruit_b
FROM
basket_a
INNER JOIN basket_b
ON fruit_a = fruit_b
;
내부 조인은 첫 번째 테이블(basket_a)의 각 행을 검사합니다. fruit_a 열의 값을 두 번째 테이블(basket_b)의 각 행의 fruit_b 열의 값과 비교합니다.
이 값이 같으면 내부 조인은 두 테이블의 열을 포함하는 새 행을 만들고 결과 집합에 이 새 행을 추가합니다.
다음 Venn 다이어그램은 내부 조인을 보여줍니다. ( A ∩ B)
PostgreSQL left join, left outer join (A)
다음 문은 왼쪽 join 절을 사용하여 basket_a 테이블을 basket_b 테이블과 결합합니다.
왼쪽 조인 콘텍스트에서 첫 번째 테이블을 왼쪽 테이블이라고 하고 두 번째 테이블을 오른쪽 테이블이라고 합니다.
SELECT
a,
fruit_a,
b,
fruit_b
FROM
basket_a
LEFT JOIN basket_b
ON fruit_a = fruit_b
;
왼쪽 조인이 왼쪽 테이블에서 데이터 선택을 시작합니다. fruit_a 열의 값과 basket_b 테이블의 fruit_b 열의 값을 비교합니다.
이 값이 같으면 왼쪽 조인을 통해 두 테이블의 열이 모두 포함된 새 행이 생성되고 이 새 행이 결과 집합에 추가됩니다. (결과 집합의 #1 및 #2 행 참조).
값이 동일하지 않은 경우 왼쪽 조인은 두 테이블의 열을 모두 포함하는 새 행을 만들어 결과 집합에 추가합니다. 그러나 오른쪽 테이블(basket_b)의 열을 null로 채웁니다(결과 집합의 #3 및 #4 행 참조).
다음 Venn 다이어그램은 왼쪽 조인을 보여줍니다. (A)
LEFT JOIN 과 LEFT OUTER JOIN 은 동일하므로 교환하여 사용 할 수 있다. ( LEFT JOIN = LEFT OUTER JOIN ) |
PostgreSQL left join - only rows from the left table (A - 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
;
다음 Venn 다이어그램은 왼쪽 테이블에서 오른쪽 테이블에서 일치하는 행이 없는 행을 반환하는 LEFT JOIN을 보여줍니다. (A - B)
PostgreSQL right join, right outer join (B)
오른쪽 조인은 왼쪽 조인의 반대 버전입니다. 오른쪽 조인은 오른쪽 테이블에서 데이터를 선택하기 시작합니다. 오른쪽 테이블에 있는 모든 행의 fruit_b 열에 있는 각 값을 fruit_a 테이블에 있는 모든 행의 각 값과 비교합니다.
이 값이 같으면 오른쪽 조인을 사용하면 두 테이블의 열이 포함된 새 행이 만들어집니다.
이러한 값이 동일하지 않은 경우 오른쪽 조인을 사용하면 두 테이블의 열이 포함된 새 행도 작성됩니다. 그러나 왼쪽 테이블의 열을 NULL로 채웁니다.
다음 문은 오른쪽 조인을 사용하여 basket_a 테이블을 basket_b 테이블과 조인합니다.
SELECT
a,
fruit_a,
b,
fruit_b
FROM
basket_a
RIGHT JOIN basket_b ON fruit_a = fruit_b
;
다음 Venn 다이어그램은 오른쪽 접합을 보여줍니다.
RIGHT JOIN 과 RIGHT OUTER JOIN 은 동일하므로 교환하여 사용 할 수 있다. ( RIGHT JOIN = RIGHT OUTER JOIN) |
PostgreSQL right join - only rows from the right table (B - A)
LEFT JOIN과 마찬가지로 다음과 같이 WHERE 절을 추가하여 왼쪽 테이블에서 일치하는 행이 없는 오른쪽 테이블에서 행을 가져올 수 있습니다.
SELECT
a,
fruit_a,
b,
fruit_b
FROM
basket_a
RIGHT JOIN basket_b
ON fruit_a = fruit_b
WHERE a IS NULL
;
다음 Venn 다이어그램은 왼쪽 테이블에 일치하는 행이 없는 오른쪽 테이블의 행을 반환하는 오른쪽 조인을 보여줍니다.
PostgreSQL full outer join (A + B)
전체 외부 조인 또는 전체 조인은 왼쪽 및 오른쪽 테이블의 모든 행을 포함하는 결과 집합을 반환하고, 가능한 경우 양쪽의 일치하는 행을 반환합니다. 일치하는 항목이 없는 경우 테이블의 열이 NULL로 채워집니다.
SELECT
a,
fruit_a,
b,
fruit_b
FROM
basket_a
FULL OUTER JOIN basket_b
ON fruit_a = fruit_b
;
다음 Venn 다이어그램은 전체 외부 조인을 보여줍니다.
PostgreSQL full outer join - only rows unique to both tables (A ∪ B) - (A ∩ B)
다른 테이블에 일치하는 행이 없는 행을 반환하려면 다음과 같이 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
;
다음 Venn 다이어그램은 다른 테이블에 해당하는 행이 없는 테이블에서 행을 반환하는 전체 외부 조인을 보여줍니다.
다음 그림은 모든 PostgreSQL 조인을 보여줍니다.
이번 시간에는 다양한 종류의 PostgreSQL 조인을 사용하는 방법을 배웠습니다.
SQL 조인은 여러 관련 테이블의 데이터를 결합합니다.
다음 시간부터는 조인을 더 깊게 알아보는 시간을 갖도록 하겠습니다.
수고하셨습니다.
본 강의는 PostgreSQL Tutorial을 참조합니다.
실습용 테이블에 대해서는 3강을 참조하세요.
Do it! SQL을 찾아 주셔서 감사합니다. 여러분의 댓글이 큰 힘이 됩니다. |
'IT > SQL 기초강좌 (PostgreSQL)' 카테고리의 다른 글
16강 SQL이 뭐지? PostgreSQL LEFT JOIN (3) | 2022.12.17 |
---|---|
15강 SQL이 뭐지? PostgreSQL INNER Join (2) | 2022.12.17 |
13강 SQL이 뭐지? PostgreSQL Table Aliases (2) | 2022.12.16 |
12강 SQL이 뭐지? PostgreSQL : NULL and IS NULL operator (2) | 2022.12.16 |
11강 SQL이 뭐지? PostgreSQL : LIKE, ILIKE operator (2) | 2022.12.16 |
댓글