今回は複数テーブルの結合について解説します。
/* 複数テーブルの結合_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;
![](https://how-to-business.com/wp-content/uploads/2022/02/faee273dc285565ca0434f772929fed8.png)
![](https://how-to-business.com/wp-content/uploads/2022/02/37ba106a89e692de4915a8a515696e0c.png)
![](https://how-to-business.com/wp-content/uploads/2022/02/9dc1329c2c271b11664cd41bf37a226d.png)
- 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;
![](https://how-to-business.com/wp-content/uploads/2022/02/94dccb3b7acb9c27bcaddd83aa281a87.png)
![](https://how-to-business.com/wp-content/uploads/2022/02/0f0fbb92b5c35a244bb2387e673f18cc.png)
![](https://how-to-business.com/wp-content/uploads/2022/02/af893650a50ccfc0d0604720e481fc21.png)
![](https://how-to-business.com/wp-content/uploads/2022/02/f4581200688ff96578e32acb92db784e.png)
- 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;
![](https://how-to-business.com/wp-content/uploads/2022/02/6584a2668beed46295c6d302f847b92c.png)
![](https://how-to-business.com/wp-content/uploads/2022/02/cdcb7a8b8c2e4c81b222dbd1437460a1.png)
![](https://how-to-business.com/wp-content/uploads/2022/02/aa6a97e36dec47f81fe2c4c191905314.png)
![](https://how-to-business.com/wp-content/uploads/2022/02/4a184bb6cc26ebef3d449d6a3083e293.png)
- 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;
![](https://how-to-business.com/wp-content/uploads/2024/05/UNION_ALL_1.png)
![](https://how-to-business.com/wp-content/uploads/2024/05/UNION_ALL_2.png)
![](https://how-to-business.com/wp-content/uploads/2024/05/UNION_ALL_3-1024x324.png)
- UNION ALLによって抽出結果を縦に結合することができる。
- 結合するテーブルの項目に差分があると、エラーとなる。