数据库原理与应用第三章ppt课件

上传人:痛*** 文档编号:151160320 上传时间:2022-09-12 格式:PPT 页数:75 大小:849KB
返回 下载 相关 举报
数据库原理与应用第三章ppt课件_第1页
第1页 / 共75页
数据库原理与应用第三章ppt课件_第2页
第2页 / 共75页
数据库原理与应用第三章ppt课件_第3页
第3页 / 共75页
点击查看更多>>
资源描述
第三章第三章 关系数据库规范言语关系数据库规范言语SQLSQL3.1 SQL概述 SQL的特点 1.综合一致 2.高度非过程化 3.面向集合的操作方式 4.以同一种语法构造提供两种运用方法 5.言语简约,易学易用5.言语简捷,易学易用表表 3.1 SQL语语言言的的动动词词SQL 功功 能能动动 词词数数 据据 定定 义义CREATE,DROP,ALTER数数 据据 查查 询询SELECT数数 据据 操操 纵纵INSERT,UPDATEDELETE数数 据据 控控 制制GRANT,REVOKE3.2 数 据 定 义 表表3.2 SQL的的数数据据定定义义语语句句操操 作作 方方 式式操操 作作 对对象象创创 建建删删 除除修修 改改表表CREATET ABLEDROPT ABLEALTERT ABLE视视 图图CREATEVIEWDROP VIEW索索 引引CREATEINDEXDROPINDEX3.2.1 定义语句格式CREATE TABLE(,)给出要创建的根本表的称号;给出要创建的根本表的称号;给出列名或字段名;给出列名或字段名;为列指定数据为列指定数据类型及其数据类型及其数据宽度;宽度;关系数据库支关系数据库支持非常丰富的持非常丰富的数据类型,不数据类型,不同的数据库管同的数据库管理系统支持的理系统支持的数据类型根本数据类型根本是一样的,右是一样的,右表列出了常用表列出了常用的数据类型。的数据类型。数据类型 用于定义列或字段一级的完好性约束,普通包括:用于定义列或字段一级的完好性约束,普通包括:NOT NULL和和NULL约束约束 PRIMARY KEY约束约束 UNIQUE约束约束 FOREIGN KEY约束约束 DEFAULT定义定义 CHECK约束约束 列级完好性约束 用于定义表一级的完好性约束,普通包括:用于定义表一级的完好性约束,普通包括:PRIMARY KEY约束复合属性构成的主关键约束复合属性构成的主关键字阐明字阐明 FOREIGN KEY约束外部关键字及参照关系约束外部关键字及参照关系阐明阐明 CHECK约束同时涉及到多个属性的域完好约束同时涉及到多个属性的域完好性约束性约束 表级完好性约束 不是SQL的规范选项,普通用于与物理存储有关的阐明,不同的数据库管理系统定义的方式一定不同,另外该项参数普通也不是必需的。其他参数例题 例1 建立一个“学生表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。其中学号不能为空,值是独一的,并且姓名取值也独一。CREATE TABLE Student (Sno CHAR(5)NOT NULL UNIQUE,Sname CHAR(20)UNIQUE,Ssex CHAR(1),Sage INT,Sdept CHAR(15);二、修正根本表ALTER TABLE ADD|DROP MODIFY DROP COLUMN ALTER COLUMN 例题 例2 向Student表添加“入学时间列,其数据类型为日期型。ALTER TABLE Student ADD Scome DATE;不论根本表中原来能否已有数据,新添加的列一概为空值。例题 例3 将年龄的数据类型改为半字长整数。ALTER TABLE Student MODIFY Sage SMALLINT;修正原有的列定义能够会破坏已有数据。例题 例4 删除关于学号必需取独一值的约束。ALTER TABLE Student DROP UNIQUESno;SQL没有提供删除属性列的语句,只能间接实现,先将原表中要保管的列及其内容复制到一个新表中,然后删除原表,并将新表命名为原表名。三、删除根本表 DROP TABLE;根本表删除 数据、表上的索引都删除 表上的视图往往依然保管,但无法援用删除根本表时,系统会自动从数据字典中删去有关该根本表及其索引的描画,因此建立在此表上的视图虽然已保管,但已无法援用例题 例5 删除Student表 DROP TABLEStudent;3.2.2 建立与删除索引 建立索引是加快查询速度的有效手段 建立索引 DBA或表的属主即建立表的人根据需求建立和删除 有些DBMS自动建立以以下上的索引 PRIMARY KEY UNIQUE 维护索引 DBMS自动完成 运用索引 DBMS自动选择能否运用索引以及运用哪些索引一、建立索引 语句格式 CREATE UNIQUE CLUSTER INDEX ON(,);用指定要建索引的根本表名字 索引可以建立在该表的一列或多列上,各列名之间用逗号分隔 用指定索引值的陈列次序,升序:ASC,降序:DESC。缺省值:ASC UNIQUE阐明此索引的每一个索引值只对应独一的数据记录 CLUSTER表示要建立的索引是聚簇索引建立索引 续 独一值索引 对 于 已 含 反 复 值 的 属 性 列 不 能 建UNIQUE索引 对某个列建立UNIQUE索引后,插入新记录时DBMS会自动检查新记录在该列上能否取了反复值。这相当于添加了一个UNIQUE约束建立索引 续 聚簇索引 建立聚簇索引后,基表中数据也需求按指定的聚簇属性值的升序或降序存放。也即聚簇索引的索引项顺序与表中记录的物理顺序一致 例:CREATE CLUSTER INDEX Stusname ON Student(Sname);在Student表的Sname姓名列上建立一个聚簇索引,而 且Student表中的记录将按照Sname值的升序存放 建立索引 续 在一个根本表上最多只能建立一个聚簇索引 聚簇索引的用途:对于某些类型的查询,可以提高查询效率 聚簇索引的适用范围 很少对基表进展增删操作 很少对其中的变长列进展修正操作 聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织。例CREATE CLUSTER INDEX Stusname ON Student(Sname);将会在Student 表的Sname列上建一个聚簇索引,而且记录会按照Sname值的升序存放。用户可以在最常查询的列上建立聚簇索引以提高查询效率。但在一个根本表上只能建一个,而且更新索引列数据会导致表中记录的物理顺序的变卦,因此经常更新的数据列不宜建立。例题 例6 为学生-课程数据库中的Student,Course,SC三个表建立索引。其中Student表按学号升序建独一索引,Course表按课程号升序建独一索引,SC表按学号升序和课程号降序建独一索引。CREATE UNIQUE INDEX Stusno ON Student(Sno)CREATE UNIQUE INDEX Coucno ON Course(Cno);CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);二、删除索引 DROP INDEX;删除索引时,系统会从数据字典中删去有关该索引的描画。例7 删除Student表的Stusname索引。DROP INDEX Stusname;3.3.1 概述 语句格式SELECT ALL|DISTINCT,FROM,WHERE GROUP BY HAVING ORDER BY ASC|DESC;例如数据库 学生-课程数据库学生表:Student(Sno,Sname,Ssex,Sage,Sdept)课程表:Course(Cno,Cname,Cpno,Ccredit)学生选课表:SC(Sno,Cno,Grade)3.3 查 询 3.3.1 概述3.3.2 单表查询3.3.3 衔接查询3.3.4 嵌套查询3.3.5 集合查询3.3.6 小结 3.3.2 单表查询 查询仅涉及一个表,是一种最简单的查询操作一、选择表中的假设干列二、选择表中的假设干元组三、对查询结果排序四、运用集函数五、对查询结果分组 从职工关系中检索一切工资值SELECT 工资 FROM 职工结果是:结果是:12201210125012301250SELECT DISTINCT工资工资 FROM 职工职工结果是:结果是:1220121012501230单表查询 用户在查询时可根据运用的需求改动列的显示顺序 例2查询全体学生的姓名、学号、所在系。查询全部列-将一切的列名在SELECT后面列出或者用*表示列名 例3 SELECT*FROM Student;查询经过计算的值 例4查询全体学生姓名及其出生年份 SELECT Sname,1996-Sage FROM Student;单表查询不仅可以是算术表达式,还可以是字符串常量、不仅可以是算术表达式,还可以是字符串常量、函数等。函数等。例例5查询全体学生的姓名、出生年份和一切系,要求用小写字母查询全体学生的姓名、出生年份和一切系,要求用小写字母表示一切系名表示一切系名SELECT Sname,Year of Birth:,1996-Sage,ISLOWER(Sdept)FROM Student;输出结果:输出结果:Sname Year of Birth:1996-Sage ISLOWER(Sdept)-李勇李勇 Year of Birth:1976 cs 刘晨刘晨 Year of Birth:1977 is 王名王名 Year of Birth:1978 ma 张立张立 Year of Birth:1977 is例5.*运用列别名改动查询结果的列标题SELECT Sname NAME,Year of Birth:BIRTH,2000-Sage BIRTHDAY,ISLOWER(Sdept)DEPARTMENTFROM Student;输出结果:输出结果:NAME BIRTH BIRTHDAY DEPARTMENT -李勇李勇 Year of Birth:1976 cs 刘晨刘晨 Year of Birth:1977 is 王名王名 Year of Birth:1978 ma 张立张立 Year of Birth:1977 is二、选择表中的假设干元组 消除取值反复的行 查询满足条件的元组 1.消除取值反复的行 在SELECT子句中运用DISTINCT短语 假设SC表中有以下数据 Sno Cno Grade -95001 1 92 95001 2 85 95001 3 88 95002 2 90 95002 3 80ALL 与 DISTINCT 例6 查询选修了课程的学生学号。(1)SELECT Sno FROM SC;(由于默许的是ALL)SELECT ALL Sno FROM SC;所以结果为:Sno -95001 95001 95001 95002 95002 例题续(2)SELECT DISTINCT Sno FROM SC;结果:Sno -95001 95002 总结:两个本来并不完全一样的元组,投影到指定的某些列上后,能够变成完全一样的行,于是必需用DISTINCT短语或象下面那样用WHERE语句。2.查询满足条件的元组表表3.3 常常 用用 的的 查查 询询 条条 件件查查 询询 条条 件件谓谓 词词比比 较较=,=,=,!=,!,!;N O T+上上 述述 比比 较较 运运 算算 符符确确 定定 范范 围围BETW E EN A N D,N O T BETW EEN A N D确确 定定 集集 合合IN,N O T IN字字 符符 匹匹 配配LIK E,N O T LIK E空空 值值IS N U LL,IS N O T N U LL多多 重重 条条 件件A N D,O RWHERE子句常用的查询条件(1)比较大小在WHERE子句的中运用比较运算符=,=,=,!=或,!,!,逻辑运算符NOT +比较运算符例8 查询一切年龄在20岁以下的学生姓名及其年龄。SELECT Sname,Sage FROM Student WHERE Sage=20;例9 查询考试成果有不及格的学生的学号 SELECT DISTINCT Sno FROM SC WHERE Grade 60;(2)确定范围 运用谓词 BETWEEN (下限)AND 上限 NOT BETWEEN AND 例10 查询年龄在2023岁包括20岁和23岁之间的学生的姓名、系别和年龄。SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23;例题续例11 查询年龄不在2023岁之间的学生姓名、系别和年龄。SELECT Sname,Sdept,SageFROM StudentWHERE Sage NOT BETWEEN 20 AND 23;(3)确定集合运用谓词 IN,NOT IN :用逗号分隔的一组取值例12查询信息系IS、数学系MA和计 算机科学系CS学生的姓名和性别。SELECT Sname,SsexFROM StudentWHERE Sdept IN(IS,MA,CS);(3)确定集合例13查询既不是信息系、数学系,也不是计算 机科学系的学生的姓名和性别。SELECT Sname,SsexFROM Student WHERE Sdept NOT IN(IS,MA,CS);(4)字符串匹配 NOT LIKE ESCAPE :指定匹配模板 匹配模板:固定字符串或含通配符的字符串 当匹配模板为固定字符串时,即不含通配符时 可以用=运算符取代 LIKE 谓词 用!=或 运算符取代 NOT LIKE 谓词通配符w%(百分号)代表恣意长度长度可以为0的字符串w 例:a%b表示以a开头,以b结尾的恣意长度的字符串。如acb,addgb,ab 等都满足该匹配串w _(下横线)代表恣意单个字符w 例:a_b表示以a开头,以b结尾的长度为3的恣意字符串。如acb,afb等都满足该匹配串ESCAPE 短语:当用户要查询的字符串本身就含有%或 _ 时,要运用ESCAPE 短语对通配符进展本义。例题1)匹配模板为固定字符串 例14 查询学号为95001的学生的详细情况。SELECT*FROM Student WHERE Sno LIKE 95001;等价于:SELECT *FROM Student WHERE Sno=95001;例题续2)匹配模板为含通配符的字符串例15 查询一切姓刘学生的姓名、学号和性别。SELECT Sname,Sno,Ssex FROM Student WHERE Sname LIKE 刘%;例题续匹配模板为含通配符的字符串续例16 查询姓欧阳且全名为三个汉字的学生的姓名。SELECT Sname FROM Student WHERE Sname LIKE 欧阳_ _;例题续匹配模板为含通配符的字符串续例17 查询名字中第2个字为阳字的学生的姓名和学号。SELECT Sname,Sno FROM Student WHERE Sname LIKE _ _阳%;例题续匹配模板为含通配符的字符串续例18 查询一切不姓刘的学生姓名。SELECT Sname,Sno,Ssex FROM Student WHERE Sname NOT LIKE 刘%;例题续3)运用换码字符将通配符本义为普通字符 例19 查询DB_Design课程的课程号和学分。SELECT Cno,Ccredit FROM Course WHERE Cname LIKE DB_Design ESCAPE 例题续运用换码字符将通配符本义为普通字符(续)例20 查询以DB_开头,且倒数第3个字符为 i的课程的详细情况。SELECT *FROM Course WHERE Cname LIKE DB_%i_ _ ESCAPE ;(5)涉及空值的查询 运用谓词 IS NULL 或 IS NOT NULL “IS NULL 不能用“=NULL 替代 例21 某些学生选修课程后没有参与考试,所以有选课记录,但没有考试成果。查询短少成果的学生的学号和相应的课程号。SELECT Sno,Cno FROM SC WHERE Grade IS NULL;例题(续)例22 查一切有成果的学生学号和课程号。SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL;(6)多重条件查询用逻辑运算符AND和 OR来结合多个查询条件 AND的优先级高于OR 可以用括号改动优先级可用来实现多种其他谓词 NOT IN NOT BETWEEN AND 例题例23 查询计算机系年龄在20岁以下的学生姓名。SELECT Sname FROM Student WHERE Sdept=CS AND Sage=20 AND Sage=23;三、对查询结果排序 假设没有指定查询结果的显示顺序,DBMS按最方便的元组在表中的先后方式输出查询结果运用ORDER BY子句 可以按一个或多个属性列排序 升序:ASC;降序:DESC;缺省值为升序当排序列含空值时ASC:排序列为空值的元组最后显示DESC:排序列为空值的元组最先显示 对查询结果排序续 例24 查询选修了3号课程的学生的学号及其成果,查询结果按分数降序陈列。SELECT Sno,Grade FROM SC WHERE Cno=3 ORDER BY Grade DESC;查询结果 Sno Grade -95010 95024 95007 92 95003 82 95010 82 95009 75 95014 61 95002 55对查询结果排序续 例25 查询全体学生情况,查询结果按所在系的系号升序陈列,同一系中的学生按年龄降序陈列。SELECT *FROM Student ORDER BY Sdept,Sage DESC;四、运用集函数 5类主要集函数计数COUNTDISTINCT|ALL*COUNTDISTINCT|ALL 计算总和,此列必需是数值型的SUMDISTINCT|ALL 计算平均值,此列必需是数值型的AVGDISTINCT|ALL 运用集函数续 求最大值MAXDISTINCT|ALL 求最小值MINDISTINCT|ALL DISTINCT短语:在计算时要取消指定列中的反复值ALL短语:不取消反复值ALL为缺省值运用集函数 续例26 查询学生总人数。SELECT COUNT(*)FROM Student;例27 查询选修了课程的学生人数。SELECT COUNT(DISTINCT Sno)FROM SC;注:用DISTINCT以防止反复计算学生人数运用集函数 续例28 计算1号课程的学生平均成果。SELECT AVG(Grade)FROM SC WHERE Cno=1;例29 查询选修1号课程的学生最高分数。SELECT MAX(Grade)FROM SC WHER Cno=1;五、对查询结果分组 运用GROUP BY子句分组 细化集函数的作用对象 未对查询结果分组,集函数将作用于整个查询结果 对查询结果分组后,集函数将分别作用于每个组 运用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对查询结果分组 续 GROUP BY子句的作用对象是查询的中间结果表 分组方法:按指定的一列或多列值分组,值相等的为一组 运用GROUP BY子句后,SELECT子句的列名列表中只能出现分组属性和集函数 运用HAVING短语挑选最终输出结果例31 查询选修了3门以上课程的学生学号。SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*)3;例题例32 查询有3门以上课程是90分以上的 学生的学号及90分以上的课程数 SELECT Sno,COUNT(*)FROM SC WHERE Grade=90 GROUP BY Sno HAVING COUNT(*)=3;运用HAVING短语挑选最终输出结果 只需满足HAVING短语指定条件的组才输出 HAVING短语与WHERE子句的区别:作用对象不同 WHERE子句作用于基表或视图,从中选择满足条件的元组。HAVING短语作用于组,从中选择满足条件的组。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 成人自考


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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