【SQL】MySQL複数のテーブル操作(結合)コマンドまとめ
■交差結合を行う
SELECT * FROM goods, hop;
■交差結合を行う
SELECT * FROM goods CROSS JOIN shop;
※明示的に交差結合を行うことを示すCROSS JOINも用意されてる。
■列名指定の交差結合
SELECT goods.goods_id, shop_name FROM goods CROSS JOIN shop;
※shop_nameはshopにのみ存在するデータなのでテーブル名は不要(書いてもよい)
■内部結合を行う
SELECT goods.goods_id, goods.goods_name, shop.shop_name FROM goods INNER JOIN shop ON goods.goods_id = shop.goods_id;
※結合キーである列goods_idを使って、2つのテーブルに共通して存在するデータを取り出している。
■内部結合を行って特定のデータだけを表示する
SELECT G.goods_name, S.shop_name, S.stock FROM goods AS G INNER JOIN shop AS S ON G.goods_id = S.goods_id WHERE G.goods_id = '0001';
■外部結合を行う(LEFT OUTER JOIN)
SELECT G.goods_name, S.shop_name, S.stock FROM goods G LEFT OUTER JOIN shop S ON G.goods_id = S.goods_id;
※テーブルgoodsに存在するすべての行を結合の対象にする。結合キーのデータが双方のテーブルに存在していれば、結合して表示。共通して存在しないデータもNULLとして表示する。
■外部結合を行う(RIGHT OUTER JOIN)
SELECT G.goods_name, S.shop_name, S.stock FROM goods G RIGHT OUTER JOIN shop S ON G.goods_id = S.goods_id;
※LEFT OUTER JOINでは、左側に書いたテーブルを外部結合の対象にしますが、RIGHT OUTER JOINでは、右側に書いたテーブルを外部結合の対象にする。
※一般的にはLEFT OUTER JOINの方を多く使います。
■2つのテーブルのデータを1つにまとめて表示する集合演算(UNION ALL)
SELECT goods_id, goods_name FROM shop_aoyama UNION ALL SELECT code, name FROM shop_nogizaka;
※2つのテーブルを1つにまとめることを集合演算と呼びます。注意事項としては、演算対象の列の数が同じである事、演算対象の列のデータ型が同じである事。
■2つのテーブルの重複するデータを除いて合算する集合演算(UNION)
SELECT goods_id, goods_name FROM shop_aoyama UNION SELECT code, name FROM shop_nogizaka;
※集合演算のときに重複するデータが取り除かれて表示される。