6월 30일 SQL 정리(SUBQUERY)

서준영·2024년 6월 30일

SQL 정리

목록 보기
6/22

subquery

SUB QUERY를 통해, 데이터를 구조화 할 수 있다.
컬럼들을 활용한 사칙연산, 집계함수, 윈도우 함수, 포맷팅 등 많은 연산을 하는 경우, SUB QUERY 는 이를 순차적(구조적)으로 기록하는 역할을 수행한다.
복잡한 연산시, 최종 결과를 반환하기 위한 중간테이블의 역할이다.

사용 이유

SELECT를 하고 결과값을 확인하고,
그 결과값을 기억했다가 또 SELECT 를 하고,
그 결과값을 기억했다가 또 SELECT 를 하고.. 이러한 경우,
N 번의 쿼리문을 수행해야 하는데,
N 번의 쿼리문 실행을 1번의 쿼리문으로 실행하기 위해 쿼리의 결과값을 가지고 추가 연산을 하기 위해 사용된다.

실행순서

  • 서브쿼리 실행(안쪽에 위치한 쿼리) → 메인쿼리(바깥쪽에 위치한 쿼리) 실행
  • 쿼리의 가장 안쪽부터, 바깥쪽 쿼리를 실행하며 최종 결과값을 반환

특징

  • () 안에 SELECT, FROM 을 반드시 명시해 주어야 한다.
  • 서브쿼리 마지막에 ; 기호를 사용할 수 없다.

종류

🚩중첩(일반) 서브쿼리
- WHERE 절에서 사용
- 서브쿼리의 결과에 따라 달라지는 조건절
[중첩 서브쿼리 예시]
< 문동은의 나이보다 나이가 많은 모든 데이터 반환하기>
select
from basic.theglory
where 나이 > (select 나이 from basic.theglory where 이름='문동은')
;
🚩 스칼라 서브쿼리
- SELECT 절에서 사용
- 하나의 컬럼처럼 사용
- 스칼라 서브쿼리 이용을 위해서는, 서로 다른 테이블이 필요하다.
[중첩 서브쿼리 예시]
<theglory 의 이름과 theglory2 테이블의 이름이 일치하는 경우를 count 하여
#same_name_cnt 컬럼으로 반환
theglory 의 이름과 theglory2 테이블의 이름이 일치하는 경우의 결제금액을 sum 하여
#same_name_sumamount 컬럼으로 반환>
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
;
🚩 인라인 뷰(🔥가장 많이 사용)
- FROM 절에서 사용
- 하나의 테이블처럼 사용. (뷰: 저장 장치 내에 물리적으로 존재하진 않는 가상 테이블)
- AS 구문을 사용하여 명칭을 반드시 기재해야 한다
- 간단해 보이지만, 향후 JOIN 및 UNION 시 가장 유용하게 사용된다
[중첩 서브쿼리 예시]
<나이가 33세 이상인 모든 데이터 중 나이와 직업 컬럼 반환하기>
select x.나이, x.직업
from( select *
from basic.theglory
where 나이>=33
)as x

profile
시리즈나 태그목록으로 보시는게 좋습니다

0개의 댓글