[iT鐵人賽Day17]SQL語法-集合運算Union 、Intersect 、Except

文章推薦指數: 80 %
投票人數:10人

集合運算查詢. 在資料庫執行多個資料表查詢時,除了使用Join的合併查詢外,也可以使用集合運算:聯集Union、交集Intersect、差集Except來執行兩個資料表的合併。

第11屆iThome鐵人賽 DAY 17 2 ModernWeb 淺談資料庫&ASP.net&C#入門系列第 17篇 [iT鐵人賽Day17]SQL語法-集合運算Union、Intersect、Except 11th鐵人賽 sqlserver sql 資料庫 高雄火箭隊的前後端小夥伴們 捲毛蔡 團隊火箭隊 2019-09-1811:23:0912517瀏覽 集合運算查詢 在資料庫執行多個資料表查詢時,除了使用Join的合併查詢外,也可以使用集合運算:聯集Union、交集Intersect、差集Except來執行兩個資料表的合併。

下面會用這兩個資料表來當作集合範例 student資料表: Teacher資料表: 其中兩個資料表中,有些人分別是學生又同時是老師(Mike和新西亞)。

集合運算查詢分為三種: 1.聯集UNION: 將2個資料表的紀錄垂直結合再一起,有重複的資料只會顯示其中一筆,UNION與JOIN不同的地方在於,JOIN是作橫向結合(合併多個資料表的各欄位);而UNION則是作垂直結合(合併多個資料表中的紀錄)。

SQL範例: 現在要將[student]與[Teacher]兩個資料表使用聯集運算取出全部學生及老師的名字,SQL如下: select學生as姓名fromstudent union select老師fromTeacher 全部學生及老師都有被顯示出來,不過在[student]與[Teacher]裡都有的新西亞以及Mike學生和老師,在查詢結果中只會出現一筆,而不會重複出現相同的姓名。

而UNION查詢的資料集欄位名稱,通常會依據第一個Select所查詢的欄位來當名稱,不過上述SQL語法使用as姓名來代替欄位名稱學生了。

結果如下圖: Unionall unionall與union的差異在於,union會將重複的自動踢掉,而unionall將會保留重複的。

也就是說假如想要新西亞和Mike在[student]與[Teacher]的兩個資料庫內的資料都要出現,那就需要使用Unionall,顯示結果就會重複出現新西亞與Mike。

如下圖所示: select學生as姓名fromstudent unionall select老師fromTeacher 2.交集INTERSECT: 將兩個資料表相同的紀錄取出來,且有重複的資料只會顯示其中一筆。

SQL範例: 現在要將[student]與[Teacher]兩個資料表使用交集運算取出兩個資料表是老師又同時是學生的姓名,SQL如下: select學生as姓名fromstudent intersect select老師fromTeacher 結果顯示兩個資料表都有的相同姓名的Mike及新西亞,且也都各只顯示一筆。

結果如下圖: 3.差集EXCEPT: 只取出第一個select指令但是不存在第二個select指令的紀錄。

SQL範例 現在將[student]與[Teacher]兩個資料表使用差集運算取出student資料表的學生姓名,但不能同時也是老師的學生姓名(只取出純學生,不包含同時也是老師的學生XD),有點像leftjoin。

SQL如下: select學生as姓名fromstudent except select老師fromTeacher 顯示結果只出現student的學生姓名,不過顯示結果的姓名不會有在Teacher資料表內的姓名,所以在兩個資料表都有的Mike和新西亞就不會出現(Bye~)。

結果如下圖: 另外差集EXCEPT及只適用於SQLServer,在Oracle的交集則是使用MINUS,使用方法與EXCEP一樣;而MySQL不支援EXCEPT及MINUS,則要使用leftjoin。

詳細介紹可以看這個網頁。

留言 追蹤 檢舉 上一篇 [iT鐵人賽Day16]SQL語法-表與表之間的關係Join也可使用小精靈產生Join 下一篇 [iT鐵人賽Day18]SQL語法-排序Orderby 系列文 淺談資料庫&ASP.net&C#入門 共36篇 目錄 RSS系列文 訂閱系列文 103人訂閱 32 [iT鐵人賽Day32]請出示驗證票(Ticket),才能入場買餅乾(Cookie)吃唷!(FormsAuthentication授權驗證會員登入) 33 [iT鐵人賽Day33]SQLServer暫存表(@###)與CTE(CommonTableExpressions) 34 [iT鐵人賽Day34]SQLServer實用的排序函數ROW_NUMBER() 35 [iT鐵人賽Day35]ASP.NET-使用者控制項-分頁的用法 36 [iT鐵人賽Day36]SQLServer找出最新日期的所有資料 完整目錄 尚未有邦友留言 立即登入留言 iT邦幫忙鐵人賽 參賽組數 1087組 團體組數 52組 累計文章數 20477篇 完賽人數 572人 鐵人賽最新文章 .NetCoreWebApi_筆記21_Swagger及OpenAPI介紹與配置使用方式_API管理與測試探討 .NetCoreWebApi_筆記20_api結合ADO.NET資料庫操作part8_新聞文章查詢 .NetCoreWebApi_筆記19_api結合ADO.NET資料庫操作part7_新聞文章的編輯更新與刪除 .NetCoreWebApi_筆記18_api結合ADO.NET資料庫操作part6_新聞文章表格陳列查詢 .NetCoreWebApi_筆記17_api結合ADO.NET資料庫操作part5_新聞文章新增_新聞類別元素透過API綁定方式 [Bonus系列]-使用useCallback&useMemo的正確時機是什麼? 大盤到底能不能攻上一萬八?? gotodie?那個goto到底能不能用啊? 2021/12/12更新 予焦啦!一夢終須醒...... 前往鐵人賽 技術推廣專區 [Day2]抓取每日收盤價 [Day1]基本工具安裝 利用python取得永豐銀行API的Nonce [Day03]tinyML開發板介紹 永豐金融API測試員 [Day01]在享受tinyML這道美食之前 [Day3]使用ta-lib製作指標 [Day4]函數打包與買進持有報酬率試算 計算API所需要的參數:HashID 計算API所需要的參數:IV 前往鐵人賽 熱門問題 公司想要架設一個網購物站,但是不知道要怎麼規劃預算 正要準備開始上CCNA… 無網際網路時,請問兩台電腦如何‘無線’遠端連線 遠端監控電腦效能 如何設定一台電腦,有線網卡走公司內網,無線網卡走外網,同時運行? 關於網頁顯示問題 mssql資料庫搬移時,怎樣出所有需要的資料會比較好? 請問有在做關貿資料串接的資訊公司嗎? NAS、雲端儲存空間、隨身硬碟差別在那?怎麼選? 照片辨識比對軟體開發 IT邦幫忙 站方公告 【2021iThome鐵人賽】登登登!究竟獎落誰家,2021iThome鐵人賽得獎名單正式揭曉 熱門tag 看更多 13th鐵人賽 12th鐵人賽 11th鐵人賽 鐵人賽 2019鐵人賽 2018鐵人賽 javascript 2017鐵人賽 windows php python windowsserver linux c# 程式設計 資訊安全 css vue.js sql 分享 熱門回答 正要準備開始上CCNA… 遠端監控電腦效能 如何設定一台電腦,有線網卡走公司內網,無線網卡走外網,同時運行? NAS、雲端儲存空間、隨身硬碟差別在那?怎麼選? 無網際網路時,請問兩台電腦如何‘無線’遠端連線 照片辨識比對軟體開發 關於網頁顯示問題 公司想要架設一個網購物站,但是不知道要怎麼規劃預算 mssql資料庫搬移時,怎樣出所有需要的資料會比較好? DefaultDomainPolicy密碼複雜度 熱門文章 大盤到底能不能攻上一萬八?? [Bonus系列]-使用useCallback&useMemo的正確時機是什麼? 【教學】簡單救回電腦資料 為了轉生而點技能-JavaScript,day23(Promise介紹 12.MYSQL淺談NULL 數位簽章(digitalsignature) D9.學習基礎C、C++語言 什麼是功能分解? 7.MYSQL表格程式語法 javascript基礎功能1 一週點數排行 更多點數排行 海綿寶寶(antijava) ㊣浩瀚星空㊣(yoching) 小山丘(a243318490) 居然解出來了(partyyaya) ccenjor(ccenjor) 純真的人(jer5173) fillano(fillano) Gary(mosbbs) PPTaiwan(Pochengtaiwan) souda(souda) × At 輸入對方的帳號或暱稱 Loading 找不到結果。

標記 {{result.label}} {{result.account}} 關閉



請為這篇文章評分?