使用SQL Server數(shù)據(jù)庫(kù)嵌套子查詢的方法
有兩種子查詢類型:標(biāo)準(zhǔn)和相關(guān)。標(biāo)準(zhǔn)子查詢執(zhí)行一次,結(jié)果反饋給父查詢。相關(guān)子查詢每行執(zhí)行一次,由父查詢找回。在本文中,我將重點(diǎn)討論嵌套子查詢(nested subqueries)(我將在以后介紹相關(guān)子查詢)。
試想這個(gè)問(wèn)題:你想生成一個(gè)賣平墊圈的銷售人員列表。你需要的數(shù)據(jù)分散在四個(gè)表格中:人員.聯(lián)系方式(Person.Contact),人力資源.員工(HumanResources.Employee),銷售.銷售訂單標(biāo)題(Sales.SalesOrderHeader),銷售.銷售訂單詳情(Sales.SalesOrderDetail)。在SQL Server中,你從內(nèi)壓式(outside-in)寫程序,但從外壓式(inside-out)開(kāi)始考慮非常有幫助,即可以一次解決需要的一個(gè)語(yǔ)句。
如果從內(nèi)到外寫起,可以檢查Sales.SalesOrderDetail表格,在LIKE語(yǔ)句中匹配產(chǎn)品數(shù)(ProductNumber)值。你將這些行與Sales.SalesOrderHeader表格連接,從中可以獲得銷售人員IDs(SalesPersonIDs)。然后使用SalesPersonID連接SalesPersonID表格。最后,使用ContactID連接Person.Contact表格。
USE AdventureWorks ;
GO
SELECT DISTINCT c.LastName, c.FirstName
FROM Person.Contact c JOIN HumanResources.Employee e
ON e.ContactID = c.ContactID WHERE EmployeeID IN
(SELECT SalesPersonID
FROM Sales.SalesOrderHeader
WHERE SalesOrderID IN
(SELECT SalesOrderID
FROM Sales.SalesOrderDetail
WHERE ProductID IN
(SELECT ProductID
FROM Production.Product p
WHERE ProductNumber LIKE'FW%')));
GO
這個(gè)例子揭示了有關(guān)SQL Server的幾個(gè)絕妙事情。你可以發(fā)現(xiàn),可以用IN()參數(shù)替代SELECT 語(yǔ)句。在本例中,有兩次應(yīng)用,因此創(chuàng)建了一個(gè)嵌套子查詢。
我是標(biāo)準(zhǔn)化(normalization)的發(fā)燒友,盡管我不接受其荒謬的長(zhǎng)度。由于標(biāo)準(zhǔn)化具有各種查詢而增加了復(fù)雜性。在這些情況下子查詢就顯得非常有用,嵌套子查詢甚至更加有用。
當(dāng)你需要的問(wèn)題分散于很多表格中時(shí),你必須再次將它們拼在一起,這時(shí)你可能發(fā)現(xiàn)嵌套子程序就很有用。
相關(guān)文章
揭秘SQL Server 2014有哪些新特性(3)-可更新列存儲(chǔ)聚集索引
可更新的列存儲(chǔ)索引作為SQL Server 2014的一個(gè)關(guān)鍵功能之一,在提升數(shù)據(jù)庫(kù)的查詢性能方面貢獻(xiàn)非常突出。據(jù)微軟統(tǒng)計(jì),在面向OLAP查詢統(tǒng)計(jì)類系統(tǒng)中,相比其他SQL傳統(tǒng)版本的數(shù)據(jù)庫(kù),報(bào)表查詢的性能最大可提升上十倍。2014-08-08sqlserver中向表中插入多行數(shù)據(jù)的insert語(yǔ)句
關(guān)于sql 2000中如何使用insert語(yǔ)句插入多行記錄,可是郁悶壞了我。2010-08-08SQL Server實(shí)現(xiàn)用觸發(fā)器捕獲DML操作的會(huì)話信息【實(shí)例】
下面小編就為大家?guī)?lái)一篇SQL Server實(shí)現(xiàn)用觸發(fā)器捕獲DML操作的會(huì)話信息【實(shí)例】。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03SqlServer數(shù)據(jù)庫(kù)腳本執(zhí)行命令行指令方式
這篇文章主要介紹了SqlServer數(shù)據(jù)庫(kù)腳本執(zhí)行命令行指令方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06MS-SQL Server 中單引號(hào)的兩種處理方法
MS-SQL Server 中單引號(hào)的兩種處理方法...2007-01-01SQLSERVER 中datetime 和 smalldatetime類型分析說(shuō)明
SQL SERVER 中datetime 和 smalldatetime類型分析說(shuō)明,需要的朋友可以參考下,什么時(shí)候用什么語(yǔ)句。2009-11-11SQL Server遍歷表中記錄的2種方法(使用表變量和游標(biāo))
遍歷表一般都要用到游標(biāo)在SQL Server中可以很容易的用游標(biāo)實(shí)現(xiàn)循環(huán)實(shí)現(xiàn)遍歷表中記錄,本文將介紹使用表變量和游標(biāo)實(shí)現(xiàn)數(shù)據(jù)庫(kù)中表的遍歷,感興趣的朋友可以了解下本文,或許可以幫助到你2013-02-02sql數(shù)據(jù)庫(kù)不能直接用instr函數(shù)
sql數(shù)據(jù)庫(kù)不能直接用instr函數(shù)...2007-01-01