集合演算
UNION レコードの足し算
-- 二つのselectの結果が合わせて出力される select id, price from soft union select id, price from soft2; -- ※注意点 -- 列の数を揃えること -- 列のデータ型を揃えること -- order byは全体で一つだけ -- where と order byを使う select id, price from soft where price > 200 union select id, price from soft2 where id <> '4' order by price; -- ALL で重複行を残す -- union の後にallをつけると各テーブルのデータが重複しても取得する select id, price from soft union all select id, price from soft2;
INTERSECT テーブルの共通部分
-- 各テーブルの一致したデータのみ出力 select id, price from soft intersect select id, price from soft2 order by price;
EXCEPT レコードの引き算
-- 前者のテーブルから後者でも一致するレコード以外取得する。(前者レコード - 後者レコード = 結果) select id, price from soft except select id, price from soft2 order by price; -- 注意点 -- 引き算のためどちらのテーブルを先に書くかで結果が変わるので注意
JOIN 結合
テーブルの列を連結する
-- INNERJOIN 内部結合 select s.name, s.price, c.name from soft as s inner join category as c on s.category = c.category_id; -- where を使う select s.name, s.price, c.name from soft as s inner join category as c on s.category = c.category_id where s.id = '2'; -- OUTER JOIN 外部結合 -- outer join の前にleft またはrightをつける select s.name, s.price, c.name from soft as s left outer join category as c on s.category = c.category_id; -- 注意点 -- INNER JOIN(内部結合) と OUTER JOIN(外部結合)の違い -- 内部結合では2つのテーブルに存在しているデータを取得する -- 外部結合では片方のテーブルのデータを全て取得する -- 例えば外部結合ではデータがNULLでも取得する -- LEFT と RIGHT の違い (OUTER JOIN) -- LEFT か RIGHT のテーブル指定でどちらのテーブルをマスタにするか決める。 -- 機能的な差はないのでどちらでも良い
クロス結合
-- データ数 ✖️ データ数 が結果として取得する -- 2つのテーブルのレコード全ての組み合わせを作る select s.name, s.price, c.name from soft as s cross join category as c ;