欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1、簡介

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

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

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

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

課程表:課程號CourseNo、課程名CourseName

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

In語句查詢:

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

Exists查詢:

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

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

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

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

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

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

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

--外層查詢、外層not exists
select StudentName from 學(xué)生表 where not exists 
(    
    --內(nèi)層查詢、內(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,說明選課表中找不到“S1.StudentNo + C1.CourseNo”這一記錄,說明學(xué)生S1沒有選課程C1,此時(shí)內(nèi)層查詢的返回結(jié)果集會加上C1,當(dāng)內(nèi)層查詢的返回結(jié)果集不為空時(shí),外層not exists()值為false,則外層where子句值為false,則S1被排除。
當(dāng)內(nèi)層查詢的返回結(jié)果集不為空時(shí),說明S1至少有一門課程沒選 。

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

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

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

--外層查詢、外層not exists
select StudentName from 學(xué)生表 where not exists 
(    
    --內(nèi)層查詢、內(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
    )
)

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

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

--外層查詢、外層not exists
select StudentName from 學(xué)生表 where not exists 
(    
    --內(nèi)層查詢、內(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
    )
)

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

8、在from語句中使用子查詢,對查詢結(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • sqlserver中如何查詢出連續(xù)日期記錄的代碼

    sqlserver中如何查詢出連續(xù)日期記錄的代碼

    Insus.NET嘗試寫了程序并做了測試,可以得到預(yù)期的結(jié)果,SQL代碼可參考和學(xué)習(xí)之用。
    2011-09-09
  • 詳解SQL Server的聚焦過濾索引

    詳解SQL Server的聚焦過濾索引

    本文主要講解了通過過濾索引來提高查詢性能,同時(shí)也給出了其不同的場景以及其使用優(yōu)點(diǎn)和明顯的缺點(diǎn)。簡短的內(nèi)容,深入的理解,有興趣的朋友可以看下
    2016-12-12
  • 一些SQLServer存儲過程參數(shù)及舉例

    一些SQLServer存儲過程參數(shù)及舉例

    一些SQLServer存儲過程參數(shù)及舉例,需要的朋友可以參考下。
    2011-03-03
  • SQL查詢數(shù)據(jù)是否存在的實(shí)現(xiàn)示例

    SQL查詢數(shù)據(jù)是否存在的實(shí)現(xiàn)示例

    在后端開發(fā)中,經(jīng)常需要使用數(shù)據(jù)庫來存儲和管理數(shù)據(jù),一個(gè)常見的任務(wù)是檢查數(shù)據(jù)庫中是否存在數(shù)據(jù),本文主要介紹了SQL查詢數(shù)據(jù)是否存在,感興趣的可以了解一下
    2024-02-02
  • 淺析SQL Server的嵌套存儲過程中使用同名的臨時(shí)表怪像

    淺析SQL Server的嵌套存儲過程中使用同名的臨時(shí)表怪像

    這篇文章主要介紹了淺析SQL Server的嵌套存儲過程中使用同名的臨時(shí)表怪像,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • SQL Server 數(shù)據(jù)庫備份和還原認(rèn)識和總結(jié)(二)

    SQL Server 數(shù)據(jù)庫備份和還原認(rèn)識和總結(jié)(二)

    本文將針對上文繼續(xù)進(jìn)行數(shù)據(jù)備份和還原講解,主要講解備份和還原的一些關(guān)鍵選項(xiàng)
    2012-08-08
  • SQL Server查詢條件IN中能否使用變量的示例詳解

    SQL Server查詢條件IN中能否使用變量的示例詳解

    這篇文章主要介紹了SQL Server查詢條件IN中能否使用變量,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • SQL Server中實(shí)現(xiàn)數(shù)據(jù)庫的自定義視圖

    SQL Server中實(shí)現(xiàn)數(shù)據(jù)庫的自定義視圖

    在SQL Server的數(shù)據(jù)處理和分析中,視圖(View)是一種虛擬的表,其內(nèi)容由SQL查詢定義,自定義視圖允許用戶根據(jù)需要?jiǎng)?chuàng)建個(gè)性化的數(shù)據(jù)展示,本文將詳細(xì)介紹如何在SQL Server中實(shí)現(xiàn)數(shù)據(jù)庫的自定義視圖,需要的朋友可以參考下
    2024-07-07
  • SQL查詢效率注意事項(xiàng)小結(jié)

    SQL查詢效率注意事項(xiàng)小結(jié)

    SQL查詢效率注意事項(xiàng)小結(jié),需要的朋友可以參考下。
    2011-12-12
  • 一文掌握SQL的 joins 語法

    一文掌握SQL的 joins 語法

    SQL JOIN是結(jié)合兩個(gè)或多個(gè)表的數(shù)據(jù)的一種方式,INNER JOIN返回兩表匹配的記錄;LEFT JOIN返回左表所有記錄及右表匹配記錄;RIGHT JOIN返回右表所有記錄及左表匹配記錄;FULL JOIN返回兩表中所有記錄,無論是否匹配,這些JOIN類型有助于靈活查詢和分析關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)
    2024-09-09

最新評論