SAS SQL サブクエリ

【SAS】サブクエリについて解説

投稿日:2023年10月15日 更新日:

今回は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;
  • 正常に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;
  • 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;
  • 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;
  • 正常に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;
  • 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;
  • 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;
  • 正常に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;
  • 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;
  • 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;
  • where句にSQL文を埋め込める。(サブクエリ)
  • data1テーブルからId1のみを切り出し、小テーブルとしてから、where条件として扱う。
  • where in句でサブクエリを使う時は、サブクエリは複数行返しても正常に動く。
  • where in(1111, 2222, 3333)みたいな感じ。

-SAS, SQL, サブクエリ

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

【SQL】【Snowflake】スキーマを削除する方法【DROP SCHEMA】

今回は、Snowflake上でスキーマを削除する方法について、解説します。 — 削除用 drop schema DB1.SCHEMA1; スキーマSCHEMA1の削除 DROP SCHEMA文では、 …

【SAS】IFステートメントは処理を分岐できる。その1

今回はSASのif文について解説していきたいと思います。 【IF文の関連記事】 (明示的、暗黙的OUTPUT:【SAS】OUTPUTとDELETEの「明示的な使い方」「暗黙的な使い方」 | ビジネスイ …

【SAS】TIME関数はSAS時間値を取得する。

今回はTIME関数について解説します。 /* time_1 */ data data1; Id1 = time(); run; time()により、SAS時間値を取得する。 /* time_2 */ …

【SAS】TODAY()とDATE()はどちらもSAS日付値を取得する。

以下の2記事でtoday()を使ってきました。 【SAS】PUT+DATE,YYMMDDはSAS日付値をフォーマットを変換して表示する 【SAS】YYMMDDの可能性を考える(表示できる日付形式はどこ …

【SAS】INTCK関数を使って年齢計算をする。【PUT】【SUBSTR】【IF】

今回はINTCK関数を使って、年齢計算を行う方法について解説していきたいと思います。 併わせて読みたい記事 (INTCK:【SAS】INTCK関数は指定された区間に指定された単位を何回跨ぐか数える。 …