sql視圖和多表連接

sql視圖和多表連接

ID:34726205

大?。?33.53 KB

頁數(shù):3頁

時(shí)間:2019-03-10

sql視圖和多表連接_第1頁
sql視圖和多表連接_第2頁
sql視圖和多表連接_第3頁
資源描述:

《sql視圖和多表連接》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、SQL視圖和多表連接?????首先,還是要說明一下視圖的定義:視圖是基于SQL語句的結(jié)果集的可視化虛擬表,換句話說視圖就是SQL查詢結(jié)果的可視化呈現(xiàn),是多個(gè)表的部分?jǐn)?shù)據(jù)的關(guān)系虛擬表。為了后面的內(nèi)容更容易理解,我們還要看一下視圖的建立過程。如圖所示是機(jī)房收費(fèi)系統(tǒng)中的《User_sys》和《CheckInfo_sys》建立的一個(gè)視圖的關(guān)系。(不討論該視圖是否具有實(shí)用價(jià)值)??那么這個(gè)視圖建立的代碼如下:??12345[sql]SELECT????dbo.CheckInfo_sys.UserName,dbo.CheckInfo_sys.Income,dbo

2、.CheckInfo_sys.Expend,dbo.CheckInfo_sys.HandIn,dbo.User_sys.RealName?FROM????????dbo.CheckInfo_sysINNERJOIN??????????????????????????dbo.User_sysONdbo.CheckInfo_sys.UserName=dbo.User_sys.UserName??????那么我們這里需要注意的就是代碼中的From后面的部分。這里的Innerjoin就是我們說的連接,那么On之后是視圖的篩選條件。需要說明的是若沒有ON后面的

3、條件就不能用連接。以該視圖為例:即選取兩個(gè)表中用戶名相等的數(shù)據(jù)。那么這里問題就出來了,在User_sys表中用戶名是唯一的,但是CheckInfo中的記錄可能是多條。這樣的一對(duì)多的關(guān)系的情況就導(dǎo)致了來源于用戶表的數(shù)據(jù)出現(xiàn)重復(fù),若這時(shí)要統(tǒng)計(jì)結(jié)賬教師的人數(shù)將出現(xiàn)重復(fù)!那么這里我們就可以配合不同的連接方式來解決問題。那么以以下數(shù)據(jù)位說明四種連接(不止四種):??????內(nèi)連接(關(guān)鍵字Innerjoin)?????也叫自然連接,它將自動(dòng)刪除不滿足dbo.CheckInfo_sys.UserName=dbo.User_sys.UserName條件的所有行。即刪

4、除兩個(gè)表中沒有匹配的行。其結(jié)果如下,即刪除了用戶表沒有結(jié)過帳的用戶5、老三、老四:??????左連接(關(guān)鍵字LeftJoin)?????左連接將保留User_sys(關(guān)鍵字左邊那個(gè)表)的所有數(shù)據(jù)行,而用null值來填充CheckInfo表中沒有匹配的記錄。其結(jié)果如下:??????右連接(關(guān)鍵字RightJoin)?????右連接將保留CheckInfo_sys表的所有數(shù)據(jù)而用null值填充User_sys中沒有的記錄值。這里不再舉例!?????交叉連接(關(guān)鍵字CrossJoin)?????交叉連接實(shí)際上是一個(gè)笛卡爾集,即兩個(gè)集合內(nèi)符合條件的記錄都匹配

5、一次成為一條新記錄。相當(dāng)于一個(gè)二維數(shù)組!可以自己琢磨一下,這里也不再舉例。?????以上方式創(chuàng)建的視圖是來自不同的表的列的縱向拼接,那么還可以進(jìn)行橫向拼接。這里是數(shù)據(jù)表的縱向和橫向劃分的逆過程。這種方式創(chuàng)建視圖首先表結(jié)構(gòu)必須一致,其次不以O(shè)n來表達(dá)條件。因此用可視化的方式建立不是很方便。橫向拼接也有多種方式兩種方式:Notin、Union和Intersect。這里只做簡單介紹,Notin是去兩個(gè)結(jié)果集的差集。Union是兩個(gè)集合的并集,會(huì)自動(dòng)刪除重復(fù)的記錄,也可以用UnionAll來保留所有記錄行。Intersect是兩個(gè)集合的交集,即同時(shí)存在于兩個(gè)

6、集合中的記錄。?????那么,一般情況下試圖的建立基于連接關(guān)系,即縱向拼接??梢詰?yīng)對(duì)一對(duì)多,一對(duì)一的關(guān)系。而對(duì)于多對(duì)多的關(guān)系,建立視圖時(shí)需要做一定的處理(不會(huì))。有時(shí)候,也可以用橫向拼接的方式來建立視圖,當(dāng)然這種情況不多見(就我目前而言),同時(shí)也覺得這種方式不是很合理。不過對(duì)于存在索引表的大系統(tǒng)也許有時(shí)候有效。估計(jì)目前也就我自己遇到過橫向拼接的情況。

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。