본문 바로가기
SQL

SQL - 기초적인 함수 사용해보기 (2) - 뷰, 서브쿼리

by Tiabet 2023. 3. 24.

오늘은 뷰와 서브쿼리에 대해 간단하게 배운 내용을 정리해보고자 한다.

 

뷰와 서브쿼리

뷰는 테이블에서 여러 쿼리를 이용해 보고 싶은 자료를 만들었을 때, 그 자료를 저장하고 싶을 때 사용하는 것이다. 근본적으로 테이블과 같은 역할을 하는데, 뷰는 실제 데이터를 저장하고 있는 것이 아닌 쿼리를 저장하고 있기 때문에 저장용량 면에서 차이가 아주 크다. 1편에서 살펴본 기본 함수들로 원하는 자료를 뽑아볼 수 있지만, 그건 일회용적인 측면이 강하다. 자주 사용하는 쿼리를 매번 작성하지 않고 뷰로 저장하면 아주 유용하게 사용할 수 있게 된다.

1
2
3
4
5
create view GoodSum (goods_classify, cnt_goods)
as
select goods_classify, count(*)
from goods
group by goods_classify;
cs

위의 코드처럼 GoodSum 이라는 이름의 view를 생성할 수 있다.

서브 쿼리란 쿼리 내의 쿼리를 의미한다. 뷰를 정의하는 쿼리를 바로 다른 쿼리 안에 삽입함으로써, 일회용 뷰를 생성하는 효과를 얻을 수 있다.

1
2
3
4
5
6
7
create view GoodSum (goods_classify, cnt_goods)
as
select goods_classify, count(*)
from goods
group by goods_classify;
 
select * from GoodSum;
cs

위 코드는 뷰를 생성하고 확인하는 절차의 쿼리이다. 서브쿼리를 이용해서 같은 결과를 얻을 수 있다.

1
2
3
4
5
6
select goods_classify, cnt_goods
from (
 select goods_classify, count(*) as cnt_goods
 from goods
 group by goods_classify
) as GoodsSum;
cs

 

서브쿼리는 반환값이 단일 스칼라값인 경우 더 유용하게 사용할 수 있다. (스칼라 서브쿼리)

1
2
select avg(sell_price)
from goods;
cs

이런 쿼리의 반환 값은 당연히 sell_price의 평균 하나일 것이다. 이렇게 단일 스칼라값을 반환할 경우 아래처럼 활용 가능하다.

1
2
3
select *
from goods
where sell_price > (select avg(sell_price) from goods);
cs

 

 

평균 가격보다 높은 sell_price를 가지는 상품만 출력됨을 확인할 수 있다.

상품 분류 별 평균 판매가격이 전체 평균 판매가격보다 높은 상품군만 출력하려면 아래와 같은 쿼리를 짤 수 있다.

1
2
3
4
select goods_classify, avg(sell_price)
from goods
group by goods_classify
having avg(sell_price) > (select avg(sell_price) from goods);
cs

 

'SQL' 카테고리의 다른 글

SQL - 기초적인 함수 사용해보기 (3) - 함수  (0) 2023.04.01
SQL - 기초적인 함수 사용해보기  (0) 2023.03.19