오늘은 뷰와 서브쿼리에 대해 간단하게 배운 내용을 정리해보고자 한다.
뷰와 서브쿼리
뷰는 테이블에서 여러 쿼리를 이용해 보고 싶은 자료를 만들었을 때, 그 자료를 저장하고 싶을 때 사용하는 것이다. 근본적으로 테이블과 같은 역할을 하는데, 뷰는 실제 데이터를 저장하고 있는 것이 아닌 쿼리를 저장하고 있기 때문에 저장용량 면에서 차이가 아주 크다. 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 |