欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQL表間關(guān)聯(lián)查詢實例詳解

 更新時間:2025年04月16日 11:03:37   作者:實澤有之,無澤虛之  
本文主要講解SQL語句中常用的表間關(guān)聯(lián)查詢方式,包括:左連接(left join)、右連接(right join)、全連接(full join)、內(nèi)連接(inner join)、交叉連接(cross join)、自然連接(natural join),感興趣的朋友一起看看吧

簡介

本文主要講解SQL語句中常用的表間關(guān)聯(lián)查詢方式,包括:左連接(left join)、右連接(right join)、全連接(full join)、內(nèi)連接(inner join)、交叉連接(cross join)、自然連接(natural join)。

樣例準(zhǔn)備

以oracle數(shù)據(jù)庫為例,現(xiàn)在有兩張表TESTTABLEONE(簡稱a表)和TESTTABLETWO(簡稱b表),兩張表分別有id和name兩個字段,兩張表數(shù)據(jù)如下兩圖所示。

兩張表各有4條數(shù)據(jù),其中,a表和b表都有id01和id02這兩條數(shù)據(jù),a表有id03和id04兩條數(shù)據(jù)但b表沒有,b表有id05和id06兩條數(shù)據(jù)但a表沒有。

左外連接

左外連接簡稱左連,語法為left joinleft outer join,左表返回全部數(shù)據(jù),右表返回滿足連接條件的數(shù)據(jù),對于左表存在而右表不存在的數(shù)據(jù),右表對應(yīng)的字段返回NULL。

執(zhí)行以下語句:

--left join前面的a表就是左表,left join后面的b表就是右表,on的后面是連接條件,以下連接條件表示按id字段匹配。

select a.*,b.* from TESTTABLEONE a left join TESTTABLETWO b on a.id=b.id;

返回結(jié)果如下圖:

左表(a表)返回全部4條數(shù)據(jù),右表(b表)只返回了id01和id02,對于左表存在而右表不存在的id03和id04兩條數(shù)據(jù),左表返回全部數(shù)據(jù),而右表則返回NULL。

右外連接

右外連接簡稱右連,語法為right joinright outer join,右表返回全部數(shù)據(jù),左表返回滿足連接條件的數(shù)據(jù),對于右表存在而左表不存在的數(shù)據(jù),左表對應(yīng)的字段返回NULL。

執(zhí)行以下語句:

--right join前面的a表就是左表,right join后面的b表就是右表,on的后面是連接條件,以下連接條件表示按id字段匹配。

select a.*,b.* from TESTTABLEONE a right join TESTTABLETWO b on a.id=b.id;

返回結(jié)果如下圖:

右表(b表)返回全部4條數(shù)據(jù),左表(a表)只返回了id01和id02,對于右表存在而左表不存在的id05和id06兩條數(shù)據(jù),右表返回全部數(shù)據(jù),而左表則返回NULL。

全外連接

全外連接簡稱全連接,語法為full joinfull outer join,返回左表和右表的全部數(shù)據(jù),對于左表存在而右表不存在的數(shù)據(jù),右表對應(yīng)的字段返回NULL,對于右表存在而左表不存在的數(shù)據(jù),左表對應(yīng)的字段返回NULL。

執(zhí)行以下語句:

--full join連接a表和b表,on的后面是連接條件,以下連接條件表示按id字段匹配。

select a.*,b.* from TESTTABLEONE a full join TESTTABLETWO b on a.id=b.id;

返回結(jié)果如下圖:

左表和右表都返回全部4條數(shù)據(jù),對于左表存在而右表不存在的id03和id04兩條數(shù)據(jù),右表則返回NULL,對于右表存在而左表不存在的id05和id06兩條數(shù)據(jù),左表則返回NULL。

內(nèi)連接

內(nèi)連接語法為inner join,只返回左表和右表滿足連接條件的數(shù)據(jù),對于左表存在而右表不存在的數(shù)據(jù)以及右表存在而左表不存在的數(shù)據(jù),都不返回。

執(zhí)行以下語句:

--inner join連接a表和b表,on的后面是連接條件,以下連接條件表示按id字段匹配。

select a.*,b.* from TESTTABLEONE a inner join TESTTABLETWO b on a.id=b.id;

以下寫法的效果也相當(dāng)于內(nèi)連接:

--a表和b表直接用逗號隔開,把內(nèi)連接的條件寫到where條件里面。

select a.*,b.* from TESTTABLEONE a,TESTTABLETWO b where a.id=b.id;

返回結(jié)果如下圖:

只返回左表和右表都存在的數(shù)據(jù):id01和id02。

交叉連接

交叉連接語法為cross join,不帶連接條件,即沒有on的部分,返回左表和右表的笛卡爾積,即左表所有數(shù)據(jù)與右表所有數(shù)據(jù)組合。

執(zhí)行以下語句:

--cross join連接a表和b表,不帶連接條件

select a.*,b.* from TESTTABLEONE a cross join TESTTABLETWO b;

返回結(jié)果如下圖:

總共返回16條數(shù)據(jù),即左表4條數(shù)據(jù)乘以右表4條數(shù)據(jù)。

交叉連接可以加where條件,可以起到內(nèi)連接的效果。

執(zhí)行以下語句:

--cross join加上where條件(a.id=b.id),相當(dāng)于inner join。

select a.*,b.* from TESTTABLEONE a cross join TESTTABLETWO b where a.id=b.id;

返回結(jié)果如下圖:

只返回左表和右表都存在的數(shù)據(jù):id01和id02。

自然連接

自然連接語法為natural join,不帶顯示連接條件,會自動對左表和右表中名稱相同的字段進行連接,只返回左表和右表都存在的數(shù)據(jù),并且,對于兩張表中名稱相同的連接字段,不會重復(fù)顯示。

執(zhí)行以下語句:

--natural join不需要帶上顯示的連接條件(即on后面的部分)。

select * from TESTTABLEONE a natural join TESTTABLETWO b;

返回結(jié)果如下圖:

只返回左表和右表都存在的數(shù)據(jù),并且,作為自然連接條件的ID和NAME字段沒有重復(fù)顯示。

到此這篇關(guān)于SQL表間關(guān)聯(lián)查詢詳解的文章就介紹到這了,更多相關(guān)SQL關(guān)聯(lián)查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論