SQL - 서브쿼리(SubQuery)의 개념, 사용하는 이유, 특징, 사용 방법

반응형

 

해당 결과 조회는 SSMS(MSSQL)에서 확인하였습니다.

또한, top 1MS-SQL에서 사용하는 한 행에 대한 데이터 출력 조회 명령어로 MySQL에서는 limit를 사용하여야 합니다.


서브쿼리란? (Subquery)

  • 다른 테이블의 값을 기준으로 한 테이블에서 데이터를 검색할 수 있도록 다른 쿼리 내부에 중첩된 쿼리
    • 즉, 다른 쿼리 내부에 포함되어 있는 SELECT문을 의미
  • 괄호 안에 포함되어 있으며 일반적으로 더 큰 쿼리의 일부로 사용
  • 서브쿼리를 포함하고 있는 쿼리를 외부쿼리(outer query)라고 부름
  • 서브쿼리는 내부쿼리(inner query)라고도 부름
  • 외부 쿼리에 지정된 조건 또는 기준에 따라 하나 이상의 테이블에서 데이터를 검색
  • 데이터 필터링, 정렬, 또는 그룹화와 같은 다양한 방법으로 사용

서브쿼리 사용의 이점

  • 파생 테이블로 사용하여 더 큰 쿼리에서 다른 테이블과 조인
  • 집계 함수를 계산하거나 데이터의 하위 집합에 대한 다른 계산 수행
  • 연관된 서브쿼리에서 서브쿼리를 사용하여 두 테이블의 데이터를 행렬로 비교
  • 외부 쿼리에서 직접 액세스 할 수 없는 테이블에서 데이터를 검색

 

 

 

 

서브쿼리의 특징

  • 쿼리의 SELECT, FROM, WHERE, HAVINGJOIN절에서 사용
  • 단일 값 또는 값 집합 반환
  • =, <, >, IN, NOT IN, EXIST, NOT EXIST 등 다양한 비교 연산자와 함께 사용 가능
  • 조인, 집계 함수 및 GROUP BY절을 포함한 모든 유효한 SELECT문을 사용하여 작성 가능

서브쿼리 사용 방법

SELECT 절

  • 특정 단일 값이 필요할 때 사용
  • 다중 값을 결과 셋에 표현할 경우, 에러 출력
    • Error : 하위 쿼리에서 값을 둘 이상 반환했습니다.
select
	username, (select top 1 username from testTable)
from
	testTable

select절 서브쿼리 예시를 위한 데이터 조회 화면
select절 서브쿼리 예시를 위한 데이터 조회 화면


FROM 절

select
	a.*
from
	(
		select username from testTable where username like '%e%'
	) as a

from절 서브쿼리 예시를 위한 데이터 조회 화면
from절 서브쿼리 예시를 위한 데이터 조회 화면

 

 

 

 


WHERE 절

  • 특정 단일 값이 필요할 때 사용
  • 다중 값을 결과 셋에 표현할 경우, 에러 출력
    • Error : 하위 쿼리에서 값을 둘 이상 반환했습니다.
select
	username
from
	testTable
where
	username =
    	(
            select top 1 username from testTable where username like '%e%'
        )

where절 서브쿼리 예시를 위한 데이터 조회 화면
where절 서브쿼리 예시를 위한 데이터 조회 화면

 

 

 

 

  • 다중 값이 필요할 경우 in 이용
select
	username
from
	testTable
where
	username in
	(
		select username from testTable where username like '%e%'
	)

where절의 다중 값 반환 서브쿼리 예시를 위한 데이터 조회 화면
where절의 다중 값 반환 서브쿼리 예시를 위한 데이터 조회 화면


서브쿼리를 이용한 테이블 JOIN

  • 테이블에 조건을 걸어 조인 가능
select
	a.username
from
	testTable as a
	inner join
		(
			select
				id, username
			from
				testTable
			where
				username = 'eunbyeol'
		) as b
		on a.id = b.id

 

join절 서브쿼리 예시를 위한 데이터 조회 화면
join절 서브쿼리 예시를 위한 데이터 조회 화면


참고

TCP School - 서브쿼리

 

 

반응형