第3章 关系数据库标准语言SQL(下).ppt_第1页
第3章 关系数据库标准语言SQL(下).ppt_第2页
第3章 关系数据库标准语言SQL(下).ppt_第3页
第3章 关系数据库标准语言SQL(下).ppt_第4页
第3章 关系数据库标准语言SQL(下).ppt_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据库应用与设计,3.5 数据查询功能,SQL的核心是查询。SQL的查询命令也称作SQL SELECT命令,该命令使用非常灵活,可以完成复杂的查询。 要求熟练掌握SQL SELECT命令的使用。,数据库应用与设计,SQL SELECT命令的语法,SELECT ALL|DISTINCTTOP expression PERCENTWITH TIES select_list INTO new_table FROM table_source WHERE search_condition GROUP BY group_by_expression HAVING search_condition ORDER

2、 BY order_expression ASC | DESC COMPUTE AVG|COUNT|MAX|MIN|SUM(expression) ,.n BY expression ,.n ,SQL Server还支持查询结果的并、交、差和广义笛卡尔积运算。,数据库应用与设计,各种运算符和表达式,关系运算符 NOT BETWEENAND match_expression NOT LIKE pattern expression IS NOT NULL test_expression NOT IN (subquery | expression ,.n ) 并(UNION)、交(INTERSECT

3、)、差(EXCEPT)运算,数据库应用与设计,关系运算符,关系运算符包括: 等于(=) 不等于(或!=) 大于() 大于等于(=) 不大于(!) 小于() 小于等于(=) 不小于(!),可以用 逻辑与(AND) 逻辑或(OR) 逻辑非(NOT) 对表达式进行逻辑运算,如表达式: 学时=40 学时=50 AND 学时=60,数据库应用与设计,区间判断 NOT BETWEENAND,如表达式: 学时 BETWEEN 50 AND 60,test_expression NOT BETWEEN begin_expression AND end_expression,等价于: 学时=50 AND 学时=

4、60,表达式: 学时 NOT BETWEEN 50 AND 60,等价于: 学时60,数据库应用与设计,字符串匹配,match_expression NOT LIKE pattern match_expression是要进行匹配比较的字符串表达式 pattern是含有通配符的字符串“模版”,数据库应用与设计,字符串匹配,数据库应用与设计,空值判断,expression IS NOT NULL 空值是一个概念而不是一个具体的值,所以不能用相等或不相等进行比较。,例如: 责任教师 IS NULL 而不能写为: 责任教师 = NULL,数据库应用与设计,判断元素是否属于集合,test_express

5、ion NOT IN (subquery | expression ,.n ) 用来确定给定的表达式的值是否与子查询或集合列表中的值匹配。,如: 职称 IN (讲师,副教授 ,教授),数据库应用与设计,集合运算,并(UNION) 交(INTERSECT) 差(EXCEPT)运算,数据库应用与设计,通过实践来学习,简单查询 连接查询 分组与汇总查询 嵌套查询,图3-1 样本数据库,数据库应用与设计,图3-1 样本数据库,简单查询,例31:查询学生的全部信息。 例32:查询所有课程名称和学时信息。 例33:查询学时大于等于40的课程编号和课程名称。 例34:查询课时在50到60(含)之间的课程信息

6、。 例35:同例4,使用BETWEEN。 例36:查询具有教授和副教授职称的教师信息。 例37:查询责任教师字段为空值的记录。 例38:查询职称为讲师或副教授的教师信息。,数据库应用与设计,几个关键词,ALL(默认):查询结果中保留重复行 DISTINCT :查询结果中删除重复行 INTO:将查询结果存储到指定的表 SELECT INTO ORDER BY:查询结果排序 ORDER BY order_expression ASC | DESC TOP:只返回查询结果的“前”一组结果 TOP (expression) PERCENT WITH TIES ,数据库应用与设计,图3-1 样本数据库,

7、简单查询,例39:查询或浏览课程性质和学时信息。 例40:查询“专业基础”课程的信息,并将结果存储到Student模式下、表名为“专业基础”。 例41:按教师编号升序列出所有教师信息。 例42:查询所有学生信息,先按生源升序排序、再按学号升序排序。 例43:从选课表中查询考试成绩最高的3条选课信息。 例44:从选课表中查询考试成绩最高的3条选课信息,如果有与第三条记录的考试成绩并列记录的也列出。 例45:从选课表中查询考试成绩在前15%的选课记录信息,如果随后有成绩并列的记录也一起列出。,数据库应用与设计,图3-1 样本数据库,集合运算,例46:查询职称为教授和副教授的教师姓名和专业(用集合并

8、运算完成)。 例47:查询具有教授职称并是课程责任教师的教师编号(用集合交运算完成)。 例48:查询不是课程责任教师的教师编号(用集合差运算完成)。,数据库应用与设计,连接查询,SELECT FROM INNER|LEFT|RIGHT|FULL OUTER JOIN ON INNER|LEFT|RIGHT|FULL OUTER JOIN ON , n WHERE ,当查询涉及多个表、特别是当查询结果的数据涉及多个表时需要使用连接查询。,数据库应用与设计,连接查询,图3-1 样本数据库,例3-49:查询教师所负责的课程信息(责任教师的姓名、职称、负责的课程名称和课程性质)。 例3-50:查询教师

9、所负责的课程信息,同时列出没有确定责任教师的课程。 例3-51:查询教师所负责的课程信息,同时列出不是责任教师的教师信息。 例3-52:查询教师所负责的课程信息,同时列出没有确定责任教师的课程信息和不是责任教师的教师信息。 例3-53:查询考试成绩在90分以上(含)的学生的学号、姓名、相应的课程名称和考试成绩。 例3-54:查询考试成绩在90分以上(含)的学生的学号、姓名、相应的课程名称和考试成绩(使用CROSS JOIN连接完成查询)。,数据库应用与设计,分组与汇总查询,SQL SELECT查询可以直接对查询结果进行汇总计算,也可以对查询结果进行分组计算。在查询中完成计算的函数称作聚合函数,

10、分组查询分为GROUP BY分组和COMPUTE BY分组两种。,数据库应用与设计,聚合函数,常用: COUNT AVG MIN MAX SUM,其他: CHECKSUM CHECKSUM_AGG COUNT_BIG GROUPING STDEV STDEVP VAR VARP 等,数据库应用与设计,聚合函数与汇总查询,SELECT FROM table_source WHERE search_condition GROUP BY group_by_expression HAVING search_condition ORDER BY order_expression ASC | DESC C

11、OMPUTE BY expression ,.n ,聚合函数是对初始的查询结果进行计算然后得到最终的查询结果,所以聚合函数只可以用在: SELECT子句的选择列表; 限定GROUP BY分组的HAVING子句; 完成计算的COMPUTE子句。,数据库应用与设计,汇总查询,例3-55:查询目前有多少责任教师。 例3-56:查询数据库课程的平均成绩。,图3-1 样本数据库,对SELECT的全体查询结果进行汇总计算。 SELECT ,n FROM WHERE search_condition,数据库应用与设计,GROUP分组查询与计算,SELECT子句和GROUP BY子句中的group_by_ex

12、pression是相对应的,它是分组标识,通常是字段; WHERE子句中的search_condition是查询条件,它与分组无关,执行查询时是先查找满足条件的记录,然后对满足条件的记录进行分组; HAVING子句用来限定分组,所以该子句中的search_condition是分组的记录应该满足的条件,HAVING子句必须配合GROUP BY子句使用; 分组时使用聚合函数对每一组的记录进行计算,并且同时可以进行多种计算。,SELECT group_by_expression , , n FROM WHERE search_condition GROUP BY group_by_expressio

13、n HAVING search_condition,数据库应用与设计,图3-1 样本数据库,GROUP分组查询举例,例3-57:查询各院系教师的人数(显示院系名称和教师人数)。 例3-58:查询各门课程考试成绩的平均分、最高分和最低分。 例3-59:查询专业基础课平均分大于等于60分的各门课程考试成绩的平均分、最高分和最低分。,使用GROUP BY分组查询只能查询到分组的结果,而不能看到组内记录的明细信息。,数据库应用与设计,COMPUTE分组查询与计算,SELECT子句指出查询明细; COMPUTE子句指定用聚合函数进行计算,如果指定BY子句则说明进行分组计算; 为了保证分组计算的正确必须同

14、时使用ORDER BY子句,这两个子句中的expression是相对应的; 可以进行分组汇总和全部汇总。,SELECT FROM WHERE search_condition ORDER BY expression ASC | DESC ,.n COMPUTE , n BY expression ,.n ,数据库应用与设计,图3-1 样本数据库,COMPUTE查询举例,例3-60:查询所有专业基础课的信息,并计算其总学时。 例3-61:查询学生的考试成绩(要求查询学号、姓名、课程名称和考试成绩),同时计算每个学生的平均成绩、最高成绩和最低成绩。 例3-62:查询学生的考试成绩(要求查询学号、姓

15、名、课程名称和考试成绩),同时计算每个学生的平均成绩、最高成绩和最低成绩。同时计算所有学生的平均成绩、最高成绩和最低成绩。,数据库应用与设计,嵌套查询,SQL SELECT语句的查询结果是一个集合,它可以直接用于其他查询,通常把这种查询称作嵌套查询。 使用IN运算的嵌套查询 使用量词ANY、SOME、ALL进行比较的嵌套查询 使用谓词EXISTS进行判断的嵌套查询,数据库应用与设计,使用IN运算的嵌套查询,和出自同一个值域,并且通常是字段,SELECT FROM WHERE AND IN (SELECT FROM WHERE ),数据库应用与设计,图3-1 样本数据库,嵌套查询举例,例3-63

16、:查询由教授负责的课程信息(课程编号、课程名称、学时和课程性质)。,数据库应用与设计,使用量词ANY、SOME、ALL进行比较的嵌套查询,和出自同一个值域,并且通常是字段; 一般在查询时是一个值,而是内层查询结果的值的集合; ANY和SOME是同义词,表示和内层查询结果中的值的集合中的某个(或某些)值进行比较;而ALL表示和内层查询结果中的值的集合中的全部值进行比较。,SELECT FROM WHERE AND ANY | SOME | ALL (SELECT FROM WHERE ),数据库应用与设计,图3-1 样本数据库,嵌套查询举例,例3-64:查询责任教师的有关信息(姓名、性别、职称、

17、专业)。 例3-65:查询有考试成绩大于数据库课程全部考试成绩的学生信息。 例3-66:查询“系统分析与设计”课程的责任教师的姓名、职称,以及所负责的其他课程(课程编号和课程名称)。,数据库应用与设计,内外层互相关嵌套查询,不仅外层查询可以利用内层查询的结果,内层查询也可以要求外层查询提供有关数据。,数据库应用与设计,图3-1 样本数据库,举例,学生表增加一个平均分字段 ALTER TABLE student.学生ADD 平均分INT 例3-67:根据选课表计算每个学生的平均成绩,并将计算结果写到学生表的平均分字段。,数据库应用与设计,使用谓词EXISTS进行判断的嵌套查询,内层的search

18、_condition一定会引用外层提供的值。,SELECT FROM WHERE AND NOT EXISTS (SELECT FROM WHERE search_condition ),数据库应用与设计,EXISTS查询举例,图3-1 样本数据库,例3-68:查询哪些学生(学号和姓名)有未完成考试的课程(考试成绩为NULL)。 例3-69:查询哪些学生(学号和姓名)没有未完成考试的课程(考试成绩为NULL)。,数据库应用与设计,思考题,讨论SELECT短语中ALL、 DISTINCT、TOP、PERCENT和WITH TIES等关键词的作用。 在LIKE字符串匹配查询中,如果通配符是字符串的

19、一部分应该如何查询?例如数据库表的字段中可能存储带有“%”的通过率或折扣率等形式的信息。(提示:可以使用ESCAPE escape_ character在字符串中搜索通配符。) SQL SELECT查询可以分为哪几类?每类查询可以满足什么样的查询需求?,数据库应用与设计,思考题,试述在SELECT语句中WHERE短语和HAVING短语各自的作用。 在SELECT语句中不使用JOINON如何实现连接查询? 在连接运算或查询中为什么还需要外(OUTER)连接? 使用COMPUTE BY分组查询是否能够完成GROUP BY分组查询的功能?反之呢? 在SELECT查询中聚合函数的作用是什么?聚合函数可

20、以用在哪些短语中?,数据库应用与设计,思考题,在SELECT语句中COMPUTE BY和COMPUTE有什么区别? 什么是嵌套查询? 当外层查询中的属性要和内层查询的结果进行比较时有哪些情况需要注意? 什么是内外层互相关嵌套查询?这样的嵌套查询有什么特点? 使用EXISTS的嵌套查询是内外层互相关嵌套查询,否则的话会是什么结果?,数据库应用与设计,思考题,连接查询是否可以写出等价的嵌套查询? 嵌套查询是否可以写出等价的连接查询? 在SQL SELECT语句中关系代数的选择、投影、连接都很容易表达出来,用SQL SELECT语句如何实现关系代数的除法运算?,数据库应用与设计,3.6 视图,在关系

21、数据库中把独立存在的关系称作基本表; 视图是从基本表派生出来的虚拟表,视图本身不包含数据; 从用户的观点视图和基本表都是关系,视图和基本表一样可以进行查询和操作; 外部模式,对视图的所有操作都将映射到基本表。,数据库应用与设计,视图示意,从基本表院系和教师派生出虚拟的教师列表,物理上不存在,数据分别存储在院系和教师表中,但是用户无需知道这些,数据库应用与设计,视图的定义,定义视图的核心是SQL SELECT语句; 视图中可以重新命名列名。,CREATE VIEW schema_name. view_name (column ,.n ) AS select_statement,数据库应用与设计,

22、举例,例3-70:在student模式中定义一个教授视图,该视图中的数据源自教师表中职称为教授的教师记录。,如果如上的教授视图存在,则如下两条语句等价:,CREATE VIEW student.教授 AS SELECT 教师编号,院系,姓名,性别,专业 FROM student.教师 WHERE 职称=教授,SELECT * FROM student.教授,SELECT 教师编号,院系,姓名,性别,专业 FROM student.教师 WHERE 职称=教授,数据库应用与设计,视图的操作,对用户而言视图和基本表一样都是关系,所以视图可以和基本表一样进行操作; 对视图的所有操作DBMS都要转换成对基本表的操作,所以操作能否成功取决于基本表上的完整性约束。,数据库应用与设计,视图操作举例(参见P43教师表的定义),将刘昌勇

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论