본문 바로가기

프로그래밍/DataBase

[DataBase]서브쿼리

서브쿼리란

 SELECT문 안에 또 다른 SELECT문이 있는 쿼리문을 말한다. 서브쿼리문은 사용자가 비교대상에 대해 잘 모를 때 한번 더 SELECT문을 사용한다.

 

서브쿼리의 종류

 서브쿼리는 사용 위치에 따라 세가지 명칭으로 구분 할 수 있다.

1. SELECT절에 사용하는 스칼라 서브쿼리

2. FROM절에 사용하는 인라인 뷰

3. WHERE절에 사용하는 서브쿼리

 

일반적으로 서브쿼리라 하면 WHERE절에 사용되는 서브쿼리를 얘기한다.

 

 

서브쿼리 특징

 서브쿼리에서는 ORDER  BY를 사용하지 못한다.

 서브쿼리는 괄호로 감싸서 사용하여야 한다.

 ( )에 감싸진 서브큐리를 먼저 실행하고 메인쿼리를 실행한다.

 GROUP BY절을 제외한 모든 절에 사용가능하다.

 

 

반환값에 따른 서브쿼리

단일 행 서브쿼리

 : 서브쿼리 결과가 단일 행이다.

  단일 행 비교 연산자에는 =, <, <=, >, >=, <>을 사용한다.

 

다중 행 서브쿼리

 : 서브쿼리 결과가 여러 행이다.

  다중 행 비교 연산자에는 IN, ALL, ANY, SOME, EXISTS가 있다.

 

다중 열 서브쿼리

 : 서브쿼리 결과가 여러 칼럼이다.

  메인쿼리의 조건절에 여러 칼럼을 동시에 비교 가능하다.

  비교하고자 하는 컬럼 개수와 컬럼의 위치가 동일해야 한다.

 

 

서브쿼리 사용 예시

예를들어 '아벨'이라는 사원보다 급여를 많이 받는 사람의 ID와 이름을 출력하고 싶다고 할 때

 

select employee_id, last_name
from employees
where salary > 아벨의 급여;

 

위와 같은 쿼리문을 작성하면 된다. 하지만 우리가 아벨의 급여를 정확하게 모르는 경우 where절을 작성할 수 없게된다.

 

이때, 서브쿼리를 통해

select employee_id, last_name
from employees
where salary > (select salary from employees where last_name = 'Abel');

위와 같은 쿼리문을 작성하면 우리는 아벨의 급여를 몰라도 DB가 서브쿼리문을 통해 아벨의 급여를 찾아 주기때문에 우리는 아벨보다 급여를 많이 받는 사람의 ID와 이름을 출력할 수 있게된다.

 

 

'프로그래밍 > DataBase' 카테고리의 다른 글

[DataBase]AS  (0) 2021.03.22
[DataBase]DESC  (0) 2021.03.22
[DataBase]Join  (0) 2021.03.10
[DataBase]제약조건  (1) 2021.03.08
[DataBase]DDL, DML, DCL  (0) 2021.03.08