개키우는개발자 : )

PostgreSQL UPDATE JOIN 문 본문

PostgreSQL/데이터 조작 및 테이블 관리

PostgreSQL UPDATE JOIN 문

DOGvelopers 2019. 11. 16. 13:23
반응형

UPDATE JOIN 문

UPDATE시 다른 테이블의 내용을 참조 하고 싶을 때 UPDATE JOIN 문을 사용 합니다. 복잡한 업무를 처리하는데 매우 유용한 방법 입니다.

 

기본문법

 

- UPDATE할 테이블을 작성 후 특정 컬럼을 UPDATE합니다. 참조 테이블을 작성하고 JOIN조건을 입력합니다.

UPDATE
	TARGET_TABLE A
SET
	A.COLUMN_1 = 표현식
FROM
	REF_TABLE B
WHERE
	A.COLUMN_1 = B.COLUMN_1;

 

실습준비

 

- PRODUCT_SEGMENT 테이블 생성 후 데이터 저장

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);

COMMIT;

할인율 테이블

실습1

- PRODUCT2 테이블 생성 후 데이터 저장

CREATE TABLE PRODUCT2
(
	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 PRODUCT2(NAME,PRICE,SEGMENT_ID)
VALUES
('K5',804.89,1),
('K7',228.55,3),
('K9',567.98,2),
('SONATA',666.55,3),
('SPARK',567.55,2),
('AVANTE',678.76,3),
('LOZTE',441.23,2),
('SANTAFE',445.66,1),
('TUSON',887.77,3),
('TRAX',789.55,2),
('ORANDO',163.66,1),
('RAY',456.66,1),
('MORNING',982.55,3),
('VERNA',207.88,1),
('K8',985.45,1),
('TICO',896.38,1),
('MATIZ',575.74,2),
('SPORTAGE',530.64,2),
('ACCENT',892.43,1),
('TOSCA',161.71,3);

COMMIT;

상품가격 테이블

실습2

실습

 

- UPDATE JOIN을 사용하여 PRODUCT_SEGMENT 테이블의 할인율 만큼 가격을 할인한 후 NET_PRICE 컬럼에 값을 저장

UPDATE
	PRODUCT2 A
SET
	NET_PRICE = A.PRICE - (A.PRICE * B.DISCOUNT)
FROM
	PRODUCT_SEGMENT B
WHERE
	A.SEGMENT_ID = B.ID;

COMMIT;

실제 할인이 적용된 가격을 저장

실습3

 

반응형

'PostgreSQL > 데이터 조작 및 테이블 관리' 카테고리의 다른 글

PostgreSQL EXPORT 작업  (0) 2019.11.16
PostgreSQL UPSERT 문법  (0) 2019.11.16
PostgreSQL DELETE 문  (0) 2019.11.16
PostgreSQL UPDATE 문  (2) 2019.11.16
PostgreSQL INSERT 문  (0) 2019.11.11
Comments