程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL Server中的銜接查詢詳解

SQL Server中的銜接查詢詳解

編輯:MSSQL

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;

銜接查詢異常簡略,只須要在項目中多多理論,赓續總結,願望本文對年夜家的進修有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved