[SQL] 서브쿼리(subquery)의 종류

jay bong·2024년 4월 23일

SQL

목록 보기
6/9
post-thumbnail

서브쿼리(subquery)

간단하게 이야기 하면 쿼리 안의 쿼리를 의미한다. 메인쿼리 내부에 다른 테이블의 값을 가져오기 위해 사용한다. 일반적으로 괄호로 묶어서 표현한다.

사용 이유

쿼리문을 작성할 때, select하고 결과값을 확인한 후 그 결과값을 기억했다가 또 select하는 과정을 여러번 반복해야하는 경우가 있다. 그러나 각각의 과정을 모두 쿼리문으로 작성하려면 그만큼 쿼리문을 여러번 실행해야한다. 이것을 1번의 쿼리문으로 실행하기 위해 서브쿼리문을 사용하는 것이다.

실행순서

쿼리의 가장 안쪽부터 바깥쪽 쿼리를 실행하며 결과값을 return한다.

특징

쿼리의 마지막에 ;을 사용하여 하나의 쿼리문이 끝났다는 것을 표현할 수 있는 것과는 다르게

서브쿼리는 메인 쿼리 안에 속하기 때문에 세미콜론(;)을 사용할 수 없다.
또한 서브쿼리문안에는 select와 from이 무조건 포함되어야 한다.

서브 쿼리의 종류

중첩(일반) 서브쿼리

  • WHERE 절에서 사용한다.
  • 서브쿼리의 결과에 따라 달라지는 조건절에 사용한다.
  • 서브쿼리에서 단일 값을 가져와 비교할 때는 연산자와 활용이 가능하지만, 여러값을 가져오고 싶다면 in을 활용해야 한다.
select *
from basic.theglory 
where 나이 > (select 나이 from basic.theglory where 이름='문동은')
# theglory안에 문동은의 나이값을 가져오고 싶을 때, 위처럼 사용할 수 있다.

스칼라 서브쿼리

  • SELECT절에서 사용한다.
  • 하나의 칼럼처럼 역할을 하므로 특정한 값으로 리턴되어야 한다.
select 이름
, 나이
, (select count(*) from theglory2 where theglory2.이름=theglory.이름) as same_name_cnt
, (select sum(결제금액) from theglory2 where theglory2.이름=theglory.이름)as same_name_sumamount
from basic.theglory
# theglory 의 이름과 theglory2 의 이름이 같을 때를 count하여 return한다.
# 또한 그 때 결제금액을 합친 값을 반환한다.

인라인 뷰 서브쿼리

  • FROM절에 위치하며 테이블의 일부 데이터만 가져오기 때문에 쿼리를 단순화할 수 있다.
  • 인라인 뷰 서브쿼리는 하나의 테이블처럼 사용된다.
  • AS 구문을 사용하여 명칭을 반드시 기재해야 한다.
select x.나이, x.직업
from(	select *
		  from basic.theglory
		  where 나이>=33
	  )as x 
#33세 이상인 데이터들을 먼저 서브쿼리를 통해 가져온 후, 추출된 값들의 이름, 나이를 return한다.

Point to check

  • 서브쿼리를 사용하는 상황을 많이 다뤄봐야 할 것 같다.
  • 서브쿼리에서 1차로 어떤 값을을 필터링하고 싶은지를 먼저 생각해야겠다.
profile
Fly High

0개의 댓글