自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL Server子查詢相關(guān)知識(shí)筆記

數(shù)據(jù)庫 SQL Server
今天給大家介紹以下SQLServer子查詢相關(guān)知識(shí),希望對(duì)大家能有所幫助!

[[391012]]

 今天給大家介紹以下SQLServer子查詢相關(guān)知識(shí),希望對(duì)大家能有所幫助!

1、子查詢概念介紹

子查詢可以嵌套在SELECT、INSERT、UPDATE、DELETE語句或其他子查詢語句中的查詢,子查詢一般作為查詢中間結(jié)果集角色,子查詢也稱為內(nèi)部查詢或內(nèi)部選擇,包含子查詢的語句稱為外部查詢或外部選擇。根據(jù)可用系統(tǒng)內(nèi)存和查詢中其他表達(dá)式的復(fù)雜程度的不同,嵌套限制也有所不同,一般可以支持嵌套32層。個(gè)人建議盡量避免多層嵌套這樣SQL語句的可讀性和可維護(hù)性都會(huì)很差。使用表達(dá)式的地方一般都可以使用子查詢。

2、子查詢分類

單值子查詢:子查詢的返回值屬于單個(gè)。常見與查詢列、單值的查詢條件使用。

多值子查詢:子查詢的返回值多個(gè)。常見in、exists等篩選語句使用。

3、子查詢的使用場(chǎng)景

3.1 選擇列表中使用子查詢

選擇列表中使用子查詢作為查詢結(jié)果一列值出現(xiàn)的。該情況下調(diào)用子查詢返回的只能是單值。只能是單值子查詢。

  1. -- 查詢學(xué)生姓名、年齡、總成績(jī) 
  2.  
  3. select a.username,a.age,(select sum(score)  
  4. from Score where userId=a.userId)) totalScorefrom UserInfo a 

3.2 作為查詢條件

  1. -- 查詢部門名稱是技術(shù)部的員工信息 單值查詢 
  2. select username,age,address from Emp 
  3. where deptno=(select top 1 deptno  
  4. from DeptInfo where depName='技術(shù)部'); 
  5. -- 查詢產(chǎn)品庫存大于10噸的產(chǎn)品列表 多值查詢 
  6. select name,code from ProductInfo 
  7. where Code in (select s.code from StockInfo s where qty>20); 
  8. 同樣的insert、update、delete用法比較類似比如: 
  9. -- 刪除庫存量為0的產(chǎn)品 
  10. delete from ProductInfo 
  11. where Code in (select s.code from StockInfo s where qty=0); 
  12. -- 更新庫存量為0的產(chǎn)品remark字段更新為標(biāo)記 
  13. update ProductInfo set remark='標(biāo)記' 
  14. where Code in (select s.code from StockInfo s where qty=0) 

4、子查詢和連接查詢的關(guān)系

很多包含子查詢的SQL語句都可以改成連接查詢的形式表示,包含子查詢的語句和語義上等效的無子查詢的語句性能差別不大。但針對(duì)檢查存在性的情況中,聯(lián)接查詢性能更好,數(shù)據(jù)量越大聯(lián)接查詢會(huì)更能體現(xiàn)效率。

比如:

  1. -- 查詢學(xué)生姓名、年齡、總成績(jī) 
  2. select min(a.username),min(a.age),sum(score) totalScore 
  3. from UserInfo a  
  4. left join Score b on a.userId=b.userId 

5、包含in和exists子查詢區(qū)別

in子查詢:結(jié)果是包含0個(gè)或者多個(gè)值的列表,表示值的等于關(guān)系。

exists子查詢:它只返回true或false。表示一種存在的行為。

通常情況下in和exist可以互換。

當(dāng)子查詢結(jié)果不存在NULL值時(shí),not in和not exists得到的查詢結(jié)果一樣,所生成的查詢計(jì)劃也一樣。

當(dāng)in里面的值為null的情況下查詢記錄為0;當(dāng)exists里面的值為null情況下相當(dāng)于查詢條件不起作用。

示例:

  1. select name,age UserInfo where userId in (1,2,3,4); 
  2. select name,age UserInfo where exists (1,2,3,4); 

說明:EXISTS與IN的使用效率的問題,通常情況下采用exists要比in效率高,但要看實(shí)際情況具體使用:IN適合于外表大而內(nèi)表小的情況;EXISTS適合于外表小而內(nèi)表大的情況。

6、包含比較運(yùn)算符的子查詢

子查詢可以由一個(gè)比較運(yùn)算符(=、<>、>、>=、<、!>、!<或<=)引入。使用比較運(yùn)算符引入的子查詢必須返回單個(gè)值而不能一個(gè)值列表。否則,SQL Server將顯示一條錯(cuò)誤信息。

 

責(zé)任編輯:姜華 來源: IT技術(shù)分享社區(qū)
相關(guān)推薦

2021-03-24 14:50:00

SQLServer數(shù)據(jù)庫字符串

2021-03-19 07:12:23

SQL Server數(shù)據(jù)庫數(shù)據(jù)庫收縮

2021-03-04 22:02:18

SQL Serve數(shù)據(jù)庫架構(gòu)

2010-07-21 09:50:12

SQL Server子

2010-06-30 15:24:49

SQL Server子

2013-03-06 09:49:16

SQL Server

2011-08-04 15:20:52

SQL Server數(shù)據(jù)庫鏡像

2021-10-24 11:11:30

Spring開源Java開發(fā)

2011-08-25 16:31:36

SQL Servertimestamp

2010-09-28 11:48:36

SQL NULL值

2011-08-25 15:19:25

SQL Server 排序規(guī)則

2013-05-02 15:09:22

2011-08-18 13:31:44

SQL Server數(shù)子節(jié)點(diǎn)查詢所有父節(jié)點(diǎn)

2023-12-16 13:14:00

SQL子查詢技術(shù)

2009-12-24 17:45:31

ADO查詢

2010-09-28 14:06:43

Sql Server表

2024-10-11 16:51:02

2011-08-19 15:13:36

SQL Server MDX查詢

2011-04-15 11:43:24

SQL Server

2009-09-17 16:20:43

Linq to sql
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)