SQL Server資料庫連接查詢的種類及其應用

來源:互聯網
上載者:User

在資料庫開發方面,通過單表所表現的實現,有時候需要組合查詢來找到我們需要的記錄集,這時候我們就會用到串連查詢。

串連查詢主要包括以下幾個方面:

內串連

內串連一般是我們最常使用的,也叫自然串連,是用比較子比較要聯結列的值的聯結。它是通過(INNER JOIN或者JOIN)關鍵字把多表進行串連。我們通過建立兩個表來說明問題:

StudentID StudentName StudentAge

----------- -------------------------------------------------- -----------

1 張三 25

2 李四 26

3 王五 27

4 趙六 28

5 無名氏 27

以上是表Student,存放學生基本資料。

BorrowBookID BorrowBookName StudentID BorrowBookPublish

----------------------------------------------------------------------------------------------------------------------

1 馬克思主義政治經濟學 1 電子工業出版社

2 毛澤東思想概論 2 高等教育出版社

3 鄧小平理論 3 人民郵電出版社

4 大學生思想道德修養 4 中國鐵道出版社

5 C語言程式設計 NULL 高等教育出版社

以上是表BorrowBook,存放學生所借的書。

以上兩張表是通過StudentID進行關聯,在這裡先執行內聯連語句:

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish

From Student

Inner Join BorrowBook

On Student.StudentID = BorrowBook.StudentID

上面這個語句也可以寫成

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish

FROM Student,BorrowBook

WHERE Student.StudentID = BorrowBook.StudentID

其中,Inner Join是SQL Server的預設串連,可簡寫為Join。在Join後面指定具體的表作串連。On後面指定了串連的條件。

啟動並執行結果如下:

tudentName StudentAge BorrowBookName BorrowBookPublish

--------------------------------------------------------------------------------

張三 25 馬克思主義政治經濟學 電子工業出版社

李四 26 毛澤東思想概論 高等教育出版社

王五 27 鄧小平理論 人民郵電出版社

趙六 28 大學生思想道德修養 中國鐵道出版社

(所影響的行數為 4 行)

根據查詢的結果來進行分析:

如果多個表要做串連,那麼這些表之間必然存在著主鍵和外鍵的關係。所以需要將這些鍵的關係列出,就可以得出表串連的結果。在上例中,StudentID是Student表的主鍵,StudentID又是BorrowBook表的外鍵,這兩個表的串連條件就是Student.StudentID = BorrowBook.StudentID,對比查詢結果可以得知,內串連查詢只查詢出主鍵StudentID在另張表中存在的記錄,像Student表中的第五條記錄,因為在BorrowBook表中StudentID不存在,像BorrowBook表中的第五條記錄StudentID為Null,對應的Student表中沒有記錄,所以就不會顯示。所以內串連就是將參與的資料表中的每列與其它資料表的列相匹配,形成臨時資料表,並將滿足資料項目相等的記錄從臨時資料表中選擇出來。

內串連查詢操作列出與串連條件匹配的資料行,它使用比較子比較被串連列的列值。內串連分三種:

1) 等值串連:在串連條件中使用等號(=)運算子比較被串連列的列值,其查詢結果中列出被串連表中的所有列,包括其中的重複列。

2) 不等串連: 在串連條件使用除等於運算子以外的其它比較子比較被串連的列的列值。這些運算子包括> 、> =、 <=、 <、!> 、! <和 <> 。

3) 自然串連:在串連條件中使用等於(=)運算子比較被串連列的列值,但它使用挑選清單指出查詢結果集合中所包括的列,並刪除串連表中的重複列。

例如對於用不等值串連語句:

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish

From Student

Inner Join BorrowBook

On Student.StudentID <> BorrowBook.StudentID

StudentName StudentAge BorrowBookName BorrowBookPublish

----------------------------------------------------------------------------------

李四 26 馬克思主義政治經濟學 電子工業出版社

王五 27 馬克思主義政治經濟學 電子工業出版社

趙六 28 馬克思主義政治經濟學 電子工業出版社

無名氏 27 馬克思主義政治經濟學 電子工業出版社

張三 25 毛澤東思想概論 高等教育出版社

王五 27 毛澤東思想概論 高等教育出版社

趙六 28 毛澤東思想概論 高等教育出版社

無名氏 27 毛澤東思想概論 高等教育出版社

張三 25 鄧小平理論 人民郵電出版社

李四 26 鄧小平理論 人民郵電出版社

趙六 28 鄧小平理論 人民郵電出版社

無名氏 27 鄧小平理論 人民郵電出版社

張三 25 大學生思想道德修養 中國鐵道出版社

李四 26 大學生思想道德修養 中國鐵道出版社

王五 27 大學生思想道德修養 中國鐵道出版社

無名氏 27 大學生思想道德修養 中國鐵道出版社

它就會把兩表所對應不相等的記錄給查詢出來了。

外串連

外串連主要包括左串連、右串連和完整外部串連。

1)左串連:Left Join 或 Left Outer Join

左串連的結果集包括LEFT OUTER子句中指定的左表的所有行,而不僅僅是聯結列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有挑選清單列均為空白值(Null)。

我們看對應的SQL語句:

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish

From Student

Left JOIN BorrowBook

On Student.StudentID = BorrowBook.StudentID

啟動並執行結果如下:

StudentName StudentAge BorrowBookName BorrowBookPublish

---------------------------------------------------------------------------------

張三 25 馬克思主義政治經濟學 電子工業出版社

李四 26 毛澤東思想概論 高等教育出版社

王五 27 鄧小平理論 人民郵電出版社

趙六 28 大學生思想道德修養 中國鐵道出版社

無名氏 27 NULL NULL

(所影響的行數為 5 行)

可以看到的是,它查詢的結果是以左表Student為主,Student對應的StudentID在右表BorrowBook如果不存在的話,就會用NULL值來代替。

2) 右串連:Right Join 或 Right Outer Join

右串連和左串連相反,它將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將為左表返回空值(Null)。

我們看對應的SQL語句

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish

From Student

Right JOIN BorrowBook

On Student.StudentID = BorrowBook.StudentID

啟動並執行結果如下:

StudentName StudentAge BorrowBookName BorrowBookPublish

----------------------------------------------------------------------------------------------------------------------

張三 25 馬克思主義政治經濟學 電子工業出版社

李四 26 毛澤東思想概論 高等教育出版社

王五 27 鄧小平理論 人民郵電出版社

趙六 28 大學生思想道德修養 中國鐵道出版社

NULL NULL C語言程式設計 高等教育出版社

(所影響的行數為 5 行)

可以看到的是,它查詢的結果是以右表BorrowBook為主,BorrowBook對應的StudentID在左表Student如果不存在的話,就會用NULL值來代替。

3) 完整外部聯結:Full Join 或 Full Outer Join

完整外部聯結返回左表和右表中的所有行。當某行在另一個表中沒有匹配行時,則另一個表的挑選清單列包含空值。如果表之間有匹配行,則整個結果集行包含基表的資料值。

我們看對應的SQL語句

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish

From Student

FULL OUTER JOIN BorrowBook

On Student.StudentID = BorrowBook.StudentID

結果如下:

StudentName StudentAge BorrowBookName BorrowBookPublish ----------------------------------------------------------------------------------------------------------------------

NULL NULL C語言程式設計 高等教育出版社

張三 25 馬克思主義政治經濟學 電子工業出版社

李四 26 毛澤東思想概論 高等教育出版社

王五 27 鄧小平理論 人民郵電出版社

趙六 28 大學生思想道德修養 中國鐵道出版社

無名氏 27 NULL NULL

(所影響的行數為 6 行)

可以看到的是,它查詢的結果除了把相對應完全符合的記錄查出來以後,還會把左串連及右串連兩種情形都包括,對應的值用NULL值來代替。

交叉串連

交叉串連(CROSS JOIN),就是指不帶W H E R E子句的查詢。在數學上,就是表的笛卡爾積。也就是它查詢出來的記錄數行為兩個表的乘積,對應記錄也就是為表A*表B。

我們看對應的SQL語句

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish

From Student Cross Join BorrowBook

啟動並執行結果如下:

StudentName StudentAge BorrowBookName BorrowBookPublish

---------------------------------------------------------------------------------

張三 25 馬克思主義政治經濟學 電子工業出版社

李四 26 馬克思主義政治經濟學 電子工業出版社

王五 27 馬克思主義政治經濟學 電子工業出版社

趙六 28 馬克思主義政治經濟學 電子工業出版社

無名氏 27 馬克思主義政治經濟學 電子工業出版社

張三 25 毛澤東思想概論 高等教育出版社

李四 26 毛澤東思想概論 高等教育出版社

王五 27 毛澤東思想概論 高等教育出版社

趙六 28 毛澤東思想概論 高等教育出版社

無名氏 27 毛澤東思想概論 高等教育出版社

張三 25 鄧小平理論 人民郵電出版社

李四 26 鄧小平理論 人民郵電出版社

王五 27 鄧小平理論 人民郵電出版社

趙六 28 鄧小平理論 人民郵電出版社

無名氏 27 鄧小平理論 人民郵電出版社

張三 25 大學生思想道德修養 中國鐵道出版社

李四 26 大學生思想道德修養 中國鐵道出版社

王五 27 大學生思想道德修養 中國鐵道出版社

趙六 28 大學生思想道德修養 中國鐵道出版社

無名氏 27 大學生思想道德修養 中國鐵道出版社

張三 25 C語言程式設計 高等教育出版社

李四 26 C語言程式設計 高等教育出版社

王五 27 C語言程式設計 高等教育出版社

趙六 28 C語言程式設計 高等教育出版社

無名氏 27 C語言程式設計 高等教育出版社

(所影響的行數為 25 行)

可以看到的是,它把表Student中的每一行和BorrowBook中的每一條記錄都進行關聯,返回的記錄數為5*5=25行,即笛卡爾積,它執行的語句也就等效於

Select Student.StudentName,Student.StudentAge,BorrowBook.BorrowBookName,BorrowBook.BorrowBookPublish

From Student,BorrowBook



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.