본문 바로가기
IT/SQL 기초강좌 (PostgreSQL)

14강 SQL이 뭐지? PostgreSQL Join

by DoitSQL 2022. 12. 16.
728x90

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을 참조합니다. 

 

PostgreSQL Tutorial - Learn PostgreSQL from Scratch

Welcome to the PostgreSQLTutorial.com website! This PostgreSQL tutorial helps you understand PostgreSQL quickly. You’ll master PostgreSQL very fast through many practical examples and apply the knowledge in developing applications using PostgreSQL. If yo

www.postgresqltutorial.com

실습용 테이블에 대해서는 3강을 참조하세요.

 

3강 SQL이 뭐지? 도구들을 설치해보자. ( PostgreSQL, HeidiSQL )

지난 시간까지 SQL이 뭔지 대충 감을 잡는 시간을 가졌습니다. 이번 시간에는 본격적인 SQL을 공부하기 위해서 도구들을 설치해 보겠습니다. 1. PostgreSQL 설치 ( Windows10 64bit 기준) 2. HeidiSQL 설치 3.

doitsql.tistory.com


Do it! SQL을 찾아 주셔서 감사합니다. 여러분의 댓글이 큰 힘이 됩니다.

 

728x90

댓글