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

21강 SQL이 뭐지? PostgreSQL NATURAL JOIN

by DoitSQL 2022. 12. 19.
728x90

21강 SQL이 뭐지? PostgreSQL NATURAL JOIN   

PostgreSQL

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

 

이번 강의에서는

 PostgreSQL NATURAL JOIN

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


Introduction to the PostgreSQL NATURAL JOIN   

NATURAL JOIN은 조인된 테이블의 동일한 열 이름을 기반으로 암시적 조인을 생성하는 조인입니다.

두 개의 테이블에서 같은 이름을 가진 칼럼 간의 조인 집합 결과를 출력합니다.

 

다음은 PostgreSQL의 NATURAL JOIN 구문을 보여줍니다.

SELECT select_list
FROM T1
NATURAL [INNER, LEFT, RIGHT] JOIN T2;   

 

NATURAL JOIN은 inner join, left join  또는 right join 일 수 있습니다. inner join, left join, right join과 과 같이 조인을 명시적으로 지정하지 않은 경우 PostgreSQL은 기본적으로 INNER JOIN을 사용합니다.

 

select_list에서 별표(*)를 사용하면 결과에 다음 열이 포함됩니다.
● 모든 공통 열 - 이름이 같은 두 테이블의 열입니다.
● 두 테이블의 모든 열로, 공통 열이 아닌 모든 열입니다.


PostgreSQL NATURAL JOIN examples   

PostgreSQL natural join 실습을 위해, categories와 products 2개의 테이블을 만듭니다.

 

다음의 CREATE TABLE 구문으로 categories와 products 생성합니다.

DROP TABLE IF EXISTS categories;
CREATE TABLE categories (
category_id serial PRIMARY KEY,
category_name VARCHAR (255) NOT NULL
);

DROP TABLE IF EXISTS products;
CREATE TABLE products (
product_id serial PRIMARY KEY,
product_name VARCHAR (255) NOT NULL,
category_id INT NOT NULL,
FOREIGN KEY (category_id) REFERENCES categories (category_id)
);

COMMIT;   

각 범주에는 0개 이상의 제품이 있으며 각 제품은 하나의 범주에만 속합니다.

제품 테이블의 category_id 열은 카테고리 테이블의 기본 키를 참조하는 외부 키입니다. category_id는 NATURAL JOIN을 수행하는 데 사용할 공통 열입니다.

 

다음 INSERT 문은 샘플 데이터를 범주 및 제품 테이블에 삽입합니다.

INSERT INTO categories (category_name)
VALUES
('Smart Phone'),
('Laptop'),
('Tablet');

INSERT INTO products (product_name, category_id)
VALUES
('iPhone', 1),
('Samsung Galaxy', 1),
('HP Elite', 2),
('Lenovo Thinkpad', 2),
('iPad', 3),
('Kindle Fire', 3);

COMMIT;   

 

다음 문에서는 NATURAL JOIN 절을 사용하여 제품 테이블을 범주 테이블과 결합합니다.

SELECT * FROM products
NATURAL JOIN categories;   

INNER JOIN 절을 사용하는 다음 문과 결과는 같습니다.

SELECT * FROM products
INNER JOIN categories USING (category_id);   

 

NATURAL JOIN의 편리한 점은 공통 열을 기반으로 암시적 조인 절을 사용하기 때문에 조인 절을 지정할 필요가 없다는 것입니다.

그러나 때때로 예기치 않은 결과를 초래할 수 있으므로 가능한 한 NATURAL JOIN을 사용하지 않는 것이 좋습니다. 실제로 실무에선 사용하지 않습니다.

 

예를 들어, 샘플 데이터베이스(dvdrental)에서 city 및 country 테이블을 참조하십시오.   

두 테이블 모두 country_id 열이 동일하므로 다음과 같이 NATURAL JOIN을 사용하여 이러한 테이블을 조인할 수 있습니다.

SELECT * 
FROM city
NATURAL JOIN country;   

쿼리가 빈 결과를 반환합니다.

그 이유는…

두 테이블 모두 last_update라는 또 다른 공통 열을 가지고 있으며, 이 열은 조인에 사용하지 않는다는 것을 사용자는 압니다. 그러나 dbms는 모릅니다. 그래서 NATURAL JOIN 절은 last_update 열을 그냥 사용합니다.

 

이처럼 예측할 수 없는 결과를 리턴하므로 실무에서는 사용하지 않습니다.

하지만 NATURAL JOIN을 통해 다른 JOIN을 더 깊게 이해할 수 있습니다.


이번 강좌에서는 공통 열이 있는 두 개 이상의 테이블에서 데이터를 쿼리 하는 Natural JOIN을 사용하는 방법과 어떻게 동작하는지 배웠습니다.

또, 공통 열이 2개 이상일 때 Natural JOIN을 사용하면 결과를 예측할 수 없다는 것도 배웠습니다.

 

14강 부터 시작한 JOIN에 대한 강좌는 21강에서 끝나고, 다음 강좌는  GROUP BY 강좌로 찾아뵙겠습니다.

 

감사합니다.


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

 


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

 

 

728x90

댓글