SUBQUERY
2021. 11. 8. 09:28ㆍOracle
반응형
[SUBQUERY]
-- 쿼리문 안에 또 다른 쿼리문
-- 1) 신짱구 사원의 부서코드 조회
SELECT DEPT_CODE
FROM EMPLOYEE
WHERE NAME = '신짱구'; --> D9
-- 2) 부서코드가 D9인 사원들 조회
SELECT NAME
FROM EMPLOYEE
WHERE DEPT_CODE = 'D9';
-- 위의 두 쿼리문을 하나의 쿼리문으로
-- 신짱구 부서코드와 같은 사원 이름 조회
SELECT NAME
FROM EMPLOYEE
WHERE DEPT_CODE = (SELECT DEPT_CODE
FROM EMPLOYEE
WHERE NAME = '신짱구');
-- @서브쿼리 구분
-- 서브쿼리 종류에 따라 연산자 사용이 달라짐
-- 1. 단일행 서브쿼리 (SINGLE ROW SUBQUERY)
-- 서브쿼리의 조회 결과값의 갯수가 1개일 때 (1행 1열)
-- 일반 비교연산자 사용가능
-- = != ^= > < >=, ...
-- 2. 다중행 서브쿼리 (MULTI ROW SUBQUERY)
-- 서브쿼리를 수행한 결과값이 여러 행일 때 (컬럼은 하나)
-- - IN 서브쿼리 : 여러개의 결과값 중에서 한개라도 일치하는 값이 있다면
-- - > ANY 서브쿼리 : 여러개의 결과값 중에서 '한 개라도' 클 경우
-- (여러개의 결과값 중에서 가장 작은값 보다 클 경우)
-- - < ANY 서브쿼리 : 여러개의 결과값 중에서 '한 개라도' 작을 경우
-- (여러개의 결과값 중에서 가장 큰 값 보다 작을 경우)
-- 비교대상 > ANY (값1, 값2, 값3)
-- 비교대상 > 값1 OR 비교대상 > 값2 OR 비교대상 > 값3
-- - > ALL 서브쿼리 : 여러개의 '모든' 결과값들 보다 클 경우
-- - < ALL 서브쿼리 : 여러개의 '모든' 결과값들 보다 작을 경우
-- 비교대상 > ALL (값1, 값2, 값3)
-- 비교대상 > 값1 AND 비교대상 > 값2 AND 비교대상 > 값3
[INLINE-VIEW]
-- 서브쿼리를 수행한 결과를 테이블처럼 사용
SELECT ROWNUM, E.* -- ROWNUM: 조회된 순서대로 1부터 순번 부여
FROM (SELECT EMP_NAME, SALARY, DEPT_CODE
FROM EMPLOYEE
ORDER
BY SALARY DESC) E
WHERE ROWNUM <= 5;
-- 전 직원 중 급여가 가장 높은 상위5명 조회
[WINDOW FUNCTION]
-- 순위 계산 함수
-- SELECT절에서만 사용 가능
-- RANK() OVER(정렬기준) : 공동 순위 이후의 등수를 공동 순위만큼 건너뛰고 순위 부여
-- EX) 공동 1위가 2명이면 그 다음 순위는 3위
-- DENSE_RANK() OVER(정렬기준) : 공동 순위 있어도 뛰어넘지않고 순위 부여
-- EX) 공동 1위가 2명이더라도 그 다음 순위는 2위
SELECT NAME, SALARY, RANK() OVER(ORDER BY SALARY DESC) "순위"
FROM EMPLOYEE;
-- 급여가 높은 순대로 순위 부여
반응형
'Oracle' 카테고리의 다른 글
JOIN (0) | 2021.11.03 |
---|---|
GROUP BY, HAVING, 집합연산자 (0) | 2021.11.02 |
DML SELECT (0) | 2021.10.28 |
오라클 SQL 계정 생성 및 권한 부여 (0) | 2021.10.20 |