'SQL'에 해당되는 글 1건

  1. 2009.03.17 [DataBase] 문제풀이 7장

[DataBase] 문제풀이 7장

DB 2009. 3. 17. 02:19
7.1 SQL에서의 릴레이션(테이블)과 4장에서 정의한 릴레이션의 차이점은 무엇인가? 용어상의 기타 차이점도 설명하라. 왜 SQL은 테이블이나 질의 결과에 중복 투플들을 허용하는가?
SQL의 테이블(릴레이션)은 모든 애트리뷰트 값이 동일한 투플을 하나 이상 가질 수 있다. 일반적으로 집합은 두 개의 동일한 원소를 허용하지 않기 때문에 SQL테이블은 투플들의 집합이 아니고 투플들의 다중 집합이다.
SQL 질의 결과에서 중복된 투플이 나타나는 이유
- 중복을 없애는 것은 비용(시간)이 많이 드는 연산이다. 한 가지 구현 방법은 먼저 투플들을 정렬하고 중복된 투플들을 제거하는 것이다.
- 사용자가 질의 결과에 중복된 투플들이 나타나는 것을 원하는 경우가 있다.
- 집단 함수가 투플들에 적용될 때 대부분의 경우에 중복 삭제가 필요하지 않다.

7.2 SQL 애트리뷰트에 허용되는 데이터 타입들을 나열하라.
숫자 -  integer, int, smallint,  float, real, double precision
문자열 - char, varchar, clob
비트열 - blob
불리언 - true, false, unknown
날짜,시간 - date, time
타임스탬프 - timestamp

7.3 SQL에서는 4장에서 설명한 엔티티 무결성과 참조 무결성 제약조건을 어떻게 구현하였는가? 참조 트리거된 동작이란 무엇인가?
엔티티 무결성을 나타내는 제약조건은 not null로 한다. 일반적으로 애트리뷰트의 정의에 대한 디폴트값은 null이며 널 값이 허용되지 않을 때는 not null을 명시한다.
키와 참조 무결성을 위한 절로 primary key 절이 있다. primary key 절은 릴레이션의 기본키를 구성하는 하나 이상의 애트리뷰트를 명시한다. 만약 기본키가 하나의 애트리뷰트로 되어 있다면 이 절은 그 애트리뷰트 바로 뒤에 직접 올 수 있다. foreign key절도 참조 무결성을 명시한다. 투플들을 삽입 또는 삭제하거나 외래키 애트리뷰트 값을 수정할 때 참조 무결성 제약조건을 위반할 수 있다. SQL에서 무결성 제약조건을 위반할 때 취하는 디폴트 동작은 위반을 초래한 갱신 연산을 거절하는 것이다. 그러나 외래키 제약조건에 참조 트리거된 동작절을 추가하여 참조 무결성 제약조건이 위반된 경우에 취할 다른 동작을 명시할 수 있다. 참조 트리거된 동작에는 set null, cascade, set default가 있으며 위반된 경우를 가리키는 on delete나 on update 와 함께 사용해야 한다.

7.4 SQL 질의 구문 내의 6개의 절을 설명하고 6개의 절 각각에서 명시할 수 있는 구문 유형은 무엇인지 보여라. 6개의 절 중에서 필수적인 것은 무엇이며 선택적인 것은 무엇인가?
select 애트리뷰트 리스트 : 질의를 통해 값들이 검색되는 애트리뷰트 이름들의 리스트(필)
from 테이블 리스트 : 질의 처리를 위해 필요한 릴레이션들의 리스트(필)
where 조건 : 질의를 통해 검색되는 투플들을 식별하기 위한 조건식(선)
group by 컬럼 조건에 따른 연산(선)
having group에 대한 제한 : 그룹을 새로운 조건으로 분류(선)
order by 정렬 : 하나 이상의 애트리뷰트를 기준으로 질의 결과에 들어 있는 투플들을 정렬(선)

7.5 각 6개의 절을 실행하는 개념적 순서를 명시함으로써 어떻게 SQL 질의가 수행되는가를 개념적으로 설명하라.
from절, where절, group by절, having절 의 순서로 적용함으로써 평가된다. 개념적으로 order by절은 질의 결과를 정렬하기 위해 마지막에 적용된다.

7.6 SQL 내의 비교 연산자에서 널은 어떻게 다루는지 설명하라. SQL 질의에 집계 함수가 적용될 때 널을 어떻게 다루는가? 그룹핑 애트리뷰트에 널이 존재할 때는 어떻게 다루는가?
SQL에서는 참true, 거짓false, 모름unknown의 세 가지 값을 가진 논리를 사용한다. SQL에서는 애트리뷰트를 널과 비교학기 위하여 IS나 IS NOT을 사용한다. 그 이유는 SQL에서 각 널값은 모든 다른 널값과는 다르다고 간주하므로 = 형태의 비교가 적당하지 않다. 집계 함수에서 널인 투플들은 계산에 포함되지 않는다. 일반적으로 널값은 버린다. 그룹핑 애트리뷰트에 널이 존재하면 그 널값을 가진 모든 투플들을 위한 별도의 그룹을 만든다.
Posted by zeide
,