テーブルの足し算と引き算
2つ以上のテーブルを使う場合のSQL文を学ぶ。テーブルのレコード同士を足したり引いたりするのが集合演算子。次の集合演算子についてまとめる。
UNION
:テーブルの足し算INTERSECT
:テーブルの共通部部分の選択EXCEPT
:レコードの引き算
次のテーブルに対して色々操作してみる。
UNION
:テーブルの足し算
UNION
はテーブルの『和集合』をとる。ベン図で示すと次の通り。
コマンドはSELECT
文をUNION
でつなげてあげると和集合になる。
ポイントとしては、集合演算子ではデフォルトだと重複行は排除される。排除しない場合は、ALL
オプションをつける。
INETRSECT
:テーブルのAND
INTERSECT
はテーブルの『積集合』をとる。ベン図で示すと次の通り。
コマンドはUNION
と同様。
EXCEPT
:レコードの引き算
EXCEPT
はテーブルの『差集合』をとる。ベン図で示すと次の通り。ポイントはどちらから引くかにより結果が異なるという点。
コマンドはUNION
と同様。
テーブルを列方向に連結する
結合(JOIN
)は別テーブルから列を持ってきて、列同士を結合する集合演算。UNION
が行方向の結合で、JOIN
は列方向の結合。
結合の基本は次の3つ。
- 内部結合:
INNER JOIN
- 外部結合:
OUTER JOIN
- クロス結合:
CROSS JOIN
次のテーブルに対して色々操作してみる。
2つのテーブルのキーワードを比較すると次のようになっている。
キーワード名 | Shohin | TenpoShohin |
---|---|---|
商品ID | ○ | ○ |
商品名 | ○ | |
商品分類 | ○ | |
販売単価 | ○ | |
仕入単価 | ○ | |
登録日 | ○ | |
店舗ID | ○ | |
店舗名 | ○ | |
数量 | ○ |
結合を使って、それぞれのテーブルのデータを使って欲しいデータ形式にする。
内部結合
内部結合はテーブルの内部だけから情報を持ってくるため内部と言われる。
内部結合を実行すると下記のような感じになる。
外部結合
外部結合は、元のテーブルにない情報を(テーブル外部から)結果に持ってくるという意味で、外部結合と言われる。
外部結合を実行すると下記のような感じになる。
クロス結合
クロス結合は、結合するテーブル同士の直積(2つのテーブルのレコードについて、全ての組み合わせを作る結合)。あまり実務で使うことはないらしいが、内部結合はクロス結合の一部。逆に外部結合はクロス結合でない部分も持つ。