You are on page 1of 33

Subqueries

• Subqueries have the following characteristics:


– are inner queries that return values to be used by
an outer query to complete a subsetting
expression
in a WHERE or HAVING clause
– return single or multiple values to be used by the
outer query
– can return only a single column

1
Subqueries: Noncorrelated
Example: Display job codes where the group’s
average salary exceeds the company’s
average salary.
proc sql; Then pass results
select JobCode,avg(Salary) as MeanSalary to outer query
from airline.payrollmaster
group by JobCode
having avg(Salary) >
(select avg(Salary)
from airline.payrollmaster);
Evaluate
first

2 c2s6d01
...
Subqueries: Noncorrelated
• After the subquery executes, the outer query
code resolves to:
proc sql;
select JobCode,avg(Salary) as MeanSalary
from airline.payrollmaster
group by JobCode
having avg(Salary) > (54079.65);

3
Subqueries: Noncorrelated
Output

The SAS System

Job
Code MeanSalary
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
ME3 59375
NA1 58845.08
NA2 73336.2
PT1 95071.2
PT2 122253.6
PT3 154706.3
TA3 55551.42

4
Subqueries: Noncorrelated
Example: Send birthday cards to employees
with February birthdays. Names and
addresses
are in airline.staffmaster, and
birth dates are in
proc sql;
airline.payrollmaster
select EmpID, LastName, FirstName, .
City, State
from airline.staffmaster
where EmpID in
(select EmpID
from airline.payrollmaster
where month(DateOfBirth)=2);

5 c2s6d02
Noncorrelated Subqueries:
How Do They Work?
airline.payrollmaster
Partial Listing
EmpID DateOfBirth
proc sql;
... . . .
select EmpID, LastName,
1038 11/13/1967
FirstName, City, State 1420 02/23/1963
from airline.staffmaster 1561 12/03/1961
where EmpID in 1434 07/14/1960
(select EmpID 1414 03/28/1970
from airline.payrollmaster 1112 12/03/1962
where month(DateOfBirth)=2); 1390 02/23/1963
1332 09/20/1968
... . . .

Step 1: Evaluate the inner query and build a virtual table that satisfies the
WHERE criteria.
6 c2s6d02
Noncorrelated Subqueries:
How Do They Work?
airline.payrollmaster
Partial Listing
EmpID DateOfBirth
proc sql;
... . . .
select
select EmpID,
EmpID, LastName,
LastName,
1038 11/13/1967
FirstName, City, State 1420 02/23/1963
from airline.staffmaster 1561 12/03/1961
where EmpID in 1434 07/14/1960
(select EmpID 1414 03/28/1970
from airline.payrollmaster 1112 12/03/1962
where month(DateOfBirth)=2); 1390 02/23/1963
1332 09/20/1968
... . . .

Virtual table contains


'1420','1390','1403','1404','1834','1103'.
7 c2s6d02
Noncorrelated Subqueries:
How Do They Work?
airline.payrollmaster
Partial Listing
EmpID DateOfBirth
proc sql;
... . . .
select EmpID, LastName,
1038 11/13/1967
FirstName, City, State 1420 02/23/1963
from airline.staffmaster 1561 12/03/1961
where EmpID in 1434 07/14/1960
(select EmpID 1414 03/28/1970
from airline.payrollmaster 1112 12/03/1962
where month(DateOfBirth)=2); 1390 02/23/1963
1332 09/20/1968
... . . .

Step 2: Pass '1420','1390','1403','1404','1834','1103' to the


outer query.
8 c2s6d02
Noncorrelated Subqueries: Output
The SAS System

Emp
ID LastName FirstName City State

ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
1403 BOWDEN EARL BRIDGEPORT CT
1404 CARTER DONALD NEW YORK NY
1834 LONG RUSSELL NEW YORK NY
1103 MCDANIEL RONDA NEW YORK NY
1420 ROUSE JEREMY PATERSON NJ
1390 SMART JONATHAN NEW YORK NY

9
Correlated Subqueries
• Rules for correlated subqueries include the
following:
– cannot be evaluated independently, but depend
on
the values returned by the outer query for their
results
– are evaluated for each row in the outer query

10

Correlated Subqueries
Example: Display the names and states
of all navigator managers.
proc sql;
select LastName, FirstName, State
from airline.staffmaster
where 'NA'=
(select JobCategory
from airline.supervisors
where staffmaster.EmpID=
supervisors.EmpID) ;
You must qualify each
column with a table name.

11 c2s6d05
...
airline.staffmaster
Partial Listing

Correlated Subqueries EmpID LastName FirstName

1919 ADAMS GERALD


1401 AVERY JERRY
1269 CASTON FRANKLIN
1935 FERNANDEZ KATRINA
proc sql; 1124 FIELDS DIANA
select LastName, FirstName, State 1677 KRAMER JACKSON
from airline.staffmaster 1442 NEWKIRK SANDRA
1417 NEWKIRK WILLIAM
where 'NA'= airline.supervisors
1352 RIVERS SIMON
(select JobCategory Partial Listing
from airline.supervisors EmpID State JobCategory
where staffmaster.EmpID= 1677 CT BC
supervisors.EmpID); 1834 NY BC
1431 CT FA
1433 NJ FA
1385 CT ME
Step 1: The outer query takes the first row 1420 NJ ME
in airline.staffmaster and finds 1882
1935
NY
CT
ME
NA
the EmpID, LastName, FirstName, and 1417 NJ NA
1352 NY NA
State. 1106 CT PT
1442 NJ PT
1405 NJ SC
1564 NY SC
12
1401 NJ TA
airline.staffmaster
Partial Listing

Correlated Subqueries EmpID LastName FirstName


1919
1401
ADAMS
AVERY
GERALD
JERRY
1269 CASTON FRANKLIN
1935 FERNANDEZ KATRINA
1124 FIELDS DIANA
1677 KRAMER JACKSON
proc sql; 1442 NEWKIRK SANDRA
select LastName, FirstName, State 1417 NEWKIRK WILLIAM
from airline.staffmaster 1352 RIVERS SIMON
where 'NA'= airline.supervisors
(select JobCategory Partial Listing
from airline.supervisors EmpID State JobCategory
where staffmaster.EmpID= 1677 CT BC
supervisors.EmpID); 1834 NY BC
1431 CT FA
1433 NJ FA
1385 CT ME
Step 2: Match staffmaster.EmpID 1420 NJ ME
with supervisors.EmpID to find the 1882 NY ME
1935 CT NA
qualifying row in airline.supervisors. 1417 NJ NA
1352 NY NA
1106 CT PT
airline.staffmaster.EmpID= 1442 NJ PT
1405 NJ SC
airline.supervisors.EmpID? 1564 NY SC
13
1401 NJ TA
NO MATCH ...
airline.staffmaster
Partial Listing

Correlated Subqueries EmpID LastName FirstName


1919
1401
ADAMS
AVERY
GERALD
JERRY
1269 CASTON FRANKLIN
1935 FERNANDEZ KATRINA
1124 FIELDS DIANA
1677 KRAMER JACKSON
proc sql; 1442 NEWKIRK SANDRA
select LastName, FirstName, State 1417 NEWKIRK WILLIAM
from airline.staffmaster 1352 RIVERS SIMON
where 'NA'= airline.supervisors
(select JobCategory Partial Listing
from airline.supervisors EmpID State JobCategory
where staffmaster.EmpID= 1677 CT BC
supervisors.EmpID); 1834 NY BC
1431 CT FA
1433 NJ FA
Steps 1 and 2 (repeated): Read the 1385 CT ME
1420 NJ ME
next row from airline.staffmaster, 1882 NY ME
and identify the qualifying row in 1935 CT NA
1417 NJ NA
airline.supervisors. 1352 NY NA
1106 CT PT
airline.staffmaster.EmpID= 1442 NJ PT
1405 NJ SC
airline.supervisors.EmpID? 1564 NY SC
14
1401 NJ TA
MATCH 1126 NY TA ...
airline.staffmaster
Partial Listing

Correlated Subqueries EmpID LastName FirstName


1919
1401
ADAMS
AVERY
GERALD
JERRY
1269 CASTON FRANKLIN
1935 FERNANDEZ KATRINA
1124 FIELDS DIANA
1677 KRAMER JACKSON
proc sql; 1442 NEWKIRK SANDRA
select LastName, FirstName, State 1417 NEWKIRK WILLIAM
from airline.staffmaster 1352 RIVERS SIMON
where 'NA'= airline.supervisors
Resolves (select JobCategory Partial Listing
to FALSE from airline.supervisors EmpID State JobCategory
where staffmaster.EmpID= 1677 CT BC
supervisors.EmpID); 1834 NY BC
1431 CT FA
1433 NJ FA
Step 3: The inner query now passes the 1385 CT ME
JobCategory of the selected row in 1420 NJ ME
airline.supervisors back to the outer query 1882 NY ME
1935 CT NA
via the = operator, where JobCategory is 1417 NJ NA
matched for selection in the outer query. 1352 NY NA
1106 CT PT
1442 NJ PT
1405 NJ SC
airline.staffmaster.EmpID= 1564 NY SC
15 airline.supervisors.EmpID? 1401 NJ TA
1126 NY TA
airline.staffmaster
Partial Listing

Correlated Subqueries EmpID LastName FirstName


1919
1401
ADAMS
AVERY
GERALD
JERRY
1269 CASTON FRANKLIN
1935 FERNANDEZ KATRINA
1124 FIELDS DIANA
1677 KRAMER JACKSON
proc sql; 1442 NEWKIRK SANDRA
select LastName, FirstName, State 1417 NEWKIRK WILLIAM
from airline.staffmaster 1352 RIVERS SIMON
where 'NA'= airline.supervisors
(select JobCategory Partial Listing
from airline.supervisors EmpID State JobCategory
where staffmaster.EmpID= 1677 CT BC
supervisors.EmpID); 1834 NY BC
1431 CT FA
1433 NJ FA
1385 CT ME
1420 NJ ME
Continue repeating steps 1 - 3 until all rows 1882 NY ME
are read from airline.staffmaster. 1935 CT NA
1417 NJ NA
1352 NY NA
1106 CT PT
airline.staffmaster.EmpID= 1442 NJ PT
1405 NJ SC
airline.supervisors.EmpID? 1564 NY SC
16
1401 NJ TA
NO MATCH ...
airline.staffmaster
Partial Listing

Correlated Subqueries EmpID LastName FirstName


1919
1401
ADAMS
AVERY
GERALD
JERRY
1269 CASTON FRANKLIN
1935 FERNANDEZ KATRINA
1124 FIELDS DIANA
1677 KRAMER JACKSON
proc sql; 1442 NEWKIRK SANDRA
select LastName, FirstName, State 1417 NEWKIRK WILLIAM
from airline.staffmaster 1352 RIVERS SIMON
where 'NA'= airline.supervisors
(select JobCategory Partial Listing
from airline.supervisors EmpID State JobCategory
where staffmaster.EmpID= 1677 CT BC
supervisors.EmpID); 1834 NY BC
1431 CT FA
1433 NJ FA
1385 CT ME
1420 NJ ME
Continue repeating steps 1 - 3 until all rows 1882 NY ME
are read from airline.staffmaster. 1935 CT NA
1417 NJ NA
1352 NY NA
1106 CT PT
airline.staffmaster.EmpID= 1442 NJ PT
1405 NJ SC
airline.supervisors.EmpID? 1564 NY SC
17
1401 NJ TA
MATCH 1126 NY TA ...
airline.staffmaster
Partial Listing

Correlated Subqueries EmpID LastName FirstName


1919
1401
ADAMS
AVERY
GERALD
JERRY
1269 CASTON FRANKLIN
1935 FERNANDEZ KATRINA
1124 FIELDS DIANA
1677 KRAMER JACKSON
proc sql; 1442 NEWKIRK SANDRA
select LastName, FirstName, State 1417 NEWKIRK WILLIAM
from airline.staffmaster 1352 RIVERS SIMON
where 'NA'= airline.supervisors
Resolves to (select JobCategory Partial Listing
TRUE from airline.supervisors EmpID State JobCategory
where staffmaster.EmpID= 1677 CT BC
supervisors.EmpID); 1834 NY BC
1431 CT FA
1433 NJ FA
1385 CT ME
Pass JobCategory from 1420 NJ ME
airline.supervisors to outer query 1882 NY ME
1935 CT NA
for comparison. 1417 NJ NA
1352 NY NA
1106 CT PT
1442 NJ PT
1405 NJ SC
1564 NY SC
1401 NJ TA
18
airline.staffmaster
Partial Listing

Correlated Subqueries EmpID LastName FirstName


1919
1401
ADAMS
AVERY
GERALD
JERRY
1269 CASTON FRANKLIN
1935 FERNANDEZ KATRINA
1124 FIELDS DIANA
1677 KRAMER JACKSON
proc sql; 1442 NEWKIRK SANDRA
select LastName, FirstName, State 1417 NEWKIRK WILLIAM
from airline.staffmaster 1352 RIVERS SIMON
where 'NA'= airline.supervisors
Resolves to (select JobCategory Partial Listing
TRUE from airline.supervisors EmpID State JobCategory
where staffmaster.EmpID= 1677 CT BC
supervisors.EmpID); 1834 NY BC
1431 CT FA
1433 NJ FA
1385 CT ME
1420 NJ ME
Write LastName, FirstName, and 1882 NY ME
State from airline.staffmaster as 1935 CT NA
1417 NJ NA
the first row in a newly created report. 1352 NY NA
1106 CT PT
1442 NJ PT
1405 NJ SC
1564 NY SC
1401 NJ TA
19
Correlated Subqueries
LastName FirstName State
Build first row of report:
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
FERNANDEZ KATRINA CT

20
airline.staffmaster
Partial Listing

Correlated Subqueries EmpID LastName FirstName


1919
1401
ADAMS
AVERY
GERALD
JERRY
1269 CASTON FRANKLIN
1935 FERNANDEZ KATRINA
1124 FIELDS DIANA
proc sql; 1677 KRAMER JACKSON
1442 NEWKIRK SANDRA
select LastName, FirstName, State 1417 NEWKIRK WILLIAM
from airline.staffmaster 1352 RIVERS SIMON
where 'NA'= airline.supervisors
(select JobCategory Partial Listing
from airline.supervisors EmpID State JobCategory
where staffmaster.EmpID= 1677 CT BC
supervisors.EmpID); 1834 NY BC
1431 CT FA
1433 NJ FA
1385 CT ME
1420 NJ ME
Continue repeating steps 1 - 3 until all rows 1882 NY ME
are read from airline.staffmaster. 1935 CT NA
1417 NJ NA
1352 NY NA
1106 CT PT
airline.staffmaster.EmpID= 1442 NJ PT
1405 NJ SC
airline.supervisors.EmpID? 1564 NY SC
1401 NJ TA
21
NO MATCH ...
airline.staffmaster
Partial Listing

Correlated Subqueries EmpID LastName FirstName


1919
1401
ADAMS
AVERY
GERALD
JERRY
1269 CASTON FRANKLIN
1935 FERNANDEZ KATRINA
1124 FIELDS DIANA
proc sql; 1677 KRAMER JACKSON
1442 NEWKIRK SANDRA
select LastName, FirstName, State 1417 NEWKIRK WILLIAM
from airline.staffmaster 1352 RIVERS SIMON
where 'NA'= airline.supervisors
(select JobCategory Partial Listing
from airline.supervisors EmpID State JobCategory
where staffmaster.EmpID= 1677 CT BC
supervisors.EmpID); 1834 NY BC
1431 CT FA
1433 NJ FA
1385 CT ME
1420 NJ ME
Continue repeating steps 1 - 3 until all rows 1882 NY ME
are read from airline.staffmaster. 1935 CT NA
1417 NJ NA
1352 NY NA
1106 CT PT
airline.staffmaster.EmpID= 1442 NJ PT
1405 NJ SC
airline.supervisors.EmpID? 1564 NY SC
1401 NJ TA
22
MATCH ...
airline.staffmaster
Partial Listing

Correlated Subqueries EmpID LastName FirstName


1919
1401
ADAMS
AVERY
GERALD
JERRY
1269 CASTON FRANKLIN
1935 FERNANDEZ KATRINA
1124 FIELDS DIANA
proc sql; 1677 KRAMER JACKSON
1442 NEWKIRK SANDRA
select LastName, FirstName, State 1417 NEWKIRK WILLIAM
from airline.staffmaster 1352 RIVERS SIMON
where 'NA'= airline.supervisors
Resolves to
(select JobCategory Partial Listing
FALSE
from airline.supervisors EmpID State JobCategory
where staffmaster.EmpID= 1677 CT BC
supervisors.EmpID); 1834 NY BC
1431 CT FA
1433 NJ FA
1385 CT ME
Pass JobCategory from 1420 NJ ME
airline.supervisors to outer query 1882 NY ME
1935 CT NA
for comparison. 1417 NJ NA
1352 NY NA
1106 CT PT
1442 NJ PT
1405 NJ SC
1564 NY SC
1401 NJ TA
23
...
airline.staffmaster
Partial Listing

Correlated Subqueries EmpID LastName FirstName


1919
1401
ADAMS
AVERY
GERALD
JERRY
1269 CASTON FRANKLIN
1935 FERNANDEZ KATRINA
1124 FIELDS DIANA
proc sql; 1677 KRAMER JACKSON
1442 NEWKIRK SANDRA
select LastName, FirstName, State 1417 NEWKIRK WILLIAM
from airline.staffmaster 1352 RIVERS SIMON
where 'NA'= airline.supervisors
Resolves (select JobCategory
to FALSE Partial Listing
from airline.supervisors EmpID State JobCategory
where staffmaster.EmpID= 1677 CT BC
supervisors.EmpID); 1834 NY BC
1431 CT FA
1433 NJ FA
1385 CT ME
1420 NJ ME
Continue repeating steps 1 - 3 until all rows 1882 NY ME
are read from airline.staffmaster. 1935 CT NA
1417 NJ NA
1352 NY NA
1106 CT PT
airline.staffmaster.EmpID= 1442 NJ PT
1405 NJ SC
airline.supervisors.EmpID? 1564 NY SC
1401 NJ TA
24
MATCH ...
airline.staffmaster
Partial Listing

Correlated Subqueries EmpID LastName FirstName


1919
1401
ADAMS
AVERY
GERALD
JERRY
1269 CASTON FRANKLIN
1935 FERNANDEZ KATRINA
1124 FIELDS DIANA
proc sql; 1677 KRAMER JACKSON
1442 NEWKIRK SANDRA
select LastName, FirstName, State 1417 NEWKIRK WILLIAM
from airline.staffmaster 1352 RIVERS SIMON
where 'NA'= airline.supervisors
Resolves (select JobCategory
to FALSE Partial Listing
from airline.supervisors EmpID State JobCategory
where staffmaster.EmpID= 1677 CT BC
supervisors.EmpID); 1834 NY BC
1431 CT FA
1433 NJ FA
1385 CT ME
1420 NJ ME
Continue repeating steps 1 - 3 until all rows 1882 NY ME
are read from airline.staffmaster. 1935 CT NA
1417 NJ NA
1352 NY NA
1106 CT PT
1442 NJ PT
1405 NJ SC
1564 NY SC
1401 NJ TA
25
...
airline.staffmaster
Partial Listing

Correlated Subqueries EmpID LastName FirstName


1919
1401
ADAMS
AVERY
GERALD
JERRY
1269 CASTON FRANKLIN
1935 FERNANDEZ KATRINA
1124 FIELDS DIANA
proc sql; 1677 KRAMER JACKSON
1442 NEWKIRK SANDRA
select LastName, FirstName, State 1417 NEWKIRK WILLIAM
from airline.staffmaster 1352 RIVERS SIMON
where 'NA'= airline.supervisors
(select JobCategory Partial Listing
from airline.supervisors EmpID State JobCategory
where staffmaster.EmpID= 1677 CT BC
supervisors.EmpID); 1834 NY BC
1431 CT FA
1433 NJ FA
1385 CT ME
1420 NJ ME
Continue repeating steps 1 - 3 until all rows 1882 NY ME
are read from airline.staffmaster. 1935 CT NA
1417 NJ NA
1352 NY NA
1106 CT PT
airline.staffmaster.EmpID= 1442 NJ PT
1405 NJ SC
airline.supervisors.EmpID? 1564 NY SC
1401 NJ TA
26
MATCH ...
airline.staffmaster
Partial Listing

Correlated Subqueries EmpID LastName FirstName


1919
1401
ADAMS
AVERY
GERALD
JERRY
1269 CASTON FRANKLIN
1935 FERNANDEZ KATRINA
1124 FIELDS DIANA
proc sql; 1677 KRAMER JACKSON
1442 NEWKIRK SANDRA
select LastName, FirstName, State 1417 NEWKIRK WILLIAM
from airline.staffmaster 1352 RIVERS SIMON
where 'NA'= airline.supervisors
Resolves
to TRUE (select JobCategory Partial Listing
from airline.supervisors EmpID State JobCategory
where staffmaster.EmpID= 1677 CT BC
1834 NY BC
supervisors.EmpID); 1431 CT FA
1433 NJ FA
1385 CT ME
1420 NJ ME
Continue repeating steps 1 - 3 until all rows 1882 NY ME
are read from airline.staffmaster. 1935 CT NA
1417 NJ NA
1352 NY NA
1106 CT PT
1442 NJ PT
1405 NJ SC
1564 NY SC
1401 NJ TA
27
...
airline.staffmaster
Partial Listing

Correlated Subqueries EmpID LastName FirstName


1919
1401
ADAMS
AVERY
GERALD
JERRY
1269 CASTON FRANKLIN
1935 FERNANDEZ KATRINA
1124 FIELDS DIANA
proc sql; 1677 KRAMER JACKSON
1442 NEWKIRK SANDRA
select LastName, FirstName, State 1417 NEWKIRK WILLIAM
from airline.staffmaster 1352 RIVERS SIMON
where 'NA'= airline.supervisors
(select JobCategory Partial Listing
from airline.supervisors EmpID State JobCategory
where staffmaster.EmpID= 1677 CT BC
1834 NY BC
supervisors.EmpID); 1431 CT FA
1433 NJ FA
1385 CT ME
Write LastName, FirstName, and 1420 NJ ME
1882 NY ME
State from airline.staffmaster 1935 CT NA
1417 NJ NA
as second row in newly-created report. 1352 NY NA
1106 CT PT
1442 NJ PT
1405 NJ SC
1564 NY SC
1401 NJ TA
28
Correlated Subqueries
Build second row of report:
LastName FirstName State
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
FERNANDEZ KATRINA CT
NEWKIRK WILLIAM NJ

29
airline.staffmaster
Partial Listing

Correlated Subqueries EmpID LastName FirstName


1919
1401
ADAMS
AVERY
GERALD
JERRY
1269 CASTON FRANKLIN
1935 FERNANDEZ KATRINA
1124 FIELDS DIANA
proc sql; 1677 KRAMER JACKSON
1442 NEWKIRK SANDRA
select LastName, FirstName, State 1417 NEWKIRK WILLIAM
from airline.staffmaster 1352 RIVERS SIMON
where 'NA'= airline.supervisors
(select JobCategory Partial Listing
from airline.supervisors EmpID State JobCategory
where staffmaster.EmpID= 1677 CT BC
supervisors.EmpID); 1834 NY BC
1431 CT FA
1433 NJ FA
1385 CT ME
1420 NJ ME
Continue repeating steps 1 - 3 until all rows 1882 NY ME
are read from airline.staffmaster. 1935 CT NA
1417 NJ NA
1352 NY NA
1106 CT PT
airline.staffmaster.EmpID= 1442 NJ PT
1405 NJ SC
airline.supervisors.EmpID? 1564 NY SC
1401 NJ TA
30
MATCH ...
airline.staffmaster
Partial Listing

Correlated Subqueries EmpID LastName FirstName


1919
1401
ADAMS
AVERY
GERALD
JERRY
1269 CASTON FRANKLIN
1935 FERNANDEZ KATRINA
1124 FIELDS DIANA
proc sql; 1677 KRAMER JACKSON
1442 NEWKIRK SANDRA
select LastName, FirstName, State 1417 NEWKIRK WILLIAM
from airline.staffmaster 1352 RIVERS SIMON
where 'NA'= airline.supervisors
Resolves to (select JobCategory
Partial Listing
TRUE from airline.supervisors EmpID State JobCategory
where staffmaster.EmpID= 1677 CT BC
supervisors.EmpID); 1834 NY BC
1431 CT FA
1433 NJ FA
1385 CT ME
1420 NJ ME
Continue repeating steps 1 - 3 until all rows 1882 NY ME
are read from airline.staffmaster. 1935 CT NA
1417 NJ NA
1352 NY NA
1106 CT PT
1442 NJ PT
1405 NJ SC
1564 NY SC
1401 NJ TA
31
1126 NY TA ...
airline.staffmaster
Partial Listing

Correlated Subqueries EmpID LastName FirstName


1919
1401
ADAMS
AVERY
GERALD
JERRY
1269 CASTON FRANKLIN
1935 FERNANDEZ KATRINA
1124 FIELDS DIANA
proc sql; 1677 KRAMER JACKSON
1442 NEWKIRK SANDRA
select LastName, FirstName, State 1417 NEWKIRK WILLIAM
from airline.staffmaster 1352 RIVERS SIMON
where 'NA'= airline.supervisors
(select JobCategory Partial Listing
from airline.supervisors EmpID State JobCategory
where staffmaster.EmpID= 1677 CT BC
supervisors.EmpID); 1834 NY BC
1431 CT FA
1433 NJ FA
1385 CT ME
1420 NJ ME
Write LastName, FirstName, and 1882 NY ME
State from airline.staffmaster 1935 CT NA
1417 NJ NA
as final row in newly-created report. 1352 NY NA
1106 CT PT
1442 NJ PT
1405 NJ SC
1564 NY SC
1401 NJ TA
32
1126 NY TA
Correlated Subqueries
Build third (and final) row of report:
LastName FirstName State
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
FERNANDEZ KATRINA CT
NEWKIRK WILLIAM NJ
RIVERS SIMON NY

33

You might also like