Home実験室 − No.0073


        No.0073(SQL)
        集合演算子(UNION、MINUS、INTERSECT)

■環境
  □OS: Windows XP Professional SP3
  □Oracle: Oracle Database 11g R2 (Standard)
  □OSログインユーザ: ORA_DBAグループ
  □Oracleユーザ: dicdic(実験用ユーザー) → 実験環境構築スクリプト

■実験
  0. 実験ユーザー「dicdic」でコネクトする。

SQL> conn dicdic/Oracle11g 接続されました。 SQL>



  1.【集合演算子の種類】
  UNION ALL → A∪B + A∩B
  UNION   → A∪B
  MINUS   → A∪B−B
  INTERSECT → A∩B



  2. 「サーフィンサークル」と「軽音楽部」に着目し、集合演算子について考えよう。

SQL> Select 氏名,部活動 from TT02_所属部活動 NATURAL JOIN TT01_学生 NATURAL JOIN TM07_部活動 2 WHERE 部活動コード=21 OR 部活動コード=25 ORDER BY 部活動コード,学生番号; 氏名 部活動 ---------------------------------------- ------------------------------ 平川 純 サーフィンサークル 佐久間 音羽 サーフィンサークル 浜口 清助 サーフィンサークル 水田 成美 サーフィンサークル 小栗 幸男 サーフィンサークル 三宅 講一 サーフィンサークル 赤井 達 サーフィンサークル 宮下 哲郎 サーフィンサークル 中尾 勝三 サーフィンサークル 長尾 基良 サーフィンサークル 鹿野 亀次郎 サーフィンサークル 松原 雅彦 サーフィンサークル 安川 啓吾 サーフィンサークル 松山 功 サーフィンサークル 村井 優美 サーフィンサークル 勝又 優 サーフィンサークル 市原 廣祐 サーフィンサークル 和田 繁 サーフィンサークル 竹下 愛里 サーフィンサークル 毛利 幸三郎 サーフィンサークル 横山 幸吉 サーフィンサークル 前島 雅 サーフィンサークル 安永 葉菜 サーフィンサークル 尾形 正一 サーフィンサークル 川西 華蓮 サーフィンサークル 福山 英三 サーフィンサークル 齋藤 信彦 サーフィンサークル 田所 昭子 サーフィンサークル 岸 利昭 サーフィンサークル 坂元 美和 サーフィンサークル 竹内 弥生 サーフィンサークル 紺野 正三郎 サーフィンサークル 神戸 充 サーフィンサークル 北沢 恭之 サーフィンサークル 川崎 一仁 サーフィンサークル 野村 金之助 サーフィンサークル 野田 成光 サーフィンサークル 溝口 陽和 サーフィンサークル 牧野 直吉 サーフィンサークル 谷 武英 軽音楽部 荻野 匠 軽音楽部 神保 忠義 軽音楽部 成瀬 真樹 軽音楽部 上村 雅人 軽音楽部 浅野 孝三 軽音楽部 宮下 清吉 軽音楽部 木田 勝美 軽音楽部 堀 金造 軽音楽部 角 清治 軽音楽部 山根 美枝子 軽音楽部 蛭田 花音 軽音楽部 門脇 研一 軽音楽部 永山 三平 軽音楽部 松原 雅彦 軽音楽部 黒田 素子 軽音楽部 橋口 新一 軽音楽部 露木 友治 軽音楽部 稲村 陸 軽音楽部 千田 正人 軽音楽部 久野 俊幸 軽音楽部 野崎 雅雄 軽音楽部 鮫島 晃 軽音楽部 橋本 鑑 軽音楽部 西口 真幸 軽音楽部 宮本 悟 軽音楽部 梅沢 慎一 軽音楽部 梅木 佳音 軽音楽部 田所 昭子 軽音楽部 橋爪 秀一 軽音楽部 日高 渉 軽音楽部 中井 鑑 軽音楽部 長島 一寿 軽音楽部 江頭 雅裕 軽音楽部 前島 哲雄 軽音楽部 相沢 潔 軽音楽部 小菅 蓮 軽音楽部 前島 司 軽音楽部 尾崎 貞次 軽音楽部 奥 拓也 軽音楽部 79行が選択されました。 SQL>



  3. 【UNION ALL】
  「UNION ALL」を使うと、サーフィンサークルと軽音楽部を合わせた一覧が出てくる。
  この際、掛け持ちの二人(松原 雅彦、田所 昭子)が2回ずつ登場していることに気をつける。

SQL> Select 氏名,部活動 from TT02_所属部活動 NATURAL JOIN TT01_学生 NATURAL JOIN TM07_部活動 WHERE 部活動コード=21 2 UNION ALL 3 Select 氏名,部活動 from TT02_所属部活動 NATURAL JOIN TT01_学生 NATURAL JOIN TM07_部活動 WHERE 部活動コード=25; 氏名 部活動 ---------------------------------------- ------------------------------ 安永 葉菜 サーフィンサークル 安川 啓吾 サーフィンサークル 稲村 陸 軽音楽部 永山 三平 軽音楽部 奥 拓也 軽音楽部 横山 幸吉 サーフィンサークル 荻野 匠 軽音楽部 角 清治 軽音楽部 岸 利昭 サーフィンサークル 久野 俊幸 軽音楽部 宮下 清吉 軽音楽部 宮下 哲郎 サーフィンサークル 宮本 悟 軽音楽部 橋口 新一 軽音楽部 橋爪 秀一 軽音楽部 橋本 鑑 軽音楽部 江頭 雅裕 軽音楽部 溝口 陽和 サーフィンサークル 黒田 素子 軽音楽部 紺野 正三郎 サーフィンサークル 佐久間 音羽 サーフィンサークル 坂元 美和 サーフィンサークル 鮫島 晃 軽音楽部 三宅 講一 サーフィンサークル 山根 美枝子 軽音楽部 市原 廣祐 サーフィンサークル 鹿野 亀次郎 サーフィンサークル 勝又 優 サーフィンサークル 小栗 幸男 サーフィンサークル 小菅 蓮 軽音楽部 松原 雅彦 サーフィンサークル 松原 雅彦 軽音楽部 松山 功 サーフィンサークル 上村 雅人 軽音楽部 神戸 充 サーフィンサークル 神保 忠義 軽音楽部 水田 成美 サーフィンサークル 成瀬 真樹 軽音楽部 西口 真幸 軽音楽部 赤井 達 サーフィンサークル 千田 正人 軽音楽部 川崎 一仁 サーフィンサークル 川西 華蓮 サーフィンサークル 浅野 孝三 軽音楽部 前島 雅 サーフィンサークル 前島 司 軽音楽部 前島 哲雄 軽音楽部 相沢 潔 軽音楽部 村井 優美 サーフィンサークル 谷 武英 軽音楽部 竹下 愛里 サーフィンサークル 竹内 弥生 サーフィンサークル 中井 鑑 軽音楽部 中尾 勝三 サーフィンサークル 長島 一寿 軽音楽部 長尾 基良 サーフィンサークル 田所 昭子 サーフィンサークル 田所 昭子 軽音楽部 日高 渉 軽音楽部 梅沢 慎一 軽音楽部 梅木 佳音 軽音楽部 尾形 正一 サーフィンサークル 尾崎 貞次 軽音楽部 蛭田 花音 軽音楽部 浜口 清助 サーフィンサークル 福山 英三 サーフィンサークル 平川 純 サーフィンサークル 北沢 恭之 サーフィンサークル 牧野 直吉 サーフィンサークル 堀 金造 軽音楽部 毛利 幸三郎 サーフィンサークル 木田 勝美 軽音楽部 門脇 研一 軽音楽部 野崎 雅雄 軽音楽部 野村 金之助 サーフィンサークル 野田 成光 サーフィンサークル 露木 友治 軽音楽部 和田 繁 サーフィンサークル 齋藤 信彦 サーフィンサークル 79行が選択されました。 SQL>



  4. 【UNION】
  「UNION ALL」を「UNION」に変えると、重複を省いてくれる....はずなのだが....
  省かれていない。相変わらず79件となる。これは、部活動が併記されているためで、
  「氏名と部活動の組み合わせ」という見方をすると、79件すべてがユニークなためだ。

SQL> Select 氏名,部活動 from TT02_所属部活動 NATURAL JOIN TT01_学生 NATURAL JOIN TM07_部活動 WHERE 部活動コード=21 2 UNION 3 Select 氏名,部活動 from TT02_所属部活動 NATURAL JOIN TT01_学生 NATURAL JOIN TM07_部活動 WHERE 部活動コード=25; 氏名 部活動 ---------------------------------------- ------------------------------ 安永 葉菜 サーフィンサークル 安川 啓吾 サーフィンサークル 稲村 陸 軽音楽部 永山 三平 軽音楽部 奥 拓也 軽音楽部 横山 幸吉 サーフィンサークル 荻野 匠 軽音楽部 角 清治 軽音楽部 岸 利昭 サーフィンサークル 久野 俊幸 軽音楽部 宮下 清吉 軽音楽部 宮下 哲郎 サーフィンサークル 宮本 悟 軽音楽部 橋口 新一 軽音楽部 橋爪 秀一 軽音楽部 橋本 鑑 軽音楽部 江頭 雅裕 軽音楽部 溝口 陽和 サーフィンサークル 黒田 素子 軽音楽部 紺野 正三郎 サーフィンサークル 佐久間 音羽 サーフィンサークル 坂元 美和 サーフィンサークル 鮫島 晃 軽音楽部 三宅 講一 サーフィンサークル 山根 美枝子 軽音楽部 市原 廣祐 サーフィンサークル 鹿野 亀次郎 サーフィンサークル 勝又 優 サーフィンサークル 小栗 幸男 サーフィンサークル 小菅 蓮 軽音楽部 松原 雅彦 サーフィンサークル 松原 雅彦 軽音楽部 松山 功 サーフィンサークル 上村 雅人 軽音楽部 神戸 充 サーフィンサークル 神保 忠義 軽音楽部 水田 成美 サーフィンサークル 成瀬 真樹 軽音楽部 西口 真幸 軽音楽部 赤井 達 サーフィンサークル 千田 正人 軽音楽部 川崎 一仁 サーフィンサークル 川西 華蓮 サーフィンサークル 浅野 孝三 軽音楽部 前島 雅 サーフィンサークル 前島 司 軽音楽部 前島 哲雄 軽音楽部 相沢 潔 軽音楽部 村井 優美 サーフィンサークル 谷 武英 軽音楽部 竹下 愛里 サーフィンサークル 竹内 弥生 サーフィンサークル 中井 鑑 軽音楽部 中尾 勝三 サーフィンサークル 長島 一寿 軽音楽部 長尾 基良 サーフィンサークル 田所 昭子 サーフィンサークル 田所 昭子 軽音楽部 日高 渉 軽音楽部 梅沢 慎一 軽音楽部 梅木 佳音 軽音楽部 尾形 正一 サーフィンサークル 尾崎 貞次 軽音楽部 蛭田 花音 軽音楽部 浜口 清助 サーフィンサークル 福山 英三 サーフィンサークル 平川 純 サーフィンサークル 北沢 恭之 サーフィンサークル 牧野 直吉 サーフィンサークル 堀 金造 軽音楽部 毛利 幸三郎 サーフィンサークル 木田 勝美 軽音楽部 門脇 研一 軽音楽部 野崎 雅雄 軽音楽部 野村 金之助 サーフィンサークル 野田 成光 サーフィンサークル 露木 友治 軽音楽部 和田 繁 サーフィンサークル 齋藤 信彦 サーフィンサークル 79行が選択されました。 SQL>



  5. 【UNION(再)】
  では、Selectする列を氏名だけにしてみるとどうだろう。
  結果は77件数となり、掛け持ちの二人の重複が省かれていることが分かる。

SQL> Select 氏名 from TT02_所属部活動 NATURAL JOIN TT01_学生 NATURAL JOIN TM07_部活動 WHERE 部活動コード=21 2 UNION 3 Select 氏名 from TT02_所属部活動 NATURAL JOIN TT01_学生 NATURAL JOIN TM07_部活動 WHERE 部活動コード=25; 氏名 ---------------------------------------- 安永 葉菜 安川 啓吾 稲村 陸 永山 三平 奥 拓也 横山 幸吉 荻野 匠 角 清治 岸 利昭 久野 俊幸 宮下 清吉 宮下 哲郎 宮本 悟 橋口 新一 橋爪 秀一 橋本 鑑 江頭 雅裕 溝口 陽和 黒田 素子 紺野 正三郎 佐久間 音羽 坂元 美和 鮫島 晃 三宅 講一 山根 美枝子 市原 廣祐 鹿野 亀次郎 勝又 優 小栗 幸男 小菅 蓮 松原 雅彦 松山 功 上村 雅人 神戸 充 神保 忠義 水田 成美 成瀬 真樹 西口 真幸 赤井 達 千田 正人 川崎 一仁 川西 華蓮 浅野 孝三 前島 雅 前島 司 前島 哲雄 相沢 潔 村井 優美 谷 武英 竹下 愛里 竹内 弥生 中井 鑑 中尾 勝三 長島 一寿 長尾 基良 田所 昭子 日高 渉 梅沢 慎一 梅木 佳音 尾形 正一 尾崎 貞次 蛭田 花音 浜口 清助 福山 英三 平川 純 北沢 恭之 牧野 直吉 堀 金造 毛利 幸三郎 木田 勝美 門脇 研一 野崎 雅雄 野村 金之助 野田 成光 露木 友治 和田 繁 齋藤 信彦 77行が選択されました。 SQL>



  6. 【MINUS】
  「MINUS」は、掛け持ちの二人をハブにしたい時に使える。
  サーフィンサークルの人数から掛け持ちの二人を除いた37行が返される。

SQL> Select 氏名,部活動 from TT02_所属部活動 NATURAL JOIN TT01_学生 NATURAL JOIN TM07_部活動 WHERE 部活動コード=21 2 MINUS 3 Select 氏名,部活動 from TT02_所属部活動 NATURAL JOIN TT01_学生 NATURAL JOIN TM07_部活動 WHERE 部活動コード=25; 氏名 ---------------------------------------- 安永 葉菜 安川 啓吾 横山 幸吉 岸 利昭 宮下 哲郎 溝口 陽和 紺野 正三郎 佐久間 音羽 坂元 美和 三宅 講一 市原 廣祐 鹿野 亀次郎 勝又 優 小栗 幸男 松山 功 神戸 充 水田 成美 赤井 達 川崎 一仁 川西 華蓮 前島 雅 村井 優美 竹下 愛里 竹内 弥生 中尾 勝三 長尾 基良 尾形 正一 浜口 清助 福山 英三 平川 純 北沢 恭之 牧野 直吉 毛利 幸三郎 野村 金之助 野田 成光 和田 繁 齋藤 信彦 37行が選択されました。 SQL>



  7. 【INTERSECT】
  「INTERSECT」は、掛け持ちの2人をあぶりだす。

SQL> Select 氏名 from TT02_所属部活動 NATURAL JOIN TT01_学生 NATURAL JOIN TM07_部活動 WHERE 部活動コード=21 2 INTERSECT 3 Select 氏名 from TT02_所属部活動 NATURAL JOIN TT01_学生 NATURAL JOIN TM07_部活動 WHERE 部活動コード=25; 氏名 ---------------------------------------- 松原 雅彦 田所 昭子 SQL>





    【PR】    Oracle実験室監修  『Oracleアーキテクチャ鳥瞰図』 PDF  (Oracleのアーキテクチャを一目で俯瞰できるイラスト)  


Home実験室 − No.0073

© 2011-2011   Amateur Laboratory of ORACLE
inserted by FC2 system