Exp/SQL

[SQL] Lateral 을 아시나요?

kilog 2025. 6. 7. 01:31
728x90

 

안녕하세요 ki입니다.

 

요즘은 postgreSQL이 자주 상용되고 있어 PostgreSQL 줄여서 Porstgre에 가장 유용하게 사용하고 있는

lateral 함수를 설명하려고 합니다.

 

lateral은 Postgre에서 서브쿼리나 함수 호출에 외부 쿼리의 값을 전달할 수 있게 해주는 함수입니다. 일반적으로 서브쿼리나 조인은 자신보다 바깥 쿼리의 컬럼을 사용 할 수 없는데 LATERAL을 사용하면 이를 가능하게 만들어줍니다.

 

SELECT *
FROM table1 a,
LATERAL (SELECT * WHERE a.column = ...) AS b

 

이렇게 서브쿼리 안에서 밖에 있는 table1에 컬럼을 이용하여 조회를 할 수 있습니다.

제가 주로 사용하던 Oracle이나 Mysql에서는 사용하지 못했던 함수라 신기했고 지금은 유용하게 사용하고 있습니다.

주로 Join문이나 서브쿼리에서 밖에 있는 테이블에 컬럼으로 조회를 할 때 사용하고 있습니다.

SELECT t1.id, s.value
FROM table1 t1,
LATERAL (
    SELECT value
    FROM table2 t2
    WHERE t2.ref_id = t1.id
    LIMIT 1
) s;

 

위에 예제처럼 FROM절에 서브쿼리를 작성해서 사용하기도 하고 

 

SELECT t.id, sub.val
FROM table t1
LEFT JOIN LATERAL (
    SELECT val
    FROM table2 t2
    WHERE t2.ref_id = t1.id
    ORDER BY val DESC
    LIMIT 1
) sub ON true;

 

JOIN문으로 사용하기도 합니다.

저는 특히 JOIN문에 활용을 많이 하는데 밖에 있는 테이블에 있는 컬럼이 필요한데 억지로 컬럼을 사용하기 위해 스칼라로  작성을 하던 때가 있었는데 LATERAL함수를 사용하면 일회성인 조회를 사용하지 않아도 밖에 있는 테이블에 컬럼을 가져와 사용할 수 있어 좋다고 생각하고 있습니다.