大学计算机第11讲-怎样管理和利用数据II课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《大学计算机第11讲-怎样管理和利用数据II课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学计算机 11 怎样 管理 利用 数据 II 课件
- 资源描述:
-
1、由关系模型到结构化数据库语言SQLResearch Center on Intelligent Computing for Enterprises & Services,Harbin Institute of Technology战德臣哈尔滨工业大学 教授.博士生导师教育部大学计算机课程教学指导委员会委员由关系模型到结构化数据库语言SQL(1)回顾:数据库系统的概念数据格式数据981102 数据库 李四 99秋 02 王四 90谁能访问数据更新数据有什么要求 用户定义的数据安全性约束条件阶段1:User/DBAP通过数据定义语言(DDL)定义数据表的格式阶段2:User/DBAP通过数据操纵语
2、言(DML)操纵数据进出数据库User/DBA通过数据控制语言(DCL)定义数据安全性班级 课程 教师 学期 学号 姓名 成绩981101 数据库 李四 98秋 01 张三 100981101 数据库 李四 98秋 02 张四 90981101 数据库 李四 98秋 03 张五 80981101 计算机 李五 98秋 01 张三 89981101 计算机 李五 98秋 02 张四 98981101 计算机 李五 98秋 03 张五 72981102 数据库 李四 99秋 01 王三 30981102 数据库 李四 99秋 02 王四 90981102 数据库 李四 99秋 03 王武 78学生
3、成绩单DBUserDBMS检查用户合法性检查数据合法性按用户要求的操作执行并返回结果。DBAPp数据库语言SQL 列名 , 列名 表名1 , 表名2, 检索条件 ;语义:将From后面的所有表串接起来,检索出满足“检索条件”的元组,并按给定的列名及顺序进行投影显示。 列名, , 列名( 检索条件 (表名1 表名2 )关系运算式由关系模型到结构化数据库语言SQL(2)由关系模型到结构化数据库语言SQLSQL: Structural Query LanguagepSQL语言是数据库系统的标准语言,它可以定义数据库、操纵数据库和进行数据库控制。pSQL语言主要由以下9个单词引导的操作语句来构成,但每
4、一种语句都能表达复杂的操作请求。 DDL语句引导词:Create(建立), Alter(修改), Drop(撤消)定义Database, Table, View, Index DML语句引导词:Insert(插入), Update(更新), Delete(删除), Select(查询)各种方式的更新与检索操作各种条件的查询操作,如连接查找,模糊查找,分组查找,嵌套查找等各种聚集操作,求平均、求和、等,分组聚集,分组过滤等 DCL语句引导词:Grant, Revoke安全性控制-授权和撤消授权由关系模型到结构化数据库语言SQL(3)什么是结构化数据库语言SQL由关系模型到结构化数据库语言SQL(
5、4)用SQL语言创建数据库并定义表-简介创建课程学习数据库:SCT Create Database SCT;SCT定义学生表:StudentCreate Table Student ( S# char(8) not null , Sname char(10), Ssex char(2), Sage integer, D# char(2), Sclass char(6) );定义课程表:Course Create Table Course ( C# char(3) , Cname char(12), Chours integer, Credit float(1), T# char(3) );同学
6、可自己定义其他的表: Dept, Teacher, SCStudentCoursecreate table 表名( 列名 数据类型 not null , 列名 数据类型 , ) ;由关系模型到结构化数据库语言SQL(5)用SQL语言在所定义表中增加记录-简介insert into 表名 (列名 , 列名 values (值 , 值 , ); 追加学生表中的元组Insert Into Student Values ( 98030101 , 张三, 男, 20, 03, 980301);Insert Into Student ( S#, Sname, Ssex, Sage, D# , Sclass
7、)Values ( 98030102 , 张四, 女, 20, 03, 980301);追加课程表中的元组Insert Into Course /*所有列名省略,须与定义或存储的列名顺序一致Values ( 001 , 数据库, 40, 6, 001); /*如列名未省略,须与语句中列名的顺序一致Insert Into Course(Cname, C#, Credit, Chours, T#);Values (数据库, 001, 6, 20, 001);已经建立好的数据库-供后面学习和训练使用由关系模型到结构化数据库语言SQL(6)已经建立起的数据库SQL-SELECT之简单使用Researc
8、h Center on Intelligent Computing for Enterprises & Services,Harbin Institute of Technology战德臣哈尔滨工业大学 教授.博士生导师教育部大学计算机课程教学指导委员会委员Select 的简单语法形式为: 列名 , 列名 表名 检索条件 ;l语义:从所给出的表中,查询出满足的元组,并按给定的及顺序进行投影显示 列名, , 列名( 检索条件 (表名)SQL-SELECT之简单使用(1)基本检索操作的表达方法 例如:检索学生表中所有学生的信息Select S#, Sname, Ssex, Sage, Sclass
9、, D# From Student ; Select * From Student ; /如投影所有列,则可以用*来简写 再如:检索学生表中所有学生的姓名及年龄Select Sname, Sage /投影出某些列 From Student ; 再如:检索学生表中所有年龄小于19岁的学生的年龄及姓名Select Sage, Sname /投影的列可以重新排定顺序 From StudentWhere Sage 80 ; /有重复元组出现,比如一个同学两门以上课程大于80Select DISTINCT S# From SCWhere Score 80; /重复元组被DISTINCT过滤掉,只保留一份
10、检索结果去重复:DISTINCT表(Table)和关系(Relation)在大部分情况下概念通用,但有细微差别: 前者可允许有重复元组, 而后者不允许SQL-SELECT之简单使用(3)如何去掉检索结果的重复元组或记录呢?Select语句中结果排序是通过增加order by子句实现的意义为结果按指定列名进行排序,若后跟asc或省略,则为升序;若后跟desc, 则为降序。例如:按学号由小到大的顺序显示出所有学生的学号及姓名Select S#, Sname From StudentOrder By S# ASC ; 再如:检索002号课大于80分的所有同学学号并按成绩由高到低顺序显示Select
11、S# From SC Where C# = 002 and Score 80Order By Score DESC ;检索结果的排序SQL-SELECT之简单使用(4)如何对检索结果进行排序呢?SELECT FROM WHERE ORDER BY 比如检索“姓张的学生”,检索“张某某”,这类查询问题,Select语句是通过在检索条件中引入运算符like来表示的 含有like运算符的表达式 找出匹配给定字符串的字符串。其中给定字符串中可以出现%, _等匹配符. 匹配规则:q “%” 匹配零个或多个字符q “_” 匹配任意单个字符q “ ” 转义字符,用于去掉一些特殊字符的特定含义,使其被作为普通
12、字符看待, 如用 “%”去匹配字符%,用_ 去匹配字符_SQL-SELECT之简单使用(5)如何表达模糊性的查询内容呢?模糊查询 例如:检索所有姓张的学生学号及姓名Select S#, Sname From StudentWhere Sname Like 张% ; 再如:检索名字为张某某的所有同学姓名Select Sname From Student Where Sname Like 张_ _; 再如:检索名字不姓张的所有同学姓名Select Sname From Student Where Sname Not Like 张%;SQL-SELECT之简单使用(5)如何表达模糊性的查询内容呢?S
13、QL-SELECT之简单使用(6)小结? 例如:检索学生表中所有学生的信息Select S#, Sname, Ssex, Sage, Sclass, D# From Student ; Select * From Student ; /如投影所有列,则可以用*来简写 再如:检索学生表中所有学生的姓名及年龄Select Sname, Sage /投影出某些列 From Student ; 再如:检索学生表中所有年龄小于19岁的学生的年龄及姓名Select Sage, Sname /投影的列可以重新排定顺序 From StudentWhere Sage T2.Salary ;求年龄有差异的任意两位
14、同学的姓名Select S1.Sname as Stud1, S2.Sname as Stud2 From Student S1, Student S2Where S1.Sage S2.Sage ;请同学书写一下:求001号课程有成绩差的任意两位同学有时表名很长时,为书写条件简便,也定义表别名,以简化书写。Student(S#,Sname,Ssex,Sage,D#,Sclass)Course(C#,Cname,Chours,Credit,T#)SC(S#,C#,Score)Dept(D#,Dname,Dean)Teacher(T#,Tname,D#,Salary)SQL-SELECT之多表联合
15、操作(3)多表联合检索之表与列的别名再如:求既学过“001”号课又学过 “002”号课的所有学生的学号(二表连接)Select SC1.S# From SC SC1, SC SC2Where SC1.S# = SC2.S# and SC1.C#=C01 and SC2.C#=C02 ; 再如:求“C01”号课成绩比“C02”号课成绩高的所有学生的学号(二表连接)Select SC1.S# From SC SC1, SC SC2Where SC1.S# = SC2.S# and SC1.C#=C01 and SC2.C#=C02 and SC1.Score SC2.Score;SQL-SELEC
16、T之多表联合操作(4)多表联合检索之表与自身的连接正确理解汉语表达的查询语义,正确表达为SQL语句 例如:列出没学过李明老师讲授课程的所有同学的姓名? 如下书写SQL语句会得到正确结果吗?它能得到什么结果?怎样正确书写?Select Sname From Student S, SC, Course C, Teacher TWhere T.Tname 李明 and C.C# = SC.C# and SC.S# = S.S# and T.T# = C.T#;/正确的SQL语句在讲义后面的示例中讲解SQL-SELECT之多表联合操作(5)多表联合检索之语义之理解 IN子查询。其基本语法为: 语义:判
17、断某一表达式的值是否在子查询的结果中。 再例如:列出选修了001号课程的学生的学号和姓名Select S#, Sname From StudentWhere S# in ( Select S# From SC Where C# = 001 ) ;再例如:求既学过001号课程, 又学过002号课程的学生的学号Select S# From SCWhere C# = 001 and S# in ( Select S# From SC Where C# = 002 ) ;SQL-SELECT之多表联合操作(6)多表联合检索之嵌套子查询 再例如:列出没学过李明老师讲授课程的所有同学的姓名?Select
18、Sname From StudentWhere S# not in ( Select S# From SC, Course C, Teacher T Where T.Tname = 李明 and SC.C# = C.C# and T.T# = C.T# );SQL-SELECT之多表联合操作(6)多表联合检索之嵌套子查询非相关子查询Select Sname From StudentWhere S# not in ( Select S# From SC, Course C, Teacher T Where T.Tname = 李明 and SC.C# = C.C# and T.T# = C.T#
19、 ) ; 内层查询独立进行,没有涉及任何外层查询相关信息的子查询被称为非相关子查询。内层查询外层查询SQL-SELECT之多表联合操作(7)非相关子查询 vs. 相关子查询 有时,内层查询需要依靠外层查询的某些参量作为限定条件才能进行,这样的子查询称为相关子查询。 外层向内层传递的参量需要使用外层的表名或表别名来限定 例如:求学过001号课程的同学的姓名 Select Sname From Student StudWhere S# in ( Select S# From SC Where S# = Stud.S# and C# = 001 ) ; 注意:相关子查询只能由外层向内层传递参数,而不
20、能反之;这也称为变量的作用域原则。相关子查询SQL-SELECT之多表联合操作(8)非相关子查询 vs. 相关子查询再如:求既学过“001”号课又学过 “002”号课的所有学生的学号(二表连接)Select SC1.S# From SC SC1, SC SC2Where SC1.S# = SC2.S# and SC1.C#=C01 and SC2.C#=C02 ; 再如:求“C01”号课成绩比“C02”号课成绩高的所有学生的学号(二表连接)Select SC1.S# From SC SC1, SC SC2Where SC1.S# = SC2.S# and SC1.C#=C01 and SC2.
21、C#=C02 and SC1.Score SC2.Score;SQL-SELECT之多表联合操作(6)小结?SELECT FROM 表名1,表名2, WHERE SELECT FROM WHERE IN ( SELECT FROM WHERE )SQL-SELECT之分组聚集操作Research Center on Intelligent Computing for Enterprises & Services,Harbin Institute of Technology战德臣哈尔滨工业大学 教授.博士生导师教育部大学计算机课程教学指导委员会委员结果计算与聚集函数select子句可以是一些计算
22、表达式或聚集函数,表明在选择和投影的同时直接进行一些运算,如下所示: 列名 | expr | agfunc(列名) , 列名 | expr | agfunc(列名) 表名1 , 表名2 检索条件 ; 计算表达式可以是常量、列名或由常量、列名、特殊函数及算术运算符构成的算术运算式。SQL-SELECT之分组聚集操作(1)SELECT之结果计算与聚集函数?求有差额(差额0)的任意两位教师的薪水差额Select T1.Tname as TR1, T2.Tname as TR2, T1.Salary T2.Salary From Teacher T1, Teacher T2Where T1.Salar
23、y T2.Salary; 结果计算与聚集函数 SQL提供了五个作用在简单列值集合上的内置聚集函数agfunc, 分别是:COUNT、SUM、AVG、MAX、MIN SQL聚集函数的参数类型、结果类型与作用如下:SQL-SELECT之分组聚集操作(1)SELECT之结果计算与聚集函数? 求教师的工资总额Select Sum(Salary) From Teacher; 求计算机系教师的工资总额 Select Sum(Salary) From Teacher T, DeptWhere Dept.Dname = 计算机 and Dept.D# = T.D#; 求数据库课程的平均成绩Select AVG
24、(Score) From Course C, SCWhere C.Cname = 数据库 and C.C# = SC.C#;结果计算与聚集函数SQL-SELECT之分组聚集操作(1)SELECT之结果计算与聚集函数?分组计算与聚集 为解决同时求解若干个集合的聚集运算问题,引出了分组的概念。 SQL可以将检索到的元组按照某一条件进行分类,具有相同条件值的元组划到一个组或一个集合中,这一过程就是分组过程。 分组可以在基本Select语句基础上引入分组子句来完成: 列名 | expr | agfunc(列名) , 列名 | expr | agfunc(列名) 表名1 , 表名2 检索条件 分组条件
25、; 分组条件可以是 列名1, 列名2, SELECT FROM WHERE GROUP BY HAVING ORDER BY SQL-SELECT之分组聚集操作(2)SELECT之分组计算与聚集? 例如: 求每一个学生的平均成绩Select S#, AVG(Score) From SCGroup by S#; 再如:求每一门课程的平均成绩Select C#, AVG(Score) From SCGroup by C#;SQL-SELECT之分组聚集操作(2)SELECT之分组计算与聚集?分组计算与聚集Group by C#Group by S#求不及格课程超过两门的同学的学号,下述写法正确吗?
展开阅读全文