/* 서브쿼리 */
-- 1. SINGLE ROW : SELECT 결과가 단일행으로 이루어진다.
SELECT EMP_ID, EMP_NAME
FROM TEMP
WHERE SALARY = (SELECT MAX(SALARY) FROM TEMP);
SELECT EMP_ID, EMP_NAME, SALARY
FROM
TEMP
WHERE 1=1
AND SALARY >= (SELECT AVG(SALARY) FROM TEMP)
;
SELECT EMP_ID, EMP_NAME
FROM TEMP
WHERE DEPT_CODE IN (SELECT DEPT_CODE
FROM TDEPT
WHERE AREA = '인천')
;
SELECT * FROM TCOM;
SELECT * FROM TEMP;
SELECT * FROM TDEPT;
SELECT DEPT_NAME, COUNT(A.EMP_ID)
FROM TEMP A, TDEPT C
WHERE 1=1
AND A.DEPT_CODE = C.DEPT_CODE
AND A.EMP_ID IN (SELECT EMP_ID FROM TCOM)
GROUP BY DEPT_NAME
ORDER BY 1 ASC
;
SELECT EMP_ID, EMP_NAME
FROM TEMP
WHERE (DEPT_CODE,EMP_ID) IN
(SELECT DEPT_CODE, BOSS_ID FROM TDEPT)
;
-- 2.MULTI COLUMN SUBQUERY : 기본키 컬럼이 두 개 이상인 경우에 키 값을 한꺼번에 묶어서 비교하기 위해 사용
SELECT EMP_ID, EMP_NAME, SALARY
FROM TEMP
WHERE 1=1
AND SALARY IN (SELECT MAX(SALARY) FROM TEMP GROUP BY LEV)
;
-- TEMP에서 부서별 최고 연봉금액을 읽어서, 해당부서와 최고 연봉금액이 동시에 일치하는 사원의 사번, 성명, 연봉을 읽어라.
SELECT EMP_ID, EMP_NAME, SALARY
FROM TEMP
WHERE 1=1
AND (DEPT_CODE, SALARY) IN (SELECT DEPT_CODE, MAX(SALARY) FROM TEMP GROUP BY DEPT_CODE)
;
-- 3. ANY 와 ALL
SELECT EMP_ID, EMP_NAME, SALARY, LEV
FROM TEMP
WHERE SALARY > ANY (SELECT SALARY FROM TEMP WHERE LEV = '과장');
SELECT EMP_ID, EMP_NAME, SALARY
FROM TEMP
WHERE 1=1
AND SALARY > ALL(SELECT SALARY FROM TEMP WHERE LEV='과장');
'Dev. Database > Oracle' 카테고리의 다른 글
CASE WHEN ~ THEN ~ ELSE END (0) | 2015.07.06 |
---|---|
VIEW - 테이블을 비추는 창 (0) | 2015.07.05 |
[오라클] 그룹/데이터형 변환/날짜/숫자 처리 함수 (0) | 2015.07.02 |
일자별 환율 정보 출력 - 바로 이전 Record 참조 (0) | 2015.03.15 |
SQL 이모저모 (0) | 2014.09.12 |