三張表關(guān)聯(lián)查詢(xún)

在蘄春等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶(hù)提供網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需規(guī)劃網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),營(yíng)銷(xiāo)型網(wǎng)站建設(shè),外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè),蘄春網(wǎng)站建設(shè)費(fèi)用合理。
使用場(chǎng)景:A\B\C 三張表,現(xiàn)在要查詢(xún)并展示A表和C表中的某些字段,但是A、C兩表沒(méi)有相同字段,無(wú)法關(guān)聯(lián),此時(shí)有B表恰好有兩個(gè)字段,一個(gè)字段和A表一個(gè)字段相同,一個(gè)字段和C表一個(gè)字段相同,我們稱(chēng)B表為“中間表”,因此通過(guò)B表把A、C表關(guān)聯(lián)起來(lái)
SELECT A1,A2,C1,C2 --展示A表中的A1\A2字段和C表中的C1\C2
FROM B --中間表
INNER JOIN A ON A.A1 = B.B1 --A表中的與B表中相同的字段
INNER JOIN C ON C.C1 = B.B1 --C表中的與B表中相同的字段
where xxxxx ---條件你自己按照需求來(lái)加,沒(méi)有條件就不寫(xiě)where了
select?*?--*換成你要查的前綴+.+字段名(類(lèi)似這個(gè)a.id,就代表storespeciffication?表的ID字段)
from?storespeciffication?a,storespecifficationvalue?b,storeinfo?c?where?a.id=b.storeinfoid?and?b.storeinfoid=c.id
SQL使用(一)——聯(lián)合查詢(xún)
1.聯(lián)合查詢(xún)分類(lèi)
內(nèi)連接(inner Join 或 Join)
外連接(outer Join)
左外連接(left outer Join 或 left Join)
右外連接(right outer Join 或 right Join)
全外連接(full outer Join 或 full Join)
交叉連接 (cross Join)
結(jié)果集鏈接 (union 和 union all)
2.聯(lián)合查詢(xún)介紹
相關(guān)數(shù)據(jù)表如下:
A表
B表
C表
2.1內(nèi)連接(Inner Join)
內(nèi)連接:僅顯示兩個(gè)表中匹配行,即兩表中都有才顯示。
SQL如下:
SELECT? A.id? AS? AID,? ? A.content? AS? AContent,? ? B.id? AS? BID,? ? B.content? AS? BContent? FROM? A? INNERJOIN? B? ON? (A.id = B.id);
1
2
3
4
5
6
7
8
查詢(xún)結(jié)果:
由查詢(xún)結(jié)果可以看出,內(nèi)連接根據(jù)連接條件(A.id=B.id)查詢(xún)出了A、B兩表中都存在的數(shù)據(jù)信息。2個(gè)表的聯(lián)合查詢(xún)結(jié)果如此,那么3個(gè)表甚至更多表聯(lián)合查詢(xún)的結(jié)果呢?
A、B、C三表聯(lián)合內(nèi)查詢(xún)SQL
SELECTA.idASAID,? ? A.contentASAContent,? ? B.idASBID,? ? B.contentASBContent,? ? C.idASCID,? ? C.contentASCContentFROMAINNERJOINBON(A.id = B.id)INNERJOINCON(A.id = C.id)
1
2
3
4
5
6
7
8
9
10
11
查詢(xún)結(jié)果:
啊?怎么多了一行數(shù)據(jù)?不用驚訝,其實(shí)C表中有2個(gè)id為1的記錄,然而我們?cè)趺蠢斫獾玫降牟樵?xún)結(jié)果呢?
可以把A、B兩表的查詢(xún)結(jié)果作為T(mén)表(中間結(jié)果表),然后T表內(nèi)連接C表,連接條件為T(mén).A.id=C.id。
簡(jiǎn)單來(lái)說(shuō)n(n=2)都可以看做兩張表的聯(lián)合查詢(xún),后面的小節(jié)將只介紹兩個(gè)表的聯(lián)合查詢(xún)。
2.2外連接(Outer Join)
2.2.1左外連接(Left outer Join)
左外連接:左表有就顯示,不論右表。
SQL:
SELECTA.idASAID,? ? A.contentASAContent,? ? B.idASBID,? ? B.contentASBContentFROMALEFTJOINBON(A.id = B.id);
1
2
3
4
5
6
7
8
查詢(xún)結(jié)果:
左連接并不是把B表左連接到A表上,而是把A表作為基準(zhǔn)表。由查詢(xún)結(jié)果可以看出,A、B兩表左連接,只要A中有結(jié)果,無(wú)論B表中有無(wú)結(jié)果,都會(huì)被查詢(xún)出來(lái)。
2.2.2右外連接(Right outer Join)
右外連接:右表有就顯示,不論左表。
SQL:
SELECTA.idASAID,? ? A.contentASAContent,? ? B.idASBID,? ? B.contentASBContentFROMARIGHTJOINBON(A.id = B.id);
1
2
3
4
5
6
7
8
9
查詢(xún)結(jié)果:
右連接和左連接類(lèi)似,只是把B表(連接的表)作為基準(zhǔn)表。由查詢(xún)結(jié)果可以看出,無(wú)論A表是否存在其他數(shù)據(jù),只要B表數(shù)據(jù)存在就會(huì)被查詢(xún)出來(lái)。
2.2.3全外連接(Full outer Join)
全外連接:左表/右表,有一個(gè)有就顯示。
SQL:
SELECTA.idASAID,? ? A.contentASAContent,? ? B.idASBID,? ? B.contentASBContentFROMAFULLOUTERJOINBON(A.id = B.id);
1
2
3
4
5
6
7
8
9
查詢(xún)結(jié)果:
全外連接查詢(xún)就字面意思也不難看出是查詢(xún)出兩表(A、B)中的所有記錄信息。
注:MySQL中不支持全外連接(但是可以u(píng)nion來(lái)實(shí)現(xiàn),后面會(huì)介紹)。
2.2交叉連接(Cross Join)
SQL:
SELECTA.idASAID,? ? A.contentASAContent,? ? B.idASBID,? ? B.contentASBContentFROMACROSSJOINB;
1
2
3
4
5
6
7
8
9
查詢(xún)結(jié)果:
由結(jié)果可以看出,交叉連接是對(duì)A、B量表進(jìn)行笛卡爾積的結(jié)果查詢(xún)出來(lái)。即A的每條記錄都有和B中所有記錄相對(duì)應(yīng)的信息。
2.3 SQL Union
SQL Union用于將多個(gè)select結(jié)果集進(jìn)行合并。值得注意的是,UNION 內(nèi)部的 SELECT 語(yǔ)句必須擁有相同數(shù)量的列。列也必須擁有相似的數(shù)據(jù)類(lèi)型。同時(shí),每條 SELECT 語(yǔ)句中的列的順序必須相同。
SQL:
SELECT*FROMAUNIONSELECT*fromB;
1
查詢(xún)結(jié)果:
Union是把2個(gè)Select結(jié)果集進(jìn)行合并,由查詢(xún)結(jié)果也不難看出,A、B兩表的結(jié)果數(shù)據(jù)進(jìn)行了合并,并且都被查詢(xún)出來(lái)了。
如果2個(gè)Select結(jié)果集中存在相同的結(jié)果,用Union則會(huì)把相同的記錄進(jìn)行合并,查詢(xún)結(jié)果中僅僅會(huì)顯示一條。那么如果想都顯示出來(lái),把Union換成Union All 即可。
Union實(shí)現(xiàn)Full outer Join:
1.首先獲取A、B表中id的不同組合。
SQL:
CREATEVIEWvasSELECTA.idfromAUNIONSELECTB.idfromB;
1
視圖內(nèi)存如下:
2.以視圖V為基本表,Left Join A、B表即可。
SQL:
SELECTA.id,? ? A.content,? ? B.id,? ? B.contentFROMvLEFTJOINAON(A.id = v.id)LEFTJOINBON(B.id = v.id);
1
2
3
4
5
6
7
8
9
查詢(xún)結(jié)果如下:
假設(shè)學(xué)生表叫student,課程表叫class,選課表叫choose
1.三層嵌套的問(wèn)題
select student.name from student where student.id IN
(select choose.sid from choose where choose.cid NOT IN
(select class.id from class where class.teacher='李明'))
2.一個(gè)內(nèi)連接,一個(gè)嵌套
select student.name,avg(choose.score) from
student inner join choose on student.id=choose.sid
where student.id IN
(select choose.sid from choose
where choose.score'60'
group by choose.sid
having count(choose.sid)=2)
gruop by student.id
3.一個(gè)聯(lián)合查詢(xún),一個(gè)嵌套查詢(xún)
select student.name from student
where student.id IN
(select c1.sid from choose c1 where choose.cid='1'
union
select c2.sid from choose c2 where choose.cid='2'
on c1.sid=c2.sid
)
4.其實(shí)就是自連接查詢(xún)和行列交換的問(wèn)題:
select student.id,
(case choose.id when '1' then choose.score end) as 1號(hào)課成績(jī),
(case choose.id when '2' then choose.score end) as 2號(hào)課成績(jī),
from student inner join choose on student.id=choose.sid sc1,
student inner join choose on student.id=choose.sid sc2
where sc1.id='1'
and sc2.id='2'
and sc1.scoresc2.score
分享標(biāo)題:sqlserver三表聯(lián)合查詢(xún),sql server三個(gè)表聯(lián)合查詢(xún)
本文鏈接:http://chinadenli.net/article38/dsgegsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、關(guān)鍵詞優(yōu)化、品牌網(wǎng)站制作、網(wǎng)站改版、定制開(kāi)發(fā)、域名注冊(cè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)