日々積み重ねろ。

何も積み重ねて来なかった私が何かを積みかねて行くブログ。主にIT系の技術・知識を書いて行きます。

【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;

※集合演算のときに重複するデータが取り除かれて表示される。