亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

淺談SQL Server交叉聯接 內部聯接

2024-08-31 01:04:25
字體:
來源:轉載
供稿:網友

前言

本節開始我們進入聯接學習,關于連接這一塊涉及的內容比較多,我們一步一步循序漸進學習,簡短內容,深入的理解。

交叉聯接(CROSS JOIN)

交叉連接是最簡單的聯接類型。交叉聯接僅執行一個邏輯查詢處理階段-笛卡爾乘積。例如對兩個輸入表進行操作,聯接并生成兩個表的笛卡爾乘積,也就是說,將一個表的每一行與另一個表的所有行進行匹配。所以,如果一個表有m行,另一個表有n行,得到的結果中則會有m*n行。我們就拿SQL Server 2012教程中的例子說下

SELECT C.custid, E.empidFROM Sales.Customers AS CCROSS JOIN HR.Employees AS EORDER BY E.empid

在Sales.Customers表中有91行數據,HR.Employees表中有9行數據,則利用交叉聯接數據則有819(91*9)行數據,簡略數據如下。

sqlserver,交叉聯接,內部聯接

交叉聯接我們可以用如下圖表示

sqlserver,交叉聯接,內部聯接

交叉聯接最大的用途在于生成數字表以便我們用于其他目的,我們一起來看看。

IF OBJECT_ID('dbo.Digits','U')IS NOT NULL DROP TABLE dbo.Digits;CREATE TABLE dbo.Digits( digit INT NOT NULL);

插入10條基礎數據

USE TSQL2012GOINSERT INTO dbo.Digits  ( digit )VALUES ( 0 ), ( 1 ), ( 2 ), ( 3 ), ( 4 ), ( 5 ), ( 6 ), ( 7 ), ( 8 ), ( 9 )

創建數字表

USE TSQL2012GOCREATE TABLE Nums( n INT NOT NULL PRIMARY KEY);

利用交叉聯接在數字表中插入100萬條數據

USE TSQL2012GOINSERT INTO dbo.Nums(n)SELECT D6.digit * 100000 + D5.digit * 10000 + D4.digit * 1000 + D3.digit * 100 + D2.digit * 10 + D1.digit + 1 AS nFROM dbo.Digits AS D1 CROSS JOIN dbo.Digits AS D2 CROSS JOIN dbo.Digits AS D3 CROSS JOIN dbo.Digits AS D4 CROSS JOIN dbo.Digits AS D5 CROSS JOIN dbo.Digits AS D6ORDER BY n

sqlserver,交叉聯接,內部聯接

內部聯接(INNER JOIN)

內部聯接用法如下

SELECT *FROM table1 AS t1INNER JOIN table2 AS t2 ON t1.Id = t2.Id

內部聯接返回表中更多數據

我們首先給出如下三個測試表

USE TSQL2012GOCREATE TABLE FirstTable (Col1 INT)CREATE TABLE SecondTable (Col1 INT)CREATE TABLE ThirdTable (Col1 INT)GOINSERT INTO FirstTable (Col1)VALUES (1), (2), (3), (NULL)GOINSERT INTO SecondTable (Col1)VALUES (1), (2), (3), (NULL)GOINSERT INTO ThirdTable (Col1)VALUES (2), (2), (2), (2), (2), (NULL)GO

(1)等值條件查詢

SELECT f.Col1 fCol1FROM FirstTable f INNER JOIN SecondTable s ON s.Col1 = f.col1GO

sqlserver,交叉聯接,內部聯接

(2)非等值條件查詢

USE TSQL2012GOSELECT f.Col1 fCol1FROM FirstTable fINNER JOIN SecondTable s ON s.Col1 <> f.col1GO

sqlserver,交叉聯接,內部聯接

上述我們同樣可以利用交叉連接實現同樣效果

USE TSQL2012GOSELECT f.Col1 fCol1FROM FirstTable AS f CROSS JOIN SecondTable AS swhere s.Col1 <> f.col1GO

(3)查詢非重復行(NON-DISTINCT)

我們在創建第三個測試表時,插入的數據是5個2,而在第一個表中插入的數據分別是1、2、3,此時我們利用等值聯接得到的結果到底是1個2,還是5個2呢?

USE TSQL2012GOSELECT f.Col1 fCol1FROM FirstTable fINNER JOIN ThirdTable s ON s.Col1 = f.col1GO

sqlserver,交叉聯接,內部聯接

我們得到的結果是5個2,為什么利用內部聯接也就是說利用的等值條件不是返回1個2呢,其實我們可以總結如下:

結論:利用內部聯接比實際表中返回更多數據的原因在于,內部聯接返回的結果集是基于查詢條件中的JOIN,若有多行滿足條件則返回多條數據。

內部聯接安全性

在兩個表利用等值條件查詢時,我們有兩種寫法。

ANSI SQL-92寫法

USE TSQL2012GOSELECT *FROM Sales.Orders AS SO INNER JOIN Sales.OrderDetails AS SOD ON SOD.orderid = SO.orderid

ANSI SQL-89寫法

USE TSQL2012GOSELECT *FROM Sales.Orders AS SO, Sales.OrderDetails AS SODWHERE SOD.orderid = SO.orderid

雖然這兩種寫法都可以,都能滿足需求,但是SQL Server 2012基礎教程強烈建議使用ANSI SQL-92寫法,為什么呢,因為用ANSI SQL-89寫法時若出現錯誤,此時解析根本不會生成錯誤,而對于ANSI SQL-92寫法則會,下面我們一起來看下ANSI SQL-89寫法的問題

USE TSQL2012GOSELECT COUNT(*) AS '利用等值條件查詢總數據行' FROM Sales.Orders AS SO, Sales.OrderDetails AS SODWHERE SOD.orderid = SO.orderid

sqlserver,交叉聯接,內部聯接

上面是我們利用正確的寫法得到的正確的總數據行為2155條,下面我們看看有問題的寫法

SELECT COUNT(*) AS '利用等值條件查詢總數據行' FROM Sales.Orders AS SO, Sales.OrderDetails AS SOD

sqlserver,交叉聯接,內部聯接

此時我們沒有給出WHERE條件,而解析未出現錯誤,當然返回的結果集也就是錯誤的。當我們利用ANSI SQL-92寫法時,我們同樣也未給出比較條件,如下

USE TSQL2012GOSELECT *FROM Sales.Orders AS SO INNER JOIN Sales.OrderDetails AS SOD;

sqlserver,交叉聯接,內部聯接

此時會出現解析錯誤,也就是無法再繼續查詢,自然也就得不到錯誤的結果。

結論:強烈推薦使用ANSI SQL-92寫法,這樣一來使得數據不會出現不一致性,同時可讀性和可維護性比ANSI SQL-89寫法強。

總結

本節我們講了交叉聯接和內部聯接,同時也給出了使用需要注意的地方,本節到此結束,我們下節再講講自聯接和外部聯接。簡短的內容,深入的理解,我們下節再會,good night。

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,同時也希望多多支持VeVb武林網!


注:相關教程知識閱讀請移步到MSSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久躁狠狠躁夜夜爽| 日韩高清有码在线| 欧美大片在线看| 欧美放荡办公室videos4k| 亚洲一区二区中文| 国产91免费观看| 欧美国产日本高清在线| 国产精品亚洲激情| 91国内在线视频| 日韩av影视在线| 国产精品一区专区欧美日韩| 国产精品视频26uuu| 国产激情视频一区| 久久久av网站| 亚洲xxxx视频| 欧美日韩国产成人在线观看| 日韩中文字幕欧美| 日韩精品极品在线观看| 美女av一区二区三区| 久久av.com| 69av在线视频| 91精品国产91久久久久久不卡| 在线电影欧美日韩一区二区私密| 久久久国产精品一区| 成人激情视频在线播放| 91精品国产色综合| 欧美日韩福利视频| 日韩在线免费视频| 亚洲第一国产精品| 色播久久人人爽人人爽人人片视av| 欧美性videos高清精品| 国产精品一区二区久久| 亚洲国产成人精品一区二区| 亚洲欧美日韩视频一区| 一本一本久久a久久精品综合小说| 日韩中文字幕国产精品| 欧美精品国产精品日韩精品| 国产精品91久久久久久| 日韩欧美福利视频| 日韩美女在线观看| 日产日韩在线亚洲欧美| 精品国产一区二区三区久久狼5月| 欧美成人午夜剧场免费观看| 精品视频—区二区三区免费| 日韩欧美精品网站| 日韩美女在线看| 日韩有码片在线观看| 亚洲精品美女视频| 国产成人精品日本亚洲专区61| 欧美一性一乱一交一视频| 欧美小视频在线| 亚洲国产精品资源| 国产原创欧美精品| 亚洲精品欧美日韩| 成人xvideos免费视频| 亚洲色图13p| 国产精品久久久久久中文字| 亚洲天堂成人在线| 国产午夜精品一区二区三区| 欧美激情亚洲国产| 成人精品一区二区三区电影黑人| 91a在线视频| 91国内精品久久| 亚洲а∨天堂久久精品喷水| 中文字幕日韩欧美在线视频| 国产欧洲精品视频| 成人精品网站在线观看| 欧美亚洲另类制服自拍| 成人免费高清完整版在线观看| 国产精品一区专区欧美日韩| 欧美超级免费视 在线| 国产精品444| 26uuu另类亚洲欧美日本一| 日韩中文字幕欧美| 欧美巨猛xxxx猛交黑人97人| 91精品国产91久久久久久不卡| 欧美日韩亚洲系列| 日韩欧美在线免费观看| 日韩精品亚洲元码| 国产成人精品久久二区二区| xvideos亚洲人网站| 日韩在线观看成人| 久久男人资源视频| 免费不卡欧美自拍视频| 久久亚洲综合国产精品99麻豆精品福利| 久久高清视频免费| 亚洲欧美国产精品va在线观看| 久久久久久91| 57pao国产成人免费| 国语对白做受69| 欧美日韩国产黄| 国产91精品最新在线播放| 欧美日韩在线观看视频| 欧美在线不卡区| 精品国内产的精品视频在线观看| 国产精品一区二区久久久久| 日韩久久精品成人| 日韩欧美中文第一页| 国产精品777| 欧美福利视频网站| 国产精品一香蕉国产线看观看| 一区二区三区 在线观看视| 日韩欧美一区视频| 日韩成人中文字幕在线观看| 国产伦精品免费视频| 久久人人97超碰精品888| 91在线观看免费| 久久精品国产2020观看福利| 久久亚洲春色中文字幕| 日韩欧美黄色动漫| 欧美大片大片在线播放| 日韩欧美成人精品| 一区二区成人精品| 免费av一区二区| 亚洲自拍偷拍色图| 亚洲欧美福利视频| 国产精品免费久久久| 日韩成人网免费视频| 久久精品视频99| 欧美成人在线免费视频| 欧美香蕉大胸在线视频观看| 日韩专区在线观看| 日韩一级裸体免费视频| 精品成人av一区| 国产成人精品国内自产拍免费看| 亚洲精品动漫久久久久| 91亚洲国产成人精品性色| 国产精品久久久久久久久久久不卡| 国产一区二区三区欧美| 91成人福利在线| 亚洲黄色av网站| 永久免费看mv网站入口亚洲| 欧美刺激性大交免费视频| 精品视频www| 日本国产一区二区三区| 精品在线观看国产| 国产va免费精品高清在线| 91精品久久久久久久久久久久久| 欧美日韩亚洲高清| 国产亚洲xxx| 在线精品91av| 欧美激情高清视频| 亚洲午夜av电影| 日韩专区在线观看| 91精品久久久久久久久久久久久| 欧美日韩激情小视频| 色av吧综合网| 久久久久久国产精品久久| 久久久精品美女| 亚洲人成啪啪网站| 亚洲福利在线播放| 亚洲欧洲xxxx| 亚洲乱码一区av黑人高潮| 红桃av永久久久| 日韩av电影国产| 国产在线精品播放| 尤物九九久久国产精品的分类| 国产精品久久久久久婷婷天堂| 亚洲国产欧美一区| 亚洲第五色综合网| 欧美在线免费视频| 一区二区三区四区在线观看视频| 欧美丰满老妇厨房牲生活| 久久久精品中文字幕|