Oracle/SQL

2012.01.09 SQL 5일차(연습노트 ; sub query) max,min 안쓰고 최소값, 최대값, 등등

에몽이ㅋ 2012. 1. 10. 10:31
max, min은 퍼포먼스 상으로 좀 느리므로 종종 any, all을 사용하여 최소값이나 최대값을 구한다.

* 학생 중에서 생년월일이 가장 빠른 학생의 학번, 이름, 생년월일을 출력하세요
SQL> select studno, name, birthdate
  2  from student
  3  where birthdate <=
  4     all(select birthdate from student);

    STUDNO NAME       BIRTHDATE
---------- ---------- ------------
     10202 오유석     12-OCT-77 

 * 학년별로 평균 체중이 가장 적은 학년과 평균 몸무게를 출력하세요
  1  select grade, avg(weight)
  2  from student
  3  group by grade
  4  having avg(weight) <=
  5     all(select avg(weight)
  6         from student
  7*        group by grade)
SQL> /

G AVG(WEIGHT)
- -----------
2        53.4
 

* 교수 테이블에서 평균 연봉보다 많이 받는 교수들의 교수 번호, 이름, 연봉을 연봉이 높은 순으로 정렬하여 출력하세요.
(연봉은 sal*12+comm 으로 계산합니다)
 
  1  select profno, name, sal*12+(nvl2(comm,comm,0)) 연봉
  2  from professor
  3  where sal*12+(nvl2(comm,comm,0)) >
  4     (select avg(sal*12+nvl2(comm,comm,0)) from professor)
  5* order by 3 desc
SQL> /

    PROFNO NAME             연봉
---------- ---------- ----------
      9901 김도훈           6020
      9905 권혁일           5425
      9906 이만식           5040
      9908 남은혁           4817 

123