SQL Server中的銜接查詢詳解。本站提示廣大學習愛好者:(SQL Server中的銜接查詢詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL Server中的銜接查詢詳解正文
在查詢多個表時,我們常常會用“銜接查詢”。銜接是關系數據庫模子的重要特色,也是它差別於其它類型數據庫治理體系的一個標記。
甚麼是銜接查詢呢?
概念:依據兩個表或多個表的列之間的關系,從這些表中查詢數據。
目標:完成多個表查詢操作。
曉得了銜接查詢的概念以後,甚麼時刻用銜接查詢呢?
普通是用作聯系關系兩張或兩張以上的數據表時用的。看起來有點籠統,我們舉個例子,做兩張表:先生表(T_student)和班級表(T_class)。
T_student
T_class
銜接尺度語法格局:
SQL-92尺度所界說的FROM子句的銜接語法格局為:
FROM join_table join_type join_table[ON (join_condition)]
個中join_table指出介入銜接操作的表名,銜接可以對統一個表操作,也能夠對多表操作,對統一個表操作的銜接又稱做自銜接。join_type 指出銜接類型。join_condition指銜接前提。
銜接類型:
銜接分為三種:內銜接、外銜接、穿插銜接。
內銜接(INNER JOIN)
應用比擬運算符(包含=、>、<、<>、>=、<=、!>和!<)停止表間的比擬操作,查詢與銜接前提相婚配的數據。依據比擬運算符分歧,內銜接分為等值銜接、天然銜接和不等銜接三種。
1、等值銜接
概念:在銜接前提中應用等於號(=)運算符,其查詢成果中列出被銜接表中的一切列,包含個中的反復列。
select * from T_student s,T_class c where s.classId = c.classId
等於
select * from T_student s inner join T_class c on s.classId = c.classId
成果是:
2、不等銜接
概念:在銜接前提中應用除等於號以外運算符(>、<、<>、>=、<=、!>和!<)
select * from T_student s inner join T_class c on s.classId <> c.classId
成果是:
3、天然銜接
概念:銜接前提和等值銜接雷同,然則會刪除銜接表中的反復列。
查詢語句一致值銜接根本雷同:
select s.*,c.className from T_student s inner join T_class c on s.classId = c.classId
與等值銜接比較:成果是少一個一列classId:
總結:內銜接是只顯示知足前提的!
外銜接
外銜接分為左銜接(LEFT JOIN)或左外銜接(LEFT OUTER JOIN)、右銜接(RIGHT JOIN)或右外銜接(RIGHT OUTER JOIN)、全銜接(FULL JOIN)或全外銜接(FULL OUTER JOIN)。我們就簡略的叫:左銜接、右銜接和全銜接。
1、左銜接:
概念:前往左表中的一切行,假如左表中行在右表中沒有婚配行,則成果中右表中的列前往空值。
select * from T_student s left join T_class c on s.classId = c.classId
成果是:
總結:左銜接顯示左表全體行,和右表與左表雷同行。
2、右銜接:
概念:恰與左銜接相反,前往右表中的一切行,假如右表中行在左表中沒有婚配行,則成果中左表中的列前往空值。
select * from T_student s right join T_class c on s.classId = c.classId
成果是:
總結:右銜接恰與左銜接相反,顯示右表全體行,和左表與右表雷同行。
3、全銜接:
概念:前往左表和右表中的一切行。當某行在另外一表中沒有婚配行,則另外一表中的列前往空值
select * from T_student s full join T_class c on s.classId = c.classId
成果是:
總結:前往左表和右表中的一切行。
穿插銜接(CROSS JOIN):也稱迪卡爾積
概念:不帶WHERE前提子句,它將會前往被銜接的兩個表的笛卡爾積,前往成果的行數等於兩個表行數的乘積(例如:T_student和T_class,前往4*4=16筆記錄),假如帶where,前往或顯示的是婚配的行數。
1、不帶where:
成果是:
總結:相當與笛卡爾積,左表和右表組合。
2、有where子句,常常會師長教師成兩個表行數乘積的數據表,然後才依據where前提從當選擇。
select * from T_student s cross join T_class c where s.classId = c.classId
(注:cross join後加前提只能用where,不克不及用on)
查詢成果跟等值銜接的查詢成果是一樣。
最初附上:我做的演習,便於本身,溫習:
--內銜接:保羅包含等值銜接,不等值銜接,天然銜接 --等值銜接;在銜接前提中應用等號運算符,其查詢成果中, --列出被銜接表中的一切列,包含個中的反復列 SELECT * FROM dbo.Territories,dbo.Region WHERE dbo.Region.RegionID=dbo.Territories.RegionID; SELECT * FROM dbo.Territories INNER JOIN dbo.Region ON dbo.Territories.RegionID=dbo.Region.RegionID; --不等值銜接:在銜接前提中,應用除等號以外的運算符 SELECT * FROM dbo.Territories INNER JOIN dbo.Region ON dbo.Region.RegionID<>dbo.Territories.RegionID; --天然銜接 --銜接前提和等值銜接前提雷同,然則會刪除表中的反復列 SELECT T.*,R.RegionDescription FROM dbo.Territories AS T INNER JOIN dbo.Region AS R ON R.RegionID = T.RegionID; --外銜接:分為左銜接,右銜接,全銜接,或許叫,左外銜接,右外銜接,全外銜接 --左銜接 SELECT * FROM dbo.Region LEFT JOIN dbo.Territories ON Territories.TerritoryDescription = Region.RegionDescription; --右銜接 SELECT * FROM dbo.Region RIGHT JOIN dbo.Territories ON Territories.TerritoryDescription = Region.RegionDescription; --全銜接 SELECT * FROM dbo.Region FULL JOIN dbo.Territories ON Territories.TerritoryDescription = Region.RegionDescription; --穿插銜接:也稱笛卡爾積 --不帶where前提子句,將會前往被銜接兩個表的笛卡爾積,前往成果的行數等於兩個表行數的乘積,假如帶where,前往或顯示婚配的行數 SELECT * FROM dbo.Region,dbo.Territories; --或許 SELECT * FROM dbo.Region CROSS JOIN dbo.Territories;
銜接查詢異常簡略,只須要在項目中多多理論,赓續總結,願望本文對年夜家的進修有所贊助。