大学计算机第11讲 怎样管理和利用数据II课件.ppt
《大学计算机第11讲 怎样管理和利用数据II课件.ppt》由会员分享,可在线阅读,更多相关《大学计算机第11讲 怎样管理和利用数据II课件.ppt(103页珍藏版)》请在三一办公上搜索。
1、由关系模型到结构化数据库语言SQL,Research Center on Intelligent Computing for Enterprises & Services,Harbin Institute of Technology,战德臣哈尔滨工业大学 教授.博士生导师教育部大学计算机课程教学指导委员会委员,由关系模型到结构化数据库语言SQL(1)回顾:数据库系统的概念,数据格式,数据,981102 数据库 李四 99秋 02 王四 90,谁能访问数据更新数据有什么要求 ,用户定义的数据安全性约束条件,阶段1:User/DBAP通过数据定义语言(DDL)定义数据表的格式,阶段2:User/D
2、BAP通过数据操纵语言(DML)操纵数据进出数据库,User/DBA通过数据控制语言(DCL)定义数据安全性,数据库语言SQL Select 列名 , 列名 From 表名1 , 表名2, Where 检索条件 ;语义:将From后面的所有表串接起来,检索出满足“检索条件”的元组,并按给定的列名及顺序进行投影显示。, 列名, , 列名( 检索条件 (表名1 表名2 ),关系运算式,由关系模型到结构化数据库语言SQL(2)由关系模型到结构化数据库语言SQL,SQL: Structural Query Language,SQL语言是数据库系统的标准语言,它可以定义数据库、操纵数据库和进行数据库控制
3、。SQL语言主要由以下9个单词引导的操作语句来构成,但每一种语句都能表达复杂的操作请求。 DDL语句引导词:Create(建立), Alter(修改), Drop(撤消)定义Database, Table, View, Index DML语句引导词:Insert(插入), Update(更新), Delete(删除), Select(查询)各种方式的更新与检索操作各种条件的查询操作,如连接查找,模糊查找,分组查找,嵌套查找等各种聚集操作,求平均、求和、等,分组聚集,分组过滤等 DCL语句引导词:Grant, Revoke安全性控制-授权和撤消授权,由关系模型到结构化数据库语言SQL(3)什么是
4、结构化数据库语言SQL,由关系模型到结构化数据库语言SQL(4)用SQL语言创建数据库并定义表-简介,创建课程学习数据库:SCT Create Database 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, Cre
5、dit float(1), T# char(3) );同学可自己定义其他的表: Dept, Teacher, SC,StudentCourse,create table 表名( 列名 数据类型 not null , 列名 数据类型 , ) ;,由关系模型到结构化数据库语言SQL(5)用SQL语言在所定义表中增加记录-简介,insert into 表名 (列名 , 列名 values (值 , 值 , );,追加学生表中的元组Insert Into Student Values ( 98030101 , 张三, 男, 20, 03, 980301);Insert Into Student ( S
6、#, Sname, Ssex, Sage, D# , Sclass)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);,已经建立好的数据库-供后面学习和训练使用,由关系模型到结构化数据库语言SQ
7、L(6)已经建立起的数据库,SQL-SELECT之简单使用,Research Center on Intelligent Computing for Enterprises & Services,Harbin Institute of Technology,战德臣哈尔滨工业大学 教授.博士生导师教育部大学计算机课程教学指导委员会委员,Select 的简单语法形式为: Select 列名 , 列名 From 表名 Where 检索条件 ;语义:从所给出的表中,查询出满足的元组,并按给定的及顺序进行投影显示 列名, , 列名( 检索条件 (表名),SQL-SELECT之简单使用(1)基本检索操作的
8、表达方法,例如:检索学生表中所有学生的信息Select S#, Sname, Ssex, Sage, Sclass, D# From Student ; Select * From Student ; /如投影所有列,则可以用*来简写 再如:检索学生表中所有学生的姓名及年龄Select Sname, Sage /投影出某些列 From Student ; 再如:检索学生表中所有年龄小于19岁的学生的年龄及姓名Select Sage, Sname /投影的列可以重新排定顺序 From StudentWhere Sage = 19;,SQL-SELECT之简单使用(2)基本检索条件书写,SELEC
9、T FROM WHERE ,例如:求或者学过001号课程, 或者学过002号课程的学生的学号Select S# From SCWhere C# = 001 OR C#=002; 再例如:求既学过001号课程, 又学过002号课程的学生的学号? 如下书写SQL语句会得到正确结果吗?它能得到什么结果?怎样正确书写?Select S# From SCWhere C# = 001 AND C#=002;/正确的SQL语句在讲义后面的示例中讲解,SQL-SELECT之简单使用(2)基本检索条件书写,对于每一行应用Where子句的条件,SELECT FROM WHERE ,例如:在选课表中,检索成绩大于8
10、0分的所有学号Select S# From SCWhere Score 80 ; /有重复元组出现,比如一个同学两门以上课程大于80Select DISTINCT S# From SCWhere Score 80; /重复元组被DISTINCT过滤掉,只保留一份,检索结果去重复:DISTINCT,表(Table)和关系(Relation)在大部分情况下概念通用,但有细微差别: 前者可允许有重复元组, 而后者不允许,SQL-SELECT之简单使用(3)如何去掉检索结果的重复元组或记录呢?,Select语句中结果排序是通过增加order by子句实现的order by 列名 asc | desc意
11、义为结果按指定列名进行排序,若后跟asc或省略,则为升序;若后跟desc, 则为降序。例如:按学号由小到大的顺序显示出所有学生的学号及姓名Select S#, Sname From StudentOrder By S# ASC ; 再如:检索002号课大于80分的所有同学学号并按成绩由高到低顺序显示Select S# From SC Where C# = 002 and Score 80Order By Score DESC ;,检索结果的排序,SQL-SELECT之简单使用(4)如何对检索结果进行排序呢?,SELECT FROM WHERE ORDER BY ,比如检索“姓张的学生”,检索“
12、张某某”,这类查询问题,Select语句是通过在检索条件中引入运算符like来表示的 含有like运算符的表达式 列名 not like “字符串” 找出匹配给定字符串的字符串。其中给定字符串中可以出现%, _等匹配符. 匹配规则: “%” 匹配零个或多个字符 “_” 匹配任意单个字符 “ ” 转义字符,用于去掉一些特殊字符的特定含义,使其被作为普通字符看待, 如用 “%”去匹配字符%,用_ 去匹配字符_,SQL-SELECT之简单使用(5)如何表达模糊性的查询内容呢?,模糊查询,例如:检索所有姓张的学生学号及姓名Select S#, Sname From StudentWhere Sname
13、 Like 张% ; 再如:检索名字为张某某的所有同学姓名Select Sname From Student Where Sname Like 张_ _; 再如:检索名字不姓张的所有同学姓名Select Sname From Student Where Sname Not Like 张%;,SQL-SELECT之简单使用(5)如何表达模糊性的查询内容呢?,SQL-SELECT之简单使用(6)小结?,SQL-SELECT之多表联合操作,Research Center on Intelligent Computing for Enterprises & Services,Harbin Instit
14、ute of Technology,战德臣哈尔滨工业大学 教授.博士生导师教育部大学计算机课程教学指导委员会委员,Select 的多表联合检索语句如下: Select 列名 , 列名 From 表名1, 表名2, Where 检索条件 ;相当于 列名, , 列名( 检索条件 (表名1 表名2 )检索条件中要包含连接条件,通过不同的连接条件可以实现各种连接操作。,SQL-SELECT之多表联合操作(1)多表联合检索的表达方法,例如:按“001”号课成绩由高到低的顺序显示出所有学生的姓名(二表连接)Select Sname From Student, SCWhere Student.S# = SC
15、.S# and SC.C# = 001 Order By Score DESC; 当多表连接时,如果两个表的属性名相同,则需采用表名. 属性名方式来限定该属性是属于哪一个表 再如:按数据库课程成绩由高到低顺序显示所有同学姓名(三表连接)Select Sname From Student, SC, CourseWhere Student.S# = SC.S# and SC.C# = Course.C# and Cname = 数据库 Order By Score DESC;,SQL-SELECT之多表联合操作(2)多表联合检索之连接条件书写,Student(S#,Sname,Ssex,Sage,
16、D#,Sclass)Course(C#,Cname,Chours,Credit,T#)SC(S#,C#,Score)Dept(D#,Dname,Dean)Teacher(T#,Tname,D#,Salary),连接运算涉及到重名的问题,如两个表中的属性重名,连接的两个表重名(同一表的连接)等,因此需要使用别名以便区分 select中采用别名的方式: Select 列名 as 列别名 , 列名 as 列别名 From 表名1 as 表别名1, 表名2 as 表别名2, Where 检索条件 ; 上述定义中的as 可以省略 当定义了别名后,在检索条件中可以使用别名来限定属性,SQL-SELECT之
17、多表联合操作(3)多表联合检索之表与列的别名,例如:求有薪水差额的任意两位教师Select T1.Tname as Teacher1, T2.Tname as Teacher2From Teacher T1, Teacher T2Where T1.Salary T2.Salary ;求年龄有差异的任意两位同学的姓名Select S1.Sname as Stud1, S2.Sname as Stud2 From Student S1, Student S2Where S1.Sage S2.Sage ;请同学书写一下:求001号课程有成绩差的任意两位同学有时表名很长时,为书写条件简便,也定义表别名
18、,以简化书写。,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之多表联合操作(3)多表联合检索之表与列的别名,再如:求既学过“001”号课又学过 “002”号课的所有学生的学号(二表连接)Select SC1.S# From SC SC1, SC SC2Where SC1.S# = SC2.S# and SC1.C#=C01 and SC2.C#=C02 ;
19、再如:求“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-SELECT之多表联合操作(4)多表联合检索之表与自身的连接,正确理解汉语表达的查询语义,正确表达为SQL语句 例如:列出没学过李明老师讲授课程的所有同学的姓名? 如下书写SQL语句会得到正确结果吗?它能得到什么结果?怎样正确书写?Select Sname From Student S, SC,
20、 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子查询。其基本语法为:表达式 not in (子查询) 语义:判断某一表达式的值是否在子查询的结果中。,再例如:列出选修了001号课程的学生的学号和姓名Select S#, Sname From StudentWhere S# in ( Select S# From SC Where C# = 001 ) ;再例
21、如:求既学过001号课程, 又学过002号课程的学生的学号Select S# From SCWhere C# = 001 and S# in ( Select S# From SC Where C# = 002 ) ;,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.
22、T# );,SQL-SELECT之多表联合操作(6)多表联合检索之嵌套子查询,非相关子查询,SQL-SELECT之多表联合操作(7)非相关子查询 vs. 相关子查询,有时,内层查询需要依靠外层查询的某些参量作为限定条件才能进行,这样的子查询称为相关子查询。 外层向内层传递的参量需要使用外层的表名或表别名来限定 例如:求学过001号课程的同学的姓名 Select Sname From Student StudWhere S# in ( Select S# From SC Where S# = Stud.S# and C# = 001 ) ; 注意:相关子查询只能由外层向内层传递参数,而不能反之;
23、这也称为变量的作用域原则。,相关子查询,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.C
24、#=C02 and SC1.Score SC2.Score;,SQL-SELECT之多表联合操作(6)小结?,SQL-SELECT之分组聚集操作,Research Center on Intelligent Computing for Enterprises & Services,Harbin Institute of Technology,战德臣哈尔滨工业大学 教授.博士生导师教育部大学计算机课程教学指导委员会委员,结果计算与聚集函数,select子句可以是一些计算表达式或聚集函数,表明在选择和投影的同时直接进行一些运算,如下所示: Select 列名 | expr | agfunc(列名)
25、 , 列名 | expr | agfunc(列名) From 表名1 , 表名2 Where 检索条件 ; 计算表达式可以是常量、列名或由常量、列名、特殊函数及算术运算符构成的算术运算式。,SQL-SELECT之分组聚集操作(1)SELECT之结果计算与聚集函数?,求有差额(差额0)的任意两位教师的薪水差额Select T1.Tname as TR1, T2.Tname as TR2, T1.Salary T2.Salary From Teacher T1, Teacher T2Where T1.Salary T2.Salary;,结果计算与聚集函数,SQL提供了五个作用在简单列值集合上的内置
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学计算机第11讲 怎样管理和利用数据II课件 大学计算机 11 怎样 管理 利用 数据 II 课件
链接地址:https://www.31ppt.com/p-1934172.html