ORACLE - 서브 쿼리

.·2022년 4월 14일
0

ORACLE

목록 보기
6/10
  • 하나의 SQL 문장절에 포함된 또다른 SELECT 문장, 따라서 두번 질의를 해야
    얻을수 있는 결과를 한번의 질의로 해결이 가능하게 하는 쿼리

  • 용어
    Main-Query 또는 Outer-Query
    Sub-Query 또는 Inner-Query 두쌍이 같은 의미이다.

  • 특징
    괄호로 반드시 묶어야 한다.
    서브쿼리는 메인 쿼리의 다음 부분에 위치할 수 있다.

    1)SELECT / DELETE / UPDATE 문의 FROM 절과 WHERE 절
    2)SELECT 문의 HAVING 절
    3)INSERT 문의 INTO 절
    4)UPDATE 문의 SET 절

  • 종류

    <1> 단일행 서브쿼리
    -서브쿼리의 실행결과가 하나의 칼럼과 하나의 행만을 리턴해주는 쿼리
    (하나의 데이터만 리턴해주는 쿼리)

<2> 복수행 서브쿼리
-서브쿼리의 실행결과가 하나의 칼럼과 여러개의 행을 리턴해주는 쿼리
(여러개의 데이터만 리턴해주는 쿼리)

단일행 서브쿼리 작성하기(1 row, 1 column)

* WHERE 뒤에 두 테이블을 연결해 주는(겹치는) 칼럼명 입력하고 괄호 안 서브쿼리에 그것과 일치해야 하는 칼럼명(두개가 서로 다를수도 있음) + 해당 테이블명 적으면서 원하는 조건의 값 도출

테이블이 서로 다른 경우에는 where 뒤에 들어가는 칼럼명이 두 테이블을 연결해주는 칼럼명이 들어가야 한ㄷ ㅏ..?? 이거 확인해보기 ***

Q. 'SMITH' 가 근무하는 부서명을 서브쿼리를 이용해서 출력해 보세요.

서브쿼리를 사용하지 않으면

  1. 스미스의 부서번호 알기
  2. 스미스의 부서이름을 부서번호에 넣어서 알아내기

    --> 이 과정을 한 번의 실행으로 도출해 보자 !
    SQL> SELECT dname
     2  FROM dept
     3  WHERE deptno=(SELECT deptno FROM emp WHERE ename='SMITH');

다중행 서브쿼리 작성하기 (row와 column이 여러개이므로 =로 비교 불가능)

Q. 급여를 3000 이상받는 사원이 소속된 부서와 동일한 부서에서 근무하는 사원들의 이름과 급여, 부서번호를 출력해 보세요.

  1. 부서를 비교해야 하니까 부서번호로 보기 !

  2. 1칼럼 2로우니까 = 못쓰고 in으로 묶기

  1  SELECT ename, sal, deptno
  2  FROM emp
  3* WHERE deptno IN(SELECT deptno FROM emp WHERE sal>=3000)

EX) 자신의 직속 상관이 'KING' 인 사원의 이름과 급여를 출력해 보세요.

>SELECT ename,sal
FROM emp
WHERE mgr = (SELECT empno FROM emp WHERE ename='KING');

where절 뒤에 일치해야 하는 칼럼명
mgr=empno 여야 하니까 mgr이랑 일치해야 하는 empno를 구하는 조건절을 괄호 안에 다시 적어주고 ename이 KING이어야 한다는 조건 적어주기

EX) 'SALES' 부서에서 근무하는 모든 사원의 이름과 급여를 출력해보세요.

>SELECT ename, sal
FROM emp
WHERE deptno = (SELECT deptno FROM dept WHERE dname='SALES');

서브쿼리 안에서 WHERE절 안의 칼럼명이 속해 있는 테이블명 적기 !!!

0개의 댓글

관련 채용 정보