ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DATABASE - 9장 - 서브쿼리 연습문제
    oracle/9장_서브쿼리 2022. 12. 8. 11:52

    문제 1) 학생중에서 생년월일이 가장 빠른 학생의 학번,이름,생년월일을 출력하시오.

     

    select studno 학생번호, name 이름, to_char(birthdate, 'MM/DD/YYYY') 가장빠른생년월일  
    from student
    where birthdate = (select min(birthdate)
                      from student);

     

     

    문제 2) 학년별로 평균 체중이 가장 가벼운 학년과 그 학년의 평균 몸무게를 출력하시오.

     

    select grade 학년, avg(weight) 평균몸무게
    from student
    group by grade
    having avg(weight) = (select min(avg(weight))
                          from student 
                          group by grade);

     

    문제 3) 학년별 최대 몸무게를 가지는 학생의 이름, 몸무게를 pairwise와 unpairwise 비교방법으로 각각 출력하시오

     

    - PAIRWISE

    select name, weight
    from student
    where (grade, weight) in (select grade, max(weight)
                              from student
                              group by grade);

    3-1 PAIRWISE

    - UNPAIRWISE

    select name, weight
    from student
    where grade in (select grade
                    from student
                    group by grade)
    and weight in (select max(weight)
                   from student
                   group by grade);

    3-2 UNPAIRWISE

     

    문제 4) 교수 테이블에서 평균 연봉보다 많이 받는 교수의 교수번호, 이름, 연봉을 출력하시오

                ( 연봉이 높은 순으로 정렬하시오)

     

    nvl 사용하여 (급여+수당)*12 = 연봉 

    select profno, name, (sal+nvl(comm, 0))*12 연봉
    from professor
    where (sal+nvl(comm, 0))*12 > (select avg(sal+nvl(comm, 0))*12
                                   from professor)
    order by 연봉 desc;

     

    문제 5) 학과별로 최소 몸무게를 가진 학생을 출력하시오 ( 정렬 : deptno 오름차순)

    select name, weight, deptno
    from student
    where weight in (select min(weight)
                     from student
                     group by deptno)
    order by deptno;

     

    문제 6) 학과별 평균 키보다 큰 학생의 이름,학번,키를 출력하시오

     

    상호연관 서브쿼리를 사용해보자

    select name, studno, height
    from student s1
    where height > (select avg(height)
                    from student s2
                    where s1.deptno = s2.deptno)
    order by studno;

     

    문제 7) 다음 2개의 sql문의 출력 결과가 다르다. 다른 이유를 설명하시오

     

    1번 SQL 문
    2번 SQL 문

     

    이유 :  ANY 와 ALL 의 차이는 '최솟값' 과 '최댓값'의 차이이다 ( 'MIN , 'MAX')

               서브쿼리의 결과값이 여러개일 경우 ANY를 사용하면 그 중 최솟값과 비교하게 되며

               ALL 을 사용할 경우 최댓값과 비교하게 된다

               

    최솟값 :240 / 최댓값 : 450

     위에 경우는 sal (월급) 의 값이 any 를 사용했을 경우 240보다 큰 교수들의 목록과 all을 사용하면 450 보다 큰 교수들의 목록이 각각 출력된다

    'oracle > 9장_서브쿼리' 카테고리의 다른 글

    서브쿼리란?  (0) 2022.12.08
Designed by Tistory.