今回はSQLのfrom句にサブクエリを使用した場合の動きについて、解説します。
[from句]
まずは通常のSQLプロシージャから。
/* サブクエリ(from句_1) */
data data1;
Id1=1111; Id2=1111; Id3=1111;
output;
Id1=2222; Id2=2222; Id3=2222;
output;
Id1=3333; Id2=3333; Id3=3333;
output;
run;
proc sql;
select *
from data1;
quit;
![](https://how-to-business.com/wp-content/uploads/2023/10/ab98fa9357f2bab4d5ec555339303bce.png)
![](https://how-to-business.com/wp-content/uploads/2023/10/d08603d864a28ecece5a271b8dffe2f8.png)
- 正常にSQLプロシージャが実行される。
/* サブクエリ(from句_2) */
data data1;
Id1=1111; Id2=1111; Id3=1111;
output;
Id1=2222; Id2=2222; Id3=2222;
output;
Id1=3333; Id2=3333; Id3=3333;
output;
run;
proc sql;
select *
from (
select *
from data1
)
quit;
![](https://how-to-business.com/wp-content/uploads/2023/10/d74f1c40f0abe5237eaabe40dd84e8ce.png)
![](https://how-to-business.com/wp-content/uploads/2023/10/681ad8614430471e17d339c61d62fb7e.png)
- from句にSQL文を埋め込める。(サブクエリ)
- 正常にSQLプロシージャが実行される。
/* サブクエリ(from句_3) */
data data1;
Id1=1111; Id2=1111; Id3=1111;
output;
Id1=2222; Id2=2222; Id3=2222;
output;
Id1=3333; Id2=3333; Id3=3333;
output;
run;
proc sql;
select a1.*
from (
select *
from data1
) a1;
quit;
![](https://how-to-business.com/wp-content/uploads/2023/10/e0f070e63b4e981e737af8a85f284b60.png)
![](https://how-to-business.com/wp-content/uploads/2023/10/e23d0f8bf4a724bd2eeeede193f29e20.png)
- from句にSQL文を埋め込める。(サブクエリ)
- サブクエリの抽出結果により、作成したテーブルをa1としている。
- 正常にSQLプロシージャが実行される。
[select句]
まずは通常のSQLプロシージャから。
/* サブクエリ(from句_1) */
data data1;
Id1=1111; Id2=1111; Id3=1111;
output;
Id1=2222; Id2=2222; Id3=2222;
output;
Id1=3333; Id2=3333; Id3=3333;
output;
run;
proc sql;
select *
from data1;
quit;
![](https://how-to-business.com/wp-content/uploads/2023/10/ab98fa9357f2bab4d5ec555339303bce.png)
![](https://how-to-business.com/wp-content/uploads/2023/10/d08603d864a28ecece5a271b8dffe2f8.png)
- 正常にSQLプロシージャが実行される。
/* サブクエリ(select句_2) */
data data1;
Id1=1111; Id2=1111; Id3=1111;
output;
Id1=2222; Id2=2222; Id3=2222;
output;
Id1=3333; Id2=3333; Id3=3333;
output;
run;
proc sql;
select
Id1
,Id2
,(
select Id3
from data1
)
from data1;
quit;
![](https://how-to-business.com/wp-content/uploads/2023/10/190d096d4ceba4faaea898030c75dcde.png)
![](https://how-to-business.com/wp-content/uploads/2023/10/ad69610b2c4a6f57529500f6c99ef256.png)
![](https://how-to-business.com/wp-content/uploads/2023/10/1b28c118d407910d0afe3228fa465b78.png)
- select句にSQL文を埋め込める。(サブクエリ)
- data1テーブルからId3のみを切り出し、小テーブルとしてから、Id1・Id2とくっつける。
- select句でサブクエリを使う時は、サブクエリは1行ずつ返さないとエラーとなる。(今回は3行返している)
/* サブクエリ(select句_3) */
data data1;
Id1=1111; Id2=1111; Id3=1111;
output;
Id1=2222; Id2=2222; Id3=2222;
output;
Id1=3333; Id2=3333; Id3=3333;
output;
run;
proc sql;
select
Id1
,Id2
,(
select Id3
from data1
where Id3 = 1111
)
from data1;
quit;
![](https://how-to-business.com/wp-content/uploads/2023/10/f0e31fb922906cdd1d67f5d960a206e3.png)
![](https://how-to-business.com/wp-content/uploads/2023/10/862c38e25ffa8fc28b67f5aa66dcdee2.png)
![](https://how-to-business.com/wp-content/uploads/2023/10/2b4674816b25bfeca316de1b50343933.png)
- select句にSQL文を埋め込める。(サブクエリ)
- data1テーブルからId3のみを切り出し、小テーブルとしてから、Id1・Id2とくっつける。
- select句でサブクエリを使う時は、サブクエリは1行ずつ返さないとエラーとなる。(今回は1行ずつ返しているため、成功)
[where句]
/* サブクエリ(where句_1) */
data data1;
Id1=1111; Id2=1111; Id3=1111;
output;
Id1=2222; Id2=2222; Id3=2222;
output;
Id1=3333; Id2=3333; Id3=3333;
output;
run;
proc sql;
select *
from data1
where Id1 = 1111;
quit;
![](https://how-to-business.com/wp-content/uploads/2023/10/1f1254aa448ab0e61526b1d177a0e156.png)
![](https://how-to-business.com/wp-content/uploads/2023/10/2a2fbae5ebbe39083b74c7ba988f3644.png)
- 正常にSQLプロシージャが実行される。(where句を用いたSQL文)
/* サブクエリ(where句_2) */
data data1;
Id1=1111; Id2=1111; Id3=1111;
output;
Id1=2222; Id2=2222; Id3=2222;
output;
Id1=3333; Id2=3333; Id3=3333;
output;
run;
proc sql;
select *
from data1
where Id1 = (
select Id1
from data1
where Id1=1111
);
quit;
![](https://how-to-business.com/wp-content/uploads/2023/10/7acf148452ef73b461c2ad7ff8540958.png)
![](https://how-to-business.com/wp-content/uploads/2023/10/14980cfb0c598185d71ade6aadc7cec0.png)
- where句にSQL文を埋め込める。(サブクエリ)
- data1テーブルからId1=1111のみを切り出し、小テーブルとしてから、where条件として扱う。
- where=句でサブクエリを使う時は、サブクエリは1行返さないとエラーとなる。(今回は1行返しているため、成功)
/* サブクエリ(where句_3) */
data data1;
Id1=1111; Id2=1111; Id3=1111;
output;
Id1=2222; Id2=2222; Id3=2222;
output;
Id1=3333; Id2=3333; Id3=3333;
output;
run;
proc sql;
select *
from data1
where Id1 = (
select Id1
from data1
);
quit;
![](https://how-to-business.com/wp-content/uploads/2023/10/84d4455ee334ce461637356670253848.png)
![](https://how-to-business.com/wp-content/uploads/2023/10/903f675fac1565093ed4262fa85cfa50.png)
![](https://how-to-business.com/wp-content/uploads/2023/10/88dc48e2876644a96e394cd0d4338960.png)
- where句にSQL文を埋め込める。(サブクエリ)
- data1テーブルからId1のみを切り出し、小テーブルとしてから、where条件として扱う。
- where=句でサブクエリを使う時は、サブクエリは1行返さないとエラーとなる。(今回は3行返しているため、エラー)
/* サブクエリ(where句_4) */
data data1;
Id1=1111; Id2=1111; Id3=1111;
output;
Id1=2222; Id2=2222; Id3=2222;
output;
Id1=3333; Id2=3333; Id3=3333;
output;
run;
proc sql;
select *
from data1
where Id1 IN (
select Id1
from data1
);
quit;
![](https://how-to-business.com/wp-content/uploads/2023/10/d42845fec0f451a67a4f00e36718a179.png)
![](https://how-to-business.com/wp-content/uploads/2023/10/81e8fc2a12ddce04e7b9bd1d1e18247a.png)
![](https://how-to-business.com/wp-content/uploads/2023/10/b42e6c60048edf04a67faf330abcdfe7.png)
![](https://how-to-business.com/wp-content/uploads/2023/10/04eb5f4d54738de71747d503da4825d7.png)
![](https://how-to-business.com/wp-content/uploads/2023/10/b50609e8e267d131a903b69303f0f80a.png)
- where句にSQL文を埋め込める。(サブクエリ)
- data1テーブルからId1のみを切り出し、小テーブルとしてから、where条件として扱う。
- where in句でサブクエリを使う時は、サブクエリは複数行返しても正常に動く。
- where in(1111, 2222, 3333)みたいな感じ。