예)
Table A의 data: val1, val1, val2, val3, val4, val5
Table B의 data: val1, val2, val2, val3
SQL 1:
SELECT data FROM Table A
EXCEPT
SELECT data FROM Table B
val4, val5
SQL 2:
SELECT data FROM Table A
EXCEPT ALL
SELECT data FROM Table B
val1, val4, val5
- subquery끼리의 연산 결과로 나오는 새로운 릴레이션
- select한 속성 앞에 릴레이션 이름이 없는 이유는 EMPNAME과 DEPTNAME이 각각의 릴레이션에 고유한 속성이기 때문
- 정렬 우선순위: DEPNAME(오름차순) -> SALARY(내림차순)
- 일반적으로 기본키(primary key)를 가지고 검색하는 경우 해당함
- 스칼라 값이 반환되는 경우와 다르게 where에서 집합 연산 사용
- 사실상 EMPLOYEE 릴레이션과 DEPARTMENT 릴레이션을 조인한 결과와 같으며, 중첩 질의로 표현한 방법이다
- 절차적인 성격이 들어간 질의 방식이다
- 릴레이션끼리 같은지 여부를 판단하는 것은 너무 큰 컴퓨팅 과정이므로 그런 비교 연산은 없다
- EXISTS: 조건을 만족하는 투플이 하나라도 존재하는가?
- IN, JOIN, EXISTS 사용 질의 모두 같은 의미
- 상관 관계가 있다면 단순히 내부 질의 이후 외부 질의 순으로 검색할 수 없다
- 외부 쿼리의 투플들에 대해 내부 쿼리를 반복 수행해야 함
- 조인도 마찬가지로 한 릴레이션의 각 투플에 대해 다른 릴레이션의 투플들 모두 비교해야함
- 필요한 속성만 INSERT 할 수 있다
- SELECT한 릴레이션을 이미 존재하는 릴레이션에 삽입
- 트리거: 어떤 연산으로 다른 연산을 촉발시키는 것
- 너무 많다면 그 조건들을 하나하나 체크하느라 오버헤드가 너무 큼
- 참조 무결성은 시스템의 정의해논 트리거, 내가 직접 트리거를 만들 수 있음
- SELECT 문에 대해서도 트리거 룰 정의 가능
- 한 조건을 만족하는 여러 트리거가 동시에 활성화될 수 있고, 활성화된 트리거가 다른 트리거를 활성화하며 연쇄적으로 작동 가능
- 주장: 데이터베이스가 반드시 만족해야하는 조건들, 트리거보다 강력함
- 예) 참조 무결성을 주장 구문으로 표현
- SQL와 호스트 언어의 역할 분담
- 프로그래밍 언어는 데이터를 레코드로 처리하고, SQL은 릴레이션으로 처리하여 구조 불일치
- 요즘은 SQL이 호스트 언어가 갖고있는 기능을 포함하고 있음
- 호스트와 SQL이 소통하기 위한 변수
- SQL에서는 :변수명 형식으로 사용
- 프로그래밍 언어에서 loop 사용해 검색
출처: http://www.kocw.net/home/cview.do?lid=66587d56c1bf0e5f
'CS > DB' 카테고리의 다른 글
5. 데이터베이스 설계와 ER모델 (0) | 2022.07.22 |
---|---|
4. 데이터베이스 설계와 ER모델 (0) | 2022.07.21 |
관계 대수와 SQL & 데이터베이스 설계와 ER모델 (0) | 2022.07.12 |
2. 관계 대수와 SQL (0) | 2022.07.08 |
1. 관계 대수와 SQL (0) | 2022.07.07 |