SAS Snowflake SQL UNION ALL

【SAS】【SQL】SQLにおける複数テーブルの結合 その1【UNION ALL】【Snowflake】

投稿日:

今回は複数テーブルの結合について解説します。


/* 複数テーブルの結合_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;

data data2;
  Id1=1111; Id2=1111; Id3=1111;
    output;
  Id1=2222; Id2=2222; Id3=2222;
    output;
  Id1=3333; Id2=3333; Id3=3333;
    output;
run;

proc sql;
  create table data3 AS
  select * from data1
  UNION ALL
  select * from data2;
quit;

  • UNION ALLによって抽出結果を縦に結合することができる。
  • 重複が有っても全て出力される。

/* 複数テーブルの結合_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;

data data2;
  Id1=1111; Id2=1111; Id3=1111;
    output;
  Id1=2222; Id2=2222; Id3=2222;
    output;
  Id1=3333; Id2=3333; Id3=3333;
    output;
run;

proc sql;
  create table data3 AS
  select * from data1,data2;
quit;

  • 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;

data data2;
  Id1=1111; Id2=1111; Id3=1111;
    output;
  Id1=2222; Id2=2222; Id3=2222;
    output;
  Id1=3333; Id2=3333; Id3=3333;
    output;
run;

proc sql;
  create table data3 AS
  select t1.Id1,
         t1.Id2,
         t1.Id3,
         t2.Id1,
         t2.Id2,
         t2.Id3
  from data1 t1,data2 t2;
quit;

  • from句に複数テーブルあるときは、結合されてデカルト積になる。
  • 名前が全く同じ列は表示されない。

[メモ:デカルト積の図解を追記]

UNION ALLの項目差異について


-- create or replace table1-
create or replace table DB1.PUBLIC.DATA1
(
  "id1" VARCHAR(10),
  "id2" VARCHAR(10)
);

-- create or replace table2-
create or replace table DB1.PUBLIC.DATA2
(
  "id1" VARCHAR(10),
  "id2" VARCHAR(10),
  "id3" VARCHAR(10)
);



-- プロシージャ定義
CREATE OR REPLACE PROCEDURE DB1.PUBLIC.INSERT_PROC1()

RETURNS VARCHAR
LANGUAGE SQL
AS
BEGIN

INSERT INTO DB1.PUBLIC.DATA1 VALUES ('1111', '1111');
INSERT INTO DB1.PUBLIC.DATA1 VALUES ('2222', '2222');
INSERT INTO DB1.PUBLIC.DATA1 VALUES ('3333', '3333');

INSERT INTO DB1.PUBLIC.DATA2 VALUES ('1111', '1111','1111');
INSERT INTO DB1.PUBLIC.DATA2 VALUES ('2222', '2222','2222');
INSERT INTO DB1.PUBLIC.DATA2 VALUES ('3333', '3333','3333');

END;

-- プロシージャ呼び出し
CALL DB1.PUBLIC.INSERT_PROC1();


-- UNION ALL
select * from DB1.PUBLIC.DATA1
UNION ALL
select * from DB1.PUBLIC.DATA2;
  • UNION ALLによって抽出結果を縦に結合することができる。
  • 結合するテーブルの項目に差分があると、エラーとなる。

-SAS, Snowflake, SQL, UNION ALL

執筆者:


comment

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

関連記事

【SAS】TITLEステートメントは「結果」にタイトルを付けられる

今回はTITLEステートメントについて解説します。 data data1; 番号=”AAAAAA”; コード=”02″; 金額=1999; output; 番号=”AAAAAA”; コード=”05″; …

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

今回もFORMATプロシージャについて解説します。 前回は値の範囲によって、定義されたフォーマットルールに従い、値を書き換えるという内容でした。 【SAS】FORMATプロシージャはフォーマットルール …

【SAS】IF文はデータ読み込み後にフィルター、WHERE文はデータ読み込み時にフィルターをする。

今回は、データ入力に着目して、IF文とWHERE文の違いを解説します。 /* if */ data data1; Id1=1111; Char1=”AAAA”; output; Id1=2222; C …

【SAS】SAS Studioのフィルター機能の使い方を解説 その1 ~文字型~

今回はSAS Studioのフィルター機能について解説します。 /* 文字型 */ data data1; id1=”1111″; id2=”1111″; id3=”1111″; output; id …

【SAS】SASで良く使うテクニック。その9 「Alt+E+S+V+E」~縦横の並び替えを行いたいとき~【Excel】

今回はSASで良く使うテクニックということで、縦横の並び替えを行いたい時は、「Alt+E+S+V+E」が役に立つ理由を解説していきます。 具体的な使用場面は、 データセットの場合、カラムは横並びですが …