티스토리 뷰

DB/Oracle

SQL 활용 4. SUBQUERY

쟌쥰 2019. 12. 3. 20:44

SUBQUERY?

  • SELECT, INSERT, UPDATE, DELETE 문 또는 다른 SUBQUERY 안에 들어가는 SELECT 구문
  • 중첩된 SELECT 문 이라는 뜻으로 NEXTED SELECT 라고도 한다.

 

종류

  • SINGLE ROW SUBQUERY : 서브쿼리의 결과가 1개의 ROW
  • MULTI ROW SUBQUERY : 서브쿼리의 결과가 여러 개의 ROW
  • MULTI COLUMN SUBQUERY : WHERE절에서 여러 개의 COLUMN 값 비교
  • INLINE VIEW : FROM 절에서의 서브쿼리 (가상 테이블 VIEW)

사용규칙

  • 모든 SUBQUERY는 괄호로 싸여진다.
  • SUBQUERY 안에 SUBQUERY 가 들어갈 수 있다.
  • SUBQUERY의 SELECT문에서는 하나의 COLUMN값, 또는 이를 응용한 하나의 표현식만 사용할 수 있다.
  • SUBQUERY에서 COMPUTE(ROLLUP, CUBE), SELECT INTO(원본 그대로 생성/복사)는 사용할 수 없다.
  • 주 쿼리의 테이블 컬럼은 모두 서브쿼리에서 참조하여 사용할 수 있다.
  • 서브쿼리에서 SELECT 하지 않은 컬럼은 주 쿼리에서 사용할 수 없다.

 


SINGLE ROW SUBQUERY

  • 연산자 : >, =, >=, ...
  • SUBQUERY의 반환값은 하나의 COLUME, 하나의 ROW/TUPLE

Q1) JONES 보다 더 많은 월급을 받는 사람의 이름과 월급을 출력하자.

SELECT ENAME, SAL 
FROM EMP
WHERE SAL > (SELECT SAL 
		FROM EMP
		WHERE ENAME = 'JONES');

 

 

MULTI ROW SUBQUERY

  • 연산자 : IN, NOT IN, ANY, ALL, ...
  • SUBQUERY의 반환값은 여러개의 ROW/TUPLE

Q1) 부하직원이 없는 사원의 사원번호와 이름을 출력하자.

SELECT EMPNO, ENAME
FROM EMP
WHERE EMPNO NOT IN (SELECT NVL(MGR, 0)
					FROM EMP);

 

 

MULTI COLUMN SUBQUERY

 

Q1) 직업이 "SALSEMAN" 인 사원과 같은 부서에서 근무하고 같은 월급을 받는 사원들의 이름, 월급, 부서번호를 출력하자.

SELECT ENAME, SAL, DEPTNO
FROM EMP 
WHERE DEPTNO IN (SELECT DEPTNO
		FROM EMP
		WHERE JOB = 'SALESMAN')
AND SAL IN (SELECT SAL 
		FROM EMP
		WHERE JOB = 'SALESMAN');

== 위 쿼리와 아래 쿼리는 같은 쿼리입니다. 단지 두개의 WHERE 절을 한번에 처리한 것 입니다.

SELECT ENAME, SAL, DEPTNO 
FROM EMP 
WHERE (DEPTNO, SAL) IN (SELECT DEPTNO, SAL 
			FROM EMP 
			WHERE JOB = 'SALESMAN');

INLINE VIEW

 

Q1) 자기 부서의 평균 월급보다 더 많은 월급을 받는 사원들의 이름, 월급, 부서번호, 부서별 평균 월급을 출력하자.

SELECT E.ENAME, E.SAL, RES.DEPTNO, RES.MYAVG
FROM EMP E, (SELECT DEPTNO, AVG(SAL) MYAVG
		FROM EMP
		GROUP BY DEPTNO) RES
WHERE E.DEPTNO = RES.DEPTNO AND E.SAL > RES.MYAVG;

SUBQUERY , SUBQUERY의 집계함수에는 꼭 별칭(Alias) 를 붙여야 합니다.

'DB > Oracle' 카테고리의 다른 글

SQL 활용 5. JOIN  (0) 2019.12.04
SQL 활용 3. 다중 행 함수  (0) 2019.11.29
SLQ 활용 2. 단일 행 함수  (0) 2019.11.29
SQL 활용 1. 중첩 함수  (0) 2019.11.29
SQL 기초 4. CONSTRAINT (제약조건)  (0) 2019.11.29
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함