1. 기본 사용법
UPDATE emp
SET job = 'MANAGER'
, deptno = 20
WHERE empno = 7566
위는 WHERE 절의 empno에 해당하는 데이터의 job, deptno 컬럼을 수정하는 쿼리이다.
empno는 PK이기 때문에 한건의 데이터만 수정되지만 PK가 아니고 여러 건이 조회되면 여러 건의 데이터가 한 번에 수정된다.
2. SET 절에 서브쿼리 사용법
UPDATE emp a
SET a.sal = (SELECT MAX(aa.sal) FROM emp aa WHERE aa.job = a.job)
, a.comm = (SELECT MAX(aa.comm) FROM emp aa WHERE aa.job = a.job)
WHERE a.job = 'ANALYST'
다른 테이블에서 데이터를 조회하여 UPDATE를 해야 하는 경우가 있다.
조인을 사용하면 편리할 거 같지만 UPDATE문에서 조인은 제약사항이 많기 때문에 서브 쿼리를 활용하면 쉽게 해결되는 경우가 많다.
UPDATE emp a
SET (a.sal, a.comm) = (SELECT MAX(aa.sal), MAX(aa.comm)
FROM emp aa
WHERE aa.job = a.job)
WHERE a.job = 'ANALYST'
동일한 서브쿼리를 반복해서 사용해야 하는 경우 컬럼을 묶어서 한 번의 서브 쿼리로 업데이트 값을 입력할 수 있다.
3. WHERE 절에 IN 사용법
UPDATE emp
SET sal = 3000
WHERE empno IN (SELECT aa.empno
FROM emp aa
, dept bb
WHERE aa.job = 'ANALYST'
and aa.deptno = bb.deptno)
업데이트 범위를 정할 때 다른 테이블을 참조해야 할 경우 IN을 사용하여 데이터를 포함시키거나 NOT IN을 사용하여 제외시킬 수 있다.
UPDATE emp
SET comm = 500
WHERE (job, deptno) IN (SELECT aa.job, aa.deptno
FROM emp aa
WHERE aa.deptno = 30)
IN의 서브 쿼리에서 키값이 여러 개인 경우 컬럼을 묶어서 조건을 맵핑할 수 있다.
UPDATE emp a
SET a.comm = 500
WHERE a.ROWID IN (SELECT aa.ROWID
FROM emp aa
WHERE aa.deptno = 30)
동일한 데이블을 사용한다면 ROWID를 키로 사용할 수 있다.
→ ROWID
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=kimsajang&logNo=220507834231
4. WHERE 절에 EXSIST 사용법
UPDATE emp a
SET a.comm = 500
WHERE EXISTS (SELECT 1
FROM emp aa
WHERE aa.empno = a.empno
AND aa.deptno = 30)
UPDATE emp a
SET a.comm = 500
WHERE NOT EXISTS (SELECT 1
FROM emp aa
WHERE aa.empno = a.empno
AND aa.deptno = 30)
5. 조인하여 UPDATE 하는 법
UPDATE (SELECT a.sal
, a.comm
, b.sal AS sal_2
, b.comm AS comm_2
FROM emp a
, emp_man b
WHERE a.empno = b.empno)
SET sal = sal_2
, comm = comm_2
두 개의 테이블을 조인해서 업데이트해야 할 경우 사용하는 방법이다.
※ 참고
https://gent.tistory.com/408?category=360526
'자격증 > SQLP' 카테고리의 다른 글
SQL 공유 및 재사용 (0) | 2022.10.08 |
---|---|
SQL INDEX & INDEX HINT (0) | 2022.10.07 |
NULL은 IS NULL IS NOT NULL 로만 연산이 가능 (0) | 2022.10.05 |
옵티마이저(Optimizer) & 프로시저(Procedure) 자료 (0) | 2022.10.04 |
2. INSERT문 심화 (0) | 2022.09.29 |
댓글