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

15강 SQL이 뭐지? PostgreSQL INNER Join

by DoitSQL 2022. 12. 17.
728x90

15강 SQL이 뭐지? PostgreSQL INNER Join

PostgreSQL

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

 

이번 강의에서는

PostgreSQL INNER JOIN clause

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

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


Introduction to PostgreSQL INNER JOIN clause

관계 데이터베이스에서 데이터는 일반적으로 두 개 이상의 테이블에 분산됩니다. 전체 데이터를 선택하려면 여러 테이블에서 데이터를 쿼리 해야 하는 경우가 많습니다.

 

이 강의에서는 INSER JOIN 절을 사용하여 여러 테이블의 데이터를 결합하는 방법에 초점을 맞추고 있습니다.

 

테이블 A와 B가 두 개 있다고 가정합니다. 테이블 A에는 테이블 B의 fka 열에 있는 값과 일치하는 pka 열이 있습니다.

 

 

두 테이블에서 데이터를 선택하려면 다음과 같이 SELECT 문의 INNER JOIN 절을 사용합니다.

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

 

테이블 A를 테이블 B와 결합하려면 다음 단계를 수행합니다.

먼저 SELECT 절에서 데이터를 선택할 두 테이블의 열을 지정합니다.
둘째, FROM 절에서 주 테이블, 즉 테이블 A를 지정합니다.
셋째, INNER JOIN 절에서 두 번째 테이블(테이블 B)을 지정하고 ON 키워드 뒤에 조인 조건을 제공합니다.

 

내부 조인의 작동 방식

테이블 A의 각 행에 대해 내부 조인은 pka 열의 값을 테이블 B의 모든 행의 fka 열의 값과 비교합니다.

이러한 값이 같으면 내부 조인은 두 테이블의 모든 열을 포함하는 새 행을 생성하여 결과 집합에 추가합니다.
이러한 값이 동일하지 않은 경우 내부 조인은 이 값을 무시하고 다음 행으로 이동합니다.

 

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

대부분의 경우 조인하려는 테이블에는 동일한 이름의 열(예: customer_id와 같은 id 열)이 있습니다.

쿼리에서 다른 테이블의 이름이 같은 열을 참조하면 오류가 발생합니다. 오류를 방지하려면 다음 구문을 사용하여 이러한 열을 완전히 식별해야 합니다.

table_name.column_name

실제로 테이블 별칭을 사용하여 조인된 테이블에 짧은 이름을 할당하여 쿼리를 더 쉽게 읽을 수 있습니다.


PostgreSQL INNER JOIN examples

INNER JOIN 절을 사용하는 예를 몇 가지 들어 보겠습니다.

 

1. Using PostgreSQL INNER JOIN to join two tables

샘플 데이터베이스에 있는 고객과 지불 테이블을 살펴봅시다.

이 테이블에서 고객이 결제할 때마다 새 행이 결제 테이블에 삽입됩니다.

각 고객은 0개 또는 많은 결제를 할 수 있습니다. 그러나 각 결제는 한 명의 고객에게만 해당됩니다. customer_id 열은 두 테이블 사이의 관계를 설정합니다.

다음 문은 INNER JOIN 절을 사용하여 두 테이블에서 데이터를 선택합니다.

SELECT
  customer.customer_id,
  first_name,
  last_name,
  amount,
  payment_date
FROM
  customer
INNER JOIN payment 
    ON payment.customer_id = customer.customer_id
ORDER BY payment_date;   

 

다음 쿼리는 동일한 결과를 반환합니다. 그러나 테이블 별칭을 사용합니다.  

SELECT
     c.customer_id,
     first_name,
     last_name,
     email,
     amount,
     payment_date
FROM
    customer c
INNER JOIN payment p 
      ON p.customer_id = c.customer_id
WHERE
      c.customer_id = 2;   

 

두 테이블 모두 customer_id 열이 동일하므로 USING 구문을 사용할 수 있습니다.   

SELECT
      customer_id,
      first_name,
      last_name,
      amount,
      payment_date
FROM
     customer
INNER JOIN payment USING(customer_id)
ORDER BY payment_date;    

 

'테이블 별칭' 사용하는 방법과 'USING 구문'을 기억하세요.


2. Using PostgreSQL INNER JOIN to join three tables   

다음 다이어그램은 직원, 지불 및 고객의 세 가지 테이블 사이의 관계를 보여줍니다.

각 직원은 제로 또는 많은 결제를 처리합니다. 그리고 각각의 지불은 한 명의 직원에 의해서만 처리된다.
각각의 고객들은 제로 또는 많은 결제를 했다. 각각의 결제는 한 명의 고객에 의해 이루어집니다.

직원과 지불은 staff_id로 연결되어 있고, 고객과 지불은 customer_id로 연결된다.

 

세 테이블을 조인하려면 첫 번째 INER JOIN 절 다음에 두 번째 INER JOIN 절을 다음 쿼리로 배치합니다.

SELECT
    c.customer_id,
    c.first_name customer_first_name,
    c.last_name customer_last_name,
    s.first_name staff_first_name,
    s.last_name staff_last_name,
    amount,
    payment_date
FROM
    customer c
INNER JOIN payment p 
      ON p.customer_id = c.customer_id
INNER JOIN staff s 
      ON p.staff_id = s.staff_id
ORDER BY payment_date;   

세 개 이상의 테이블을 JOIN할때도 동일한 기법을 적용합니다.

추출하려는 데이터를 보고 어떤 테이블을 주 테이블로 해서 JOIN을 할지 판단해야 합니다.


이 강의에서는 PostgreSQL의 INNER JOIN 절을 사용하여 여러 테이블에서 데이터를 선택하는 방법에 대해 배웠습니다.

그 과정에서 테이블 별칭 사용,  USING 구문 사용법에 대해서도 학습하였습니다.

 

수고하셨습니다.

 

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

댓글