※当サイトの記事には、広告・プロモーションが含まれます。

コマンドプロンプト、2つのtableを1つに、皆の力を1つに

  1. Pマークとは
  2. プライバシーマーク制度」は、一般財団法人日本情報経済社会推進協会(JIPDEC)が、個人情報を適切に取り扱うことのできる企業や団体(事業者)を審査し認定する制度です。 この制度の認定基準は、日本工業規格「JIS Q 15001:2006-個人情報保護マネジメントシステム-要求事項」(平成18年5月20日改正)に基づいており、認定された付与事業者には、「個人情報」を大切に取り扱う事業者として、プライバシーマークの使用が認められています。
  3. 情報漏洩を起こさないためにも『ノーマーク爆牌党』でいうところの、
  4. 『爆守備』(鉄壁保)を目指しましょう。
  5. 一般的な会社のデータベースの演習
カラム名 データ型 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つにまとめてテーブル作成。

 

というわけで、今回はこのへんで。