国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

如何使用 SQL Server 數(shù)據(jù)庫嵌套子查詢

2024-08-31 00:46:19
字體:
供稿:網(wǎng)友

很多SQL Server程序員對子查詢(subqueries)的使用感到困惑,尤其對于嵌套子查詢(即子查詢中包含一個子查詢)。現(xiàn)在,就讓我們追本溯源地探究這個問題。

有兩種子查詢類型:標準和相關(guān)。標準子查詢執(zhí)行一次,結(jié)果反饋給父查詢。相關(guān)子查詢每行執(zhí)行一次,由父查詢找回。在本文中,我將重點討論嵌套子查詢(nested subqueries)(我將在以后介紹相關(guān)子查詢)。

試想這個問題:你想生成一個賣平墊圈的銷售人員列表。你需要的數(shù)據(jù)分散在四個表格中:人員.聯(lián)系方式(Person.Contact),人力資源.員工(HumanResources.Employee),銷售.銷售訂單標題(Sales.SalesOrderHeader),銷售.銷售訂單詳情(Sales.SalesOrderDetail)。在SQL Server中,你從內(nèi)壓式(outside-in)寫程序,但從外壓式(inside-out)開始考慮非常有幫助,即可以一次解決需要的一個語句。

如果從內(nèi)到外寫起,可以檢查Sales.SalesOrderDetail表格,在LIKE語句中匹配產(chǎn)品數(shù)(ProductNumber)值。你將這些行與Sales.SalesOrderHeader表格連接,從中可以獲得銷售人員IDs(SalesPersonIDs)。然后使用SalesPersonID連接SalesPersonID表格。最后,使用ContactID連接Person.Contact表格。

以下為引用的內(nèi)容:

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


這個例子揭示了有關(guān)SQL Server的幾個絕妙事情。你可以發(fā)現(xiàn),可以用IN()參數(shù)替代SELECT 語句。在本例中,有兩次應(yīng)用,因此創(chuàng)建了一個嵌套子查詢。

我是標準化(normalization)的發(fā)燒友,盡管我不接受其荒謬的長度。由于標準化具有各種查詢而增加了復雜性。在這些情況下子查詢就顯得非常有用,嵌套子查詢甚至更加有用。

當你需要的問題分散于很多表格中時,你必須再次將它們拼在一起,這時你可能發(fā)現(xiàn)嵌套子程序就很有用。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 哈巴河县| 安岳县| 红安县| 隆德县| 遂平县| 寿光市| 开鲁县| 徐汇区| 古蔺县| 中卫市| 陕西省| 区。| 榆树市| 浪卡子县| 深州市| 城固县| 同心县| 西充县| 宁国市| 青川县| 永嘉县| 哈巴河县| 永年县| 确山县| 师宗县| 巢湖市| 阿拉尔市| 宝兴县| 文化| 四子王旗| 利川市| 凤城市| 嘉定区| 天长市| 石门县| 武陟县| 拜城县| 齐齐哈尔市| 开鲁县| 开鲁县| 太仆寺旗|