서브쿼리

서병수·2023년 8월 4일
0

SQL

목록 보기
4/5

서브쿼리는 SQL문 내에 포함된 다른 SQL문으로 좀 더 복잡한 쿼리를 작성할 때 사용한다.

서브쿼리는 ()로 감싸주고 어디에 위치하느냐에 따라 사용되는 방식이 조금씩 다르다.

SELECT col1, (SELECT ...) -- 스칼라 서브쿼리(Scalar Sub Query): 하나의 컬럼처럼 사용 (표현 용도)
FROM (SELECT ...) -- 인라인 뷰(Inline View): 하나의 테이블처럼 사용 (테이블 대체 용도)
WHERE col = (SELECT ...) -- 일반 서브쿼리: 하나의 변수(상수)처럼 사용 (서브쿼리의 결과에 따라 달라지는 조건절)

서브쿼리의 조건은 아래와 같다.
1. SELECT문으로만 작성가능
2. 반드시 ()안에 존재해야 함
3. 괄호가 끝나고 ;을 쓰지 않음
4. ORDER BY를 사용할 수 없음

예시를 들어보자
다음과 같은 테이블이 있다.

1. 일반 서브쿼리 (단일행)
SELECT office_worker
FROM employee
WHERE office_worker = (SELECT office_worker FROM employee WHERE name = '정대리')

2. 일반 서브쿼리 (다중행)
SELECT *
FROM employee
WHERE office_worker IN (SELECT office_worker FROM employee WHERE office_worker = '사원')

서브쿼리는 2개 이상의 office_worker값을 반환한다.
반환된 값에 속해있는 값 중 하나라도 해당되면 메인쿼리에서 반환한다.
WHERE절에서 서브쿼리 결과값은 변수(값)처럼 작동한다.
EX1처럼 무조건 별칭을 정해주어야 한다.

3. 인라인 뷰
SELECT EX1.name,EX1.salary
FROM (SELECT * FROM employee AS Ii WHERE Ii.office_worker='사원') EX1;
  
FROM절에서 서브쿼리의 결과값은 테이블처럼 작동한다.   

4. 스칼라 뷰
SELECT name, salary, (SELECT ROUND(AVG(salary),-1)FROM employee) AS '평균급여'
FROM employee
WHERE name = '정대리';

SELECT절에서 서브쿼리는 컬럼처럼 동작한다.

profile
안녕하십니까 인사올립니다

0개의 댓글