DELETE JOIN 문
- DELETE 사용 시 다른 테이블을 참조하여 삭제 처리
- DELETE 문에 USING 절 사용(참조 테이블)
- 두 테이블의 연결 조건(조인 조건) 필요
- DELETE JOIN 문은 서브 쿼리로 대체 가능
UPSERT 문
- UPDATE와 INSERT를 동시에 고려
- 기존 데이터에 값이 있으면 UPDATE를, 없으면 INSERT를 수행
- 다른 DBMS에서는 MERGE 문으로 사용
INSERT INTO 테이블명(컬럼명...)
VALUES (값 ...)
ON CONFLICT 타겟 ACTION;
/*
여기서 타겟은
(컬럼명)
ON CONSTRAINT 제약조건명
WHERE 절
ACTION은 삽입할 데이터가 이미 있으면 어떻게 할 지를 지정
DO NOTHING //아무 것도 하지 않음
DO UPDATE SET 컬럼 = 값... WHERE 조건 // 삽입하고자 하는 값으로 수정
*/
INSERT INTO menu1
SELECT * FROM menu2
ON conflict (id)
do update set price = EXCLUDED.price;
BEGIN, COMMIT, ROLLBACK, SAVEPOINT
- savepoint는 지정한 중간 단계로 복구하는 TCL 문법
- select는 단순 조회기 때문에 데이터의 변경을 저장할 필요가 없다, 따라서 commit은 select와 무관
- savepoint를 통한 rollback 지점 지정 가능
- 어떤 rollback도 commit 시점 이전으로 돌아갈 수 없다
Q. professor_test1 테이블에서 각 직급별로 최대 PAY 값을 구한 뒤 해당 값으로 모두 수정하기
update professor_test1 p1
set pay = (select max(pay) from professor_test1 p2 where p1.position = p2.position);
출처 : https://velog.io/@bacccine/PostgreSQL-4651%EA%B0%95%EA%B9%8C%EC%A7%80%EC%9D%98-%EB%82%B4%EC%9A%A9-%EC%A0%95%EB%A6%AC