-
join과 서브쿼리의 차이database/sql 2023. 11. 27. 15:45
서브 쿼리와 join은 둘다 복수의 테이블로부터 데이터를 추출하기 위한 복잡한 쿼리문에 사용될 수는 있으나,
이 둘의 데이터를 추출하기 위한 접근 방식은 다르다
분석에 따라 서브 쿼리와 조인 중 어느 것을 사용하든 상관이 없을 때도 있고,
둘 중 하나만이 유일한 해결 방법일 수도 있다
서브쿼리는 가독성이 좋지만, 성능이 매우 좋지 않다
최신 MySQL은 사용자가 작성한 서브쿼리문을 자체적으로 조인문으로 변환하여 실행시키도록
업데이트 되었다
그렇다고 해도 너무 서브쿼리를 남용하는 것은 권장되지 않는다
중첩 서브 쿼리 (where절에 들어가는 서브쿼리, 단일행 반환)
이는 join문으로 대체 가능하다
중첩 서브 쿼리 (in 연산자 안에 들어가는 서브쿼리는, 복수의 값을 반환하여 비교한다는 뜻이다)
이 또한 서브 쿼리를 join으로 대체 가능하다
(not in인 경우엔 LEFT JOIN 을 통해 구현할 수 있다)
EXISTS 과 NOT EXISTS 또한 join 문으로 대체하기 쉽다
여기서 부턴 join 문으로 변환할 수 없는 경우이다
스칼라 서브쿼리(group by 를 사용한 서브 쿼리가 from 절에 있을 때)
집계된 값을 구하고자 group by 를 사용한 서브쿼리가 from절에 있다면, 조인으로 변환이 불가능하다
마찬가지로 집계된 값을 반환하는 서브쿼리가 where절에 있다면, 변환이 불가능하다
서브쿼리가 ALL 연산자에 있을 때, 변환이 불가능하다기본적으로 들어오는 데이터를 제한시키는 것은 join문으로 대체할 수 있으나,
집계함수를 사용하여 변환된 데이터를 가져오는 것은 서브쿼리로만 가능하다는 소리로 보인다
아직 알아보지 못한 예외가 있을 수 있으니, 가볍게 기억에 저장하도록 하자
'database > sql' 카테고리의 다른 글
함수 정리, 기본 사용 예제 (1) 2023.11.24