国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SQL Server的子查詢

這篇具有很好參考價(jià)值的文章主要介紹了SQL Server的子查詢。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、子查詢基礎(chǔ)知識(shí)

子查詢是嵌套在SELECT、INSERT、UPDATE、DELETE語句中或另一個(gè)子查詢中的查詢。
可以在允許表達(dá)式的任何位置使用子查詢。
示例:

USE AdventureWorks2016;
GO
SELECT Ord.SalesOrderID, Ord.OrderDate,
    (SELECT MAX(OrdDet.UnitPrice)
     FROM Sales.SalesOrderDetail AS OrdDet
     WHERE Ord.SalesOrderID = OrdDet.SalesOrderID) AS MaxUnitPrice
FROM Sales.SalesOrderHeader AS Ord;
GO

SQL Server的子查詢

子查詢也稱為內(nèi)部查詢或內(nèi)部選擇,而包含子查詢的語句也稱為外部查詢或外部選擇。

許多包含子查詢的 Transact-SQL 語句也可以表述為聯(lián)接。其他問題只能用子查詢提出。在 Transact-SQL 中,包含子查詢的語句與不包含子查詢的語義等效版本之間通常沒有性能差異。但是,在某些必須檢查是否存在的情況下,聯(lián)接會(huì)產(chǎn)生更好的性能。否則,必須為外部查詢的每個(gè)結(jié)果處理嵌套查詢,以確保消除重復(fù)項(xiàng)。在這種情況下,聯(lián)接方法將產(chǎn)生更好的結(jié)果。

以下示例顯示了返回相同結(jié)果集和執(zhí)行計(jì)劃的子查詢和聯(lián)接:

USE AdventureWorks2016;
GO

/* SELECT statement built using a subquery. */
SELECT [Name]
FROM Production.Product
WHERE ListPrice =
    (SELECT ListPrice
     FROM Production.Product
     WHERE [Name] = 'Chainring Bolts' );
GO

/* SELECT statement built using a join that returns
   the same result set. */
SELECT Prd1.[Name]
FROM Production.Product AS Prd1
     JOIN Production.Product AS Prd2
       ON (Prd1.ListPrice = Prd2.ListPrice)
WHERE Prd2.[Name] = 'Chainring Bolts';
GO

嵌套在外部 SELECT 語句中的子查詢具有以下組件:

  • 包含常規(guī)選擇列表組件的常規(guī)查詢。
  • 包含一個(gè)或多個(gè)表或視圖名稱的常規(guī)子句。
  • 可選:WHERE、GROUP BY、HAVING。

子查詢的 SELECT 查詢始終括在括號(hào)中。它不能包含 or 子句,并且只能在還指定 TOP 子句時(shí)才包含子句。

子查詢可以嵌套在外部 WHERE、HAVING、SELECT、INSERT、UPDATE、DELETE或語句的 or 子句中,也可以嵌套在另一個(gè)子查詢中。最多可以嵌套 32 個(gè)級(jí)別,但限制因可用內(nèi)存和查詢中其他表達(dá)式的復(fù)雜性而異。單個(gè)查詢可能不支持嵌套多達(dá) 32 個(gè)級(jí)別。如果子查詢返回單個(gè)值,則子查詢可以出現(xiàn)在可以使用表達(dá)式的任何位置。

如果表僅出現(xiàn)在子查詢中而不出現(xiàn)在外部查詢中,則該表中的列不能包含在輸出(外部查詢的選擇列表)中。

包含子查詢的語句通常采用以下格式之一:

  • WHERE expression [NOT] IN (subquery)
  • WHERE expression comparison_operator [ANY | ALL] (subquery)
  • WHERE [NOT] EXISTS (subquery)

在某些 Transact-SQL 語句中,可以像計(jì)算獨(dú)立查詢一樣計(jì)算子查詢。從概念上講,子查詢結(jié)果被替換到外部查詢中(盡管這不一定是 SQL Server 實(shí)際處理帶有子查詢的 Transact-SQL 語句的方式)。

有三種基本類型的子查詢:

  • 對(duì)引入的列表進(jìn)行操作,或者比較運(yùn)算符由 INANY或ALL 修改的列表。
  • 使用未修改的比較運(yùn)算符引入,并且必須返回單個(gè)值。
  • 是否使用EXISTS引入存在性測(cè)試。

二、子查詢規(guī)則

  • 使用比較運(yùn)算符引入的子查詢的選擇列表只能包含一個(gè)表達(dá)式或列名。
  • 如果外部查詢的子句包含列名,則該子句必須與子查詢選擇列表中的列連接兼容。
  • ntext、text 和 image 數(shù)據(jù)類型不能在子查詢的選擇列表中使用。
  • 由于它們必須返回單個(gè)值,因此由未修改的比較運(yùn)算符(不后跟關(guān)鍵字或)引入的子查詢不能包含 and 子句。
  • 關(guān)鍵字不能與包含 的子查詢一起使用。
  • 不能指定 and 子句。
  • ORDER BY只有在也指定TOP時(shí)才能指定。
  • 無法使用子查詢創(chuàng)建的視圖進(jìn)行更新。

三、限定子查詢中的列名

示例:外部查詢子句中的 BusinessEntityID 列由外部查詢子句 (Sales.Store) 中的表名隱式限定。子查詢的選擇列表中對(duì) CustomerID 的引用由子查詢子句(即 Sales.Customer 表)限定。

USE AdventureWorks2016;
GO
SELECT [Name]
FROM Sales.Store
WHERE BusinessEntityID NOT IN
    (SELECT CustomerID
     FROM Sales.Customer
     WHERE TerritoryID = 5);
GO

一般,語句中的列名由同一級(jí)別的子句中引用的表隱式限定。如果子查詢子句中引用的表中不存在列,則外部查詢子句中引用的表將隱式限定該列。

下面是指定這些隱式假設(shè)的查詢的外觀:

USE AdventureWorks2016;
GO
SELECT [Name]
FROM Sales.Store
WHERE Sales.Store.BusinessEntityID NOT IN
    (SELECT Sales.Customer.CustomerID
     FROM Sales.Customer
     WHERE TerritoryID = 5);
GO

顯式聲明表名永遠(yuǎn)不會(huì)錯(cuò),并且始終可以使用顯式限定覆蓋有關(guān)表名的隱式假設(shè)。

四、子查詢的多層嵌套

子查詢本身可以包含一個(gè)或多個(gè)子查詢。任意數(shù)量的子查詢可以嵌套在一個(gè)語句中。

示例:查詢查找同時(shí)也是銷售人員的員工的姓名。

USE AdventureWorks2016;
GO
SELECT LastName, FirstName
FROM Person.Person
WHERE BusinessEntityID IN
    (SELECT BusinessEntityID
     FROM HumanResources.Employee
     WHERE BusinessEntityID IN
        (SELECT BusinessEntityID
         FROM Sales.SalesPerson)
    );
GO

輸出:

LastName                                           FirstName
-------------------------------------------------- -----------------------
Jiang                                              Stephen
Abbas                                              Syed
Alberts                                            Amy
Ansman-Wolfe                                       Pamela
Campbell                                           David
Carson                                             Jillian
Ito                                                Shu
Mitchell                                           Linda
Reiter                                             Tsvi
Saraiva                                            Jos
Vargas                                             Garrett
Varkey Chudukatil                                  Ranjit
Valdez                                             Rachel
Tsoflias                                           Lynn
Pak                                                Jae
Blythe                                             Michael
Mensa-Annan                                        Tete

(17 row(s) affected)

最里面的查詢返回銷售人員 ID。下一個(gè)更高級(jí)別查詢使用這些銷售人員 ID 進(jìn)行評(píng)估,并返回員工的聯(lián)系人 ID 號(hào)。最后,外部查詢使用聯(lián)系人 ID 查找員工的姓名。

還可以將此查詢表示為聯(lián)接:

USE AdventureWorks2016;
GO
SELECT LastName, FirstName
FROM Person.Person c
INNER JOIN HumanResources.Employee e
ON c.BusinessEntityID = e.BusinessEntityID
JOIN Sales.SalesPerson s
ON e.BusinessEntityID = s.BusinessEntityID;
GO

五、相關(guān)子查詢

可以通過執(zhí)行一次子查詢并將結(jié)果值替換到外部查詢的子句中來計(jì)算許多查詢。在包含相關(guān)子查詢(也稱為重復(fù)子查詢)的查詢中,子查詢依賴于其值的外部查詢。這意味著子查詢將重復(fù)執(zhí)行,外部查詢可能選擇的每一行執(zhí)行一次。

示例:

USE AdventureWorks2016;
GO
SELECT DISTINCT c.LastName, c.FirstName, e.BusinessEntityID
FROM Person.Person AS c JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = c.BusinessEntityID
WHERE 5000.00 IN
    (SELECT Bonus
    FROM Sales.SalesPerson sp
    WHERE e.BusinessEntityID = sp.BusinessEntityID) ;
GO

輸出結(jié)果:

LastName FirstName BusinessEntityID
-------------------------- ---------- ------------
Ansman-Wolfe Pamela 280
Saraiva José 282

(2 row(s) affected)

此語句中的上一個(gè)子查詢不能獨(dú)立于外部查詢進(jìn)行計(jì)算。它需要 Employee.BusinessEntityID 的值,但此值會(huì)隨著 SQL Server 檢查 Employee 中的不同行而更改。 這正是計(jì)算此查詢的方式:SQL Server 通過將每行中的值替換為內(nèi)部查詢來考慮將 Employee 表的每一行包含在結(jié)果中。 例如,如果 SQL Server 首先檢查 的行,則變量 Employee.BusinessEntityID 采用值 285,SQL Server 將其替換到內(nèi)部查詢中。這兩個(gè)查詢示例表示具有相關(guān)子查詢的前一個(gè)示例的分解。

USE AdventureWorks2016;
GO
SELECT Bonus
FROM Sales.SalesPerson
WHERE BusinessEntityID = 285;
GO

結(jié)果為 0.00(沒有收到獎(jiǎng)金,因?yàn)樗麄儾皇卿N售人員),因此外部查詢的計(jì)算結(jié)果為:

USE AdventureWorks2016;
GO
SELECT LastName, FirstName
FROM Person.Person AS c JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = c.BusinessEntityID
WHERE 5000 IN (0.00);
GO

由于這是 false,因此 的行不包含在具有相關(guān)子查詢的上一個(gè)示例查詢的結(jié)果中。對(duì) 的行執(zhí)行相同的過程。您將看到此行包含在結(jié)果中,因?yàn)榘Y(jié)果。

小結(jié):相關(guān)子查詢還可以通過在外部查詢中引用表中的列作為表值函數(shù)的參數(shù),在子句中包含表值函數(shù)。在這種情況下,對(duì)于外部查詢的每一行,將根據(jù)子查詢計(jì)算表值函數(shù)。

六、子查詢類型

  • 帶別名。
  • 帶IN或NOT IN。
  • 在UPDATE、DELETE 和 INSERT 語句中。
  • 使用比較運(yùn)算符。
  • 使用 ANY、SOME 或 ALL。
  • 跟 IS [NOT] DISTINCT FROM。
  • 帶 EXISTS或 NOT EXISTS。
  • 代替表達(dá)式。

總結(jié)

如果在子查詢中引用的列在子查詢中不存在,但存在于外部查詢的子句引用的表中,則查詢將執(zhí)行而不會(huì)出錯(cuò)。SQL Server 使用外部查詢中的表名隱式限定子查詢中的列。
SQL Server的子查詢文章來源地址http://www.zghlxwxcb.cn/news/detail-412079.html

到了這里,關(guān)于SQL Server的子查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • AWS Athena SQL基礎(chǔ)知識(shí)

    一、Athena SQL 基礎(chǔ)學(xué)習(xí)?? 1 獲取一年的第幾周 2 Int to Date 3 根據(jù)日期得出周幾 4 weekofyear()?dayofweek 5 創(chuàng)建臨時(shí)數(shù)據(jù),遍歷數(shù)組 6 url解析 7 Athena表元數(shù)據(jù)信息修復(fù) 8 Athena中對(duì)跨年周進(jìn)行處理 9 Athena解析URL函數(shù)url_extract_parameter 10 QS獲取近兩個(gè)月數(shù)據(jù) 11 Athena轉(zhuǎn)義字符:’ 三、Spark調(diào)

    2024年02月07日
    瀏覽(65)
  • 數(shù)據(jù)庫入門-----SQL基礎(chǔ)知識(shí)

    數(shù)據(jù)庫入門-----SQL基礎(chǔ)知識(shí)

    目錄 ??前言: ??SQL概述通用語法: ???DDL: ??操作數(shù)據(jù)庫: ??數(shù)據(jù)類型: ???操作表: ??DML: 語法規(guī)則: 案例演示: ??DQL: 語法規(guī)則: 案例演示: # 基礎(chǔ)查詢: ?# 條件查詢: ?#聚合函數(shù): ?# 分組查詢: ?#排序查詢: ?#分頁查詢: ?執(zhí)行順序: ??DCL: 語法規(guī)則:

    2024年04月10日
    瀏覽(44)
  • MySQL 基礎(chǔ)知識(shí)(一)之?dāng)?shù)據(jù)庫和 SQL 概述

    MySQL 基礎(chǔ)知識(shí)(一)之?dāng)?shù)據(jù)庫和 SQL 概述

    目錄 1 數(shù)據(jù)庫相關(guān)概念 2 數(shù)據(jù)庫的結(jié)構(gòu) ?3 SQL 概要 4 SQL 的基本書寫規(guī)則 1 數(shù)據(jù)庫相關(guān)概念 數(shù)據(jù)庫是將大量的數(shù)據(jù)保存起來,通過計(jì)算機(jī)加工而成的可以進(jìn)行高效訪問的數(shù)據(jù)集合 數(shù)據(jù)庫管理系統(tǒng)(DBMS)是用來管理數(shù)據(jù)庫的計(jì)算機(jī)系統(tǒng),通過使用 DBMS,多個(gè)用戶可以安全、簡(jiǎn)單

    2024年02月20日
    瀏覽(30)
  • Hive基礎(chǔ)知識(shí)(十五):Hive中SQL排序方式全解

    Hive基礎(chǔ)知識(shí)(十五):Hive中SQL排序方式全解

    Order By:全局排序,只有一個(gè) Reducer 1)使用 ORDER BY 子句排序 ASC(ascend): 升序(默認(rèn)) DESC(descend): 降序 2)ORDER BY 子句在 SELECT 語句的結(jié)尾 3)案例實(shí)操 (1)查詢員工信息按工資升序排列 (2)查詢員工信息按工資降序排列 按照員工薪水的2 倍排序 按照部門和工資升序排

    2024年01月19日
    瀏覽(17)
  • SQL Server數(shù)據(jù)庫 -- 表的基礎(chǔ)查詢

    SQL Server數(shù)據(jù)庫 -- 表的基礎(chǔ)查詢

    一、單表查詢基本結(jié)構(gòu) 二、單表查詢結(jié)構(gòu)語法 select 聚合函數(shù) where 模糊查詢 order by group by having 三、多表查詢基本結(jié)構(gòu) 四、多表查詢結(jié)構(gòu)語法 內(nèi)連接 自連接 外連接 五、總結(jié) ? ? ? ? 學(xué)習(xí)了數(shù)據(jù)庫,在以后公司等地方,你可能不會(huì)用到創(chuàng)建數(shù)據(jù)庫或者表格,但是你一定會(huì)使

    2024年02月11日
    瀏覽(101)
  • Hive基礎(chǔ)知識(shí)(十六):Hive-SQL分區(qū)表使用與優(yōu)化

    Hive基礎(chǔ)知識(shí)(十六):Hive-SQL分區(qū)表使用與優(yōu)化

    分區(qū)表實(shí)際上就是對(duì)應(yīng)一個(gè) HDFS 文件系統(tǒng)上的獨(dú)立的文件夾,該文件夾下是該分區(qū)所有的數(shù)據(jù)文件。 Hive 中的分區(qū)就是分目錄 ,把一個(gè)大的數(shù)據(jù)集根據(jù)業(yè)務(wù)需要分割成小的數(shù)據(jù)集。在查詢時(shí)通過 WHERE 子句中的表達(dá)式選擇查詢所需要的指定的分區(qū),這樣的 查詢效率會(huì)提高很多

    2024年01月18日
    瀏覽(32)
  • SQL中的子查詢

    ????????當(dāng)我們進(jìn)?語句查詢的時(shí)候,總會(huì)遇到我們需要的條件需要通過另?個(gè)查詢語句查詢出來后才能進(jìn)?,就是說A 查詢語句需要依賴B 查詢語句的查詢結(jié)果,B 查詢就是?查詢,A 查詢語句就是主查詢,?個(gè)SQL語句可以包含多個(gè)?查詢。

    2024年02月16日
    瀏覽(20)
  • MySQL基礎(chǔ)篇——MySQL數(shù)據(jù)庫客戶端連接,數(shù)據(jù)模型,SQL知識(shí)

    MySQL基礎(chǔ)篇——MySQL數(shù)據(jù)庫客戶端連接,數(shù)據(jù)模型,SQL知識(shí)

    作者簡(jiǎn)介:一名云計(jì)算網(wǎng)絡(luò)運(yùn)維人員、每天分享網(wǎng)絡(luò)與運(yùn)維的技術(shù)與干貨。? ?座右銘:低頭趕路,敬事如儀 個(gè)人主頁:網(wǎng)絡(luò)豆的主頁?????? 目錄 前言 一.客戶端連接MySQL 二. 數(shù)據(jù)模型 1.關(guān)系型數(shù)據(jù)庫(RDBMS) 2.數(shù)據(jù)模型 三.SQL 1.SQL通用語法 2.SQL分類 3.數(shù)據(jù)庫操作 1). 查

    2024年02月06日
    瀏覽(25)
  • 【postgresql 基礎(chǔ)入門】數(shù)據(jù)表的查詢基本知識(shí),條件過濾、單列多列排序、按頁瀏覽數(shù)據(jù)、數(shù)據(jù)去重,得到你想要的數(shù)據(jù)

    ? 專欄內(nèi)容 : postgresql內(nèi)核源碼分析 手寫數(shù)據(jù)庫toadb 并發(fā)編程 ? 開源貢獻(xiàn) : toadb開源庫 個(gè)人主頁 :我的主頁 管理社區(qū) :開源數(shù)據(jù)庫 座右銘:天行健,君子以自強(qiáng)不息;地勢(shì)坤,君子以厚德載物. 入門準(zhǔn)備 postgrersql基礎(chǔ)架構(gòu) 快速使用 初始化集群 數(shù)據(jù)庫服務(wù)管理 psql客戶

    2024年02月07日
    瀏覽(118)
  • 【MySQL系列】- Select查詢SQL執(zhí)行過程詳解

    【MySQL系列】- Select查詢SQL執(zhí)行過程詳解

    一條SQL語句從發(fā)送到數(shù)據(jù)并返回結(jié)果,主要經(jīng)歷以下幾個(gè)過程: 連接器 : 查詢緩存 :如果開啟了查詢緩存,則會(huì)經(jīng)過這一步,但是大多數(shù)情況下都不是開啟的,也不建議開啟;MySQL8.0之后也刪除了這一塊功能。 分析器 : 優(yōu)化器 執(zhí)行器 2.1. 連接器 如果想對(duì)MySQL進(jìn)行操作,第

    2024年02月08日
    瀏覽(88)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包