数据库原理第三章A.ppt
《数据库原理第三章A.ppt》由会员分享,可在线阅读,更多相关《数据库原理第三章A.ppt(92页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、.本章重点:SQL的数据定义、查询、更新、控制功能;视图的概念及其优点。本章难点:SQL的数据查询功能。第三章 关系数据库标准语言SQL第三章 关系数据库标准语言SQL 3.1 SQL概述SQL语言的动词SQL 功能动词数据查询SELECT数据定义CREATE DROP ALTER数据操纵INSERT UPDATE DELETE数据控制GRANT REVOKE SQL的数据定义功能包括三部分:定义基本表,定义视图和定义索引。视图是基于基本表的虚表,索引是依附于基本表的。因此SQL通常不提供修改视图和索引定义的操作。SQL 的数据定义语句第三章 关系数据库标准语言SQL 3.2 数据定义操作对象
2、操作方式创建 删除 修改表CREATE TABLE DROP TABLE ALTER TABLE视图CREATE VIEW DROP VIEW索引CREATE INDEX DROP INDEX DB2 SQL 支持以下数据类型;INTEGER或INT 全字长(31 bits 精度)的二进制整数SMALLINT 半字长(精度为15bits)的二进制整数DECIMAL(p,q)或DEC(p,q)压缩十进制数,共p位,小数点后 有q位.15=p=q=0,q=0时可省略.FLOAT 双字长的浮点数CHARTER(N)或CHAR(N)长度为n的定长字符串VARCHAR(N)变长字符串,最大长度为nGRA
3、PHIC(N)长度为n的定长图形字符串VAR GRAPHIC(N)变长图形字符串,最大长度为nDATE 日期型,格式为YYYY-MM-DDTIME 时间型,格式为TIMESTAMP 日期加时间第三章 关系数据库标准语言SQL 3.2 数据定义第四章 关系数据库标准语言SQL 4.2 数据定义例2:CREATE TABLE s(sno char(6)not null,sname char(8)unique,ssex char(2)default 男,sage smallint,sdept char(2),sbirthday date,primary key(sno);列级完整性约束条件表级完整性
4、约束条件第三章 关系数据库标准语言SQL 3.2 数据定义3.2.1 定义、删除、与修改基本表二、修改基本表 语句格式为:ALTER TABLE ADD 完整性约束 DROP|MODIFY;功能:修改指定的基本表。ADD子句:用于增加新列和新的完整性约束条件;DROP子句:用于删除指定的完整性约束条件;MODIFY子句:用于修改原有的列定义(列名和数据类型)说明:不论基本表中原来是否有数据,新增加的列一律为空值。SQL没有提供删除属性列的语句。第三章 关系数据库标准语言SQL 3.2 数据定义例3:向S表增加:“入学时间”列,数据类型为日期型。ALTER TABEL S ADD SCOME D
5、ATE;注意:新增加的属性列不能指定为 NOT NULL。将年龄的数据类型改为半字长整数。ALTER TABEL S MODIFY SAGE SMALLINT;注意:修改原有的属性列定义有可能破坏已有数据。删除姓名上的唯一值约束。alter table s drop unique(sname);第三章 关系数据库标准语言SQL 3.2 数据定义3.2.1 定义、删除、与修改基本表三、删除基本表 语句格式为:DROP TABLE;功能:删除指定的基本表,同时表中的数据和在此表上建立的索引都将自动被删除掉。建立在此表上的视图虽仍然保留,但已无法引用。注意:执行删除操作一定要格外小心!第三章 关系数
6、据库标准语言SQL 3.2 数据定义3.2.2 建立与删除索引 在基本表上建立索引是为了加快查询速度。一、建立索引语句格式为:CREATE UNIQUECLUSTER INDEX 索引名 on 基本表名(列名次序,列名次序.)其他参数;说明:索引可以建在一列或几列上,圆括号内是索引列的顺序说明表。(1)次序,指定了索引值排序的次序。可取ASC(升序)或DESC(降序),缺省值为升序。(2)UNIQUE 表示每一索引值只对应唯一的数据记录,(3)CLUSTER 表示要建立的索引是聚簇索引,所谓聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织。例:CREATE CLUSTER INDEX
7、 Stusname on Student(Sname);此类索引可以提高查询效率,聚簇索引可以在最常查询的列上建立,对于经常更新的列不宜建立。一个基本表上最多只能建立一个聚簇索引。第三章 关系数据库标准语言SQL 3.2 数据定义例4 为学生-课程数据库中的Student,Couse,SC三个表建立索引。其中Student表按学号升序建唯一索引,Couse 表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。CREATE UNIQUE INDEX Stusno ON Student(Sno);CREATE UNIQUE INDEX Coucno ON Couse(Cno);CRE
8、ATE UNIQUE INDEX Sno ON SC(Sno ASC,Cno DESC);第三章 关系数据库标准语言SQL 3.2 数据定义二、删除索引 语句格式为:DROP INDEX 索引名;功能:删除索引,同时把有关索引的描述也从数据 字典中删去。例5:DROP INDEX XSNO;第三章 关系数据库标准语言SQL 3.3 数据查询一、SELECT 语法 语句格式为:SELECT ALL|DISTINCT目标列表达式,目标列表达式 FROM 基本表(或视图),基本表(或视图)WHERE 条件表达式 GROUP BY 列名1HAVING 内部函数表达式 ORDER BY 列名2ASC|D
9、ESC UNION SELECT;功能:在指定的表中查询满足条件的数据,并按目标列表达式方式显示。第三章 关系数据库标准语言SQL 3.4 数据查询 三、WHERE CLAUSE 条件可以包括:(1)比较(=,=,!=,!)(2)范围(between and,not between and)(3)列表(in,not in)(4)字符匹配(like,not like)(5)空值判断(is null,is not null)(6)连接(多表,单表(表的自连接)(7)嵌套查询(子查询)第三章 关系数据库标准语言SQL 3.4 数据查询 例:比较(=,=,!=,!)求数学系学生的学号、姓名。SELEC
10、T SNO,SName FROM S WHERE Sdept=MA;求数学系年龄在岁以下的学生的学号、姓名。SELECT SNO,SName FROM S WHERE Sdept=MA and sage=19;第三章 关系数据库标准语言SQL 3.4 数据查询 求数学系或年龄在岁以下的学生的信息。SELECT*FROM S WHERE SDept=MA or sage=19;等价形式为:SELECT*FROM S WHERE SDept=MA union SELECT*FROM S WHERE sage=19;第三章 关系数据库标准语言SQL 3.4 数据查询 例:范围(between and
11、,not between and)求数学系年龄在岁到岁之间,的学生的信息 SELECT*FROM S WHERE SDept=MA and sage=19 and sage=22;第三章 关系数据库标准语言SQL 3.4 数据查询 用范围的等价形式为:SELECT*FROM S WHERE SDept=MA and sage between 19 and 22;求年龄不在岁到岁之间,的学生的信息 SELECT*FROM S WHERE sage not between 19 and 22;第三章 关系数据库标准语言SQL 3.4 数据查询 例:列表(in,not in)求在下列各系的学生:MA
12、(数学系),CS(计算机科学系)。SELECT*FROM S WHERE SDept IN(MA,CS);谓词 IN 实际上是一系列谓词OR的缩写。所以,上面等价的查询语句为:SELECT*FROM S WHERE SDept=MA or SDept=CS;第三章 关系数据库标准语言SQL 3.4 数据查询也可以用谓词 NOT IN例如,求不是数学系,计算机科学系的学生。SELECT*FROM S WHERE SDept NOT IN(MA,CS);第三章 关系数据库标准语言SQL 3.4 数据查询 例:字符匹配(like,not like)LIKE 谓词的一般形式是:列名NOTLIKE 匹配
13、串ESCAPE 常量字符 匹配串可以是一个完整的字符串,也可以含有通配符%和 _ 其中:%匹配任意长度的字符串;_ 匹配单个字符 LIKE可以用=代替;NOT LIKE可以用 或!=代替 ESCAPE 常量字符 表示该常量字符后的一个字符不再具有通配符的含义,而作为一个普通字符匹配。第三章 关系数据库标准语言SQL 3.4 数据查询例如:列名 like ACV_HHFJ%ESCAPE 求姓名是以字母D 打头的学生。SELECT*FROM S WHERE SName LIKE D%;第三章 关系数据库标准语言SQL 3.4 数据查询例:空值判断(is null,is not null)注意:在计
14、算列中有空值时,要先处理或将空值列置0 查询没有成绩的学生的学号和课程号 SELECT sno,cno FROM SC WHERE grade is null;第三章 关系数据库标准语言SQL 3.4 数据查询 例:连接(多表,单表(表的自连接)若一个查询同时涉及到两个以上的表,称为连接查询 连接查询包括:等值连接 自然连接 非等值连接 自身连接 外连接 复合条件连接第三章 关系数据库标准语言SQL 3.4 数据查询例:(广义笛卡尔积)SELECT s.sno,sname,sc.sno,grade FROM sc,s;例:(等值连接)SELECT s.sno,sname,sc.*FROM sc
15、,s WHERE s.sno=sc.sno;SELECT s.sno,sname,o,cname,grade FROM sc,s,c WHERE s.sno=sc.sno and o=o;第三章 关系数据库标准语言SQL 3.4 数据查询例:(自然连接)SELECT s.*,o,sc.grade FROM sc,s WHERE s.sno=sc.sno;例:(自身连接)SELECT Fo,Second.pcno FROM c First,c Second WHERE First.pcno=So;第三章 关系数据库标准语言SQL 3.4 数据查询 例:(外连接)SELECT s.*,o,sc.g
16、rade FROM sc,s WHERE s.sno=sc.sno(*);例:(复合条件连接)SELECT s.*,o,sc.grade FROM sc,s WHERE s.sno=sc.sno and cno=2 and grade 85;第三章 关系数据库标准语言SQL 3.4 数据查询(7)嵌套查询(子查询)一个 SELECT-FROM-WHERE语句称为一个查询块 一个查询块出现在 WHERE 子句中或HAVING 短语中的查询称为嵌套查询 SQL语句允许多层嵌套 特别指出:子查询的SELECT 语句中不能使用 ORDER BY 子句 ORDER BY 子句只能对最终查询结果排序 嵌套
17、查询分为:简单子查询 相关子查询第三章 关系数据库标准语言SQL 3.4 数据查询 例:简单子查询(带有IN谓词的子查询)查询选修了2号课程的学生的姓名 SELECT sname FROM s WHERE sno in(SELECT sno FROM SC WHERE cno=2);等价于:SELECT,sname FROM s WHERE sno in(s1,s3,s4,s5);第三章 关系数据库标准语言SQL 3.4 数据查询例:查询选修了数据库系统课程的学生的学号和姓名 SELECT s.sno,sname FROM s WHERE sno in(SELECT sno FROM SC W
18、HERE cno in(SELECT cno FROM C WHERE cname=数据库系统);第三章 关系数据库标准语言SQL 3.4 数据查询 例:(带有比较运算符的子查询)查询“王明”所在系的学生的学号、姓名和系 SELECT s.sno,sname,sdept FROM s WHERE sdept=(SELECT sdept FROM S WHERE sname=王明);第三章 关系数据库标准语言SQL 3.4 数据查询 例:(带有ANY 或 ALL谓词的子查询)查询其它系比“CS”系某一学生年龄小的学生姓名和年龄 SELECT sname,sage FROM s WHERE sde
19、pt cs and sage any(SELECT sage FROM S WHERE sdept=cs);第三章 关系数据库标准语言SQL 3.4 数据查询 例:查询其它系比“CS”系任一学生年龄小的学生姓名和年龄 SELECT sname,sage FROM s WHERE sdept cs and sage all(SELECT sage FROM S WHERE sdept=cs);第三章 关系数据库标准语言SQL 3.4 数据查询 例:相关子查询(使用存在量词 EXISTS 和 NOT EXISTS)EXISTS 代表存在量词。带有EXISTS谓词的子查询不返回任何数据,只产生逻辑值
20、“TRUE”或“FALSE”查询选修了2号课程的学生的学号和姓名 SELECT s.sno,sname FROM s WHERE exists(SELECT*FROM SC WHERE sc.sno=s.sno and cno=2);第三章 关系数据库标准语言SQL 3.4 数据查询 查询未选修了2号课程的学生的学号和姓名 SELECT s.sno,sname FROM s WHERE not exists(SELECT*FROM SC WHERE sc.sno=s.sno and cno=2);第三章 关系数据库标准语言SQL 3.4 数据查询四、聚合函数有 SUM,AVG,MAX,MIN,
21、COUNT,COUNT(*)例:SELECT max(sage)FROM s;SELECT count(*)FROM s;SELECT count(sno)FROM s where sdept=ma;第三章 关系数据库标准语言SQL 3.4 数据查询 五、结果排序 ORDER BY 子句对查询结果按一个或多个属性的升序(ASC)或降序(DESC)排列 SELECT*FROM sc ORDER BY SNO;SELECT*FROM sc ORDER BY CNO DESC;第三章 关系数据库标准语言SQL 3.4 数据查询 六、结果分组与 HAVING 子句 例:SELECT ssex FROM
22、 s group by ssex;SELECT ssex,avg(sage)FROM s group by ssex;SELECT sdept,avg(sage)aaa FROM s group by sdept having aaa 19;第三章 关系数据库标准语言SQL 3.4 数据查询 例:统计每个学生选修课程的门数及平均成绩 SELECT sno,count(*)as course_num,avg(grade)as avg_grade FROM sc group by sno;第三章 关系数据库标准语言SQL 3.4 数据查询 例:统计每门课程的选修人数及平均成绩 SELECT cno
23、,count(*)as student_num,avg(grade)as avg_grade FROM sc group by cno;第三章 关系数据库标准语言SQL 3.4 数据查询 关于在WHERE 子句中不能使用聚合函数 SELECT sno,max(sage)FROM s GROUP BY sno;?SELECT sno,sage FROM s WHERE sage=max(sage);第三章 关系数据库标准语言SQL 3.4 数据查询 七、集合查询例查询计算机科学系的学生及年龄不大于19岁的学生。SELECT*FROMStudentWHERESdept=CSUNIONSELECT*
24、FROMStudentWHERESage=19;本查询实际上是求计算机科学系的所有学生与年龄不大于19岁的学生的并集。使用UNION将多个查询结果合并起来时,系统会自动去掉重复元组。注意,参加UNION操作的各结果表的列数必须相同;对应项的数据类型也必须相同。第三章 关系数据库标准语言SQL 3.4 数据查询例查询选修了课程1或者选修了课程2的学生。SELECTSnoFROMSCWHERECno=1UNIONSELECTSnoFROMSCWHERECno=2;标准SQL中没有直接提供集合交操作和集合差操作,但可以用其他方法来实现。例查询计算机科学系的学生与年龄不大于19岁的学生的交集,这实际上
25、就是查询计算机科学系中年龄不大于19岁的学生。SELECT*FROMStudentWHERESdept=CSANDSage=19;第三章 关系数据库标准语言SQL 3.4 数据查询例查询选修课程1的学生集合与选修课程2的学生集合的交集。SELECTSnoFROMSCWHERECno=1ANDSnoIN(SELECTSnoFROMSCWHERECno=2);例查询计算机科学系的学生与年龄不大于19岁的学生的差集。SELECT*FROMStudentWHERESdept=CSANDSage19;查询选修了1号课程或2号课程的同学查询选修了1号课程并且没有选修2号课程的同学查询选修了1号课程并且选修
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 原理 第三
限制150内