[MSSQL] UPDATE 문 사용법 3가지 (데이터 수정)
- 데이터베이스/MSSQL
- 2022. 4. 24.
SQL Server에서 테이블이 데이터를 수정하기 위해서는 UPDATE 문을 사용하면 된다. SQL Server에서는 UPDATE 문에서 FROM 절을 사용할 수 있어서 다른 테이블과 조인을 하여 업데이트를 할 수 있다. 조인을 사용하지 않을 경우 서브쿼리를 사용하여 여러 개의 데이터를 업데이트하면 된다. SELECT 해서 UPDATE 하는 방법은 조인 또는 서브쿼리를 사용하면 된다.
목차 |
기본적인 UPDATE 방법
UPDATE dbo.dept
SET dname = 'SALES TEAM'
, loc = 'TEXAS'
WHERE deptno = 30
부서명(dname)과 지역명(loc)을 업데이트하는 예제이다.
업데이트할 칼럼이 여러 개인 경우 SET 절에서 쉼표(,)로 구분하여 칼럼과 값을 기술하면 된다.
다른 테이블과 조인하여 UPDATE 방법
UPDATE dbo.dept
SET loc = 'CALIFORNIA'
FROM dbo.emp a
JOIN dbo.emp b
ON a.mgr = b.empno
WHERE b.ename = 'SCOTT'
AND dept.deptno = b.deptno
업데이트할 테이블과 다른 테이블을 조인하여 업데이트해야 할 경우 FROM 절을 사용할 수 있다. FROM 절에 조인할 테이블을 기술하고 WHERE 절에서 업데이트할 테이블과 조인하면 된다.
업데이트할 테이블은 별칭을 사용할 수 없으므로 칼럼을 기술할 때 [테이블.칼럼명]으로 사용하면 된다.
부서(dbo.dept) 테이블의 지역명(loc)이 업데이트된 것을 확인할 수 있다.
UPDATE dbo.dept
SET loc = 'CALIFORNIA'
FROM dbo.dept a
JOIN dbo.emp b
ON a.deptno = b.deptno
WHERE b.ename = 'KING'
업데이트할 테이블이 FROM 절에 존재한다면 FROM 절의 테이블과 업데이트 테이블을 조인할 필요 없다.
조인을 해도 무방하지만 조인하지 않아도 FROM 절의 부서(dbo.dept a) 테이블과 업데이트할 부서(dbo.dept) 테이블이 동일한 데이터 범위를 가지므로 정상적으로 업데이트된다.
부서(dbo.dept) 테이블의 지역명(loc)이 업데이트된 것을 확인할 수 있다.
서브쿼리를 사용하여 UPDATE 방법
UPDATE dbo.dept
SET loc = (SELECT a.loc FROM dbo.dept a WHERE a.deptno = 10)
WHERE deptno IN (20, 30)
SET 절에서 스칼라 서브쿼리를 사용하여 값을 업데이트할 수 있다.
서브쿼리의 결과는 하나의 행, 하나의 열이 조회되어야 한다.
UPDATE dbo.dept
SET loc = 'TEXAS'
WHERE dept.deptno IN (SELECT a.deptno
FROM dbo.emp a
WHERE a.job = 'SALESMAN')
WHERE 절에서 서브쿼리를 사용하여 업데이트할 데이터 항목을 가져올 수 있다.
조인을 사용하지 않을 경우 WHERE 절에서 서브쿼리를 자주 사용한다.
UPDATE dbo.dept
SET loc = 'TEXAS'
WHERE EXISTS (SELECT 1
FROM dbo.emp a
WHERE a.job = 'SALESMAN'
AND a.deptno = dept.deptno)
위의 IN 연산자를 사용한 쿼리를 EXISTS 연산자로 변경한 쿼리문이다. IN 연산자와 동일한 기능을 한다.
상황에 따라서 IN 연산자보다 EXISTS 연산자를 사용할 경우 성능이 좋을 때가 있으므로 사용법을 알아두면 좋다.