1. Aggregate Functions
- 집계합수들을 살펴보자.
- 첫번째 예시는 instructor 중에서 comp.sci인 교수들의 salary 평균을 구해준다.
- 두번째 예시는 spring 2018에 강의한 distinct한 (중복제거) 교수들의 수를 구해준다.
- 세번째 예시는 course의 tuple수를 구해준다.
2. group by
- group by를 사용하는 예시를 살펴보자
- dept_name으로 그룹을 묶고 결과는 dept_name과 평균 salary를 tuple로 만들어 반환한다.
- 만약 위 예시에서 select에 count(ID)를 추가하면 comp. sci. tuple에 3이라는 column이 추가될 것이다.
- 또한 group by에 여러개가 올 수 있으며 직관적으로 여러개의 column으로 구성된 set이 동일한가를 기준으로 grouping을 한다.
- 만약 group by에 두개의 column이 오면 두개의 column으로 조합할 수 있는 group들로 묶게 된다.
*select에 단독으로 올 수 있는 column은 반드시 group by에 명시되어 있어야 한다. 즉 dept_name만이 select에 avg()같은 함수를 안붙이고 단독으로 올 수 있다. 직관적으로 이유를 유추하기 쉬울 것이다.
*항상 from -> where -> groub by 등... -> select 순서로 동작이 진행된다.
3. Having Clause
- group by가 있을 때 할 수 있는 조건이다.
select
from
where // from에서 where조건을 만족하는 튜플들 중에
group by // group을 지을 것인데
having // having은 각 group들에 대해 조건을 제시할 수 있다.
- having 구문을 추가한 결과를 살펴 보자.
- group을 마치고 나서 각 group에 대해서 having 조건을 따져보자.
- Comp. Sci의 교수들의 salary 평균은 42000보다 크다. 고로 최종 결과에 Comp.Sci 튜플은 포함될 것이다.
- Music의 교수들의 salary 평균은 42000보다 작다. 고로 최종 결과에 Music 튜플은 포함되지 않을 것이다.
- 만약 having count(ID) >= 2 라는 조건으로 바꾸면 결과는 어떻게 될까?
- Comp.Sci, Finance, History, Physics 튜플만 결과에 나타날 것이다.
4. Nested subqueries (set membership)
- where문 안에 다시 select from where문이 중첩된 예시이다.
- 가을학기, 2017년도. course id가 뒤에 기술되는 set에 있음. 이 세가지 조건을 만족하는 튜플을 section에서 꺼내는 것이다.
- 참고로 위의 구문을 집합연산으로 대체하면 위와 같다.
- 합집합은 union, 교집합은 intersect, 차집합은 except를 쓰면 된다.
- 아래 더 다양한 예시들을 나열하겠다.
- 물론 중첩을 풀어 하나의 select루프로만 문장을 변환할 수도 있다.
5. Set Comparison
- some 키워드를 사용해 중첩문으로 바꿔보자.
- Biology 교수들의 salary만 꺼낸 다음 어떤 한 튜플보다 salary가 큰 salary를 받는 교수를 꺼낸다.
- 결과 테이블은 biology학과에서 salary가 가장 적은 교수보다 salary가 큰 교수들의 이름 튜플로 구성된다.
- some에 대한 정의를 좀더 확실하게 짚고 가자.
- 같지 않다는 <>로 표현한다.
- 이번에는 all에 대한 예시를 살펴보자.
'ComputerScience > Database' 카테고리의 다른 글
DB - 8. More SQL statements(3) (0) | 2021.10.13 |
---|---|
DB - 7. More SQL statements(2) (0) | 2021.10.06 |
DB - 5. Schema Diagram, Relational Algebra (0) | 2021.09.15 |
DB - 4. Keys (at relational DB) (0) | 2021.09.15 |
DB - 3. Relational Database (0) | 2021.09.08 |