mysql 内部結合・外部結合違い inner join,left join,right join
2015/04/18
参考サイト]http://mathemathiko.hatenablog.com/entry/2012/06/08/201735
[先にポイント]
外部結合・内部結合の大きな違いはどちらかのテーブルにしか存在しないデータの取り扱い方。
「内部結合」= 両方にないと、レコードとして作成しない。(データがしっかり作られている前提で、検索結果に外部テーブルの情報を加える用途。)
「外部結合」= 片方に存在しなくてもレコードを作成する。(集計で0件といったデータを取得する場合に欲しい。)
内部結合(inner join)
<概要>
内部結合では左右それぞれのテーブルの指定したカラムの値が一致するレコードだけを取得します
二つのテーブルで両方にキーが存在するレコードだけ取得。
結合するテーブルでキーが一意でない場合は、マッチする数だけレコードが作成される。
<使いどころ>
テーブル1 社員マスタ (社員ID、社員名、部署ID)
テーブル2 部署マスタ (部署ID、部署名,,,,,)
とかの時に、社員を取得して一緒に部署名・部署情報を取りたいっていうときに社員マスタと部署マスターを内部結合すれば良い。
SELECT * FROM 社員マスター a
INNER JOIN 部署マスター b ONa.部署ID = b.部署ID;
外部結合
<概要>
外部結合は左右それぞれのテーブルの指定したカラムの値が一致するレコードに加えてどちらかのテーブルにしか存在しないデータについても取得します。
では、どちらのテーブルのデータを全て取得するのか、というのがLeftかRightかという所。LeftとRightを指定しない場合は、
LEFTはFROMで指定したテーブルの項目を主とする。
RightはJOINの後に記述したテーブルを主とする。
(外部結合 左)
SELECT * FROM 社員マスタ a
LEFT JOIN 部署マスタ b ON a.部署ID = b.部署ID;
(外部結合 右)
SELECT * FROM 社員マスタ a
RIGHT JOIN 部署マスタ b ON a.部署ID = b.部署ID;
関連記事
-
-
[mysql]なぜかindexが使われない、、、クォーテーションで囲っている?
whereの対象列にindexを張っている。 しかし、検索時にやたら重いことがあ …
-
-
[PHP][PDO]prepareでのバインド方法整理
データをstmtに渡す部分をちょくちょく待ちがえて混乱するのでメモ 参考:htt …
-
-
【ネットワーク】サブネットとかセグメントとか、ネットワークアドレスとか違い
全部同じっぽい。 ネットワークアドレス = ネットワークセグメント = セグメン …
-
-
[mysql][db]データ増大に伴う、データ表示処理・データ蓄積処理の変更履歴…
背景 ログの蓄積について、とりあえずでやっていたら処理がドンドンおもくなっていき …
-
-
【セキュリティ】マルウェアウェア、ウイルス、ボットの違い
Contents1 マルウェア2 ウイルス3 ボット(twitterのボットとも …