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

[MSSQL] DELETE 문 사용법 3가지 (데이터 삭제)

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

 

SQL Server에서 테이블의 데이터를 삭제하기 위해서는 DELETE 문을 사용하면 된다. SQL Server에서는 DELETE 문에서 조인을 하여 데이터를 삭제할 수 있으며, 서브쿼리를 사용하여 삭제할 데이터 범위를 조회하여 데이터를 삭제할 수도 있다. MERGE 문을 사용하면 INSERT, UPDATE, DELETE를 동시에 수행할 수 있다.

 

 

 

기본적인 DELETE 방법

DELETE 
  FROM dbo.dept
 WHERE deptno = 40

 

부서(dept) 테이블에서 부서코드(deptno) "40"에 해당하는 행을 삭제하는 예제이다.

 

DELETE dbo.dept
 WHERE deptno = 40

 

DELETE 문에서는 FROM 키워드를 생략하고 DELETE 키워드 뒤에 테이블명을 기술해도 된다.

 

다른 테이블과 조인하여 DELETE 방법

DELETE dbo.dept
  FROM dbo.emp a
 WHERE a.ename = 'SCOTT'
   AND dept.deptno = a.deptno

 

 

부서(dept) 테이블과 직원(emp) 테이블과 조인하여 직원(emp) 테이블의 'SCOTT'의 부서코드(deptno) "20"을 삭제하는 예제이다. 부서(dept) 테이블에서 부서코드 "20"이 삭제된 것을 확인할 수 있다.

 

DELETE 문의 FROM 절을 생략하여 작성해였으며 DELETE FROM dbo.dept FROM dbo.emp a ... 이렇게 FROM 절을 2번 작성해도 정상적으로 작동한다.

 

DELETE dbo.dept
  FROM dbo.emp a
  JOIN dbo.emp b
    ON a.mgr = b.empno
 WHERE b.ename = 'SCOTT'
   AND dept.deptno = b.deptno

 

 

FROM 절에서 여러 개의 테이블을 조인하는 예제이며 결과는 위의 것과 동일하다.

 

DELETE dbo.dept
  FROM dbo.dept a
  JOIN dbo.emp b
    ON a.deptno = b.deptno
 WHERE b.ename = 'SCOTT'

 

 

조인 영역의 FROM 절에 삭제할 테이블이 동일하게 기술되어 있으면 삭제할 테이블과 조인하지 않아도 FROM 절에 기술된 dbo.dept a 테이블의 범위에 해당하는 데이터가 삭제된다. 결과는 위의 예제와 동일하다.

 

서브쿼리를 사용하여 DELETE 방법

DELETE dbo.dept
 WHERE dept.deptno IN (SELECT a.deptno
                         FROM dbo.emp a
                        WHERE a.job = 'SALESMAN')

 

WHERE 절에서 서브쿼리를 사용하여 삭제할 데이터 항목을 가져올 수 있다. 조인을 사용하지 않을 경우 WHERE 절에서 서브쿼리를 자주 사용한다. 부서(dept) 테이블에서 부서코드 "30"이 삭제된 것을 확인할 수 있다.

 

DELETE dbo.dept
 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/500

댓글