본문 바로가기
  • [성공하는 개발자] - Developer
DataBase/MSSQL

[MSSQL] UPDATE 문 사용법 3가지 (데이터 수정)

by Sein-JH 2022. 11. 4.
728x90

 

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 연산자를 사용할 경우 성능이 좋을 때가 있으므로 사용법을 알아두면 좋다.

 

참고 : https://gent.tistory.com/499

댓글