数据库原理与应用第三章精品文稿.ppt

上传人:石*** 文档编号:52422171 上传时间:2022-10-23 格式:PPT 页数:75 大小:2.50MB
返回 下载 相关 举报
数据库原理与应用第三章精品文稿.ppt_第1页
第1页 / 共75页
数据库原理与应用第三章精品文稿.ppt_第2页
第2页 / 共75页
点击查看更多>>
资源描述

《数据库原理与应用第三章精品文稿.ppt》由会员分享,可在线阅读,更多相关《数据库原理与应用第三章精品文稿.ppt(75页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、数据库原理与应用第三章第1页,本讲稿共75页3.1 SQL概述SQL的特点1.综合统一2.高度非过程化3.面向集合的操作方式4.以同一种语法结构提供两种使用方法5.语言简洁,易学易用第2页,本讲稿共75页5.语言简捷,易学易用第3页,本讲稿共75页3.2 数 据 定 义 第4页,本讲稿共75页3.2.1 定义语句格式CREATETABLE(,)给出要创建的基本表的名称;给出要创建的基本表的名称;给出列名或字段名;给出列名或字段名;第5页,本讲稿共75页为列指定数据类为列指定数据类型及其数据宽度;型及其数据宽度;关系数据库支持非关系数据库支持非常丰富的数据类型,常丰富的数据类型,不同的数据库管理

2、不同的数据库管理系统支持的数据类系统支持的数据类型基本是一样的,型基本是一样的,右表列出了常用的右表列出了常用的数据类型。数据类型。数据类型第6页,本讲稿共75页用于定义列或字段一级的完整性约束,一般包括:用于定义列或字段一级的完整性约束,一般包括:NOT NULL和和NULL约束约束PRIMARY KEY约束约束UNIQUE约束约束FOREIGN KEY约束约束DEFAULT定义定义CHECK约束约束列级完整性约束第7页,本讲稿共75页用于定义表一级的完整性约束,一般包括:用于定义表一级的完整性约束,一般包括:PRIMARY KEY约束(复合属性构成的主关约束(复合属性构成的主关键字说明)键

3、字说明)FOREIGN KEY约束(外部关键字及参照关约束(外部关键字及参照关系说明)系说明)CHECK约束(同时涉及到多个属性的域完约束(同时涉及到多个属性的域完整性约束)整性约束)表级完整性约束第8页,本讲稿共75页不是SQL的标准选项,一般用于与物理存储有关的说明,不同的数据库管理系统定义的方式肯定不同,另外该项参数一般也不是必需的。其他参数第9页,本讲稿共75页例题 例1 建立一个“学生”表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。其中学号不能为空,值是唯一的,并且姓名取值也唯一。CREATE TABLE Student

4、(Sno CHAR(5)NOT NULL UNIQUE,Sname CHAR(20)UNIQUE,Ssex CHAR(1),Sage INT,Sdept CHAR(15);第10页,本讲稿共75页二、修改基本表ALTERTABLEADD|DROPMODIFYDROPCOLUMNALTERCOLUMN第11页,本讲稿共75页例题 例2 向Student表增加“入学时间”列,其数据类型为日期型。ALTER TABLE Student ADD Scome DATE;不论基本表中原来是否已有数据,新增加的列一律为空值。第12页,本讲稿共75页例题 例3 将年龄的数据类型改为半字长整数。ALTER TA

5、BLE Student MODIFY Sage SMALLINT;修改原有的列定义可能会破坏已有数据。第13页,本讲稿共75页例题 例4 删除关于学号必须取唯一值的约束。ALTER TABLE Student DROP UNIQUE(Sno);SQL没有提供删除属性列的语句,只能间接实现,先将原表中要保留的列及其内容复制到一个新表中,然后删除原表,并将新表命名为原表名。第14页,本讲稿共75页三、删除基本表 DROP TABLE;基本表删除 数据、表上的索引都删除 表上的视图往往仍然保留,但无法引用删除基本表时,系统会自动从数据字典中删去有关该基本表及其索引的描述,因此建立在此表上的视图虽然已

6、保留,但已无法引用第15页,本讲稿共75页例题 例5 删除Student表 DROP TABLEStudent;第16页,本讲稿共75页3.2.2 建立与删除索引 建立索引是加快查询速度的有效手段建立索引DBA或表的属主(即建立表的人)根据需要建立和删除有些DBMS自动建立以下列上的索引 PRIMARY KEY UNIQUE维护索引 DBMS自动完成使用索引 DBMS自动选择是否使用索引以及使用哪些索引第17页,本讲稿共75页一、建立索引 语句格式CREATE UNIQUE CLUSTER INDEX ON(,);用指定要建索引的基本表名字索引可以建立在该表的一列或多列上,各列名之间用逗号分隔

7、用指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASCUNIQUE表明此索引的每一个索引值只对应唯一的数据记录CLUSTER表示要建立的索引是聚簇索引第18页,本讲稿共75页建立索引(续)唯一值索引对于已含重复值的属性列不能建UNIQUE索引对某个列建立UNIQUE索引后,插入新记录时DBMS会自动检查新记录在该列上是否取了重复值。这相当于增加了一个UNIQUE约束第19页,本讲稿共75页建立索引(续)聚簇索引建建立立聚聚簇簇索索引引后后,基基表表中中数数据据也也需需要要按按指指定定的的聚聚簇簇属属性性值值的的升升序序或或降降序序存存放放。也也即即聚聚簇簇索索引引的的索索引引项项

8、顺顺序序与与表表中中记记录录的的物物理理顺序一致顺序一致例:CREATE CLUSTER INDEX Stusname ON Student(Sname);在在Student表的表的Sname(姓名)列上建立一个聚簇索引,而(姓名)列上建立一个聚簇索引,而且且Student表中的记录将按照表中的记录将按照Sname值的升序存放值的升序存放 第20页,本讲稿共75页建立索引(续)在一个基本表上最多只能建立一个聚簇索引聚簇索引的用途:对于某些类型的查询,可以提高查询效率聚簇索引的适用范围 很少对基表进行增删操作 很少对其中的变长列进行修改操作 第21页,本讲稿共75页聚簇索引是指索引项的顺序与表中

9、记录的物理顺序一致的索引组织。例CREATE CLUSTER INDEX Stusname ON Student(Sname);将会在Student 表的Sname列上建一个聚簇索引,而且记录会按照Sname值的升序存放。用户可以在最常查询的列上建立聚簇索引以提高查询效率。但在一个基本表上只能建一个,而且更新索引列数据会导致表中记录的物理顺序的变更,因此经常更新的数据列不宜建立。第22页,本讲稿共75页例题 例6 为学生-课程数据库中的Student,Course,SC三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建

10、唯一索引。CREATE UNIQUE INDEX Stusno ON Student(Sno)CREATE UNIQUE INDEX Coucno ON Course(Cno);CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);第23页,本讲稿共75页二、删除索引 DROP INDEX;删除索引时,系统会从数据字典中删去有关该索引的描述。例7 删除Student表的Stusname索引。DROP INDEX Stusname;第24页,本讲稿共75页3.3.1 概述 语句格式SELECTALL|DISTINCT,FROM,WHEREGROUPBY

11、HAVINGORDERBYASC|DESC;第25页,本讲稿共75页示例数据库 学生-课程数据库学生表:Student(Sno,Sname,Ssex,Sage,Sdept)课程表:Course(Cno,Cname,Cpno,Ccredit)学生选课表:SC(Sno,Cno,Grade)第26页,本讲稿共75页3.3 查 询 3.3.1 概述3.3.2 单表查询3.3.3 连接查询3.3.4 嵌套查询3.3.5 集合查询3.3.6 小结 第27页,本讲稿共75页3.3.2 单表查询 查询仅涉及一个表,是一种最简单的查询操作一、选择表中的若干列二、选择表中的若干元组三、对查询结果排序四、使用集函数

12、五、对查询结果分组 第28页,本讲稿共75页第29页,本讲稿共75页第30页,本讲稿共75页从职工关系中检索所有工资值SELECT工资FROM职工结果是:结果是:12201210125012301250SELECTDISTINCT工资工资FROM职工职工结果是:结果是:1220121012501230第31页,本讲稿共75页单表查询用户在查询时可根据应用的需要改变列的显示顺序例2查询全体学生的姓名、学号、所在系。查询全部列-将所有的列名在SELECT后面列出或者用*表示列名 例3 SELECT*FROM Student;查询经过计算的值例4查询全体学生姓名及其出生年份SELECT Sname,

13、1996-Sage FROM Student;第32页,本讲稿共75页单表查询不仅可以是算术表达式,还可以是字符串常量、函不仅可以是算术表达式,还可以是字符串常量、函数等。数等。例例5查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名SELECTSname,YearofBirth:,1996-Sage,ISLOWER(Sdept)FROMStudent;输出结果:输出结果:SnameYearofBirth:1996-SageISLOWER(Sdept)-李勇李勇YearofBirth:1976cs刘晨刘晨Yearof

14、Birth:1977is王名王名YearofBirth:1978ma张立张立YearofBirth:1977is第33页,本讲稿共75页例5.*使用列别名改变查询结果的列标题SELECTSnameNAME,YearofBirth:BIRTH,2000-SageBIRTHDAY,ISLOWER(Sdept)DEPARTMENTFROMStudent;输出结果:输出结果:NAMEBIRTHBIRTHDAYDEPARTMENT-李勇李勇YearofBirth:1976cs刘晨刘晨YearofBirth:1977is王名王名YearofBirth:1978ma张立张立YearofBirth:1977i

15、s第34页,本讲稿共75页二、选择表中的若干元组 消除取值重复的行查询满足条件的元组 第35页,本讲稿共75页1.消除取值重复的行在SELECT子句中使用DISTINCT短语假设SC表中有下列数据 Sno Cno Grade -95001 1 92 95001 2 85 95001 3 88 95002 2 90 95002 3 80第36页,本讲稿共75页ALL 与 DISTINCT 例6 查询选修了课程的学生学号。(1)SELECT Sno FROM SC;(因为默认的是ALL)SELECT ALL Sno FROM SC;所以结果为:Sno -95001 95001 95001 9500

16、2 95002 第37页,本讲稿共75页例题(续)(2)SELECT DISTINCT Sno FROM SC;结果:Sno -95001 95002 总结:两个本来并不完全相同的元组,投影到指定的某些列上后,可能变成完全相同的行,于是必须用DISTINCT短语或象下面那样用WHERE语句。第38页,本讲稿共75页2.查询满足条件的元组WHERE子句常用的查询条件第39页,本讲稿共75页(1)比较大小在WHERE子句的中使用比较运算符=,=,=,!=或,!,!,逻辑运算符NOT +比较运算符例8 查询所有年龄在20岁以下的学生姓名及其年龄。SELECT Sname,Sage FROM Stud

17、ent WHERE Sage=20;第40页,本讲稿共75页例9 查询考试成绩有不及格的学生的学号SELECT DISTINCT SnoFROM SCWHERE Grade 60;第41页,本讲稿共75页(2)确定范围使用谓词 BETWEEN (下限)AND (上限)NOT BETWEEN AND 例10 查询年龄在2023岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。SELECT Sname,Sdept,SageFROM StudentWHERE Sage BETWEEN 20 AND 23;第42页,本讲稿共75页例题(续)例11 查询年龄不在2023岁之间的学生姓名、系别和年龄。

18、SELECT Sname,Sdept,SageFROM StudentWHERE Sage NOT BETWEEN 20 AND 23;第43页,本讲稿共75页(3)确定集合使用谓词 IN,NOT IN :用逗号分隔的一组取值例12查询信息系(IS)、数学系(MA)和计 算机科学系(CS)学生的姓名和性别。SELECT Sname,SsexFROM StudentWHERE Sdept IN(IS,MA,CS);第44页,本讲稿共75页(3)确定集合例13查询既不是信息系、数学系,也不是计算 机科学系的学生的姓名和性别。SELECT Sname,SsexFROM Student WHERE S

19、dept NOT IN(IS,MA,CS);第45页,本讲稿共75页(4)字符串匹配 NOT LIKE ESCAPE :指定匹配模板 匹配模板:固定字符串或含通配符的字符串 当匹配模板为固定字符串时,即不含通配符时 可以用=运算符取代 LIKE 谓词 用!=或 运算符取代 NOT LIKE 谓词第46页,本讲稿共75页通配符w%(百分号)代表任意长度(长度可以为0)的字符串例:a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab 等都满足该匹配串_(下横线)代表任意单个字符例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串第47页,本

20、讲稿共75页ESCAPE 短语:当用户要查询的字符串本身就含有%或 _ 时,要使用ESCAPE 短语对通配符进行转义。第48页,本讲稿共75页例题1)匹配模板为固定字符串 例14 查询学号为95001的学生的详细情况。SELECT*FROM Student WHERE Sno LIKE 95001;等价于:SELECT *FROM Student WHERE Sno=95001;第49页,本讲稿共75页例题(续)2)匹配模板为含通配符的字符串例15 查询所有姓刘学生的姓名、学号和性别。SELECT Sname,Sno,Ssex FROM Student WHERE Sname LIKE 刘%;

21、第50页,本讲稿共75页例题(续)匹配模板为含通配符的字符串(续)例16 查询姓欧阳且全名为三个汉字的学生的姓名。SELECT Sname FROM Student WHERE Sname LIKE 欧阳_ _;第51页,本讲稿共75页例题(续)匹配模板为含通配符的字符串(续)例17 查询名字中第2个字为阳字的学生的姓名和学号。SELECT Sname,Sno FROM Student WHERE Sname LIKE _ _阳%;第52页,本讲稿共75页例题(续)匹配模板为含通配符的字符串(续)例18 查询所有不姓刘的学生姓名。SELECT Sname,Sno,Ssex FROM Stude

22、nt WHERE Sname NOT LIKE 刘%;第53页,本讲稿共75页例题(续)3)使用换码字符将通配符转义为普通字符 例19 查询DB_Design课程的课程号和学分。SELECT Cno,Ccredit FROM Course WHERE Cname LIKE DB_Design ESCAPE 第54页,本讲稿共75页例题(续)使用换码字符将通配符转义为普通字符(续)例20 查询以DB_开头,且倒数第3个字符为 i的课程的详细情况。SELECT *FROM Course WHERE Cname LIKE DB_%i_ _ ESCAPE ;第55页,本讲稿共75页(5)涉及空值的查询

23、 使用谓词 IS NULL 或 IS NOT NULL“IS NULL”不能用“=NULL”代替例21 某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。SELECT Sno,Cno FROM SC WHERE Grade IS NULL;第56页,本讲稿共75页例题(续)例22 查所有有成绩的学生学号和课程号。SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL;第57页,本讲稿共75页(6)多重条件查询用逻辑运算符AND和 OR来联结多个查询条件 AND的优先级高于OR 可以用括号改变优先级可用来

24、实现多种其他谓词 NOT IN NOT BETWEEN AND 第58页,本讲稿共75页例题例23 查询计算机系年龄在20岁以下的学生姓名。SELECT Sname FROM Student WHERE Sdept=CS AND Sage=20 AND Sage=23;第61页,本讲稿共75页三、对查询结果排序 若若没没有有指指定定查查询询结结果果的的显显示示顺顺序序,DBMS按按最最方方便便的的(元组在表中的先后)方式输出查询结果(元组在表中的先后)方式输出查询结果使用使用ORDERBY子句子句可以按一个或多个属性列排序可以按一个或多个属性列排序升序:升序:ASC;降序:;降序:DESC;缺

25、省值为升序;缺省值为升序当排序列含空值时当排序列含空值时ASC:排序列为空值的元组最后显示:排序列为空值的元组最后显示DESC:排序列为空值的元组最先显示:排序列为空值的元组最先显示第62页,本讲稿共75页对查询结果排序(续)例24 查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。SELECT Sno,Grade FROM SC WHERE Cno=3 ORDER BY Grade DESC;第63页,本讲稿共75页查询结果 Sno Grade -95010 95024 95007 92 95003 82 95010 82 95009 75 95014 61 95002 55第

26、64页,本讲稿共75页对查询结果排序(续)例25 查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。SELECT *FROM Student ORDER BY Sdept,Sage DESC;第65页,本讲稿共75页四、使用集函数 5类主要集函数计数COUNT(DISTINCT|ALL*)COUNT(DISTINCT|ALL)计算总和,(此列必须是数值型的)SUM(DISTINCT|ALL)计算平均值,(此列必须是数值型的)AVG(DISTINCT|ALL)第66页,本讲稿共75页使用集函数(续)求最大值MAX(DISTINCT|ALL)求最小值MIN(DISTI

27、NCT|ALL)DISTINCT短语:在计算时要取消指定列中的重复值ALL短语:不取消重复值ALL为缺省值第67页,本讲稿共75页使用集函数(续)例26 查询学生总人数。SELECT COUNT(*)FROM Student;例27 查询选修了课程的学生人数。SELECT COUNT(DISTINCT Sno)FROM SC;注:用DISTINCT以避免重复计算学生人数第68页,本讲稿共75页使用集函数(续)例28 计算1号课程的学生平均成绩。SELECT AVG(Grade)FROM SC WHERE Cno=1;例29 查询选修1号课程的学生最高分数。SELECT MAX(Grade)FR

28、OM SC WHER Cno=1;第69页,本讲稿共75页五、对查询结果分组 使用GROUP BY子句分组 细化集函数的作用对象 未对查询结果分组,集函数将作用于整个查询结果 对查询结果分组后,集函数将分别作用于每个组 第70页,本讲稿共75页使用GROUP BY子句分组例30 求各个课程号及相应的选课人数。SELECT Cno,COUNT(Sno)FROM SC GROUP BY Cno;结果 Cno COUNT(Sno)1 22 2 34 3 44 4 33 5 48第71页,本讲稿共75页对查询结果分组(续)GROUP BY子句的作用对象是查询的中间结果表分组方法:按指定的一列或多列值分

29、组,值相等的为一组使用GROUP BY子句后,SELECT子句的列名列表中只能出现分组属性和集函数 第72页,本讲稿共75页使用HAVING短语筛选最终输出结果例31 查询选修了3门以上课程的学生学号。SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*)3;第73页,本讲稿共75页例题例32 查询有3门以上课程是90分以上的 学生的学号及(90分以上的)课程数 SELECT Sno,COUNT(*)FROM SC WHERE Grade=90 GROUP BY Sno HAVING COUNT(*)=3;第74页,本讲稿共75页使用HAVING短语筛选最终输出结果只有满足HAVING短语指定条件的组才输出HAVING短语与WHERE子句的区别:作用对象不同WHERE子句作用于基表或视图,从中选择满足条件的元组。HAVING短语作用于组,从中选择满足条件的组。第75页,本讲稿共75页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁