본문 바로가기
✨ DBMS/Oracle

[Oracle / SQL] 조인(JOIN) - 서브쿼리

by 환풍 2023. 3. 3.
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 절

과 같이 다양하게 사용할 수 있다.

반응형

댓글