Modification of the Database: 두 판 사이의 차이

youngwiki
9번째 줄: 9번째 줄:
delete from r where P;
delete from r where P;
</syntaxhighlight>
</syntaxhighlight>
여기서 P는 조건(predicate)을, r은 릴레이션(relation)을 나타낸다. 이 delete 문은 먼저 r 릴레이션에서 P(t)가 참인 모든 튜플 t를 찾고, 그런 다음 해당 튜플들을 r로부터 삭제한다. 이때 where 절은 생략할 수 있으며, 이 경우 r에 있는 모든 튜플이 삭제된다. 또한 delete 명령은 한 번에 오직 하나의 릴레이션에만 작동하며, 이에 따라 여러 릴레이션에서 튜플을 삭제하려면 릴레이션마다 별도의 delete 명령을 사용해야 한다. 하지만 delete 명령의 where 절 안에 중첩된 select-from-where 문을 넣어 여러 릴레이션을 참조할 수 있다. 예를 들어, 대학 평균 급여보다 낮은 급여를 가진 모든 교수의 정보를 삭제하고 싶다고 하자:
여기서 P는 조건(predicate)을, r은 릴레이션(relation)을 나타낸다. 이 delete 문은 먼저 r 릴레이션에서 P(t)가 참인 모든 튜플 t를 찾고, 그런 다음 해당 튜플들을 r로부터 삭제한다. 이때 where 절은 생략할 수 있으며, 이 경우 r에 있는 모든 튜플이 삭제된다. 또한 delete 명령은 한 번에 오직 하나의 릴레이션에만 작동하며, 이에 따라 여러 릴레이션에서 튜플을 삭제하려면 릴레이션마다 별도의 delete 명령을 사용해야 한다. 하지만 where 절 안의 서브쿼리에서는 여러 릴레이션을 참조할 수 있다. 예를 들어, 대학 평균 급여보다 낮은 급여를 가진 모든 교수의 정보를 삭제하고 싶다고 하자:
<syntaxhighlight lang="sql">
<syntaxhighlight lang="sql">
delete from instructor
delete from instructor
16번째 줄: 16번째 줄:
   from instructor);
   from instructor);
</syntaxhighlight>
</syntaxhighlight>
위에서는 delete가 한 릴레이션에서만 동작하더라도, where절 안에서는 다른 릴레이션들을 자유롭게 참조할 수 있다는 것을 보여준다. 또한 위 예제는 모든 조건 검사를 삭제 전에 미리 수행하는 것이 중요하다는 것을 보여준다. 만약 어떤 튜플이 먼저 삭제되고 나서 나머지 튜플을 검사하면, <code>avg(salary)</code>값이 바뀌어 delete의 결과가 튜플 처리 순서에 따라 달라질 수 있다!


==각주==
==각주==
[[분류:컴퓨터 네트워크]]
[[분류:컴퓨터 네트워크]]

2025년 4월 7일 (월) 15:59 판

상위 문서: SQL

개요

해당 문서에서는 SQL을 사용하여 데이터베이스의 정보를 delete, insertion, update하는 방법을 설명한다.

Deletion

튜플의 deletion는 query와 거의 비슷한 방식으로 작성된다. 이때 전체 튜플이 삭제되며, 특정 속성의 값만 삭제되지는 않는다. 이는 아래와 같이 표현된다:

delete from r where P;

여기서 P는 조건(predicate)을, r은 릴레이션(relation)을 나타낸다. 이 delete 문은 먼저 r 릴레이션에서 P(t)가 참인 모든 튜플 t를 찾고, 그런 다음 해당 튜플들을 r로부터 삭제한다. 이때 where 절은 생략할 수 있으며, 이 경우 r에 있는 모든 튜플이 삭제된다. 또한 delete 명령은 한 번에 오직 하나의 릴레이션에만 작동하며, 이에 따라 여러 릴레이션에서 튜플을 삭제하려면 릴레이션마다 별도의 delete 명령을 사용해야 한다. 하지만 where 절 안의 서브쿼리에서는 여러 릴레이션을 참조할 수 있다. 예를 들어, 대학 평균 급여보다 낮은 급여를 가진 모든 교수의 정보를 삭제하고 싶다고 하자:

delete from instructor
where salary < (
  select avg(salary)
  from instructor);

위에서는 delete가 한 릴레이션에서만 동작하더라도, where절 안에서는 다른 릴레이션들을 자유롭게 참조할 수 있다는 것을 보여준다. 또한 위 예제는 모든 조건 검사를 삭제 전에 미리 수행하는 것이 중요하다는 것을 보여준다. 만약 어떤 튜플이 먼저 삭제되고 나서 나머지 튜플을 검사하면, avg(salary)값이 바뀌어 delete의 결과가 튜플 처리 순서에 따라 달라질 수 있다!

각주