數(shù)據(jù)庫使用之union、union?all、各種join的用法區(qū)別解析
一、Union 和Union All
1、區(qū)別:
Union去重,而Union All不去重。
2、注意點:
1.被合并的每個SELECT語句的列數(shù)、數(shù)據(jù)類型要相同(一一對應)。
2.使用Union時,由于可去重性,可能導致數(shù)據(jù)丟失。
3.使用Union All時,由于不可去重性,可能含重復的記錄。
3、具體舉例
【union】

【union all】

二、Join關(guān)鍵字的區(qū)別
1.left join和inner join區(qū)別

【長話短說】inner join(內(nèi)連接)得到數(shù)據(jù)更少,直接剔除匹配不到的數(shù)據(jù)(剔除無關(guān)聯(lián)ID的數(shù)據(jù)),inner join = join。
【例子】如下圖所示,inner join不顯示紅框的數(shù)據(jù),left join會顯示
SELECT * FROM student s LEFT JOIN score sc on s.id=sc.studentid SELECT * FROM student s INNER JOIN score sc on s.id=sc.studentid

【查詢匹配失敗的數(shù)據(jù)】
SELECT * FROM student s LEFT JOIN score sc on s.id=sc.studentid WHERE sc.id is null --查詢從表ID為空的數(shù)據(jù),就是聯(lián)表匹配不到的數(shù)據(jù)
2.聯(lián)表條件寫法差異
--聯(lián)表:只要滿足關(guān)聯(lián)關(guān)系,B.IsDeleted是什么則返回什么 SELECT * FROM TABLEA A LEFT JOIN TABLEB B ON A.ID=B.EXID --聯(lián)表不篩選:只要滿足關(guān)聯(lián)關(guān)系,B.IsDeleted≠0 則返回null SELECT * FROM TABLEA A LEFT JOIN TABLEB B ON A.ID=B.EXID AND B.IsDeleted=0 --聯(lián)表且篩選:只要滿足關(guān)聯(lián)關(guān)系,B.IsDeleted≠0 則返回null,假如是null則被where過濾掉 SELECT * FROM TABLEA A LEFT JOIN TABLEB B ON A.ID=B.EXID WHERE B.IsDeleted=0 --【結(jié)論】數(shù)據(jù)返回多少關(guān)系是:第一種=第二種>第三種 -- 因為第二種是A左聯(lián)篩選后的B表,左外保證A表完整性,和第一種一樣 -- 第三種是連接后再篩選,剔除的數(shù)據(jù)可能包含A表的數(shù)據(jù)
三、Cross Join
計算所有表的笛卡爾積:

總結(jié)
到此這篇關(guān)于數(shù)據(jù)庫使用之union、union all、各種join的用法區(qū)別解析的文章就介紹到這了,更多相關(guān)union、union all、join用法區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
檢測SqlServer數(shù)據(jù)庫是否能連接的小技巧
這篇文章主要介紹了檢測SqlServer數(shù)據(jù)庫是否能連接的小技巧,本文使用UDL文件的形式實現(xiàn)這個小方法,需要的朋友可以參考下2015-02-02
SqlServer數(shù)據(jù)庫創(chuàng)建用戶只賦予某個視圖權(quán)限
這篇文章主要給大家介紹了關(guān)于SqlServer數(shù)據(jù)庫創(chuàng)建用戶只賦予某個視圖權(quán)限的相關(guān)資料,在SQL Server中,要創(chuàng)建用戶并為其授權(quán)表可以通過以下步驟完成,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2024-03-03

