조인으로 바꾸면 행이 불어나고, 자바에서 쪼개 조회하면 한 시점의 데이터라는 보장을 잃습니다. 조인과 EXISTS의 갈림길, 일괄 조회와 N+1의 차이, IN 목록의 1000개 한계, 뷰로 뺄 때 생기는 것까지 정리했습니다.
NOT IN은 서브쿼리 결과에 NULL이 하나만 섞여도 0행을 냅니다. 인라인뷰는 바깥 컬럼을 못 찾고, WITH는 이름만 붙인 인라인뷰가 아닙니다. 인라인뷰로 집계를 붙일 때 윈도우 함수가 더 나은 경우와, 스칼라 서브쿼리를 못 쓰는 자리까지 26ai로 확인했습니다.
서브쿼리는 다른 SQL 문 안에 들어간 SELECT 문입니다. 무엇이고 왜 쓰는지부터 짚고, SELECT절과 FROM절과 WHERE절이 각각 값 하나와 집합과 조건을 요구한다는 축으로 스칼라 서브쿼리와 인라인뷰와 중첩 서브쿼리를 한 번에 묶습니다.