二、相关子查询

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

注意:将子查询做为结果集,那么必须要为这个结果集取一个别名

--pageIndex=2  pageSize=5
select * from (select ROW_NUMBER() over (order by did) as num ,* from DonationDetail ) tab
where num>=6 and num <=10
--pageIndex=3  pageSize=5
select top 5 * from (select ROW_NUMBER() over (order by did)  as num,* from DonationDetail) tab
where num not in (select top (3*5-5) ROW_NUMBER() over (order by did) as num2 from DonationDetail) 

ROW_NUMBER() over (order by 字段):

根据指定的字段排序,对排序后的结果集的每一行添加一个不间断的行号。

用的时候需注意:如果使用生成行号的查询用作结果集,那么必须为该结果集取一个别名,同时生成的行号字段也要取一个别名

知识改变命运