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

16강 SQL이 뭐지? PostgreSQL LEFT JOIN

by DoitSQL 2022. 12. 17.
728x90

16강 SQL이 뭐지? PostgreSQL LEFT JOIN   

PostgreSQL

SQL이 뭐지? 16강 시작합니다.

 

이번 강의에서는

PostgreSQL LEFT JOIN clause 

에 대해서 알아보겠습니다.

지난 강의 14강에서 살펴본 JOIN에 대해서 하나씩 심화 학습하는 시간입니다.


Introduction to PostgreSQL LEFT JOIN clause   

ERD에서 테이블 간의 관계를 나타내는 방법에 대해서는 별도 강의를 준비해보겠습니다.

A와 B 두 개의 테이블이 있다고 가정합니다.

A에서 B는 1 대 N 관계이고 optional입니다. (있거나, 없을 수도 있다)

B에서 A는 N 대 1 관계이고 mandatory입니다. (필수로 있다.)

 

A의 각 행은  B에 0개 또는 다수의 대응하는 행을 가질 수 있지만,  B의 각 행은  A에 하나의 대응하는 행을 가질 수 있다.
테이블 B에 해당하는 행이 있거나 없는 데이터를 테이블 A에서 선택하려면 LEFT JOIN 절을 사용합니다.

 

다음 문은 테이블 A와 테이블 B를 결합하는 LEFT JOIN 구문을 보여줍니다.

SELECT
       pka,

       c1,
       pkb,
       c2
FROM
      A
LEFT JOIN B ON pka = fka
;   

 

LEFT JOIN을 사용하여 테이블 A를 테이블 B와 결합하려면 다음 단계를 수행   

먼저 SELECT 절에서 데이터를 선택할 두 테이블의 열을 지정합니다.
둘째, FROM 절에서 왼쪽 테이블(테이블 A)을 지정합니다.
셋째, LEFT JOIN 절에 오른쪽 테이블(테이블 B)을 지정하고 ON 키워드 뒤에 조인 조건을 지정합니다.
LEFT JOIN 절이 왼쪽 테이블에서 데이터 선택을 시작합니다. 왼쪽 테이블의 각 행에 대해 pka 열의 값과 오른쪽 테이블의 fka 열의 각 행 값을 비교합니다.

이러한 값이 같으면 왼쪽 조인 절은 SELECT 절에 나타나는 열이 포함된 새 행을 생성하고 이 행을 결과 집합에 추가합니다.

이러한 값이 동일하지 않은 경우 왼쪽 조인 절은 SELECT 절에 나타나는 열이 포함된 새 행도 만듭니다. 또한 오른쪽 테이블의 열을 NULL로 채웁니다.

 

다음 Venn 다이어그램은 LEFT JOIN 절의 작동 방식을 보여줍니다.   

LEFT JOIN과 LEFT OUTER JOIN 같은 것입니다.


PostgreSQL LEFT JOIN examples   

샘플 데이터베이스에서 다음 필름 및 인벤토리 테이블을  보면,

film : inventory는 1 : N이고 optional

inventory : film은 n : 1이고 mandatory

 

필름 테이블의 각 행은 인벤토리 테이블에서 0개 또는 다수의 행을 가질 수 있다. 

인벤토리 테이블의 각 행에는 필름 테이블의 행이 하나만 있습니다.

film_id 열은 필름과 인벤토리 테이블 간의 링크를 설정합니다.

 

LEFT JOIN 절을 사용하여 film 테이블을 inventory 테이블과 결합   

SELECT
       film.film_id,
       title,
       inventory_id
FROM
      film
LEFT JOIN inventory 
       ON inventory.film_id = film.film_id
ORDER BY title
;   

71번째 행을 보면, 필름 테이블의 행에 인벤토리 테이블에 일치하는 행이 없는 경우 이 행의 inventory_id 열의 값은 NULL입니다.

 

인벤토리에 없는 필름을 찾기 위한 WHERE 절   

SELECT
       film.film_id,
       film.title,
       inventory_id
FROM
      film
LEFT JOIN inventory 
       ON inventory.film_id = film.film_id
WHERE inventory.film_id IS NULL
ORDER BY title
;   

테이블 별칭을 사용하여 쿼리를 변경해 보면,

SELECT
       f.film_id,
       title,
       inventory_id
FROM
      film f
LEFT JOIN inventory i
       ON i.film_id = f.film_id
WHERE i.film_id IS NULL
ORDER BY title
;   

여러분도 테이블 별칭을 사용하는 습관을 들이세요.

 

또한,  두 테이블 모두 ON 절에 사용된 열 이름이 동일한 경우 다음과 같이 USING 구문을 사용할 수 있습니다.

SELECT
       f.film_id,
       title,
       inventory_id
FROM
      film f
LEFT JOIN inventory i USING (film_id)
WHERE i.film_id IS NULL
ORDER BY title
;      

 

위 세 가지 쿼리는 모두 동일한 결과를 보여줍니다.

이 방법은 한 테이블에서 다른 테이블에 일치하는 행이 없는 행을 선택하려는 경우 유용합니다.


이 강의에서는 한 테이블에서 다른 테이블에 해당하는 행이 있거나 없을 수 있는 행을 선택하는
PostgreSQL LEFT JOIN 절을 사용하는 방법에 대해 배웠습니다.

 

감사합니다.


본 강의는 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

댓글