세조목

SQL 정리(With절, 컬럼 전체의 합, View, Explain)(24.01.02) 본문

데이터 분석 공부/SQL

SQL 정리(With절, 컬럼 전체의 합, View, Explain)(24.01.02)

세조목 2024. 1. 2. 21:39

With절

With절은 서브쿼리를 본 쿼리 바깥으로 별도로 떼어놓는 다시 말해 가상의 테이블을 하나 더 만드는 절이라고 생각하면 된다.

with절의 구조는 아래와 같다.

# with절 1개일 경우
with 별명 as
(
	select
   	from
    where
    ...
)
select
from
where
...


# with절 2개 이상일 경우
with 별명 as
(
	select
   	from
    where
    ...
),
별명 as
(
	select
   	from
    where
    ...
),
별명 as
(
	select
   	from
    where
    ...
)
select
from
where
...

적다보니 한 눈에 들어오지 않는데

with 별명 as (쿼리), 별명 as(쿼리), 별명 as(쿼리)...

이런 구조를 가진다고 생각하면 된다.

 

with절을 만들어 놓으면 언제든 with절을 불러올 수 있고, 다른 테이블과 join해서 쓸 수도 있다.

with절과 관련된 함수로 with recursive함수가 있는데 해당 내용은 차후 조금 더 자세히 공부하고 포스팅할 예정이다.

 

컬럼 전체의 합

지금까지 쿼리문을 작성해오면서 항상 sum함수와같은 집계함수를 사용할 때

group by로 묶어준 후 집계했었다.

그런데 예제를 풀다보니 group by로 묶는 것이 아니라 컬럼 전체의 값을 구해야할 때가 있었다.

이럴 때는 group by를 쓰지 않고 select절에 집계함수를 쓰는 것이다.

다만 이 때는 집계함수 외 다른 컬럼은 함께 select 절에 입력할 수가 없다.

아래 오른쪽 이미지 하단의 빨간색 부분을 보면 group by가 있어야함을 알 수 있다.

(좌) 집계함수만 존재 / (우) 집계함수 외 컬럼 존재

View

View 역시도 앞서 살펴본 With와 마찬가지로 가상테이블을 생성시켜주는 함수다.

구조는 다음과 같다.

CREATE VIEW SalesSummary AS
SELECT Department, SUM(SaleAmount) AS TotalSales
FROM Sales
GROUP BY Department;

Create view 테이블명 as 를 입력해주고,

쿼리문을 적어주면 된다.

 

한 번 지정된 view명은 수정이 불가하기때문에 만약 view명을 바꾸고싶다면

view를 제거하고 다시 등록해야한다.

이 때 사용하는 함수가 drop view이다.

구조는 다음과 같다.

drop view 뷰이름

 

Explain

Explain 함수는 쿼리 실행 계획을 분석하고 성능을 평가하는 함수다.

쿼리문 맨 앞에 explain을 적어주고 쿼리를 돌리면

아래 이미지의 빨간색 부분과같이 각각의 쿼리문의 성능이 어떤지 확인할 수 있다.

이렇게 성능을 확인 후 성능이 좋지않은 쿼리문은 수정하거나, 인덱싱을하거나, view를 사용해봄으로써

성능을 개선시킬 수 있다.