sql server——子查詢

來源:互聯網
上載者:User

標籤:

簡述:

在查詢語句中包含著有另外一條查詢語句,被包含的查詢語句稱為子查詢,包含著子查詢的查詢就稱為父查詢。

總之,子查詢就是在查詢語句裡嵌套一條或者多條查詢語句。

 

 

常用子查詢分類:

一、獨立子查詢

 特徵:子查詢語句可以獨立運行

 

 

 

二、相互關聯的子查詢

select *  from student where  majorId = (select majorId from  major where majorId=student.majorId)

特徵:子查詢中引用了父查詢中的欄位,依賴於父查詢

 

 

 

子查詢的使用

 

 

 

一、子查詢做為查詢條件

描述:當一條查詢語句需要一個外部的值做為條件的時候,可以使用一個獨立的查詢先得到這個值,在將值返回進行條件的判斷。

 

注意1:使用子查詢做為條件的時候,子查詢的查詢結果只能返回一列的值,如果返回多列將報錯:

 

注意2:子查詢如果返回單列多行的結果,應該在查詢語句where 後將"="換成"in",in關鍵字可以接收多行結果集。使用"="接收多行報錯:

 

注意3:如果子查詢做為條件返回的是,多行多列的結果集,可以採用exists接收查詢結果

 

 

 

 

二、將子查詢做為一個結果集

select * from  (select  *  from student where majorId=1) tab where stuGender=1

注意:將子查詢做為結果集,那麼必須要為這個結果集取一個別名

 

 

 

 

三、將子查詢做為查詢語句中的某一列

select  stuName,(select majorName  from major where student.majorId=major.majorId) from  student

 

 

 

 

四、子查詢實現分頁

 

方式1:

--pageIndex=2  pageSize=5select * from (select ROW_NUMBER() over (order by did) as num ,* from DonationDetail ) tabwhere num>=6 and num <=10

 

 

方式2:

--pageIndex=3  pageSize=5select top 5 * from (select ROW_NUMBER() over (order by did)  as num,* from DonationDetail) tabwhere num not in (select top (3*5-5) ROW_NUMBER() over (order by did) as num2 from DonationDetail) 

 

 

ROW_NUMBER() over (order by 欄位):

根據指定的欄位排序,對排序後的結果集的每一行添加一個不間斷的行號。

用的時候需注意:如果使用產生行號的查詢用作結果集,那麼必須為該結果集取一個別名,同時產生的行號欄位也要取一個別名

 

sql server——子查詢

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.