[MSSQL] DELETE 문 사용법 3가지 (데이터 삭제)
- 데이터베이스/MSSQL
- 2022. 4. 25.
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 연산자를 사용할 경우 성능이 좋을 때가 있으므로 사용법을 알아두면 좋다.