DataBase/SQL

FROM 절 서브 쿼리

prohibit174 2017. 3. 16. 22:00
- 입사순서 5명 출력하라.

SELECT EMPLOYEE_ID, LAST_NAME, HIRE_DATE
FROM EMPLOYEES
ORDER BY HIRE_DATE

- ROWNUM(출력 되는 결과 값에 인덱스를 붙여 준다.)
SELECT ROWNUM, ALIAS.*
FROM (SELECT EMPLOYEE_ID, LAST_NAME, HIRE_DATE
                                        FROM EMPLOYEES
                                        ORDER BY HIRE_DATE) ALIAS
WHERE ROWNUM <= 5;

이 전체의 이름은 ALIAS 라고 이름 짓겠다.
ALIAS.* 하게 되면 실제 FROM 절 안에 있는 칼럼들과 같다.

/* 급여를 많이 받는 순서 3명 사원 정보를 출력*/

SELECT ROWNUM, ALIAS.*
FROM (SELECT EMPLOYEE_ID, LAST_NAME, SALARY FROM EMPLOYEES
      ORDER BY SALARY DESC) ALIAS
WHERE ROWNUM <= 3;

/* 4.5 환산 평점이 가장 높은 3명의 학생을 검색하라. */

SELECT ROWNUM, ALIAS.*
FROM (SELECT MAJOR,SYEAR,SNAME,AVR*4.5/4 FROM STUDENT
        ORDER BY AVR*4.5/4 DESC) ALIAS
WHERE ROWNUM <= 3;

/* 화학과 학생 중 기말고사 유기화학 점수가 최하위인 학생 3명을 검색하라. */

SELECT ROWNUM, ALIAS.*
FROM (SELECT S.MAJOR, SC.RESULT FROM STUDENT S INNER JOIN SCORE SC
        ON S.SNO = SC.SNO INNER JOIN COURSE C
          ON SC.CNO = C.CNO
            WHERE C.CNAME = '유기화학' AND S.MAJOR ='화학'
              ORDER BY SC.RESULT) ALIAS
WHERE ROWNUM <= 3;

/* 기말고사 과목별 평균이 높은 3과목을 검색하라. */

SELECT ROWNUM, ALIAS.*
FROM (SELECT SC.CNO, C.CNAME, AVG(RESULT) FROM SCORE SC INNER JOIN COURSE C
        ON SC.CNO = C.CNO
            GROUP BY SC.CNO, C.CNAME
              ORDER BY AVG(RESULT) DESC) ALIAS

WHERE ROWNUM <= 3;