NATURAL句
別々の2つのテーブル内に同一のカラム名がある場合、NATURAL句を用いて簡略化を行なった上で値を結合できる。 free85

Monday,July,29,2013


○甲テーブルの中身の表示
mysql> select * from sadachika_shop.sadachi_info;
sada_id   sada_name   sada_price                       *sada_idは他のテーブル名(sadachi_stock)のカラム名と同じ
      1   週刊誌             400
      2   経済紙             700
      3   新聞               130
      4   漫画コミック       370

○乙テーブルの中身の表示
mysql> select * from sadachika_shop.sadachi_stock;
sada_id  sada_stockcount                              *sada_idは他のテーブル名(sadachi_info)のカラム名と同じ
      1               65
      2              124
      4                8

○○甲乙2つのテーブルで共通のカラムは「sada_id」カラムだけ  USING句と似ている
○○以下の式にはカラム名はどこにも記載していないが、2つのテーブルから同一のカラムを探し出して結合してくれる。

                        ↓甲db名       ↓甲テーブル名                 ↓乙db名     ↓乙テーブル名
mysql> select * FROM sadachika_shop.sadachi_info NATURAL LEFT JOIN sadachika_shop.sadachi_stock;     *LEFTはFROMの後ろのsadachi_infoが基準となる意味である。
                                                  ↑カラム名が同一なら以上のようにカラム名を記入しないで省略できる

↓このカラム名は甲乙2つのテーブルで唯一同じ名前であるから省略できる
sada_id  sada_stockcount  sada_price  sada_stockcount
      1   週刊誌                 400               65
      2   経済紙                 700              124
      4   漫画コミック           370                8
      3   新聞                   130             NULL


ライト右側sadachi_stockを基準にしてみる
mysql> select * FROM sadachika_shop.sadachi_info NATURAL RIGHT JOIN sadachika_shop.sadachi_stock;     *RIGHTはJOINの後ろのsadachi_stockが基準となる意味である。
                                                          ↑ライト

sada_id  sada_stockcount  sada_name       sada_price
      1               65  週刊誌                 400
      2              124  経済紙                 700
      4                8  漫画コミック           370
                                                        *新聞130円はsada_stockに記載が無いので、新聞の文字は一切表示されない。sada_stockが基準であるからだ。


○○USING句
○○カラムの値を結合して表示   USING句  ↓甲カラム名sadachi_infoが基準となる。 ↓カラム名が甲、乙ともに同じ名前ならUSING句を用い省略できる。
mysql> select * FROM sadachika_shop.sadachi_info LEFT JOIN sadachika_shop.sadachi_stock USING(sada_id);
                        ↑甲db名      ↑甲テーブル名         ↑乙db名        ↑乙テーブル名     ↑甲乙同名のカラム名
sada_id  sada_stockcount  sada_price  sada_stockcount
      1   週刊誌                 400               65
      2   経済紙                 700              124
      4   漫画コミック           370                8
      3   新聞                   130             NULL

ライトに変えて乙sada_stockを基準に結合してみる     ↓ライト
mysql> select * FROM sadachika_shop.sadachi_info RIGHT JOIN sadachika_shop.sadachi_stock USING(sada_id);
sada_id  sada_stockcount  sada_name       sada_price
      1               65  週刊誌                 400
      2              124  経済紙                 700
      4                8  漫画コミック           370

















○○1つのカラムで値を結合する特殊ケース
2つに分けて値を格納いとけば複雑にならないのにと思ったり
どういう利用法があるのかわかりませんが、これから分ってくるのかな?楽しみです。


mysql> select f1.id, f1.name, f2.name as parentname from node as f1 
    -> left join node as f2 on f1.parent = f2.id;

                     <<<<<<<<<<<<<<<<[ f2 >>>>>>>>>>>>>>>   ] 
<<<<<<<<<< f1  >>>>>>>(f1.parent>>>  = f2.id; )       
id        name            parent          id
1         和書            NULL         [                    ]
2         文学            1      →    [   1        和書    ] 
3         ビジネス        1      →    [   1        和書    ]
4         文芸            2      →    [   2        文学    ]
5         歴史            2      →    [   2        文学    ]
6         マーケティング  3      →    [   3        ビジネス]
7         経営戦略        3      →    [   3        ビジネス]
                         [←←←←←削除→→→→→→]
                         [←←←←←つなぐ→→→→→]
<<<<   f2   >>>>
id      f2.name as parentname      parent
1       和書                       NULL
2       文学                       1
3       ビジネス                   1
4       文芸                       2
5       歴史                       2
6       マーケティング             3
7       経営戦略                   3
                                            


(f1.)id   (f1.)name    (f2.name as )parentname                  f1.parent = f2.id;
     1         和書         
     2         文学                 和書
     3         ビジネス             和書
     4         文芸                 文学
     5         歴史                 文学
     6         マーケティング       ビジネス
     7         経営戦略             ビジネス






○特定のデータベース内のテーブル 
SHOW TABLES FROM sadachika_shop;
○テーブルを作成する
mysql> create table sadachika_shop.sadachi_node (sada_id int not null primary key, sada_name varchar(10), sada_parent int);
○値を格納
mysql> insert into sadachika_shop.sadachi_node(sada_id, sada_name) values(1, '基準');   *sada_parentにNULLを格納するため

mysql> insert into sadachika_shop.sadachi_node values(2, '普通', 27), (3, '海', 27),(4, 'スナック菓子', 28),(5, '必要', 28),(6, '歯医者', 25), 
    ->(7, '警察', 24), (8, '好き', 21),(9, '嫌い', 22),(10, '自転車', 27),(11, '外食', 28),(12, '米', 28),(13, '運転免許', 27),(14, 'ボールペン', 30),
    ->(15, '銭ゲバ', 23), (16, '営業', 23),(17, 'イラスト', 8),(18, '印刷', 27),(19, 'データなし', 1),(20, 'デザート', 2),(21, '読書', 8),(22, 'ステマ', 16),
    ->(23, '経営者', 15), (24, '公務員', 7),(25, '虫歯', 6),(26, '役所', 24),(27, 'インフラ', 5),(28, '食べ物', 5),(29, '飲み物', 5),(30, '筆記具', 27),
    ->(31, 'ゲーム', 9);
Query OK, 30 rows affected (0.03 sec)
Records: 30 Duplicates: 0 Warnings: 0

mysql> select * from sadachika_shop.sadachi_node;
sada_id  sada_name         sada_parent 
1        基準                     NULL
2        普通                      27
3        海                        27
4        スナック菓子              28
5        必要                      28
6        歯医者                    25
7        警察                      24
8        好き                      21
9        嫌い                      22
10       自転車                    27
11       外食                      28
12       米                        28
13       運転免許                  27
14       ボールペン                30
15       銭ゲバ                    23
16       営業                      23
17       イラスト                   8
18       印刷                      27
19       データなし                 1
20       デザート                   2
21       読書                       8
22       ステマ                    16
23       経営者                    15
24       公務員                     7
25       虫歯                       6
26       役所                      24
27       インフラ                   5
28       食べ物                     5
29       飲み物                     5
30       筆記具                    27
31       ゲーム                     9



mysql> select f1.sada_id, f1.sada_name, f2.sada_name AS sada_parentname FROM sadachika_shop.sadachi_node AS f1 
    -> LEFT JOIN sadachika_shop.sadachi_node AS f2 ON f1.sada_parent = f2.sada_id;


                     <<<<<<<<<<<<<<<<[ f2 >>>>>>>>>>>>>>>   ] 
                 sada_id   sada_name   sada_parent
                       1   基準        NULL
                       2   普通        27
                       3   海          27
<<<<<<      f1  >>>>>>>(f1.sada_parent>>> = f2.sada_id; )       
sada_id  sada_name         sada_parentname (f2.sada_name)                 f1.sada_parent
1        基準              NULL                      
2        普通              インフラ                                                    27
3        海                インフラ                                                    27
4        スナック菓子      食べ物                                                      28
5        必要              食べ物                                                      28
6        歯医者            虫歯                                                        25
7        警察              公務員                                                      24
8        好き              読書                                                        21
9        嫌い              ステマ                                                      22
10       自転車            インフラ                                                    27
11       外食              食べ物                                                      28
12       米                食べ物                                                      28
13       運転免許          インフラ                                                    27
14       ボールペン        筆記具                                                      30
15       銭ゲバ            経営者                                                      23
16       営業              経営者                                                      23
17       イラスト          好き                                                         8
18       印刷              インフラ                                                    27
19       データなし        基準                                                         1
20       デザート          普通                                                         2
21       読書              好き                                                         8
22       ステマ            営業                                                        16
23       経営者            銭ゲバ                                                      15
24       公務員            警察                                                         7
25       虫歯              歯医者                                                       6
26       役所              公務員                                                      24
27       インフラ          必要                                                         5
28       食べ物            必要                                                         5
29       飲み物            必要                                                         5
30       筆記具            インフラ                                                    27
31       ゲーム            嫌い                                                         9




* 参考にしたサイトは→ こちら です。

これは赤色の文字例です。

これは青色の文字例です。