(8)-3 おさらい練習問題2

  • 下記にサンプルデータを記す。これを用いて集計等を行った。
+ ←クリックで開く
create table tb ( 
id int(11) not null auto_increment, 
bang varchar(50) not null, 
uria int, 
tuki int, 
primary key (id) 
); 
insert into tb (bang, uria, tuki) values ('A103', 101, 4); 
insert into tb (bang, uria, tuki) values ('A102', 54, 5); 
insert into tb (bang, uria, tuki) values ('A104', 181, 4); 
insert into tb (bang, uria, tuki) values ('A101', 184, 4); 
insert into tb (bang, uria, tuki) values ('A103', 17, 5); 
insert into tb (bang, uria, tuki) values ('A101', 300, 5); 
insert into tb (bang, uria, tuki) values ('A102', 205, 6); 
insert into tb (bang, uria, tuki) values ('A104', 93, 5); 
insert into tb (bang, uria, tuki) values ('A103', 12, 6); 
insert into tb (bang, uria, tuki) values ('A107', 87, 6); 

create table tb1 ( 
id int(11) not null auto_increment, 
bang varchar(50) not null, 
nama varchar(50) not null, 
tosi int, 
primary key (id) 
); 
insert into tb1 (bang, nama, tosi) values ('A101', '佐藤', 40); 
insert into tb1 (bang, nama, tosi) values ('A102', '高橋', 28); 
insert into tb1 (bang, nama, tosi) values ('A103', '中川', 20); 
insert into tb1 (bang, nama, tosi) values ('A104', '渡辺', 23); 
insert into tb1 (bang, nama, tosi) values ('A105', '西沢', 35); 

create table tb3 ( 
id int(11) not null auto_increment, 
bang varchar(50) not null, 
ken varchar(50) not null, 
primary key (id) 
); 
insert into tb3 (bang, ken) values ('A101', '東京都'); 
insert into tb3 (bang, ken) values ('A102', '埼玉県'); 
insert into tb3 (bang, ken) values ('A103', '神奈川県'); 
insert into tb3 (bang, ken) values ('A104', '北海道'); 
insert into tb3 (bang, ken) values ('A105', '静岡県'); 

【tb】
id bang uria tuki
1 A103 101 4
2 A102 54 5
3 A104 181 4
4 A101 184 4
5 A103 17 5
6 A101 300 5
7 A102 205 6
8 A104 93 5
9 A103 12 6
10 A107 87 6

【tb1】
id bang nama tosi
1 A101 佐藤 40
2 A102 高橋 28
3 A103 中川 20
4 A104 渡辺 23
5 A105 西沢 35

【tb3】
id bang ken
1 A101 東京都
2 A102 埼玉県
3 A103 神奈川県
4 A104 北海道
5 A105 静岡県


  • 複数テーブルのレコードを合わせて表示する
select カラム名
from テーブル名
union
select カラム名2
from テーブル名2;
  • 表示例1
select * from tb1 union select * from tb2;
  • 表示例2(わかりやすく括弧でくくった)
(select * from tb1) union (select * from tb2);
  • 表示例3(たくさん)
(select * from tb1) union (select * from tb2) union (select * from tb3);

  • 条件をつけて複数テーブルのレコードを合わせて表示する(重複省略処理含む)
(select bang from tb where uria>=200) 
union (select bang from tb1 where tosi>=35);

  • 複数の抽出結果を合わせて表示(重複あり)
(select bang from tb where uria>=200) 
union all (select bang from tb1 where tosi>=35);

  • 複数のテーブルを結合し表示(内部結合)
    • 複数のテーブルをキーで結合し表示
select カラム名
from テーブル1
join 結合するテーブル2
on テーブル1のカラム=テーブル2のカラム;

  • (tbとtb1のカラム「bang」が一致するレコードを結合し表示)
    • ※join = innner join
select *
from tb
join tb1 
on tb.bang=tb1.bang
  • usingを使って見やすくする:using(キーとなるカラム名/共通)
select *
from tb
join tb1 
using(bang);

  • 合わせて表示例1
select tb.bang, tb1.nama, 
tb.uria
from tb
join tb1
using (bang);

  • 合わせて表示例2
select tb.bang as '社員番号', tb1.nama as '氏名', tb.uria as '売上' 
from tb
join tb1
using(bang)
where tb.uria>=100;
結果
社員番号 氏名 売上
A103 中川 101
A104 渡辺 181
A101 佐藤 184
A101 佐藤 300
A102 高橋 205

  • 合わせて表示(たくさん)
select
tb.bang, tb.uria, tb1.nama, tb3.ken
from tb
join tb1
using(bang)
join tb3
using(bang);
結果
bang uria nama ken
A103 101 中川 神奈川県
A102 54 高橋 埼玉県
A104 181 渡辺 北海道
A101 184 佐藤 東京都
A103 17 中川 神奈川県
A101 300 佐藤 東京都
A102 205 高橋 埼玉県
A104 93 渡辺 北海道
A103 12 中川 神奈川県

  • 複数のテーブルを結合し表示(外部結合)
  • (1) 左外部結合:left join
    • tb1(右)のbang項目をtb(左)のbang項目に結合し表示
    • ※right join = right outer join
select tb.bang, tb1.nama 
from tb 
left join tb1
using(bang);
結果
bang nama
A103 中川
A102 高橋
A104 渡辺
A101 佐藤
A103 中川
A101 佐藤
A102 高橋
A104 渡辺
A103 中川
A107 NULL

  • (2) 右外部結合:right join
    • tb(左)のbang項目をtb1(右)のbang項目に結合し表示
    • ※left join = left outer join
select tb.bang, tb1.nama 
from tb 
right join tb1
using(bang);
結果
bang nama
A101 佐藤
A101 佐藤
A102 高橋
A102 高橋
A103 中川
A103 中川
A103 中川
A104 渡辺
A104 渡辺
NULL 西沢


※ XAMPP 1.7.7 [PHP: 5.3.8] での設定項目です。






前のページ < | > 次のページ
◆ ◆ ◆

最終更新:2012年01月23日 18:30