서브쿼리는 하나의 SQL문에 포함되어 있는 또 다른 SQL문을 말한다.
서브쿼리는 SELECT 문장의 어디든 들어가도 상관 없다. 하지만 어디에 들어가느냐에 따라 사용법이 조금씩 달라진다.
데이터 소스(FROM)
위 예시는 데이터 소스(FROM 절) 부분에 적용된 예시이다.
서브쿼리가 FROM절의 일부로 명시되면 새로운 데이터 소스가 생성된다. 이는 뷰의 역할과 비슷한데, 뷰는 데이터베이스에 영구히 저장되고, 서브쿼리는 그렇지 않다는 차이점이 존재한다.
위 문장에서 서브쿼리는 FROM절 다음에 나타나는 () 소괄호로 둘러싸인 SELECT 문장이다.
조인해줄 테이블을 서브쿼리로 그 자리에서 생성해준것을 볼 수 있다.
선택 기준(WHERE, HAVING)
서브쿼리는 선택 기준(WHERE, HAVING)에도 적용될 수 있다.
해당 문장에서는 서브쿼리로 IN에 들어갈 조건을 지정해주었다.
서브쿼리가 Cash 타입을 가진 UserID를 반환하고, 반환된 값을 WHERE절에서 조건으로 사용하는 예시이다.
상관 서브쿼리
위에서 본 두 예시는 모두 비상관 서브쿼리였다.
이는 서브쿼리와 쿼리가 연관되어있지 않아 서로 독립적임을 의미한다.
이번에 볼 예시는 상관 서브쿼리이다. 비상관 서브쿼리와는 반대로 서브쿼리와 쿼리가 연결되어있는 경우이다.
위 예시가 상관 서브쿼리인 이유는 마지막 문장의 User.UserID 때문이다.
만약 위의 서브쿼리를 독립적으로 실행하려고 시도하면 에러가 출력될것이다. User.UserID가 서브쿼리의 구문 안에 없기 때문이다.
EXISTS 연산자
EXISTS 연산자는 상관 서브쿼리에 데이터가 있는지 없는지 알 수 있게 해준다.
서브쿼리에서 UserID가 일치하는 열을 반환하고, 반환된 열을 출력했다.
계산된 열 생성
서브쿼리로 계산된 열을 생성할 수 있다.
Number of Transactions이라는 열을 서브쿼리를 통해 생성한 예시이다.
해당 열은 유저마다 실행된 거래 수 나타내는 열이다. 해당 계산을 서브쿼리를 통해 실행한 후, 그대로 그 결과를 열로 생성할 수 있다.
공통 테이블 식
공통 테이블 식은 서브쿼리는 미리 서술하는것이다.
이에 사용되는 키워드는 WITH이다. WITH 키워드 뒤에 서브쿼리의 별칭을 지정하고, AS 뒤에 서브쿼리를 작성한다.
공통 테이블 식을 사용하면 서브쿼리의 세부사항이 주 쿼리 앞에 독립체로 분리되어있기 때문에 주 쿼리의 가독성이 높아진다.
'DB > 관계형 DB' 카테고리의 다른 글
임시 테이블 & 테이블 변수 (0) | 2021.05.13 |
---|---|
저장 프로시저 (0) | 2021.05.12 |
교차 조인(cross join) (0) | 2021.04.29 |
외부 조인(LEFT/RIGHT JOIN, FULL JOIN) (0) | 2021.04.28 |
내부 조인(INNER JOIN) (0) | 2021.04.28 |