티스토리 뷰
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
링크
TAG
- model
- Update
- java 환경설정
- 객체
- java
- jdbc
- INSERT
- MVC
- JdbcTemplate
- controller
- select
- ojdbc6.jar
- 상속
- 객체지향
- JDBC 프로그램 작성단계
- view
- .
- 캡슐화
- 추상화
- Scott/Tiger
- 다형성
- OOP
- Oracle
- Delete
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함