36강 SQL이 뭐지? PostgreSQL UPDATE Join
PostgreSQL
SQL이 뭐지? 36강 시작합니다.
이번 강의에서는
▶ PostgreSQL UPDATE Join statement
에 대해서 알아보겠습니다.
PostgreSQL UPDATE 조인 구문은 다른 테이블의 값을 기준으로 테이블의 데이터를 업데이트합니다.
Introduction to the PostgreSQL UPDATE join syntax
다른 테이블의 값을 기준으로 테이블의 데이터를 업데이트해야 하는 경우도 있습니다. 이 경우 PostgreSQL UPDATE 조인을 사용할 수 있습니다. 구문은 다음과 같습니다.
UPDATE t1
SET t1.c1 = new_value
FROM t2
WHERE t1.c2 = t2.c2;
UPDATE 문에서 다른 테이블에 조인하려면 FROM 절에 조인된 테이블을 지정하고 WHERE 절에 조인 조건을 제공합니다. FROM 절은 SET 절 바로 뒤에 나타나야 합니다.
UPDATE 문은 테이블 t1의 각 행에 대해 테이블 t2의 모든 행을 검사합니다. 테이블 t1의 c2 열의 값이 테이블 t2의 c2 열의 값과 같으면 UPDATE 문은 테이블 t1의 c1 열의 값을 새 값(new_value)으로 업데이트합니다.
PostgreSQL UPDATE JOIN example
PostgreSQL UPDATE 조인 실습에는 다음 데이터베이스 테이블을 사용합니다.
먼저 grand luxury, luxury, mass를 포함한 제품 세그먼트를 저장하는 product_segment라는 새 테이블을 만듭니다.
product_segment 테이블에는 특정 세그먼트를 기준으로 할인율을 저장하는 할인 열이 있습니다. 예를 들어, 그랜드 럭셔리 세그먼트가 있는 제품은 5% 할인이 적용되는 반면, 럭셔리와 대량 제품은 각각 6%와 10% 할인이 적용된다.
CREATE TABLE product_segment (
id SERIAL PRIMARY KEY,
segment VARCHAR NOT NULL,
discount NUMERIC (4, 2)
);
INSERT INTO
product_segment (segment, discount)
VALUES
('Grand Luxury', 0.05),
('Luxury', 0.06),
('Mass', 0.1);
둘째, 제품 데이터를 저장하는 product라는 다른 테이블을 생성합니다. 제품 테이블에는 세그먼트 테이블의 ID로 연결되는 외부 키 열 segment_id가 있습니다.
CREATE TABLE product(
id SERIAL PRIMARY KEY,
name VARCHAR NOT NULL,
price NUMERIC(10,2),
net_price NUMERIC(10,2),
segment_id INT NOT NULL,
FOREIGN KEY(segment_id) REFERENCES product_segment(id)
);
INSERT INTO
product (name, price, segment_id)
VALUES
('diam', 804.89, 1),
('vestibulum aliquet', 228.55, 3),
('lacinia erat', 366.45, 2),
('scelerisque quam turpis', 145.33, 3),
('justo lacinia', 551.77, 2),
('ultrices mattis odio', 261.58, 3),
('hendrerit', 519.62, 2),
('in hac habitasse', 843.31, 1),
('orci eget orci', 254.18, 3),
('pellentesque', 427.78, 2),
('sit amet nunc', 936.29, 1),
('sed vestibulum', 910.34, 1),
('turpis eget', 208.33, 3),
('cursus vestibulum', 985.45, 1),
('orci nullam', 841.26, 1),
('est quam pharetra', 896.38, 1),
('posuere', 575.74, 2),
('ligula', 530.64, 2),
('convallis', 892.43, 1),
('nulla elit ac', 161.71, 3);
셋째, 제품 세그먼트의 할인을 기준으로 모든 제품의 순 가격을 계산해야 한다고 가정합니다. 이렇게 하려면 다음과 같이 UPDATE join 문을 적용할 수 있습니다.
UPDATE product
SET net_price = price - price * discount
FROM product_segment
WHERE product.segment_id = product_segment.id;
테이블 별칭을 사용하여 다음과 같이 쿼리를 더 짧게 만들 수 있습니다.
UPDATE
product p
SET
net_price = price - price * discount
FROM
product_segment s
WHERE
p.segment_id = s.id;
이 문은 product_segment 테이블에 product 테이블을 결합합니다. 두 테이블 모두 일치하는 경우 product_segment 테이블에서 할인을 받아 다음 공식을 기반으로 순 가격을 계산하고 net_price 열을 업데이트합니다.
net_price = price - price * discount;
다음 SELECT 문은 업데이트를 확인하기 위해 제품 테이블의 데이터를 검색합니다.
SELECT * FROM product;
보시다시피 net_price 열이 올바른 값으로 업데이트되었습니다.
다른 테이블의 값을 기준으로 테이블의 데이터를 업데이트하는
PostgreSQL UPDATE join 문을 배웠습니다.
본 강의는 PostgreSQL Tutorial을 참조합니다.
실습용 테이블에 대해서는 3강을 참조하세요.
Do it! SQL을 찾아 주셔서 감사합니다. 공감 ♥ , 댓글이 큰 힘이 됩니다. |
'IT > SQL 기초강좌 (PostgreSQL)' 카테고리의 다른 글
38강 SQL이 뭐지? PostgreSQL DELETE JOIN (2) | 2022.12.21 |
---|---|
37강 SQL이 뭐지? PostgreSQL DELETE (2) | 2022.12.21 |
35강 SQL이 뭐지? PostgreSQL UPDATE (3) | 2022.12.21 |
34강 SQL이 뭐지? PostgreSQL INSERT Multiple Rows (1) | 2022.12.21 |
33강 SQL이 뭐지? PostgreSQL INSERT statement (3) | 2022.12.20 |
댓글