각 행에 대해 서브쿼리를 실행시킬 수 있는 기능이다. 고객(Customer)와 주문(Order) 테이블로 예시를 들어보자.
Customer

Order

각 고객의 총 주문 금액을 구하고, 각 고객의 이름과 함께 결과를 출력한다.
서브쿼리를 사용하지 않고 수행
SELECT c.customer_name, SUM(o.order_amount) AS total_amount
FROM Customer c
JOIN Order o ON c.customer_id = o.customer_id
GROUP BY c.customer_name;
Lateral Derived Table을 사용하여 수행
SELECT c.customer_name, total_amount
FROM Customer c,
LATERAL (
SELECT SUM(o.order_amount) AS total_amount
FROM Order o
WHERE o.customer_id = c.customer_id
) AS total_order;
조인 및 그룹화
단순성과 성능
명확한 집계 연산:
Lateral Derived Table (LDT)
비교 예시
1. 단순 조인과 그룹화:
각 고객의 총 주문 금액을 구하는 경우, 단순 조인과 그룹화가 더 효율적이다.
SELECT c.customer_name, SUM(o.order_amount) AS total_amount
FROM Customer c
JOIN Order o ON c.customer_id = o.customer_id
GROUP BY c.customer_name;
2.Lateral Derived Table을 사용한 복잡한 예시:
각 고객의 최대 주문 금액이 특정 값을 초과하는지 확인하고, 그 결과를 반환하는 경우.
SELECT c.customer_name, max_order
FROM Customer c,
LATERAL (
SELECT MAX(o.order_amount) AS max_order
FROM Order o
WHERE o.customer_id = c.customer_id
) AS order_info
WHERE max_order >= 100;
요약
조인과 그룹화: 단순 집계나 성능이 중요한 경우에 적합하다.
Lateral Derived Table: 각 행에 대해 동적으로 복잡한 계산이나 조건이 필요한 경우에 유용하다.