서브쿼리

박성진·2023년 3월 2일
0

Database

목록 보기
5/7

SUB-QUERY

SELECT안에 SELECT 구문이 포함된 구문

  • 단일 행 서브쿼리: 서브쿼리의 결과가 1개인 경우
  • 다중 행 서브쿼리: 서브쿼리의 결과가 2개 이상인 경우

단일행 서브쿼리 예시

  • 양준혁 직원보다 급여가 많은 직원을 출력

    SELECT ename, salary
    FROM emp
    WHERE salary > (SELECT salary FROM emp WHERE ename = ‘양준혁’)

다중행 서브쿼리 예시 (IN, NOT IN)

  • 1학년 학생들의 키와 같은 키를 가지고 있는 2학년 학생명과 학년, 키 출력

    SELECT name, grade, height
    FROM student
    WHERE height IN (SELECT height FROM student WHERE grade=1)
    AND grade=2;

💡 다중행은 무조건 IN 사용!

다중행 서브쿼리 예시 (ANY, ALL)

  • 2학년의 가장 작은 키보다 2학년 출력

    ?

스칼라 서브쿼리

컬럼 자리에 서브쿼리가 들어가는 경우

  • 직원명, 부서코드, 부서명 출력

    SELECT ename, deptno,
    (SELECT dname FROM dept WHERE deptno=emp.deptno) dname
    FROM emp;

💡 새로운 칼럼 dname 생성

인라인 서브쿼리

FROM 절 뒤에 들어가는 서브쿼리

VIEW: 실제 물리적인 테이블이 아니라 가상의 테이블

  • 직원명, 급여, 직급별 평균 급여 출력

    select ename, e.deptno, e.salary, v.salary
    from emp e join

             (select deptno, avg(salary) salary from emp group by deptno) v

    on e.dept.no = v.deptno;

💡 v라는 새로운 테이블을 만든다!

페이징 처리

어플리케이션 목록 출력 시 해당 페이지 데이터 출력 및 조회 용도

  • 회원 목록 2페이지 조회 - rownum 키워드 통해 서브쿼리 사용

    SELECT
    FROM (
    SELECT ROWNUM as rnum, a.

    FROM (
    SELECT *
    FROM student order by grade desc
    ) a
    ) bwhere b.rnum between 1 and 10;

profile
개발자가 되기까지

0개의 댓글