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

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

関連記事

【SAS】FORMATプロシージャはフォーマットルールを定義し、値を書き換える

今回はFORMATプロシージャについて解説します。 /* format */ data data1; 番号=”111111″; test = 10; output; 番号=”222222″; test …

【SAS】STOPステートメントは処理を切り上げる。

今回はSTOPステートメントについて解説していきます。 /* stop1 */ data data1; id1=”1111″; id2=”1111″; id3=”1111″; output; stop …

【SAS】SORTプロシージャはBYで指定した変数で並べ替える その2 降順

今回はSORTプロシージャの降順について解説します。(前回:【SAS】SORTプロシージャはBYで指定した変数で並べ替える その1 昇順 | ビジネスイッチ (how-to-business.com) …

【SAS】ROUNDは四捨五入して数値を丸める

今回はROUNDについて解説します。 /* 正常形 */ data work.data1; _100 = round(1234.56789, 100); _10 = round(1234.56789, …

【SAS】SASで良く使うテクニック。その2 「Ctrl+R」~データセットの列数が多いとき~【Excel】

今回はSASで良く使うテクニックということで、データセットの列数が多いときは「Ctrl+R」が役に立つ理由を解説していきます。 データセットのコンペアを行う場面を想定します。 先に以下の2記事を読んで …