1. Exists
- exist는 ()안에서 튜플이 하나도 안나온다면 F 하나라도 나왔다면 T를 반환한다.
- subquery는 outer query의 횟수만큼 계속 실행된다. section이 1000개라면 subquery도 1000번 돌아야 하는 것이다.
- 두 쿼리가 correlated 되어있기 때문이다 (S.course_id 때문)
- 이전시간에 배운 in의 경우는 subquery는 딱한번 실행되고 나온 결과로 바깥 query가 돈다.
- 두 쿼리가 correlated 되어 있지않기 때문이다
- not exist는 튜플이 하나도 나오지 않아야 true가 된다.
- 참고로 subquery에 첫번째 쿼리는 한번 수행된 결과로 대체가 가능하지만 두번재 쿼리는 매번 학생의 id를 가지고 반복된다.
2. Unique
- unique는 ()안에 결과물에 중복된 튜플이 있는지 없는지에 따라 F, T가 반환된다.
- 결과물 이 빈 테이블이라면 unique는 T를 반환한다.
3. Subqueries in from clause
- 동일한 결과를 내는 다른 표현은 아래와 같다.
- having절을 사용하면 다음과 같다.
4. with clause
- with로 임시테이블을 만들어서 작업을 한다.
- department테이블에서 budget이 max인 값을 꺼내 value라는 column을 갖는 새로운 임시 테이블을 만든다. 테이블 이름은 max_budget이다.
- 아래 예시처럼 두개의 임시 테이블을 정의할 수도 있다.
5. Subqueries in select clause
- select문의 두번째 ()는 scalar 값이다. 즉 결과물로 table이 아닌 scalar value를 기대한다.
6. 연습
- with 절을 사용하면 다음과 같다.
7. 정리
'ComputerScience > Database' 카테고리의 다른 글
DB - 9. JDBC (0) | 2021.10.27 |
---|---|
DB - 8. More SQL statements(3) (0) | 2021.10.13 |
DB - 6. More SQL statements(1) (0) | 2021.09.29 |
DB - 5. Schema Diagram, Relational Algebra (0) | 2021.09.15 |
DB - 4. Keys (at relational DB) (0) | 2021.09.15 |