數(shù)據(jù)庫(kù)使用之union、union?all、各種join的用法區(qū)別解析
一、Union 和Union All
1、區(qū)別:
Union去重,而Union All不去重。
2、注意點(diǎn):
1.被合并的每個(gè)SELECT語句的列數(shù)、數(shù)據(jù)類型要相同(一一對(duì)應(yīng))。
2.使用Union時(shí),由于可去重性,可能導(dǎo)致數(shù)據(jù)丟失。
3.使用Union All時(shí),由于不可去重性,可能含重復(fù)的記錄。
3、具體舉例
【union】
【union all】
二、Join關(guān)鍵字的區(qū)別
1.left join和inner join區(qū)別
【長(zhǎng)話短說】inner join(內(nèi)連接)得到數(shù)據(jù)更少,直接剔除匹配不到的數(shù)據(jù)(剔除無關(guān)聯(lián)ID的數(shù)據(jù)),inner join = join。
【例子】如下圖所示,inner join不顯示紅框的數(shù)據(jù),left join會(huì)顯示
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)表?xiàng)l件寫法差異
--聯(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)系是:第一種=第二種>第三種 -- 因?yàn)榈诙N是A左聯(lián)篩選后的B表,左外保證A表完整性,和第一種一樣 -- 第三種是連接后再篩選,剔除的數(shù)據(jù)可能包含A表的數(shù)據(jù)
三、Cross Join
計(jì)算所有表的笛卡爾積:
總結(jié)
到此這篇關(guān)于數(shù)據(jù)庫(kù)使用之union、union all、各種join的用法區(qū)別解析的文章就介紹到這了,更多相關(guān)union、union all、join用法區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SQL Server自動(dòng)生成日期加數(shù)字的序列號(hào)
需要生成下面的序列號(hào),前半部分是yyyymmdd格式的年月日時(shí)間數(shù)字,后半部分則是每天都從1順序增長(zhǎng)的數(shù)字,位數(shù)要固定,中間不足的補(bǔ)0。2009-08-08Sql數(shù)據(jù)庫(kù)中去掉字段的所有空格小結(jié)篇
這篇文章主要介紹了Sql數(shù)據(jù)庫(kù)中去掉字段的所有空格小結(jié)篇,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05關(guān)于SQL中CTE(公用表表達(dá)式)(Common Table Expression)的總結(jié)
WITH AS短語,也叫做子查詢部分(subquery factoring),可以讓你做很多事情,定義一個(gè)SQL片斷,該SQL片斷會(huì)被整個(gè)SQL語句所用到2012-08-08MsSQL數(shù)據(jù)庫(kù)基礎(chǔ)與庫(kù)的基本操作方法
文章主要介紹了數(shù)據(jù)庫(kù)的基礎(chǔ)知識(shí),包括數(shù)據(jù)庫(kù)的定義、主流數(shù)據(jù)庫(kù)系統(tǒng)(如MySQL、PostgreSQL等)、數(shù)據(jù)庫(kù)操作(如創(chuàng)建、修改、刪除數(shù)據(jù)庫(kù),備份和恢復(fù)等)以及查看連接情況,感興趣的朋友一起看看吧2025-02-02SQL SERVER 中構(gòu)建執(zhí)行動(dòng)態(tài)SQL語句的方法
這篇文章主要介紹了SQL SERVER 中構(gòu)建執(zhí)行動(dòng)態(tài)SQL語句的方法,需要的朋友可以參考下2017-06-06SQL Server誤區(qū)30日談 第15天 CheckPoint只會(huì)將已提交的事務(wù)寫入磁盤
這個(gè)誤區(qū)是由于太多人對(duì)日志和恢復(fù)系統(tǒng)缺少全面的了解而存在已久。CheckPoint會(huì)將自上次CheckPoint以來所有在內(nèi)存中改變的頁(yè)寫回磁盤(譯者注:也就是臟頁(yè)),或是在上一個(gè)CheckPoint讀入內(nèi)存的臟頁(yè)寫入磁盤2013-01-01