나중에 DB 짤 일이 있을 지도 모른다는 생각에 sql 쿼리문 정도는 한 번 정리해 두기로 했다.
문제:
직원 급여(salary)의 평균이 $30,000 이상인 부서에 대해, 그 부서의 이름과 그 부서에서 일하는 직원을 구하라."
중첩문은 무언가 추려내고 싶을 때 사용하는 것 같다.
예를 들어 A인 상황에서의 B상황 ->직업급여 평균이 30000이상인 부서에 대해서(A)의 , 이름과 직원 구하기(B)
아래는 WITH ~AS ~로 A상황을 떼어내어 작성한 쿼리문이다.
문제: 한 명 이상의 사원이 근무하는 부서의 개수를 검색하라 ---- EXISTS 의 핵심은 '존재하니?'이다.
'EXISTS 를 이용해서 급여가 10000보다 큰 직원의 이름과 급여를 검색하라'-이런 유형도 존재할 수 있다. 잘생각해보면 됨
UNIQUE
일단 UNIQUE와 DISTINCT를 같이 쓰지 않도록 주의하자.
UNIQUE는 TRUE FALSE로 결과값이 나온다.
어떤 조건에서의 성별이 UNIQUE하게 나오는가, 아니면 중복되어서 나오는 게 하나라도 존재하는가??
WHERE UNIQUE (SELECT SEX ~~
문제 : 부서에 속한 사원들의 평균 급여가 가장 많은 부서의 이름과 평균 급여를 검색하라.
GROUP BY 와 HAING을 쓸 때 SELECT 문에도 포함되어 있어야 함을 잊지 말자!
평균+가장많은이 합쳐져 MAX(AVG())로 들어가야 한다.
문제: 급여가 가장 높은 사람의 이름을 검색하라.
ALL보다 크거나 같은으로 해결할 수 있다.
ALL, ANY 의 차이 주의
문제: 매니저인 사람을 고르되, Employee는 값이 다 나오도록 하라.
Outer join의 핵심은 튜플이 다 같지 않은 두 개의 relation을 결합할 수 있다는 것이다. Null값이 나올 수 있다.
문제: 3명보다 많은 사원을 가지고 있는 부서를 고른 후 , 그 중에서 40000달러가 넘는 월급을 받는 사원의 수를 부서와 함께 출력하라. (With AS문 사용하여)
이 때 만든 BIGDEPTS를 조회하고 싶을 때에도 SELECT 문을 사용해야 에러가 나지 않는다.