最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SqlServer中Exists的使用小結(jié)

 更新時(shí)間:2024年02月27日 09:49:17   作者:changuncle  
在SQLServer中,EXISTS是一種邏輯運(yùn)算符,用于檢查一個(gè)子查詢(xún)是否返回結(jié)果,本文主要介紹了SqlServer中Exists的使用小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下

1、簡(jiǎn)介

  • 不相關(guān)子查詢(xún):子查詢(xún)的查詢(xún)條件不依賴(lài)于父查詢(xún)的稱(chēng)為不相關(guān)子查詢(xún)
  • 相關(guān)子查詢(xún):子查詢(xún)的查詢(xún)條件依賴(lài)于外層父查詢(xún)的某個(gè)屬性值的稱(chēng)為相關(guān)子查詢(xún)。帶Exists的子查詢(xún)就是相關(guān)子查詢(xún)
  • Exists表示存在量詞:帶有Exists的子查詢(xún)不返回任何記錄的數(shù)據(jù),只返回邏輯值“True”或“False”

2、表結(jié)構(gòu)

選課表:學(xué)號(hào)StudentNo、課程號(hào)CourseNo

學(xué)生表:學(xué)號(hào)StudentNo、姓名StudentName

課程表:課程號(hào)CourseNo、課程名CourseName

3、查詢(xún)所有選修了“C1”課程的學(xué)生名

In語(yǔ)句查詢(xún):

select StudentName from 學(xué)生表
where StudentNo in (select StudentNo from 選課表 where CourseNo=‘C1')

Exists查詢(xún):

select StudentName from 學(xué)生表
where exists (select 1 from 選課表 where 選課表.StudentNo=學(xué)生表.StudentNo and 選課表.CourseNo='C1')

相關(guān)子查詢(xún)執(zhí)行過(guò)程:先在外層查詢(xún)中取“學(xué)生表”的第一行記錄,利用該記錄的相關(guān)屬性值(在exists子查詢(xún)的where子句中用到的列)處理內(nèi)層查詢(xún),若外層的where子句返回“true”,則本條記錄放入結(jié)果表中。然后再取下一行記錄,重復(fù)上述過(guò)程直到外層表遍歷完畢。

Exists語(yǔ)句不關(guān)心子查詢(xún)返回的具體內(nèi)容,因此用“exists(select 1 from)”來(lái)判斷子查詢(xún)是否返回記錄。

  • Exists(select):若子查詢(xún)的結(jié)果集非空時(shí),exists()表達(dá)式返回true;子查詢(xún)的結(jié)果集為空時(shí),exists()表達(dá)式返回false。
  • Not Exists(select):若子查詢(xún)的結(jié)果集非空時(shí),not exists()表達(dá)式返回false;子查詢(xún)的結(jié)果集為空時(shí),not exists()表達(dá)式返回true。

4、查詢(xún)沒(méi)所有選修“C1”課程的學(xué)生名

select StudentName from 學(xué)生表
where not exists (select 1 from 選課表 where 學(xué)生表.StudentNo=選課表.StudentNo and CourseNo=‘C1')

5、查詢(xún)選修了所有課程的學(xué)生名

--外層查詢(xún)、外層not exists
select StudentName from 學(xué)生表 where not exists 
(    
    --內(nèi)層查詢(xún)、內(nèi)層not exists
    select 1 from 課程表 where not exists
    (
        select 1 from 選課表 where 學(xué)生表.StudentNo=選課表.StudentNo and 課程表.CourseNo=選課表.CourseNo
    )
)

a、選一行學(xué)生信息S1、選一行課程信息C1
內(nèi)層的not exists()值為true,說(shuō)明選課表中找不到“S1.StudentNo + C1.CourseNo”這一記錄,說(shuō)明學(xué)生S1沒(méi)有選課程C1,此時(shí)內(nèi)層查詢(xún)的返回結(jié)果集會(huì)加上C1,當(dāng)內(nèi)層查詢(xún)的返回結(jié)果集不為空時(shí),外層not exists()值為false,則外層where子句值為false,則S1被排除。
當(dāng)內(nèi)層查詢(xún)的返回結(jié)果集不為空時(shí),說(shuō)明S1至少有一門(mén)課程沒(méi)選 。

b、選一行學(xué)生信息S1、選一行課程信息C2
內(nèi)層的not exists()值為false,說(shuō)明選課表中有“S1.StudentNo + C2.CourseNo”這一記錄,說(shuō)明學(xué)生S1選了課程C2,此時(shí)內(nèi)層查詢(xún)的返回結(jié)果集不會(huì)加上C2,當(dāng)內(nèi)層查詢(xún)的返回結(jié)果集為空時(shí),外層not exists()值為true,則外層where子句值為true,則S1被選中。
當(dāng)內(nèi)層查詢(xún)的返回結(jié)果集為空時(shí),說(shuō)明S1已經(jīng)選了所有課程。 

c、結(jié)果
外層查詢(xún)最終返回的結(jié)果是選擇了所有課程的學(xué)生。

6、查詢(xún)選修了C1課程和C2課程的學(xué)生名

--外層查詢(xún)、外層not exists
select StudentName from 學(xué)生表 where not exists 
(    
    --內(nèi)層查詢(xún)、內(nèi)層not exists
    select 1 from 課程表 where CourseNo in('C1','C2') and not exists
    (
        select 1 from 選課表 where 學(xué)生表.StudentNo=選課表.StudentNo and 課程表.CourseNo=選課表.CourseNo
    )
)

第五條查詢(xún)的是選修了所有課程的學(xué)生,如果我們將所有課程限定為“C1、C2”,那查詢(xún)結(jié)果就變?yōu)檫x修了C1、C2的學(xué)生,該結(jié)果保證學(xué)生至少選修了C1、C2,但是選沒(méi)選其他課不清楚。

7、查詢(xún)至少選修了S1所選的全部課程的學(xué)生名

--外層查詢(xún)、外層not exists
select StudentName from 學(xué)生表 where not exists 
(    
    --內(nèi)層查詢(xún)、內(nèi)層not exists
    select 1 from 選課表X where 選課表X.StudentNo='S1' and not exists
    (
        select 1 from 選課表Y where 學(xué)生表.StudentNo=選課表Y.StudentNo and 選課表X.CourseNo=選課表Y.CourseNo
    )
)

第五條查詢(xún)的是選修了所有課程的學(xué)生,如果我們將所有課程限定為S1所選的全部課程,那查詢(xún)結(jié)果就變?yōu)檫x修了S1所選的全部課程的學(xué)生,該結(jié)果保證學(xué)生至少選修了S1所選的全部課程,但是選沒(méi)選其他課不清楚。

8、在from語(yǔ)句中使用子查詢(xún),對(duì)查詢(xún)結(jié)果定義表名及列名

--定義表名可以用as也可以不用as
select StudentName,avgScore,CreateDate from
(select StudentName,CreateDate,AVG(Score) from StudentScores group by StudentName,CreateDate)as ta(StudentName,avgScore,CreateDate)
where CreateDate>80

--定義表名可以用as也可以不用as
select StudentName,avgScore,CreateDate from
(select StudentName,CreateDate,AVG(Score) from StudentScores group by StudentName,CreateDate)ta(StudentName,avgScore,CreateDate)
where CreateDate>80

到此這篇關(guān)于SqlServer中Exists的使用小結(jié)的文章就介紹到這了,更多相關(guān)SqlServer Exists內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

最新評(píng)論

临江市| 酒泉市| 通山县| 成武县| 江华| 霍林郭勒市| 浮梁县| 孟连| 台中县| 濉溪县| 隆尧县| 东乡族自治县| 延长县| 梁河县| 五华县| 沙坪坝区| 马山县| 固始县| 韶关市| 海阳市| 印江| 大邑县| 和林格尔县| 孙吴县| 台山市| 德阳市| 左贡县| 吉林省| 化德县| 婺源县| 宁蒗| 保亭| 丹凤县| 红桥区| 永新县| 本溪市| 武义县| 湖北省| 浙江省| 廊坊市| 肥城市|