第三章 关系数据库标准语言SQL.ppt
《第三章 关系数据库标准语言SQL.ppt》由会员分享,可在线阅读,更多相关《第三章 关系数据库标准语言SQL.ppt(124页珍藏版)》请在麦多课文档分享上搜索。
1、第三章 关系数据库标准语言SQL,3.1 SQL概述 3.2 学生课程数据库 3.3 数据定义 3.4 数据查询 3.5 数据更新 3.6 视图,3.1 SQL概述,一、SQL的产生与发展 1974年IBM圣约瑟实验室的Boyce和Chamberlin为关系数据库管理系统设计的一种查询语言,当时称为SEQUEL语言 (Structured English Query Language),后简称为SQL; 1986年ANSI(美国国家标准局)着手制定SQL标准-SQL86; SQL86主要内容:模式定义、数据操作、嵌入式SQL等内容 1987年,ISO(国际标准组织) 通过SQL86标准; 后来
2、经过了SQL89、SQL92、SQL99、SQL2003的发展,,,二、SQL的特点,1. 综合统一 2. 高度非过程化 3. 面向集合的操作方式 4. 以同一种语法结构提供两种使用方法 5. 语言简洁,易学易用,三、SQL的基本概念,3.2 学生课程数据库,Student,Course,SC,3.3 数 据 定 义,表3.2 SQL的数据定义语句,3.3.1 模式的定义与删除,一、定义模式CREATE SCHEMA AUTHORIZATION,例如1 定义一学生课程模式 CREATE SCHEMA “S-T” AUTHORIZATION WANC 或 CREATE SCHEMA AUTHOR
3、IZATION WANC,定义模式实际上定义了一个命名空间,在这个空间中可以进一步定义该模式包含的数据库对象,例如基本表、视图、索引等。,3.3.1 模式的定义与删除,可以在模式创建的同时在这个模式中定义中进一步创建基本表、视图、定义授权。 CREATE SCHEMA AUTHORIZATION |,例如3 CREATE SCHEMA TEST AUTHORIZATION ZHANG CREATE TABLE TAB1 (COL1 SMALLINT,COL2 INTCOL3 CHAR(20)COL4 DATECOL5 CHAR(20);,3.3.1 模式的定义与删除,二、删除模式DROP SC
4、HEMA ,其中:CASCADE: 联级RESTRICT:限制,例如4 DROP SCHEMA ZHANG CASCAD,3.3.2 基本表的定义、删除与修改,CREATE TABLE ( , , ); :所要定义的基本表的名字 :组成该表的各个属性(列) :涉及相应属性列的完整性约束条件 :涉及一个或多个属性列的完整性约束条件,一、定义基本表,例题,例5 建立一个“学生”表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。其中学号为主码,并且姓名取值也唯一。,常用完整性约束 主码约束: PRIMARY KEY 唯一性约束:UNIQUE
5、非空值约束:NOT NULL 外码:FOREIGN KEY 参照完整性约束,CREATE TABLE Student(Sno CHAR(9) PRIMARY KEY,Sname CHAR(20) UNIQUE, Ssex CHAR(2) ,Sage SMALLINT,Sdept CHAR(20);,例题,例6 建立一个“课程”表Course。CREATE TABLE Course(Cno CHAR(4) PRIMARY KEY , Cname CHAR(40),Cpno CHAR(4),Ccredit SMALLINT,FOREIGN KEY (Cpno) REFERENCES Course(
6、Cno) );,例题,例7 建立一个“学生选课”表SC,它由学号Sno、课程号Cno,修课成绩Grade组成,其中(Sno, Cno)为主码。 CREATE TABLE SC(Sno CHAR(9) ,Cno CHAR(4) , Grade SMALLINT,PRIMARY key (Sno, Cno),FOREIGN KEY (Sno) REFERENCES Student(Sno),FOREIGN KEY (Cno) REFERENCES Course(Cno) );,二、数据类型,CHAR(n) 长度为n的定长字符串。 VARCHAR(n) 最大长度为n的变长字符串。 INT 全字长二进
7、制整数。 SMALLINT 半字长二进制整数。 FLOAT 双字长浮点数。 DATE 日期型,格式为YYYY-MM-DD。 TIME 时间型,格式为HH.MM.SS。 TIMESTAMP 日期加时间。,注意:不同的DBMS支持的数据类型不完全相同,三、模式与表,每一个基本表都属于某一个模式,一个模式包含多个基本表。有三种方法定义基本表所属的模式。 方法一:在表名中明显的给出模式名CREATE TABLE “S-T”.Stuent();CREATE TABLE “S-T”. Course();CREATE TABLE “S-T”.SC(); 方法二:在创建模式语句中同时创建表(如:例3) 方法三
8、:设置所属的模式Set scarch_path to “S-T”,PUBLIC,四、修改基本表,ALTER TABLE ADD 完整性约束 DROP MODIFY ;,:要修改的基本表 ADD子句:增加新列和新的完整性约束条件 DROP子句:删除指定的完整性约束条件 MODIFY子句:用于修改列名和数据类型 说明:没有删除列的功能,例题,例8 向Student表增加“入学时间”列,其数据类型为日期型。ALTER TABLE Student ADD Scome DATE; 不论基本表中原来是否已有数据,新增加的列一律为空值。,例9 将年龄的数据类型改为整数。 ALTER TABLE Studen
9、t MODIFY Sage SMALLINT; 注:修改原有的列定义有可能会破坏已有数据,例10 删除学生姓名必须取唯一值的约束。ALTER TABLE Student DROPUNIQUE(Sname);,四、修改基本表,删除属性列间接删除 把表中要保留的列及其内容复制到一个新表中 删除原表 再将新表重命名为原表名,DROP TABLE RESTRICT|CASCADE; RESTRICT:有限制条件的删除。基本表不能被其它表作为参照约束所引用,不能有视图,不能触发器,不能有存储程序和函数等。若有则不能删除。 CASCADE:无条件删除(相关依赖的对象一起删除)。,例11 删除Student
10、表DROP TABLE Student ;,五、删除基本表,3.3.2 建立与删除索引,建立索引是加快查询速度的有效手段 DBA或表的属主(即建立表的人)根据需要建立 有些DBMS自动建立以下列上的索引PRIMARY KEYUNIQUE 维护索引DBMS自动完成 使用索引DBMS自动选择是否使用索引以及使用哪些索引,一、建立索引,语句格式 CREATE UNIQUE CLUSTER INDEX ON (, ); 用指定要建索引的基本表名字 索引可以建立在该表的一列或多列上,各列名之间用逗号分隔 用指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC UNIQUE表明此索引的每一个
11、索引值只对应唯一的数据记录 CLUSTER表示要建立的索引是聚簇索引,例题,例13 CREATE CLUSTER INDEX Stusname ON Student(Sname);,例14 为学生-课程数据库中的Student,Course,SC三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。 CREATE UNIQUE INDEX Stusno ON Student(Sno); CREATE UNIQUE INDEX Coucno ON Course(Cno); CREATE UNIQUE INDEX S
12、Cno ON SC(Sno ASC,Cno DESC);,唯一值索引 对于已含重复值的属性列不能建UNIQUE索引 对某个列建立UNIQUE索引后,插入新记录时DBMS会自动检查新记录在该列上是否取了重复值。这相当于增加了一个UNIQUE约束,聚簇索引,建立聚簇索引后,基表中数据也需要按指定的聚簇属性值的升序或降序存放。也即聚簇索引的索引项顺序与表中记录的物理顺序一致 例: CREATE CLUSTER INDEX Stusname ON Student(Sname); 在Student表的Sname(姓名)列上建立一个聚簇索引,而且Student表中的记录将按照Sname值的升序存放。,在一
13、个基本表上最多只能建立一个聚簇索引 聚簇索引的用途:对于某些类型的查询,可以提高查询效率 聚簇索引的适用范围很少对基表进行增删操作很少对其中的变长列进行修改操作,二、删除索引,DROP INDEX ;删除索引时,系统会从数据字典中删去有关该索引的描述。 例15 删除Student表的Stusname索引。DROP INDEX Stusname;,3.4 查 询,SELECT ALL|DISTINCT , FROM , WHERE GROUP BY HAVING ORDER BY ASC|DESC ;,SELECT子句:指定要显示的属性列 FROM子句:指定查询对象(基本表或视图) WHERE子
14、句:指定查询条件GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。 HAVING短语:筛选出只有满足指定条件的组 ORDER BY子句:对查询结果表按指定列值的升序或降序排序,语句格式,学生-课程数据库,Student,Course,SC,学生表:Student(Sno,Sname,Ssex,Sage,Sdept) 课程表:Course(Cno,Cname,Cpno,Ccredit) 学生选课表:SC(Sno,Cno,Grade),3.4.1 单表查询,查询仅涉及一个表,是一种最简单的查询操作 一、选择表中的若干列,1.查询指定的若干列
15、例1 查询全体学生的学号与姓名。 SELECT Sno,Sname FROM Student; 例2 查询全体学生的姓名、学号、所在系。 SELECT Sname,Sno,Sdept FROM Student;,2.查询全部列 例3 查询全体学生的详细记录。 SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student; 或 SELECT * FROM Student;,3.查询经过计算的值,SELECT 子句的为表达式 算术表达式、字符串常量、函数、列别名等,例4 查全体学生的姓名及其出生年份。 SELECT Sname,2006-Sage FROM Stude
16、nt;,输出结果:,例5 查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名。 SELECT Sname,Year of Birth: ,2006-Sage,ISLOWER(Sdept)FROM Student;,结果为:,例5 使用列别名改变查询结果的列标题,SELECT Sname NAME,Year of Birth: BIRTH,2006-Sage BIRTHDAY,ISLOWER(Sdept) DEPARTMENTFROM Student;,输出结果:,二、选择表中的若干元组,在SELECT子句中使用DISTINCT短语,例6 查询选修了课程的学生学号。 (1) SEL
17、ECT SnoFROM SC;或(默认 ALL)SELECT ALL SnoFROM SC,(2) SELECT DISTINCT SnoFROM SC;,(1)结果:,(2)结果:,SC,注意:DISTINCT短语的作用范围是所有目标列 例:查询选修课程的各种成绩 错误的写法 SELECT DISTINCT Cno,DISTINCT Grade FROM SC; 正确的写法SELECT DISTINCT Cno,GradeFROM SC;,1. 消除取值重复的行,2.查询满足条件的元组,WHERE子句常用的查询条件,(1) 比较大小,在WHERE子句的中使用比较运算符 =,=,!,!, 逻辑
18、运算符NOT + 比较运算符 例7 查询 计算机科学系的全体学生的名单。,例8 查询所有年龄在20岁以下的学生姓名及其年龄。,SELECT Sname,Sage FROM Student WHERE NOT Sage = 20;,SELECT Sname,Sage FROM Student WHERE Sage 20;,或,例9 查询考试成绩有不及格的学生的学号。,SELECT DISTING Sno FROM SC WHERE Grade 60;,SELECT Sname FROM Student WHERE Sdept =CS;,(2) 确定范围,使用谓词 BETWEEN AND NOT
19、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)学生的姓名和性别。 SE
20、LECT Sname,Ssex FROM Student WHERE Sdept IN ( IS,MA,CS );,例13查询既不是信息系、数学系,也不是计算 机科学系的学生的姓名和性别。 SELECT Sname,Ssex FROM StudentWHERE Sdept NOT IN ( IS,MA,CS );,(4) 字符串匹配,NOT LIKE ESCAPE :指定匹配模板匹配模板:固定字符串或含通配符的字符串当匹配模板为固定字符串时,可以用 = 运算符取代 LIKE 谓词用 != 或 运算符取代 NOT LIKE 谓词,% (百分号) 代表任意长度(长度可以为0)的字符串 例:a%b表
21、示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab 等都满足该匹配串 _ (下横线) 代表任意单个字符 例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串,通配符,ESCAPE 短语:,当用户要查询的字符串本身就含有 % 或 _ 时,要使用ESCAPE 短语对通配符进行转义。,1) 匹配模板为固定字符串,例14 查询学号为200215121的学生的详细情况。 SELECT * FROM Student WHERE Sno LIKE 200215121 ; 等价于: SELECT * FROM Student WHERE Sno = 2002
22、15121 ;,2) 匹配模板为含通配符的字符串,例15 查询所有姓刘学生的姓名、学号和性别。SELECT Sname,Sno,SsexFROM StudentWHERE Sname LIKE 刘%;,例16 查询姓“欧阳“且全名为三个汉字的学生的姓名。SELECT SnameFROM StudentWHERE Sname LIKE 欧阳_;,例17 查询名字中第2个字为“阳“字的学生的姓名和学号。SELECT Sname,SnoFROM StudentWHERE Sname LIKE _阳%;,例18 查询所有不姓刘的学生姓名。 SELECT Sname,Sno,Ssex FROM Stud
23、ent WHERE Sname NOT LIKE 刘%;,3) 使用换码字符将通配符转义为普通字符,例19 查询DB_Design课程的课程号和学分。SELECT Cno,Ccredit FROM CourseWHERE Cname LIKE DB_Design ESCAPE ; 例20 查询以“DB_“开头,且倒数第3个字符为 i的课程的详细情况。SELECT * FROM CourseWHERE Cname LIKE DB_%i_ _ ESCAPE ;,(5) 涉及空值的查询,使用谓词 IS NULL 或 IS NOT NULL“IS NULL” 不能用 “= NULL” 代替,例21 某
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 关系 数据库 标准 语言 SQLPPT
