内部結合(INNER JOIN)SQLをつくる
複数テーブルを用いてSQLを構成する際に必要な結合(JOIN)方法には、
内部結合と(左/右)外部結合がある。
【内部結合(INNER JOIN)】
結合相手となるレコードが存在しない(またはNullである)場合
結合を中止しお互いのテーブル(レコード)は非表示となる。
【外部結合(LEFT JOIN/RIGHT JOIN)】
結合先テーブルに一致するレコードがなくても(Nullでも)
お互いのテーブル(レコード)は必ず表示される。
【注意点】
内部結合/外部結合の対応差によって影響を受けるのは
「レコード(行)が表示されるか、されないか」であり
設計したフィールド(レコードの見出し)自体は
データの有無に応じて消失することはない。
【今回のテーマ】
それぞれの放送話に登場するキャラクター名を記録していく。
【New】マスタテーブル「M_登場人物」を新設。
114話分のレコードを設けたが、1話1レコードの構成。
それぞれの放送話には複数名のキャラクターが登場する。
そこで、複数の「ゴジNo」フィールドを試みたがAccessに拒否られる。
1話に複数の登場人物を記録するためには、レコードを増やすしかない。
当たり前のことかもしれないが、こういうところで躓くのだ。
そこで、レコードを増やすための作業にかかる。
2行目に新しいレコードを追加しようとしても
114行目の下(最下段)に流されてしまう
1話から順にレコード増やそうにも新規作成は最終行とか
こういうとこホント、融通きかないよねAccess。
編集しにくいので、Excelに助けを求める。
「M_登場人物」テーブルの114行を一旦Excelにエクスポートし
エクスポート画面
Excelにデータを入力し、
「M_登場人物」テーブルへ再インポート。
インポート画面
スタートラインに立てるかはあなたにかかっています。
頼みましたよExcelさん。
無事にインポートできたようです。
☆7-7.SQL基礎学習⑦では、内部結合(INNER JOIN)
7-8.SQL基礎学習⑧では、左外部結合(LEFT JOIN)を整理します。
【内部結合(INNER JOIN)】
【例】
それぞれの放送話に登場するキャラクター名を記録していく。
ただし、114話のうち、データがあるのは70話まで。
内部結合の結果、データはどのように表示されるか?
SELECT
M_配信リスト.[話数], M_配信リスト.[タイトル],
M_登場人物.[ゴジNo],
M_名簿.[キャラクター名]
FROM
M_名簿
INNER JOIN
(M_配信リスト INNER JOIN M_登場人物 ON M_配信リスト.[話数] = M_登場人物.[話数])
ON
M_名簿.[ゴジNo] = M_登場人物.[ゴジNo];
SELECT句(表示するもの):
M_配信リスト からは「話数」と「タイトル」
M_登場人物 からは「ゴジNo」(中継地点のデータ)
M_名簿 からは「キャラクター名」
FROM句とINNER JOIN(繋ぎかたと条件):
まず「M_配信リスト INNER JOIN M_登場人物 ON ...」の部分で
どの話数に、どのゴジNoのキャラが出たか」情報を結合。
結果を M_名簿 と ON M_名簿.[ゴジNo] = M_登場人物.[ゴジNo] で結合し
ゴジNoの詳細情報を表示。
予想される結果(内部結合):
すべてのテーブルが「INNER JOIN(内部結合)」であるため
「配信リストに載っていて
かつ登場人物が登録されており
さらにその名簿情報も存在する」
条件が揃ったレコードのみが表示される。
【結果】
70話までのレコード情報が表示されています。