[SQL 5-1] Noncorrelated Subqueries
안녕하세요^^
오늘은 proc sql의 subqueries에 대해 정의하고, correlated와 noncorrelated subqueries에 대해 알아보도록 하겠습니다.
우선, 데이터는 함께 올려드리는 sasuser 라이브러리에 저장되는 flightdelays데이터를 사용하시면 됩니다.
1. 평균 delay 시간은 다음과 같이 계산할 수 있습니다.
2. 평균 delay 시간이 평균값인 3.376을 넘는 flightnumber는 다음과 같이 찾을 수 있습니다.
하지만, 위의 쿼리는 subquery를 사용하면 single step으로 계산할 수 있습니다.
Subquery란 outer query 내에 있는 쿼리를 말하며, outer query를 실행하기 전에 subquery가 실행됩니다.
위의 음영표시 된 부분을 subquery라고 하며, 그 외의 부분을 outer query라고 합니다.
Subquery는 outer query의 WHERE절이나 HAVING절에서 사용될 값을 반환하며,
하나의 column만 반환하지만, 여러 개의 값을 반환할 수도 있습니다.
subquery에는 두 가지 종류가 있습니다.
- noncorrelated subquery는 self-contained query이며, outer query와는 독립적으로 실행됩니다.
예를들면,
Outer query와는 관계없이 독립적으로 실행되는 subquery를 noncorrelated subquery라고 합니다.
- correlated subquery는 실행되기 전에 outer query에 의해 값이 반환되는 것을 의미합니다
예를들면,
이 subquery는 main 쿼리로부터의 추가적인 정보가 더 필요한 것을 알 수 있습니다.
3. 두 개의 다른 테이블을 이용하여,
employee의 id, lastname, firstname, city, state의 정보를 담고있는 report를 만들고자 합니다.
단, 태어난 월이 2월인 employee를 대상으로 한다면,
먼저 subquery를 계산하여 조건에 맞는 empid를 선택하게 됩니다.
그 이후, outer query에서 subquery의 결과에 포함되는 empid, lastname, firstname, city, state를 보여주게 됩니다.
만약 in을 =으로 바꾼다면, SAS log창에 에러 메시지가 뜨게 됩니다.
만약 subquery가 여러 개의 값을 반환한다면, 반드시 IN 연산자 또는 ANY, ALL 키워드를 사용해야 합니다.
ANY 키워드는 조건 중 하나라도 만족하는 값을 반환하는 것이며, ALL 키워드는 모든 조건을 만족하는 값을 반환하는 것입니다.
===============================================================
위의 쿼리는 any 키워드를 사용한 쿼리로, FA1과 FA2를 jobcode로 포함하고 dateofbirth 변수의 값이 jobcode가 FA3인 개체들의 dateofbirth 값보다 작은 모든 rows를 결과로 보여줍니다.
즉, jobcode가 FA3인 dateofbirth의 최대값보다 작은 값을 반환합니다.
위의 쿼리는 all 키워드를 사용한 쿼리로, jobcode가 FA3인 dateofbirth의 최소값보다 작은 값을 반환합니다.
이상으로 proc sql문장의 noncorrelated subquery에 대해 알아보았습니다.
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.