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

sql表銜接查詢應用辦法(sql多表銜接查詢)

編輯:MSSQL

sql表銜接查詢應用辦法(sql多表銜接查詢)。本站提示廣大學習愛好者:(sql表銜接查詢應用辦法(sql多表銜接查詢))文章只能為提供參考,不一定能成為您想要的結果。以下是sql表銜接查詢應用辦法(sql多表銜接查詢)正文


現實的項目,存在多張表的聯系關系關系。弗成能在一張內外面就可以檢索出一切數據。假如沒有表銜接的話,那末我們就須要異常多的操作。好比須要從A表找出限制性的前提來從B表中檢索數據。不只須要分多表來操作,並且效力也不高。好比書中的例子:

SELECT FId
FROM T_Customer
WHERE FName='MIKE'

這個SQL語句前往2,也就是姓名為MIKE 的客戶的FId值為2,如許便可以到T_Order中檢索FCustomerId等於2 的記載:


SELECT FNumber,FPrice
FROM T_Order
WHERE FCustomerId=2

上面我們具體來看看表銜接。表銜接有多種分歧的類型,有穿插銜接(CROSS JOIN)、內銜接(INNER JOIN)、外銜接(OUTTER JOIN)。

(1)內銜接(INNER JOIN):內銜接組合兩張表,而且只獲得知足兩表銜接前提的數據。

SELECT o.FId,o.FNumber,o.FPrice,
c.FId,c.FName,c .FAge
FROM T_Order o JOIN T_Customer c
ON o.FCustomerId= c.FId

注:在年夜多半數據庫體系中,INNER JOIN中的INNER是可選的,INNER JOIN 是默許的銜接方法。

在應用表銜接的時刻可以不局限於只銜接兩張表,由於有許多情形下須要接洽很多表。例如,T_Order表同時還須要銜接T_Customer和T_OrderType兩張表能力檢索到所須要的信息,編寫以下SQL語句便可:

SELECT o.FId,o.FNumber,o.FPrice,
c.FId,c.FName,c .FAge
FROM T_Order o JOIN T_Customer c
ON o.FCustomerId= c.FId
INNER JOIN T_OrderType
ON T_Order.FTypeId= T_OrderType.FId

(2)穿插銜接(CROSS JOIN):穿插銜接一切觸及的表中的一切記載都包括在成果集中。可以采取兩種方法來界說穿插銜接,分離是隱式和顯式的銜接。

上面看看隱式的例子:

SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge,
T_Order.FId, T_Order.FNumber, T_Order.FPrice
FROM T_Customer, T_Order

應用顯式的銜接則須要應用CROSS JOIN,例子以下:


SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge,
T_Order.FId, T_Order.FNumber, T_Order.FPrice
FROM T_Customer
CROSS JOIN T_Order

(3)外銜接(OUTTER JOIN):外部銜接只獲得知足銜接前提的數據,而關於內部銜接來講,重要是處理如許的一種場景。知足前提的數據檢索出來,這個沒有疑問,內部銜接還會檢索另外一部門數據,那就是將不知足前提的數據以NULL來填充。先來看一下外銜接的分類:左內部銜接(LEFT OUTER JOIN)、右內部銜接(RIGHT OUTER JOIN)和全內部銜接(FULLOUTER JOIN)。

I、左內部銜接(LEFT OUTER JOIN):前頭也說了,將不知足前提的數據以NULL來填充。那末詳細是哪些須要以NULL來填充呢,關於左外銜接來講的話,銜接前提傍邊,假如湧現知足前提的左表的數據在右表中沒有響應婚配時,須要把響應的右表字段填充NULL值。也就是說左內部銜接的主體是左表,右表來合營。


SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

注:假如應用左內部銜接的話,經由過程where語句能過濾個中不相符的數據


SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId
WHERE o.FPrice>=150

II、右內部銜接(RIGHT OUTER JOIN):右內部銜接與左外連部接相反,將會被填充NULL值的是左表的字段。也就是說右內部銜接的主體是右表,左表來合營。


SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
RIGHT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

注:同左外銜接一樣,可使用where語句停止過濾

III、全內部銜接(FULLOUTER JOIN):全內部銜接是左內部銜接和右內部銜接的合集。也就是既包含左內部銜接的成果集,也包含右內部銜接的成果集。


SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
FULL OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

其成果相當於:


SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId
UNION
SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
RIGHT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

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