PostgreSQL INNER JOIN을 사용하여 여러 테이블에서 데이터를 선택하는 방법

 

- 관계 데이터베이스에서 데이터는 일반적으로 둘 이상의 테이블에 분산됩니다.

- 완전한 데이터를 선택하려면 여러 테이블에서 데이터 쿼리해야하는 경우가 많습니다.

- INNER JOIN을 사용하여 여러 테이블의 데이터를 결합합니다.

 

-- 두 테이블에서 데이터를 선택하려면 INNER JOIN절을 사용
SELECT
	pka,
	c1,
	pkb,
	c2
FROM
	A
INNER JOIN B ON pka = fka;

- SELECT절에서 선택하려는 두 테이블의 열을 지정합니다.

- A(주 테이블)를 지정합니다.

- B에서 INNER JOIN 하고 ON 키워드 뒤에 조인 조건을 제공합니다.

 

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

- 이러한 값이 같으면 내부 조인은 두 테이블의 모든 열을 포함하는 새 행을 만들고 결과 집합에 추가합니다.

- 이러한 값이 같지 않으면 내부 조인은 해당 값을 무시하고 다음 행으로 이동합니다.

 

 

- 대부분의 경우 조인하려는 테이블에 같은 이름이 있습니다.

- 오류를 예방하기 위해서 table_name.column_name으로 할당합니다.


 

1) PostgreSQL INNER JOIN을 사용하여 두 테이블 조인

-- customer_id에서 0보다 많은 지불을 한 쿼리
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;

 

 

2) PostgreSQL INNER JOIN을 사용하여 3개의 테이블 조인

-- 세 개의 테이블을 조인하는 쿼리
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;

 

반응형

'SW ENGINEERING > Postgres' 카테고리의 다른 글

[PostgreSQL] BASIC - HAVING  (0) 2021.09.02
[PostgreSQL] BASIC - GROUP BY  (0) 2021.09.02
[PostgreSQL] BASIC - NATURAL JOIN  (0) 2021.09.02
[PostgreSQL] BASIC - Cross JOIN  (0) 2021.09.02
[PostgreSQL] BASIC - Table Aliases  (0) 2021.09.02
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기