编辑: 苹果的酸 | 2017-08-31 |
刘晨 '
;
结果为: CS 带有IN谓词的子查询(续) ② 查找所有在CS系学习的学生.SELECT Sno, Sname, Sdept FROM Student WHERE Sdept= '
CS '
;
结果为: Sno Sname Sdept
201215121 李勇 CS
201215122 刘晨 CS 带有IN谓词的子查询(续) 将第一步查询嵌入到第二步查询的条件中 SELECT Sno, Sname, Sdept FROM Student WHERE Sdept IN (SELECT Sdept FROM Student WHERE Sname= '
刘晨 '
);
此查询为不相关子查询. 带有IN谓词的子查询(续) 用自身连接完成[例3.55]查询要求 SELECT S1.Sno, S1.Sname,S1.Sdept FROM Student S1,Student S2 WHERE S1.Sdept = S2.Sdept AND S2.Sname = '
刘晨'
;
带有IN谓词的子查询(续) [例3.56]查询选修了课程名为 信息系统 的学生学号和姓名 SELECT Sno,Sname ③ 最后在Student关系中 FROM Student 取出Sno和Sname WHERE Sno IN (SELECT Sno ② 然后在SC关系中找出选 FROM SC 修了3号课程的学生学号 WHERE Cno IN (SELECT Cno ① 首先在Course关系中找出 FROM Course 信息系统 的课程号,为3号WHERE Cname= '
信息系统'
带有IN谓词的子查询(续) 用连接查询实现[例3.56] : SELECT Sno,Sname FROM Student,SC,Course WHERE Student.Sno = SC.Sno AND SC.Cno = Course.Cno AND Course.Cname='
信息系统'
;
3.4.3 嵌套查询 1.带有IN谓词的子查询 2.带有比较运算符的子查询 3.带有ANY(SOME)或ALL谓词的子查询 4.带有EXISTS谓词的子查询 2. 带有比较运算符的子查询 当能确切知道内层查询返回单值时,可用比较运算符(或<
>
).在[例3.55]中,由于一个学生只可能在一个系学习,则可以用 = 代替IN : SELECT Sno,Sname,Sdept FROM Student WHERE Sdept SELECT Sdept FROM Student WHERE Sname= '
刘晨'
);
带有比较运算符的子查询(续) [例3.57 ]找出每个学生超过他选修课程平均成绩的课程号. SELECT Sno, Cno FROM SC x WHERE Grade >
=(SELECT AVG(Grade)FROM SC y WHERE y.Sno=x.Sno);
相关子查询 带有比较运算符的子查询(续) 可能的执行过程 从外层查询中取出SC的一个元组x,将元组x的Sno值(201215121)传送给内层查询. SELECT AVG(Grade) FROM SC y WHERE y.Sno='
201215121'
;
带有比较运算符的子查询(续) 可能的执行过程(续) 执行内层查询,得到值88(近似值),用该值代替内层查询,得到外层查询: SELECT Sno,Cno FROM SC x WHERE Grade >
=88;
带有比较运算符的子查询(续) 可能的执行过程(续) 执行这个查询,得到 (201215121,1) (201215121,3) 然后外层查询取出下一个元组重复做上述①至③步骤,直到外层的SC元组全部处理完毕.结果为: (201215121,1) (201215121,3) (201215122,2) 3.4.3 嵌套查询 1.带有IN谓词的子查询 2.带有比较运算符的子查询 3.带有ANY(SOME)或ALL谓词的子查询 4.带有EXISTS谓词的子查询 带有ANY(SOME)或ALL谓词的子查询 (续) 使用ANY或ALL谓词时必须同时使用比较运算语义为:ANY大于子查询结果中的某个值 >
ALL大于子查询结果中的所有值<
ANY小于子查询结果中的某个值 <
ALL小于子查询结果中的所有值>
= ANY大于等于子查询结果中的某个值 >
= ALL大于等于子查询结果中的所有值 带有ANY(SOME)或ALL谓词的子查询 (续) 使用ANY或ALL谓词时必须同时使用比较运算语义为(续))[AS] [WHERE ] [GROUP BY [HAVING]] [ORDER BY [ASC|DESC]];
1. 目标列表达式的可选格式 目标列表达式格式(1) *(2) .*(3) COUNT([DISTINCT|ALL]* )(4) [.][,.]]…其中可以是由属性列、作用于属性列的聚集函数和常量的任意算术运算(组成的运算公式 2. 聚集函数的一般格式 COUNT SUM AVG ([DISTINCT|ALL] MAX MIN 3. WHERE子句的条件表达式的可选格式 (1)属性列名>