




已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,数据库原理与应用,2,第3章关系数据库标准语言SQL,3.4SQL的数据查询功能3.4.1SELECT语句介绍3.4.2SQL的查询实例及分析,3,3.4SQL的数据查询功能,3.4.1SELECT语句介绍1.SELECT语句的语法SELECT目标列组FROM数据源WHERE元组选择条件GROUPBY分列组HAVING组选择条件ORDERBY排序列1排序要求1,n;,4,语法说明,(1)SELECT子句:指明目标列(字段、表达式、函数表达式、常量)。两个基本表中相同的列名表示为:表名.列名(2)FROM子句:指明数据源。表间用“,”分割。数据源不在当前数据库中,使用“数据库名.表名”表示。一表多用,用别名标识。定义表别名:表名别名(3)WHERE子句:元组选择条件。(4)GROUPBY子句:结果集分组。当目标列中有统计函数,则统计为分组统计,否则为对整个结果集统计。子句后带上HAVING子句表达组选择条件(带函数的表达式)。(5)HAVING短语:筛选出只有满足指定条件的组。(6)ORDERBY子句:对查询结果表排序。当排序要求为ASC时升序排序;排序要求为DESC时降序排列。,5,2.SELECT语句的操作符,(1)算术操作符+(加号)、(减号)、*(乘号)和/(除号)。(2)比较操作符=(等于)、(大于)、=(大于等于)、!=(不等于)、(小于大于)、!(不大于)和!、=、,=,)。与ANY或ALL谓词配合使用,注意:使用嵌套查询进行比较测试时,要求嵌套语句必须是返回单值的查询语句,32,【例3-21】求C1课程的成绩高于刘晨的C1课程成绩的学生学号和成绩。,分析:(1)在学生表中找出刘晨的学号;(2)在选课表中找出刘晨的C1课程的成绩;(3)最后在选课表中求出C1课程成绩大于刘晨的学生学号和成绩。,使用2层嵌套:第一层嵌套使用(大于)操作符号;第二层嵌套使用(等于)操作符号,33,SELECT学号,成绩FROM选课WHERE课程号=C1AND成绩(SELECT成绩FROM选课WHERE课程号=C1AND学号=(SELECT学号FROM学生WHERE姓名=刘晨);,找出大于这个成绩的学生学号、成绩,找出刘晨的C1课程的成绩,找出刘晨的的学号,可用“in”代替,34,In操作符与比较操作符的区别,In操作符用于一个值与多个值的比较;比较操作符用于一个值与另一个值之间的比较,当比较符后面的值需要通过查询才能得到时,就需要使用比较符嵌套查询。,(3)使用ANY或ALL操作符的嵌套查询,格式为:字段比较符ANY|ALL子查询,【例3-22】求其他系中比计算机系某一学生年龄小的学生。SELECT*FROM学生WHERE年龄计算机系;,找出计算机系学生年龄,找出比其中一个年龄小的学生,【例3-23】求其他系中比计算机系学生年龄都小的学生。,SELECT*FROM学生WHERE年龄计算机系;,37,(4)使用EXISTS操作符的嵌套查询,【例3-24】求选修了C2课程的学生姓名。SELECT姓名FROM学生WHEREEXISTS(SELECT*FROM选课WHERE学生.学号=学号AND课程号=C2);,SELECT姓名,课程.课程号FROM学生,课程,选课WHERE课程.课程号=C2AND课程.课程号=选课.课程号AND学生.学号=选课.学号,EXISTS代表存在量词。带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。,38,【例3-25】求没有选修C2课程的学生姓名。,SELECT姓名FROM学生WHERENOTEXISTS(SELECT*FROM选课WHERE学生.学号=学号AND课程号=C2);,39,例子,【例3-26】查询选修了全部课程的学生的姓名。SELECT姓名FROM学生WHERENOTEXISTS(SELECT*FROM课程WHERENOTEXISTS(SELECT*FROM选课WHERE学生.学号=学号AND课程.课程号=课程号);,40,【例3-27】求至少选修了学号为“0102”的学生所选修的全部课程的学生学号和姓名。SELECT学号,姓名FROM学生WHERENOTEXISTS(SELECT*FROM选课选课1WHERE选课1.学号=0102ANDNOTEXISTS(SELECT*FROM选课选课2WHERE学生.学号=选课2.学号AND选课2.课程号=选课1.课程号);,未选“0102”学生所选课的记录,不存在,41,【例3-30】求选修了C1课程但没有选修C2课程的学生学号。,SELECT学号FROM选课WHERE课程号=C1MINUSSELECT学号FROM选课WHERE课程号=C2;,本例也可以用下面的EXISTS嵌套查询表示。,SELECT学号FROM选课选课1WHERE课程号=C1ANDNOTEXISTS(SELECT学号FROM选课选课2WHERE选课1.学号=选课2.学号AND选课2.课程号=C2);,42,课堂练习,1.假设一个数据库中有关系:产品关系P(pno,pn,pr,ps),属性的含义依次为产品号、品名、单价和供应商;分别用关系代数表达式和SQL语句写出下列查询:检索供应商“希望”公司产品的产品号、产品名和单价。2假设一个数据库中有关系:订单关系R(rno,cno,pno,rd,qty)其属性的含义依次为订单号、客户号、产品号、日期和数量。规定一张订单只能订购一种产品。用SQL语句写出下列查询:检索每种产品的订单个数和订购产品的总量。,43,1.关系代数:pno,pn,pr(ps=希望(P)SELECTpno,pn,prFROMPWHEREps=希望2.SELECTcount(rno),sum(qty)FROMRGROUPBYpno,44,4.使用分组和SQL函数查询,【例3-31】求学生的总人数。SELECTCOUNT(*)FROM学生;,45,例子,【例3-32】求选修了课程的学生人数。SELECTCOUNT(DISTINCT学号)FROM选课;,【例3-33】求课程和选修该课程的人数。,【例3-34】求选修课超过3门课的学生学号。,SELECT课程号,COUNT(学号)FROM选课GROUPBY课程号;,SELECT学号FROM选课GROUPBY学号HAVINGCOUNT(*)3;,46,【例3-35】求“C1”课程的平均成绩。SELECT课程号,AVG(成绩)FROM选课WHERE课程号=C1GROUPBY课程号;【例3-36】求学生“0101”的总成绩。SELECTSUM(ALL(成绩)FROM选课WHERE学号=0101【例3-37】求学生“0101”的平均成绩。SELECTAVG(ALL(成绩)FROM选课WHERE学号=0101?思考:不用ALL会有什么变化?若ALL换成DISTINCT呢?,47,查询语句小结,SELECTALL|DISTINCT别名,别名FROM别名,别名WHEREGROUPBY,.HAVINGORDERBYASC|DESC,ASC|DESC;,48,目标列表达式,目标列表达式格式(1).*(2).,.:由属性列、作用于属性列的SQL函数和常量的任意算术运算(+,-,*,/)组成的运算公式。,49,SQL函数格式,COUNTSUMAVG(DISTINCT|ALL)MAXMINCOUNT(DISTINCT|ALL*),50,条件表达式格式,(1)ANY|ALL(SELECT语句),51,条件表达式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论