본문 바로가기

DB

[DB] SQL - 단일 행, 다중 행, 다중 열 서브쿼리 개념 정리

728x90

사용한 데이터 테이블 구조

개념 정리에 들어갈 코드 예시에 테이블 구조는 아래와 같다.

  • 사원 정보를 저장하고 있는 EMP 테이블
emp_id name job sal dept_id
1 Alice CLERK 2500 10
2 Bob MANAGER 4000 10
3 Charlie CLERK 2000 20
4 Dave SALESMAN 3000 30
5 Eva MANAGER 5000 20
6 Frank ANALYST 2700 30
  • 부서 정보를 저장하고 있는 DEPT 테이블
dept_id dept_name location
10 HR SEOUL
20 IT BUSAN
30 SALES DAEGU

단일 행 서브쿼리란?

서브쿼리의 결과가 1개의 행으로만 나오게 되는것이 단일 행이다.

  • 주로 =, >, <, >=, <=, != 와 같은 비교 연산자를 사용한다.
  • 반드시 1개의 결과만 반환되어야 한다.

전체 평균 급여보다 높은 급여를 받는 사원 조회하려면 아래와 같이 작성하면 된다.

 SELECT name, sal
FROM emp
WHERE sal > (
    SELECT AVG(sal)
    FROM emp
);
  • 결과
name sal
Bob 4000
Eva 5000

다중 행 서브쿼리란?

서브쿼리의 결과가 여러 개의 행으로 나오게 되는것이 다중 행이다.

  • 주로 IN, NOT IN, ANY, ALL, EXISTS 와 같은 연산자를 사용한다.

IT 부서(20번 부서)와 동일한 급여를 받는 사원을 조회하려면 아래와 같이 작성하면 된다.

SELECT name, sal
FROM emp
WHERE sal IN (
    SELECT sal
    FROM emp
    WHERE dept_id = 20
);
  • 결과
name sal
Charlie 2000
Eva 5000

다중 열 서브쿼리란?

서브쿼리의 결과가 2개 이상의 컬럼(열)을 반환한다.

  • 주로 IN, = ANY, EXISTS 와 같은 연산자를 사용한다.

(부서 ID, 직무) 조합이 부서 10번의 조합과 같은 사원을 찾으려면 아래와 같이 작성하면 된다.

SELECT name, dept_id, job
FROM emp
WHERE (dept_id, job) IN (
    SELECT dept_id, job
    FROM emp
    WHERE dept_id = 10
);
  • 결과
name dept_id job
Alice 10 CLERK
Bob 10 MANAGER
728x90