본문 바로가기

ComputerScience/Database

DB - 6. More SQL statements(1)

728x90

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에 대한 예시를 살펴보자.

 

728x90
반응형

'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