데이터베이스
MariaDB 데이터베이스[database, DB] InLine View
멈머이
2023. 11. 24. 00:03
728x90
[ InLine View ]
- From절 뒤에 테이블대신에 SubQury를 사용함
- 행렬의 데이터를 테이블과 동일한 개념으로 사용하기 때문에 가상테이블이라고 칭한다
- 가상테이블은 별칭을 이용해서 테이블 이름처럼 사용한다.
- 보통 테이블 별칭은 대문자 컬럼은 소문자
- 가상테이블 개념이 적용됨
- FROM 절에 서브쿼리를 사용하면 특정 조건식을 갖는 SELECT 문을 테이블처럼 사용할 수 있다.
한마디로 SELECT 절에서 나온 결과를 FROM 절에서 하나의 테이블처럼 사용하고 싶을 때 사용한다.
예제로 알아보겠다.
* 주문내역이 있는 회원별로 지금까지 총 지출한 총액 조회하기
조회컬럼 : 회원아이디, 회원이름, 총 지출액
SELECT mem_id, mem_name, sum(cart_qty * prod_sale) AS total
FROM member
INNER JOIN cart
ON(mem_id = cart_member)
INNER JOIN prod
ON(cart_prod = prod_id)
GROUP BY mem_id, mem_name
ORDER BY total DESC;
총 19개의 값이 나온다.
* 위 결과에서 가장 지출이 가장 큰 값과, 가장 작은 값 조회하기
조회값 : 최댓값, 최솟값
SELECT MAX(A.total) AS total_max, MIN(A.total) AS total_min
FROM (SELECT mem_id, mem_name, sum(cart_qty * prod_sale) AS total
FROM member
INNER JOIN cart
ON(mem_id = cart_member)
INNER JOIN prod
ON(cart_prod = prod_id)
GROUP BY mem_id, mem_name
ORDER BY total DESC) A;
여기서 InLine View를 사용한다.
앞서 만들었던 회원별 지출 총액을 하나의 테이블처럼 사용해서 그 테이블 내에서 max() 함수와 min() 함수를 사용해서
최댓값과 최솟값을 뽑아낸다.
* 위에 결과에서 최댓값을 가지는 회원아이디와 이름 조회하기
SELECT AA.mem_id, AA.mem_name, AA.total
FROM(SELECT mem_id, mem_name, sum(cart_qty * prod_sale) AS total
FROM member
INNER JOIN cart
ON(mem_id = cart_member)
INNER JOIN prod
ON(cart_prod = prod_id)
GROUP BY mem_id, mem_name
ORDER BY total DESC) AA,
(SELECT MAX(A.total) AS total_max, MIN(A.total) AS total_min
FROM (SELECT mem_id, mem_name, sum(cart_qty * prod_sale) AS total
FROM member
INNER JOIN cart
ON(mem_id = cart_member)
INNER JOIN prod
ON(cart_prod = prod_id)
GROUP BY mem_id, mem_name
ORDER BY total DESC) A) BB
WHERE AA.total = BB.total_max;
앞서 구했던 total의 값이 mem_id와 mem_name과 연결되어있지 않기 때문에 이 둘의 값을 연결해 주는 과정이다.
InLine View를 사용하는 이유
기존 단일 쿼리로는 '테이블에서 최대 / 최소 지출' 까지만 알 수 있었다면,
서브쿼리를 통해서 누가 최대 지출을 했는지 확인할 수 있다.
728x90