BookmarkSubscribeRSS Feed

[SQL 5-1] Noncorrelated Subqueries (서브쿼리1)

Started ‎06-17-2020 by
Modified ‎06-17-2020 by
Views 215

[SQL 5-1] Noncorrelated Subqueries

 

안녕하세요^^

​오늘은 proc sql의 subqueries에 대해 정의하고, correlated와 noncorrelated subqueries에 대해 알아보도록 하겠습니다.

​우선, 데이터는 함께 올려드리는 sasuser 라이브러리에 저장되는 flightdelays데이터를 사용하시면 됩니다.

1. 평균 delay 시간은 다음과 같이 계산할 수 있습니다.

 

SE22016122114021770.jpg

 

SE22016122114022570.jpg

 

 

 

 

 

​​2. 평균 delay 시간이 평균값인 3.376을 넘는 flightnumber는 다음과 같이 찾을 수 있습니다.

 

SE22016122114031370.jpg

 

SE22016122114032070.jpg

 

 

하지만, 위의 쿼리는 subquery를 사용하면 single step으로 계산할 수 있습니다.

 

​Subquery란 outer query 내에 있는 쿼리를 말하며, outer query를 실행하기 전에 subquery가 실행됩니다.

 

SE22016122114035970.jpg

 

SE22016122114040570.jpg

 

위의 음영표시 된 부분을 subquery라고 하며, 그 외의 부분을 outer query라고 합니다.

​Subquery는 outer query의 WHERE절이나 HAVING절에서 사용될 값을 반환하며,

​하나의 column만 반환하지만, 여러 개의 값을 반환할 수도 있습니다.

 

 

subquery에는 두 가지 종류가 있습니다.

​- noncorrelated subquery는 self-contained query이며, outer query와는 독립적으로 실행됩니다.

​​예를들면,

 

SE22016122114045670.jpg

 

Outer query와는 관계없이 독립적으로 실행되는 subquery를 noncorrelated subquery라고 합니다.​

​- correlated subquery는 실행되기 전에 outer query에 의해 값이 반환되는 것을 의미합니다

​예를들면,

 

SE22016122114053670.jpg

 

이 subquery는 main 쿼리로부터의 추가적인 정보가 더 필요한 것을 알 수 있습니다.

 

 

3. 두 개의 다른 테이블을 이용하여,

employee의 id, lastname, firstname, city, state의 정보를 담고있는 report를 만들고자 합니다.

​단, 태어난 월이 2월인 employee를 대상으로 한다면,

SE22016122114061770.jpg

 

SE22016122114062470.jpg

 

먼저 subquery를 계산하여 조건에 맞는 empid를 선택하게 됩니다.

 

​그 이후, outer query에서 subquery의 결과에 포함되는 empid, lastname, firstname, city, state를 보여주게 됩니다.

 

SE22016122114064870.jpg

 

SE22016122114065770.jpg

 

만약 in을 =으로 바꾼다면, SAS log창에 에러 메시지가 뜨게 됩니다.

 

​만약 subquery가 여러 개의 값을 반환한다면, 반드시 IN 연산자 또는 ANY, ALL 키워드를 사용해야 합니다.

 

 

 

 

 

ANY 키워드는 조건 중 하나라도 만족하는 값을 반환하는 것이며, ALL 키워드는 모든 조건을 만족하는 값을 반환하는 것입니다.

 

SE22016122114073270.jpg

 

SE22016122114072670.jpg

 

 

===============================================================

 

 

SE22016122114075670.jpg

 

SE22016122114080370.jpg

 

위의 쿼리는 any 키워드를 사용한 쿼리로, FA1과 FA2를 jobcode로 포함하고 dateofbirth 변수의 값이 jobcode가 FA3인 개체들의 dateofbirth 값보다 작은 모든 rows를 결과로 보여줍니다.

즉, jobcode가 FA3인 dateofbirth의 최대값보다 작은 값을 반환합니다.

 

 

SE22016122114082470.jpg

 

SE22016122114083170.jpg

 

위의 쿼리는 all 키워드를 사용한 쿼리로, jobcode가 FA3인 dateofbirth의 최소값보다 작은 값을 반환합니다.

 

 

 

 

 

 

 

이상으로 proc sql문장의 noncorrelated subquery에 대해 알아보았습니다.

Version history
Last update:
‎06-17-2020 12:38 AM
Updated by:
Contributors

sas-innovate-wordmark-2025-midnight.png

Register Today!

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.


Register now!

Article Labels
Article Tags