sql概述数据定义查询更新视图数据控制嵌入式sql内容摘要:

求一列值中的最小值 2020/11/4 数据库原理 78 例 27. 查询学生总人数。 SELECT COUNT (*) FROM Student。 例 28. 查询选修了课程的学生人数。 SELECT COUNT (DISTINCT Sno) FROM SC。 2020/11/4 数据库原理 79 例 29. 计算 2号课程的学生平均成绩。 SELECT AVG(Grade) FROM SC WHERE Cno = 39。 239。 例 30. 查询选修 2号课程的学生最高成绩。 SELECT MAX(Grade) FROM SC WHERE Cno = 39。 239。 2020/11/4 数据库原理 80 2020/11/4 数据库原理 81 5. 对查询结果分组 例 31. 求各个课程号及相应的选课人数。 SELECT Cno, COUNT(Sno) FROM SC GROUP BY Cno。 2020/11/4 数据库原理 82 例 32. 查询选修了 3门以上课程的学生学号。 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) = 3。 HAVING用于分组后按一定条件对这些分组进行筛选。  WHERE子句作用于基本表或视图,从中选择满足条件的元组  HAVING短句作用于组,从中选择满足条件的组 2020/11/4 数据库原理 83 2020/11/4 数据库原理 84 连接查询  等值与非等值连接查询  自身连接  外连接  复合条件连接 2020/11/4 数据库原理 85 1. 等值与非等值连接查询 1) 连接条件一: [表名 1.]列名 1 比较运算符 [表名 2.]列名 2 2) 连接条件二: [表名 1.]列名 1 BETWEEN [表名 2.]列名 2 AND [表名 2.]列名 3  比较运算符 主要有:=、 、 、 =、 =、 !=。  连接查询中用来连接两个表的条件称为连接条件或连接谓词。  连接谓词中的列名称为 连接字段 ,其各字段应是 可比 的。 2020/11/4 数据库原理 86 例 33. 查询每个学生及其选修课程的情况。 等值连接 SELECT Student.*, SC.* FROM Student, SC WHERE =。 自然连接:在等值连接中把目标列中重复的属性列去掉。 SELECT , Sname, Ssex, Sage, Sdept, Cno, Grade FROM Student, SC WHERE =。 2020/11/4 数据库原理 87 2020/11/4 数据库原理 88 2. 自身连接 例 34. 查询每门课的间接先修课。 一个表与其自身进行连接 SELECT , FROM Course FIRST , Course SECOND WHERE =。 2020/11/4 数据库原理 89 2020/11/4 数据库原理 90 3. 外连接 在连接条件的某侧加上 (* ) 或 (+), 表示该侧所对应的表中可形成一个各数据项均为空值的万能替代行 , 用来与另一侧对应的表中所有不满足条件的元组进行连接。 外连接符 (* )或( +) 出现在左侧称为右外连接 、 出现在右侧称为左连接 、 两侧都出现的称为全外连接。 2020/11/4 数据库原理 91 例 35. 查询每个学生及其选修课的情况。 SELECT , Sname, Ssex, Sage, Sdept, Cno, Grade FROM SC RIGHT JOIN Student ON =。 2020/11/4 数据库原理 92 2020/11/4 数据库原理 93 4. 复合条件连接 例 36. 查询选修了 2号课程且成绩在 90分以上的所有学生。 WHERE子句中有多个连接条件 SELECT , Sname FROM Student, SC WHERE = AND = 39。 239。 AND = 90。 2020/11/4 数据库原理 94 例 37. 查询每个学生的学号、姓名、选修课程名及成绩。 多表连接 SELECT , Sname, Cname, Grade FROM Student, SC, Course WHERE = AND =。 2020/11/4 数据库原理 95 2020/11/4 数据库原理 96 嵌套查询 在 SQL语言中 , 一个 SELECTFROMWHERE语句称为一个 查询块。 一个查询块嵌套在另一个查询块的 WHERE子句或 HAVING短语的条件中的查询称为 嵌套查询。 例如: SELECT Sname FROM Student WHERE Sno IN SELECT Sno FROM SC WHERE Cno = 39。 239。 外层查询 内层查询 不能使用ORDER BY子句 2020/11/4 数据库原理 97  带有 IN谓词的子查询  带有比较运算符的子查询  带有 ANY或 ALL谓词的子查询  带有 EXISTS谓词的子查询 嵌套查询 2020/11/4 数据库原理 98 例 38. 查询与 “ 刘晨 ” 在同一个系学习的学生。 SELECT Sno, Sname, Sdept FROM Student WHERE Sdept IN (SELECT Sdept FROM Student WHERE Sname= 39。 刘晨 39。 )。 (1)首先在 Student关系中找出刘晨所在的系,结果为 39。 IS 39。 (2)其次在 Student关系中找出 39。 IS39。 系的学生 IN谓词的子查询 或 SELECT , , FROM Student S1, Student S2 WHERE = AND = 39。 刘晨 39。 ; 2020/11/4 数据库原理 99 2020/11/4 数据库原理 100 例 39. 查询选修了课程名为 “ 信息系统 ” 的学生学号和姓名。 SELECT Sno, Sname FROM Student WHERE Sno IN (SELECT Sno FROM SC WHERE Cno IN (SELECT Cno FROM Course WHERE Cname = 39。 信息系统 39。 ))。 (1)首先在 Course关系中找出 “ 信息系统的课程号 ” ,结果为 3。 (2)其次在 SC关系中找出选修 3号课程的学生 (3)最后在 Student关系中取出学号和姓名。 或 SELECT Sno, Sname FROM Student, SC, Course WHERE = AND = AND = 39。 信息系统 39。 ; 2020/11/4 数据库原理 101 2020/11/4 数据库原理 102 例 40. 查询与 “ 刘晨 ” 在同一个系学习的学生。 内存查询返回的是 单值 时,可以用比较运算符;子查询要跟在比较符之后。 SELECT Sno, Sname, Sdept FROM Student WHERE Sdept = (SELECT Sdept FROM Student WHERE Sname = 39。 刘晨 39。 )。 2020/11/4 数据库原理 103 2020/11/4 数据库原理 104 ANY或 ALL谓词的子查询 子查询返回单值时可以用比较运算符,而使用 ANY或 ALL谓词时必须同时使用比较运算符。 其语义为: (=、 =)ANY 大于(大于等于、等于)子查询结果中的某个值 (=、 =)ALL 大于(大于等于、等于)子查询结果中的所有值 (=)ANY 小于(小于等于)子查询结果中的某个值 (=)ALL 小于(小于等于)子查询结果中的所有值 !=(或 )ANY 不等于子查询结果中的某个值 !=(或 )ALL 不等于子查询结果中的任何一个值 2020/11/4 数据库原理 105 例 41. 查询其他系中比信息系某一学生年龄小的学生姓名和年龄。 SELECT Sname, Sage FROM Student WHERE Sage ANY (SELECT Sage FROM Student WHERE Sdept = 39。 IS39。 ) AND Sdept 39。 IS 39。 或 SELECT Sname, Sage FROM Student WHERE Sage (SELECT MAX(Sage) FROM Student WHERE Sdept = 39。 IS 39。 ) AND Sdept 39。 IS 39。 2020/11/4 数据库原理 106 2020/11/4 数据库原理 107 例 42. 查询其他系中比信息系所有学生年龄小的学生姓名和年龄。 SELECT Sname, Sage FROM Student WHERE Sage ALL (SELECT Sage FROM Student WHERE Sdept = 39。 IS39。 ) AND Sdept 39。 IS39。 或 SELECT Sname, Sage FROM Student WHERE Sage (SELECT MIN(Sage) FROM Student WHERE Sdept = 39。 IS39。 ) AND Sdept 39。 IS39。 2020/11/4 数据库原理 108 = 或 != = = ANY IN __ MAX =MAX MIN =MIN ALL __ NOT IN MIX =MIN MAX MAX 表 34 ANY, ALL谓词与集函数及 IN谓词的等价转换关系 集函数实现子查询比直接用 ANY或 ALL查询效率更高。 2020/11/4 数据库原理 109 EXISTS谓词的子查询  不相关子查询: 子查询的查询条件不依赖于父查询的子查询。  相关子查询 (Correlated Subquery): 子查询的查询条件依赖于外层父查询的某个属性值的子查询。 带 EXISTS 的子查询就是相关子查询  EXISTS表示存在量词  带有 EXISTS的子查询不返回任何记录的数据,只返回逻辑值 39。 True39。 或 39。 False39。 2020/11/4 数据库原理 110 例 431. 查询所有选修了 1号课程的学生姓名。 SELECT Sname FROM Student WHERE Sno IN (SELECT SNO FROM SC WHERE = 39。 139。 )。 不相关子查询 2020/11/4 数据库原理 111 例 432. 查询所有选修了 1号课程的学生姓名。 SELECT Sname FROM Student WHERE EXISTS (SELECT * FROM SC WHERE Sno= AND Cno= 39。 139。 )。 执行过程: 先在外层查询中取 Student表的第一个元组,用该元组的相关的属性值(在内层。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。