数据库系统原理与设计.ppt
《数据库系统原理与设计.ppt》由会员分享,可在线阅读,更多相关《数据库系统原理与设计.ppt(103页珍藏版)》请在三一办公上搜索。
1、第3章 SQL语言,数据库系统原理与设计,第3章 SQL语言,学习目标SQL(Structured Query Language,结构化查询语言)是关系数据库的标准语言几乎所有的关系型数据库管理系统均采用SQL语言标准教学目标主要有两个要求读者掌握对数据库的基本操作,并了解数据库管理系统的基本功能要求读者熟练掌握SQL查询语句,并运用SQL语句完成对数据库的操作,第3章 SQL语言,学习方法要求读者结合课堂讲授的知识,强化上机实训,把课堂上学过的有关概念进行实训,以便加深理解,达到学习目标。学习指南重点:3.2、3.3、3.4、3.5、3.8和3.9节难点:3.3、3.4和3.5节,第3章 S
2、QL语言,本章导读SQL查询语句对关系代数运算做了哪些扩展?连接查询包括哪些?它们分别用于什么地方?相关子查询与非相关子查询的概念。在使用分组聚合查询时需要注意的地方。如何理解存在量词以及存在量词在SQL查询中的重要地位。如何理解查询表的概念,查询表与子查询有何异同点?在SQL的DDL语句中如何实现完整性约束?实现完整性约束的方法有哪些?如何将数据库的对象(如基本表、索引)建立在特定的物理文件上?将数据库对象建立在特定的物理文件上,其目的是什么?建立视图的目的是什么?视图主要用于什么操作?,目 录,嵌套子查询,SQL概述,简单查询,连接查询,聚合查询,集合运算,SQL查询一般格式,SQL数据定
3、义语言,SQL数据更新语言,视图,3.1 SQL概述,SQL语言于1974年由Boyce等提出,并于19751979年在IBM公司研制的System R数据库管理系统上实现,现已成为国际标准。很多数据库厂商都对SQL语句进行了再开发和扩展标准SQL命令包括查询SELECT插入INSERT更新UPDATE删除DELETE创建CREATE对象删除DROP可被用来完成几乎所有的数据库操作,3.1 SQL概述,3.1.1 SQL发展 3.1.2 SQL特点3.1.3 SQL查询基本概念,3.1.1 SQL发展,SQL-86:第一个SQL标准,由美国国家标准局(American National Sta
4、ndard Institute,简称ANSI)公布,1987年国际标准化组织(International Organization for Standardization,简称ISO)通过。该标准也称为SQL-1SQL-92:在1992年,由ISO和ANSI对SQL-86进行重新修订,该标准也称为SQL-2SQL-99:在1999年,该版本在SQL-2的基础上,扩展了诸多功能,包括递归、触发、面向对象技术等。该标准也称为SQL-3 SQL-2003:该标准是最新的标准,也称SQL-4,于2003年发布,3.1.1 SQL发展,SQL语言由4部分组成数据定义语言DDL(Data Definiti
5、on Language)定义数据库的逻辑结构,包括数据库、基本表、视图和索引等,扩展DDL还支持存储过程、函数、对象、触发器等的定义DDL包括3类语言,即定义、修改和删除数据操纵语言DML(Data Manipuplation Language)对数据库的数据进行检索和更新,其中更新操作包括插入、删除和修改数据数据控制语言DCL(Data Control Language)对数据库的对象进行授权、用户维护(包括创建、修改和删除)、完整性规则定义和事务定义等其它主要是嵌入式SQL语言和动态SQL语言的定义,规定了SQL语言在宿主语言中使用的规则扩展SQL还包括数据库数据的重新组织、备份与恢复等功
6、能,3.1.2 SQL特点,综合统一 集数据定义语言DDL、数据操纵语言DML、数据控制语言DCL的功能于一体 高度非过程化 面向集合的操作方式采用集合操作方式,其操作对象、查找结果都是元组的集合 同一种语法结构提供两种使用方式SQL语言既是自含式语言,又是嵌入式语言。在两种不同的使用方式下,其语法结构基本上是一致的 语言简洁,易学易用SQL语言的动词非常少,主要包括:数据查询 SELECT;数据定义 CREATE、DROP、ALTER;数据操纵 INSERT、UPDATE、DELETE;数据控制 GRANT、REVOKE,3.1.3 SQL查询基本概念,SQL语言支持三级模式结构,外模式对应
7、视图和部分基本表,模式对应基本表,内模式对应存储文件,3.1.3 SQL查询基本概念,基本表数据库中独立存在的表称为基本表在SQL中一个关系对应一个基本表一个(或多个)基本表对应一个存储文件一个表可以带若干索引索引存放在存储文件中视图指从一个或几个基本表(或视图)导出的表,是虚表只存放视图的定义而不存放对应数据查询表指查询结果对应的表存储文件指数据库中存放关系的物理文件,3.7SQL查询一般格式 P106,SELECT共有6个子句,其中SELECT和FROM是必须的,其它是可选项,必须严格按照如下顺序排列:SELECT ALL|DISTINCT AS,AS,.FROM AS,AS,.WHERE
8、 GROUP BY,.HAVING ORDER BY ASC|DESC,ASC|DESC,.,3.7SQL查询一般格式,其中:(1)可以是下面的可选格式:.*,.,(2)FROM子句指定查询所涉及的表、视图或查询表。为操作方便,常给表取一个别名,称为元组变量(3)WHERE子句给出查询的条件,随后的中可以使用下面的谓词运算符:比较运算符:,=,!=;逻辑运算符:AND,OR,NOT;范围运算符:NOT BETWEEN.AND;集合运算符:NOT IN;空值运算符:IS NOT null;字符匹配运算符:NOT LIKE;存在量词运算符:NOT EXISTS。在中可以包含子查询,但不可以直接使用
9、聚合函数,若要使用聚合函数,必须引出一个子查询,如例3.52所示。,目 录,嵌套子查询,SQL概述,简单查询,连接查询,聚合查询,集合运算,SQL查询一般格式,SQL数据定义语言,SQL数据更新语言,视图,3.2简单查询,本章所用的数据库为学生成绩管理数据库ScoreDB,其数据库模式如图3-2、3-3、3-4、3-5所示,3.2简单查询,3.2简单查询,3.2简单查询,3.2简单查询,3.2.1 投影运算3.2.2 选择运算 3.2.3 排序运算3.2.4 查询表,3.2.1 投影运算 P76,SQL基本结构包括3个子句:SELECT子句对应投影运算,指定查询结果中所需要的属性或表达式FRO
10、M子句 对应笛卡尔积,给出查询所涉及的表,表可以是基本表、视图或查询表WHERE子句 对应选择运算,指定查询结果元组所需要满足的选择条件SELECT和FROM是必须的,其他是可选的,3.2.1 投影运算,基本语法为:SELECT A1,A2,.,An FROM R1,R2,.,Rm WHERE PA1,A2,.,An代表需要查找的属性或表达式R1,R2,.,Rm代表查询所涉及的表P代表谓词(即选择条件),如果省略WHERE子句,表示P为真SQL的查询结果中允许包含重复元组SQL执行过程:首先对R1,R2,.,Rm执行笛卡尔积然后在笛卡尔积中选择使得谓词P为真的记录再在A1,A2,.,An属性列
11、中进行投影运算,不消除重复元组如需消除重复元组,必须使用关键字DISTINCT,刚才描述的SQL查询执行过程只是逻辑上的,在具体执行时会进行优化处理,查询优化的内容详见第7章。,最简单的查询,查看全校班级的所有信息SELECT*FROM Class*表示所有属性,按照表定义时的顺序显示所有属性,3.2.1 投影运算,查询指定列选取表中的全部列或指定列,通过SELECT确定要查询的属性例3.1 查询所有班级的班级编号、班级名称和所属学院 SELECT classNo,className,institute FROM Class该查询的执行过程是:从Class表中依次取出每个元组对每个元组仅选取c
12、lassNo、className和institute三个属性的值,形成一个新元组最后将这些新元组组织为一个结果关系输出该查询的结果如图3-10所示,练习,查询学生的学号、姓名、所属班级查询显示所有学生的学号,姓名,年龄,3.2.1 投影运算,消除重复元组需要消除重复元组,使用DISTINCT关键字例3.2 查询所有学院的名称。SELECT institute FROM Class上述查询不消除重复元组,其查询结果如图3-11所示消除重复元组,查询结果如图3-12所示 SELECT DISTINCT institute FROM Class,图3-11,图3-12,3.2.1 投影运算,给属性列
13、取别名可为属性列取一个便于理解的列名,如用中文来显示列名为属性列取别名特别适合经过计算的列例3.4 查询所有班级的所属学院、班级编号和班级名称,要求用中文显示列名 SELECT institute 所属学院,classNo 班级编号,className 班级名称 FROM Class查询结果如图3-13所示。该查询可使用AS关键字取别名:SELECT institute AS 所属学院,classNo AS 班级编号,className AS 班级名称 FROM Class,3.2.1 投影运算,查询经过计算的列可使用属性、常数、函数和表达式 例3.5 查询每个班级编号、班级名称以及该班级现在
14、为几年级,并将班级编号中大写字母改为小写字母输出 SELECT LCase(classNo)AS 班级编号,className,year(date()-grade AS 年级 FROM Class函数lcase()将大写字母改为小写字母函数date()获取当前系统的日期函数year()提取日期中的年份查询结果如图3-14所示,3.2.2 选择运算(关注WHERE子句),WHERE子句可实现关系代数中的选择运算WHERE常用的查询条件有:比较运算:、=、(或!=)范围查询:BETWEEN.AND集合查询:IN空值查询:IS null字符匹配查询:LIKE逻辑查询:AND、OR、NOT,3.2.2
15、 选择运算,比较运算使用比较运算符、=、(或!=)例3.6 查询2007级的班级编号、班级名称和所属学院。SELECT classNo,className,institute FROM Class WHERE grade=2007其查询结果如图3-15所示,3.2.2 选择运算,该查询的执行过程可能有多种方法:全表扫描法依次取出Class表中的每个元组判断该元组的grade属性值是否等于2007若是则将该元组的班级编号、班级名称和所属学院属性取出,形成一个新元组最后将所有新元组组织为一个结果关系输出该方法适用于小表,或者该表未在grade属性列上建索引索引搜索法如果该表在grade属性列上建有
16、索引,且满足条件的记录不多,则可使用索引搜索法来检索数据具体使用何种方法由数据库管理系统的查询优化器来选择,详见第8章内容,3.2.2 选择运算,例3.7 在学生Student表中查询年龄大于或等于19岁的同学学号、姓名和出生日期。SELECT studentNo,studentName,birthday FROM Student WHERE year(getdate()-year(birthday)=19,3.2.2 选择运算,范围查询BETWEEN.AND用于查询属性值在某一个范围内的元组NOT BETWEEN.AND用于查询属性值不在某一个范围内的元组BETWEEN后是属性的下限值,AN
17、D后是属性的上限值例3.8 在选课Score表中查询成绩在8090分之间的同学学号、课程号和相应成绩 SELECT studentNo,courseNo,score FROM Score WHERE score BETWEEN 80 AND 90该查询也可以使用逻辑运算AND实现,见例3.22,3.2.2 选择运算,例3.9 在选课Score表中查询成绩不在8090分之间的同学学号、课程号和相应成绩。SELECT studentNo,courseNo,score FROM Score WHERE score NOT BETWEEN 80 AND 90该查询也可以使用逻辑运算OR实现,见例3.2
18、3,3.2.2 选择运算,集合查询IN用于查询属性值在某个集合内的元组NOT IN用于查询属性值不在某个集合内的元组 IN后面是集合,可以是具体的集合,也可以是查询出来的元组集合(该部分内容详见3.4节的内容)。例3.10 在选课Score表中查询选修了“001”、“005”或“003”课程的同学学号、课程号和相应成绩。SELECT studentNo,courseNo,score FROM Score WHERE courseNo IN(001,005,003)该查询也可以使用逻辑运算OR实现,见例3.19,3.2.2 选择运算,例3.11 在学生 Student表中查询籍贯不是“南昌”或“
19、上海”的同学姓名、籍贯和所属班级编号。SELECT studentName,native,classNo FROM Student WHERE native NOT IN(南昌,上海)该查询也可以使用逻辑运算AND实现,见例3.21,3.2.2 选择运算,空值查询空值表示未知或不确定的值,空值表示为nullIS null用于查询属性值为空值IS NOT null用于查询属性值不为空值IS不能用“=”替代例3.12 在课程Course表中查询先修课程为空值的课程信息。SELECT*FROM Course WHERE priorCourse IS NULL查询结果如图3-16所示,3.2.2 选择
20、运算,例3.13 在课程Course表中查询有先修课程的课程信息。SELECT*FROM Course WHERE priorCourse IS NOT NULL,3.2.2 选择运算,字符匹配查询LIKE用于字符匹配查询,语法格式为:NOT LIKE ESCAPE 查询的含义是:如果在LIKE前没有NOT,则查询指定的属性列值与相匹配的元组;如果在LIKE前有NOT,则查询指定的属性列值不与相匹配的元组。可以是一个具体的字符串,也可以包括通配符%和_%表示任意长度的字符串Ab%,表示所有以ab开头的任意长度的字符串;Zhang%ab,表示以zhang开头,以ab结束,中间可以是任意个字符的字
21、符串。符号_表示任意一个字符Ab_,表示所有以 ab开头的3个字符的字符串,其中第3个字符为任意字符;A_ _b表示所有以a开头,以b 结束的4个字符的字符串,且第2、3个字符为任意字符。,3.2.2 选择运算,例3.14 在班级Class表中查询班级名称中含有会计的班级信息 SELECT*FROM Class WHERE className LIKE%会计%注意:匹配字符串必须用一对引号括起来,3.2.2 选择运算,例3.15 在学生Student表中查询所有姓王且全名为3个汉字的同学学号和姓名 SELECT studentNo,studentName FROM Student WHERE
22、studentName LIKE 王_ _例3.16 在学生Student表中查询名字中不含有“福”的同学学号和姓名。SELECT studentNo,studentName FROM Student WHERE studentName NOT LIKE%福%,3.2.2 选择运算,例3.17 在学生Student表中查询蒙古族的同学学号和姓名 SELECT studentNo,studentName FROM Student WHERE nation LIKE 蒙古族注意:如果匹配字符串中不含有%和_,则LIKE与比较运算符“=”的查询结果一样该查询等价于下面的查询:SELECT stude
23、ntNo,studentName FROM Student WHERE nation=蒙古族,3.2.2 选择运算,如果查询字串中本身要包含%和_,必须使用“ESCAPE”短语,对通配符进行转义处理。例3.18 在班级Class表中查询班级名称中含有“08_”符号的班级名称 SELECT className FROM Class WHERE className LIKE%08_%ESCAPE“ESCAPE”表示为换码字符紧跟在符号后的_不是通配符,而是普通的用户要查询的符号查询结果如图3-17所示,3.2.2 选择运算,如果将#字符作为换码字符,则该查询可改写为:SELECT classNam
24、e FROM Class WHERE className LIKE%08#_%ESCAPE#,3.2.2 选择运算,逻辑查询SQL提供AND、OR和NOT逻辑运算符分别实现逻辑与、逻辑或和逻辑非运算例3.19 在选课Score表中查询选修了“001”、“005”或“003”课程的同学学号、课程号和相应成绩SELECT studentNo,courseNo,scoreFROM ScoreWHERE courseNo=001 OR courseNo=005 OR courseNo=003在例3.10中使用的是集合运算,本例中采用逻辑“或”运算,3.2.2 选择运算,例3.20 在Student表中
25、查询1991年出生且籍贯为“汉族”的同学学号、姓名、出生日期。SELECT studentNo,studentName,birthday FROM Student WHERE year(birthday)=1991 AND nation=汉族注意:在逻辑运算中,不可以对同一个属性进行逻辑“与”的等值运算如在选课Score表中查询同时选修了“001”和“002”课程的同学的选课信息,如下查询是错误的,得不到结果:SELECT*FROM Score WHERE courseNo=001 AND courseNo=002要实现该查询,需要使用连接运算或嵌套子查询通过连接运算表示该查询,参见例3.29
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 系统 原理 设计

链接地址:https://www.31ppt.com/p-5985730.html