- Pマークとは
- 情報漏洩を起こさないためにも『ノーマーク爆牌党』でいうところの、
- 『爆守備』(鉄壁保)を目指しましょう。
- 一般的な会社のデータベースの演習
カラム名 | データ型 | INDEX | 照合順序 |
---|---|---|---|
社員番号 | INT | PRIMARY | |
名前 | VARCHAR(10) | utf-8_general_ci | |
年齢 | INT | ||
住所 | VARCHAR(10) | utf-8_general_ci | |
売上額 | INT | ||
所属 | VARCHAR(10) | utf-8_general_ci |
mysql > select * from tb01 union select * from tb2 ;
( テーブルtb01とtb2をくっつける。)
mysql > select * from tb01 where toshi >25
-> union
-> select * from tb2 where toshi >25 ;
( whereは複数select文がある場合はselectの数だけwhereもつける。)
mysql > select * from tb01 where toshi>25
-> union
-> select * from tb2 where bang in('A106','A110') ;
( tb01のtoshiが25より大きく、tb2のbangがA106,A110のもを表示。)
join
内部結合
mysql> select * from tb join tb01 on tb.bang=tb01.bang ;
( テーブルtbとtb01をbangを一致させてくっつける。bangが一致しないものは表示されない。)
mysql> select tb.bang,nama,uri,tuki from tb join tb01 on tb.bang=tb01.bang ;
( tbからbang,nama,uri,tukiを選択し、tb01と結合しbangが一致するもののtbで選択したカラムを表示。)
mysql > select tb.bang,nama,uri,tuki from tb join tb01 on tb.bang=tb01.bang order by tb.bang ;
( tbからbang,nama,uri,tukiを選択し、tb01と結合しbangが一致するもののtbで選択したカラムを表示。)
mysql > select nama,uri,tuki from tb join tb01 on tb.bang=tb01.bang order by tb.bang ;
( tbからnama,uri,tukiを選択し、tb01と結合しbangが一致するもののtbで選択したカラムを表示。)
mysql > select nama,uri,tuki from tb join tb01 using(bang) order by tb.bang ;
( tbからnama,uri,tukiを選択し、tb01と結合しbangが一致するもののtbで選択したカラムを表示。)
mysql > select * from tb
-> join tb01 using(bang)
-> join tb3 using(bang) ;
mysql > select * from tb
-> join tb01 on tb.bang=tb01.bang
-> join tb3 on tb.bang=tb3.bang ;
left join
左外部結合
mysql> select * from tb
-> left join tb01 on tb.bang=tb01.bang ;
mysql> select * from tb
-> left join tb01 on tb.bang=tb01.bang
-> left join tb2 on tb.bang=tb2.bang ;
mysql> select * from tb
-> left join tb01 using(bang)
-> left join tb2 using(bang) ;
right join
右外部結合
mysql> select * from tb01
-> right join tb on tb.bang=tb01.bang ;
( tbと右外部結合したtb01から、tbとtb01のbangが一致したものを全て表示。)
mysql> select * from tb
-> left outer join tb01 on tb.bang=tb01.bang ;
( tb01と左外部結合したtbから、tbとtb01のbangが一致したものを全て表示。)
mysql> select a.bang as '社員番号',b.nama as '氏名' from tb as a
-> left outer join tb01 as b on a.bang=b.bang ;
( [tb01をbとしたもの]と左外部結合した[tbをaとしたもの]から、テーブルaのカラムbangを『社員番号』,テーブルbのカラムnamaを『氏名』として、aとbのbangが一致したものを全て表示。)
mysql > select uriage.bang as '社員番号',person.nama as '氏名' from tb as uriage
-> left outer join tb01 as person on uriage.bang=person.bang ;
( [tb01をpersonとしたもの]と左外部結合した[tbをuriageとしたもの]から、テーブルuriageのカラムbangを『社員番号』,テーブルpersonのカラムnamaを『氏名』として、personとuriageのbangが一致したものを全て表示。)
mysql > select tb01.bang ,tb01.nama from tb01
-> where tb01.bang in (select bang from tb) ;
( (select bang from tb)はクエリの中に入ったクエリでサブクエリという。)
mysql > select tb01.bang,tb01.nama from tb01
-> where tb01.bang in ('A101','A102','A103','A104');
()
mysql > select tb01.bang,tb01.nama from tb01
-> join tb using(bang);
mysql > select distinct tb01.bang,tb01.nama from tb01
-> join tb using(bang) order by tb01.bang;
( distinctでダブってるのは弾かれる。)
mysql > select tb01.bang,tb01.nama from tb01
-> where tb01.bang in (select bang from tb where uri>=200);
( tb01からカラムbang,namaを選び、tbでuriが200以上のbangと一致するtb01のbangのものを表示。)
mysql> select distinct tb01.bang,tb01.nama from tb01
-> join tb using(bang) where uri>=200 order by tb01.bang;
()
mysql> select tb01.bang,tb01.nama from tb01
-> where tb01.bang = (select bang from tb where uri>=200 limit 1);
商品
商品番号 | 商品名 | 価格 |
---|---|---|
顧客
顧客番号 | 顧客名 | クレジット番号 |
---|---|---|
売上
顧客番号 | 商品番号 | 個数 |
---|---|---|
↓ 上のようなテーブルから下で作成するテーブルを考える。
商品名 | 顧客 | 個数 | クレジット番号 |
---|---|---|---|
mysql> create view tb_tb1 as
-> select * from tb
-> right join tb01 using(bang);
union
2つのテーブルでカラム数が同じ場合に使える。
join
2つのテーブルでカラム数が同じでなくても使える。
view
テーブル2つをjoinでつなげてテーブルを作成。insert文は使えない、どちらのテーブルに挿入していいか判断がつかないため。
mysql> create view tb_tb2 as
-> select * from tb
-> right join tb01 using(bang) where uri>=100;
( whereはjoinが出てきた後にもってくるのが文法上のルール。この場合select * from tbの後にwhere句を持ってきてしまうとエラーになります。uri>=100の指定があるので、update文でtb_tb2のuriの値を100より小さく修正してしまうと、修正したカラムはtb_tb2には表示されなくなります。が、tb,tb01では表示されたままになります。)
using(bang)
bangを1つにまとめてテーブル作成。
というわけで、今回はこのへんで。