728x90
반응형
서브쿼리란?
한줄로 요약해 말하자면, SQL 문에 포함되어 있는 또 다른 SQL 문이다.
1 | SELECT * FROM EMP; | cs |
Q1. 김사랑 사원과 같은 급여를 갖는 사원의 모든 정보 조회
1. 김사랑의 데이터가 어떤지 먼저 알아보자.
1 2 3 | SELECT SAL FROM EMP WHERE ENAME = '김사랑'; | cs |
1 2 3 4 5 | SELECT * FROM EMP WHERE SAL = (SELECT SAL FROM EMP WHERE ENAME = '김사랑'); | cs |
이와 같이 WHERE절 안에 조건을 줄 때 ( ) 소괄호 안에 다시한번 쿼리 문을 넣어 만들어 줄 수 있다.
Q2. 강혜정 사원과 같은 부서에서 근무하는 사원들의 모든정보 조회
1.먼저, 강혜정 사원이 어떤 부서에서 일하는지를 먼저 알아야한다.
1 | SELECT DEPTNO FROM EMP WHERE ENAME='강혜정'; | cs |
이후 나온 부서를 조건으로 주는 서브 쿼리를 넣어주면 쉽게 풀어볼 수 있다.
1 2 3 | SELECT * FROM EMP WHERE DEPTNO = (SELECT DEPTNO FROM EMP WHERE ENAME='강혜정'); | cs |
Q3. 모든 사원의 급여의 평균보다 급여를 더 많이 받는 사원들의 모든 정보를 조회
1. 평균 급여를 조회하는 쿼리를 먼저 생각해보자,
1 | SELECT AVG(SAL) FROM EMP; | cs |
그럼 이 값을 조건에 쿼리형태로 넣어주면 된다.
1 2 3 | SELECT * FROM EMP WHERE SAL > (SELECT AVG(SAL) FROM EMP); | cs |
Q4. 부서번호가 20번인 부서에 속한 사원 중 급여가 전체 사원의 급여보다 높은 사원들의
사번, 이름, 부서번호, 부서명, 급여를 조회
이때, 조회된 데이터는 직급 기준 오름차순 정렬 후 같은 직급일때는 급여 기준 내림차순 정렬
1 2 3 4 5 6 7 | SELECT EMPNO, ENAME, E.DEPTNO, DNAME, SAL FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND E.DEPTNO = 20 AND SAL > (SELECT AVG(SAL) FROM EMP) ORDER BY JOB ASC, SAL DESC; | cs |
Q5. 모든 사원의 사번, 사원명, 부서번호, 부서명을 조회
1 2 3 4 | SELECT EMPNO, ENAME, DEPTNO ,(SELECT DNAME FROM DEPT WHERE DEPTNO = EMP.DEPTNO) AS 부서명 FROM EMP; | cs |
Q6. 인천에 위치한 부서에 속한 사원들의 급여를 현재급여에서 100 인상하는 쿼리를 작성
1 2 3 4 5 6 | UPDATE EMP SET SAL = SAL + 100 WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE LOC = '인천'); | cs |
이처럼 같이 UPDATE 절에도 서브쿼리를 넣어줄 수 있다.
서브쿼리는
SELECT 절 FROM 절 WHERE 절 HAVING 절 ORDER BY 절 INSERT 문의 VALUES 절 UPDATE 문의 SET 절
과 같이 다양하게 사용할 수 있다.
728x90
반응형
'✨ DBMS > Oracle' 카테고리의 다른 글
[Oracle / SQL] 뷰(VIEW)의 정의와 생성하는 방법 (0) | 2023.03.08 |
---|---|
[Oracle / SQL] 다중 INSRT 문법 UNION ALL (0) | 2023.03.06 |
[SQL] 제약조건 (CONSTRAINT)가 뭘까? 어떻게 사용할까? (0) | 2023.03.02 |
[Oracle / SQL] 조인(JOIN) (0) | 2023.02.27 |
[Oracle / SQL] 단일행 함수(Single)와 다중행 함수(Mutible) (1) | 2023.02.26 |
댓글