ねこきっくぱんちのメモ帳

ITに関することいろいろめも。たまにアニメ。

MySQL009 データの編集(UNION, UNION ALL)

chap10

■複数テーブルのレコードを合わせて表示する

<事前準備:サンプルテーブル 4つ>
create table tb10 select * from chap8;

create table tb11 (bang varchar(10),nama varchar(10),tosi int);
insert into tb11 values('A101','佐藤',40);
insert into tb11 values('A102','高橋',28);
insert into tb11 values('A103','中川',20);
insert into tb11 values('A104','渡辺',23);
insert into tb11 values('A105','西沢',35);

create table tb12 (bang varchar(10),nama varchar(10),tosi int);
insert into tb12 values('A106','中村',26);
insert into tb12 values('A107','田中',24);
insert into tb12 values('A108','鈴木',23);
insert into tb12 values('A109','村井',25);
insert into tb12 values('A110','吉田',27);

create table tb13 (bang varchar(10),ken varchar(10));
insert into tb13 values('A101','東京都');
insert into tb13 values('A102','埼玉県');
insert into tb13 values('A103','神奈川県');
insert into tb13 values('A104','北海道');
insert into tb13 values('A105','静岡県');

・複数の抽出結果を合わせて表示(UNION)

■UNION
・複数テーブルから抽出データを収集する。
※基本的にデータ型は一致する必要はあるが、集められることもある。
select * from tb11 union select * from tb12;
(select * from tb11) union (select * from tb12);

・3つ以上のテーブルから抽出データを収集する。
select * from tb11 where bang='A102'
union select * from tb11 where bang='A103'
union select * from tb11 where bang='A104'
union select * from tb11 where bang='A105';
→select * from tb11 where bang not in ('A101');
→select * from tb11 where bang in ('A102','A103','A104','A105');

・条件付きで複数の抽出結果を表示する(重複する)
select bang from tb10 where uria>=200
union
select bang from tb11 where tosi>=35;
※重複データは省かれる

・条件付きで複数の抽出結果を表示する(重複しない) union all ★
select bang from tb10 where uria>=200
union all
select bang from tb11 where tosi>=35;

■参考
本:基礎からのMySQL