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을 참조합니다.
실습용 테이블에 대해서는 3강을 참조하세요.
Do it! SQL을 찾아 주셔서 감사합니다. 여러분의 댓글이 큰 힘이 됩니다. |
'IT > SQL 기초강좌 (PostgreSQL)' 카테고리의 다른 글
17강 SQL이 뭐지? PostgreSQL RIGHT JOIN (2) | 2022.12.17 |
---|---|
16강 SQL이 뭐지? PostgreSQL LEFT JOIN (3) | 2022.12.17 |
14강 SQL이 뭐지? PostgreSQL Join (4) | 2022.12.16 |
13강 SQL이 뭐지? PostgreSQL Table Aliases (2) | 2022.12.16 |
12강 SQL이 뭐지? PostgreSQL : NULL and IS NULL operator (2) | 2022.12.16 |
댓글