sql表連接查詢使用方法(sql多表連接查詢)
實(shí)際的項(xiàng)目,存在多張表的關(guān)聯(lián)關(guān)系。不可能在一張表里面就能檢索出所有數(shù)據(jù)。如果沒(méi)有表連接的話,那么我們就需要非常多的操作。比如需要從A表找出限制性的條件來(lái)從B表中檢索數(shù)據(jù)。不但需要分多表來(lái)操作,而且效率也不高。比如書中的例子:
SELECT FId
FROM T_Customer
WHERE FName='MIKE'
這個(gè)SQL語(yǔ)句返回2,也就是姓名為MIKE 的客戶的FId值為2,這樣就可以到T_Order中檢索FCustomerId等于2 的記錄:
SELECT FNumber,FPrice
FROM T_Order
WHERE FCustomerId=2
下面我們?cè)敿?xì)來(lái)看看表連接。表連接有多種不同的類型,有交叉連接(CROSS JOIN)、內(nèi)連接(INNER JOIN)、外連接(OUTTER JOIN)。
(1)內(nèi)連接(INNER JOIN):內(nèi)連接組合兩張表,并且只獲取滿足兩表連接條件的數(shù)據(jù)。
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
注:在大多數(shù)數(shù)據(jù)庫(kù)系統(tǒng)中,INNER JOIN中的INNER是可選的,INNER JOIN 是默認(rèn)的連接方式。
在使用表連接的時(shí)候可以不局限于只連接兩張表,因?yàn)橛泻芏嗲闆r下需要聯(lián)系許多表。例如,T_Order表同時(shí)還需要連接T_Customer和T_OrderType兩張表才能檢索到所需要的信息,編寫如下SQL語(yǔ)句即可:
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):交叉連接所有涉及的表中的所有記錄都包含在結(jié)果集中??梢圆捎脙煞N方式來(lái)定義交叉連接,分別是隱式和顯式的連接。
下面看看隱式的例子:
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):內(nèi)部連接只獲取滿足連接條件的數(shù)據(jù),而對(duì)于外部連接來(lái)說(shuō),主要是解決這樣的一種場(chǎng)景。滿足條件的數(shù)據(jù)檢索出來(lái),這個(gè)沒(méi)有疑問(wèn),外部連接還會(huì)檢索另一部分?jǐn)?shù)據(jù),那就是將不滿足條件的數(shù)據(jù)以NULL來(lái)填充。先來(lái)看一下外連接的分類:左外部連接(LEFT OUTER JOIN)、右外部連接(RIGHT OUTER JOIN)和全外部連接(FULLOUTER JOIN)。
I、左外部連接(LEFT OUTER JOIN):前頭也說(shuō)了,將不滿足條件的數(shù)據(jù)以NULL來(lái)填充。那么具體是哪些需要以NULL來(lái)填充呢,對(duì)于左外連接來(lái)說(shuō)的話,連接條件當(dāng)中,如果出現(xiàn)滿足條件的左表的數(shù)據(jù)在右表中沒(méi)有相應(yīng)匹配時(shí),需要把相應(yīng)的右表字段填充NULL值。也就是說(shuō)左外部連接的主體是左表,右表來(lái)配合。
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
注:如果使用左外部連接的話,通過(guò)where語(yǔ)句能過(guò)濾其中不符合的數(shù)據(jù)
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):右外部連接與左外連部接相反,將會(huì)被填充NULL值的是左表的字段。也就是說(shuō)右外部連接的主體是右表,左表來(lái)配合。
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語(yǔ)句進(jìn)行過(guò)濾
III、全外部連接(FULLOUTER JOIN):全外部連接是左外部連接和右外部連接的合集。也就是既包括左外部連接的結(jié)果集,也包括右外部連接的結(jié)果集。
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
其結(jié)果相當(dāng)于:
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
相關(guān)文章
SQL Server 觸發(fā)器 表的特定字段更新時(shí),觸發(fā)Update觸發(fā)器
另外再補(bǔ)充一句:insert和update的數(shù)據(jù)都會(huì)保存在臨時(shí)表中,所以使用inserted可以取出這些數(shù)據(jù),刪除時(shí)使用deleted可以取出被刪除的數(shù)據(jù)2009-08-08
SqlServer開(kāi)發(fā)神器'SQLPrompt'插件的使用詳解
SQLPrompt是Sql?Server?開(kāi)發(fā)智能提示插件,方便查詢表結(jié)果,避免了開(kāi)發(fā)人員一個(gè)個(gè)敲查詢語(yǔ)句、執(zhí)行語(yǔ)句等,這篇文章主要介紹了SqlServer數(shù)據(jù)庫(kù)開(kāi)發(fā)神器'SQLPrompt插件'的使用說(shuō)明,需要的朋友可以參考下2023-03-03
sql server2008調(diào)試存儲(chǔ)過(guò)程的完整步驟
這篇文章主要給大家分享介紹了關(guān)于sql server2008調(diào)試存儲(chǔ)過(guò)程的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11
SQL查詢服務(wù)器下所有數(shù)據(jù)庫(kù)及數(shù)據(jù)庫(kù)的全部表
這篇文章主要介紹了SQL查詢服務(wù)器下所有數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)的全部表,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05
配置 SQL Server 2005 以允許遠(yuǎn)程連接的方法
在嘗試從遠(yuǎn)程計(jì)算機(jī)連接到 Microsoft SQL Server 2005 實(shí)例時(shí),可能會(huì)接收到錯(cuò)誤消息。在使用任何程序連接到 SQL Server 時(shí)都可能會(huì)發(fā)生此問(wèn)題。2011-01-01

