如何使用SQL Server嵌套子查詢_Mssql數(shù)據(jù)庫(kù)教程
推薦:SQL多表格查詢合并至單一聲明的常用方式在對(duì)跨多個(gè)表格的數(shù)據(jù)進(jìn)行組合時(shí),有時(shí)很難搞清楚要使用哪一個(gè)SQL句法。我將在這里對(duì)將多個(gè)表格中的查詢合并至單一聲明中的常用方式進(jìn)行闡述。 在這篇文章中的樣本查詢符合SQL92 ISO標(biāo)準(zhǔn)。不
很多SQL Server程序員對(duì)子查詢(subqueries)的使用感到困惑,尤其對(duì)于嵌套子查詢(即子查詢中包含一個(gè)子查詢)�,F(xiàn)在,就讓我們追本溯源地探究這個(gè)問(wèn)題。
有兩種子查詢類型:標(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)開始考慮非常有幫助,即可以一次解決需要的一個(gè)語(yǔ)句。
如果從內(nèi)到外寫起,可以檢查Sales.SalesOrderDetail表格,在LIKE語(yǔ)句中匹配產(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 |
這個(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)嵌套子程序就很有用。
分享:教你一招:MSSQL數(shù)據(jù)庫(kù)索引的應(yīng)用一、索引的概念 索引就是加快檢索表中數(shù)據(jù)的方法。數(shù)據(jù)庫(kù)的索引類似于書籍的索引。在書籍中,索引允許用戶不必翻閱完整個(gè)書就能迅速地找到所需要的信息。在數(shù)據(jù)庫(kù)中,索引也允許數(shù)據(jù)庫(kù)程序迅
- sql 語(yǔ)句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個(gè)方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無(wú)法查看數(shù)據(jù)庫(kù),提示 無(wú)法為該請(qǐng)求檢索數(shù)據(jù) 錯(cuò)誤916解決方法
- SQLServer日志清空語(yǔ)句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲(chǔ)過(guò)程參數(shù)的用法實(shí)例詳解
Mssql數(shù)據(jù)庫(kù)教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫(kù)教程推薦
- SQL Server中, DateTime (日期)型操作的 SQL語(yǔ)法
- 逐行掃描 為你講解幾個(gè)基本SQLPLUS命令
- 詳解SQL Server數(shù)據(jù)庫(kù)的集群設(shè)計(jì)
- sql server 2008安裝過(guò)程中服務(wù)器配置出錯(cuò)解決辦法
- SQL Server 2005 數(shù)據(jù)庫(kù)鏡像簡(jiǎn)介
- 解決SQL Server常見四大故障
- 淺析SQL server存儲(chǔ)過(guò)程
- 解讀SQL中自己創(chuàng)建函數(shù) 分割字符串
- 詳解Microsoft SQL Server數(shù)據(jù)庫(kù)開發(fā)問(wèn)題
- 基于SQL Server中char,nchar,varchar,nvarchar的使用區(qū)別
猜你也喜歡看這些
- MySQL 關(guān)于表復(fù)制 insert into 語(yǔ)法的詳細(xì)介紹
- MySQL筆記之?dāng)?shù)據(jù)類型詳解
- MySQL觸發(fā)器學(xué)習(xí)總結(jié)
- 解析SQL語(yǔ)句中Replace INTO與INSERT INTO的不同之處
- mysql手動(dòng)刪除BINLOG的方法
- mysql創(chuàng)建新用戶的命令
- Ubuntu下取消MySQL數(shù)據(jù)庫(kù)本機(jī)綁定限制方法
- linux下mysql提示mysql deamon failed to start錯(cuò)誤的解決方法
- mysql創(chuàng)建函數(shù)出現(xiàn)1418錯(cuò)誤的解決辦法
- 網(wǎng)頁(yè)模板MySQL出現(xiàn)Can't create/write to file 'C:\Windows\TEMP\#sql_990_0.MYI解決辦法
- 相關(guān)鏈接:
- 教程說(shuō)明:
Mssql數(shù)據(jù)庫(kù)教程-如何使用SQL Server嵌套子查詢
。