우리는 테이블의 데이터를 추가/수정/삭제한 뒤 변경사항에 대한 정보를 얻기 위하여,
먼저 데이터 조작이 끝난 뒤 SELECT구문을 사용해 왔다.
하지만 만약 데이터를 조작하는 동안 수정된 행의 데이터를 얻을 수만 있다면 정말 유용하지 않을까?
그게 바로 RETURNING 문법이다!!
INSERT, UPDATE, DELETE 명령어는 모두 RETURNING 절을 추가적으로 사용할 수가 있다.
예를 들면, food라는 테이블을 만들고, 데이터를 하나 추가해 보자.
CREATE TABLE food (name, color, id serial primary key);
INSERT INTO food (name, color)
VALUES ('apple', 'red') RETURNING id;
RETURNING을 사용하면 각각의 데이터들을 식별하기 위한 고유 식별자를 반환해 준다.
뿐만 아니라, UPDATE 구문에서도 RETURNING은 수정된 행의 새로운 정보를 반환할 수 있다.
아래 쿼리는 제품의 가격이 99.99원 이하인 것들의 판매금액을 10% 올린 뒤 제품의 이름과 인상된 가격을 반환한다.
UPDATE products
SET price = price * 1.10
WHERE price <= 99.99
RETURNING name, price AS new_price;
DELETE 구문에 RETRUNING * 을 붙일 경우, 삭제된 행들의 정보들을 반환해 준다.
DELETE FROM products
WHERE obsoletion_date = 'today'
RETURNING *;
데이터를 추가하고 나서 다시 수정해줘야 하는 경우가 있다면,
RETURNING을 활용하여 유니크 값을 반환하고 그것을 이용해 update를 하는 방법을 추천한다.
'Sql' 카테고리의 다른 글
[MyBatis] MyBatis와 @Builder 사용 시 resultMap 매핑 문제 해결하기 (0) | 2024.10.27 |
---|---|
[PostgreSQL] LATERAL Subqueries (0) | 2023.09.08 |
[PostgreSQL] UPSERT (0) | 2023.09.08 |