第三章__关系数据库标准语言SQL-1.ppt
《第三章__关系数据库标准语言SQL-1.ppt》由会员分享,可在线阅读,更多相关《第三章__关系数据库标准语言SQL-1.ppt(112页珍藏版)》请在三一办公上搜索。
1、第三章 关系数据库标准语言SQL,结构化查询语言(Structured Query Language,简称SQL)介于关系代数与关系演算之间包括查询、操纵、定义和控制四个方面关系数据库的标准语言,第三章 关系数据库标准语言SQL,3.1 SQL概述3.2 数据定义3.3 查询3.4 数据更新3.5 视图3.6 数据控制,3.1 SQL概述,SQL的特点1.综合统一集DDL、DML、DCL于一体。2.高度非过程化不用考虑如何实现,只需提出“做什么”,不关心“怎么做“。3.面向集合的操作方式查询、插入、删除、更新操作对象及结果都是集合。4.以同一种语法结构提供两种使用方法可交互式和嵌入式使用。5.
2、语言简洁,易学易用,3.1 SQL概述,SQL语言所使用的动词,3.1 SQL概述,SQL与三级模式体系结构,第三章 关系数据库标准语言SQL,3.1 SQL概述3.2 数据定义3.3 查询3.4 数据更新3.5 视图3.6 数据控制3.7 嵌入式SQL,3.2 数据定义,SQL提供了专门的语言用来定义数据库、表、索引等数据库对象,这些语言被称作数据库定义语言(Data Definition Language,DDL)。SQL的数据定义语句:,3.2 数据定义,3.2.1 定义、删除与修改基本表3.2.2 建立与删除索引,3.2.1 定义、删除与修改基本表,一、定义基本表二、删除基本表三、修改
3、基本表,一、定义基本表,SQL 中的数据类型SMALLINT半字长二进制整数INT全字长二进制整数DECIMAL(p,q)压缩十进制数FLOAT双字长浮点数CHAR(n)长度为n的定长字符串VARCHAR(n)最大长度为n的变长字符串IMAGE 图像DATETIME日期和时间,一、定义基本表,语句格式,CREATE TABLE(,);,:所要定义的基本表的名字:组成该表的各个属性(列):涉及相应属性列的完整性约束条件:涉及一个或多个属性列的完整性约束条件,示例,一、定义基本表,常用完整性约束主码约束:PRIMARY KEY唯一性约束:UNIQUE(不能取相同值但允许多个空值)非空值约束:NOT
4、 NULL参照完整性约束:FOREIGN KEY()REFERENCES(),一、定义基本表,例1 建立一个“学生”表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性构成。其中学号不能为空,值是唯一的,并且姓名取值也唯一。CREATE TABLE Student(Sno CHAR(5)NOT NULL UNIQUE,Sname CHAR(20)UNIQUE,Ssex CHAR(2),Sage INT,Sdept CHAR(15),PRIMARY KEY(Sno);,可换为PRIMARY KEY,一、定义基本表,例2 建立一个“学生选课”表SC
5、,它由学号Sno、课程号Cno,成绩Grade组成,其中(Sno,Cno)为主码。CREATE TABLE SC(Sno CHAR(5),Cno CHAR(3),Grade INT,PRIMARY KEY(Sno,Cno),FOREIGN KEY(Sno)REFERENCES S(Sno),FOREIGN KEY(Cno)REFERENCES C(Cno);,二、删除基本表,语句格式DROP TABLE;例3 删除Student表 DROP TABLEStudent;基本表删除后,表里的数据、表上的索引都会被删除,表上的视图往往仍然保留,但无法引用。删除基本表时,系统会从数据字典中删去有关该基
6、本表及其索引的描述。,三、修改基本表,语句格式ALTER TABLE ADD 完整性约束 DROP MODIFY;:要修改的基本表ADD子句:增加新列和新的完整性约束条件DROP子句:删除指定的完整性约束条件MODIFY子句:用于修改列名和数据类型,三、修改基本表,例4 向Student表增加“入学时间”列,其数据类型为日期型。ALTER TABLE Student ADD Scome DATETIME;注:不论基本表中原来是否已有数据,新增加的列一律为空值。例5 将年龄的数据类型改为半字长整数。ALTER TABLE Student MODIFY Sage SMALLINT;注:修改原有的列
7、定义有可能会破坏已有数据例6 删除学生姓名必须取唯一值的约束。ALTER TABLE Student DROP UNIQUE(Sname);,三、修改基本表,删除属性列间接删除把表中要保留的列及其内容复制到一个新表中删除原表再将新表重命名为原表名直接删除属性列:(SQL-99)例:ALTER TABLE Student Drop Scome;,3.2.2 建立与删除索引,一、建立索引二、删除索引,Search-key项常用的组织方式是顺序或Hash排列。单一索引(Unique Index):每一个索引值只对应唯一的数据记录。当建立单一索引后,索引项不可以再插入已有值,但可以多个空值。同样,当建
8、立单一索引时,如果待索引项存在相同值则不能建立。聚簇索引(Cluster Index):索引项顺序与表中数据记录的物理顺序一致。,Index_sno,Index_sage,索引,一、建立索引,语句格式:CREATE UNIQUE CLUSTER INDEX ON(,);用指定要建索引的基本表名字索引可以建立在该表的一列或多列上,各列名之间用逗号分隔用指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASCUNIQUE表明此索引的每一个索引值只对应唯一的数据记录CLUSTER表示要建立的索引是聚簇索引,一、建立索引,例7 为学生-课程数据库中的Student,Course,SC三个表建
9、立索引。其中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);例8 在Student表的Sname(姓名)列上建立一个聚簇索引,而且Student表中的记录将按照Sname值的升序存放。CREATE CLUSTER INDEX Stusname ON Student
10、(Sname);,二、删除索引,语句格式:DROP INDEX;注:删除索引时,系统会从数据字典中删去有关该索引的描述。例9 删除Student表的Stusname索引。DROP INDEX Stusname;SQL标准中没有定义对索引的修改功能,而采用删除后重新定义索引的方式实现。,单一索引(唯一值索引)对于已含重复值的属性列不能建UNIQUE索引对某个列建立UNIQUE索引后,插入新记录时DBMS会自动检查新记录在该列上是否取了重复值。这相当于增加了一个UNIQUE约束聚簇索引(聚集索引)建立聚簇索引后,基表中数据也需要按指定的聚簇属性值的升序或降序存放。也即聚簇索引的索引项顺序与表中记录
11、的物理顺序一致在一个基本表上最多只能建立一个聚簇索引聚簇索引的用途:对于某些类型的查询,可以提高查询效率聚簇索引的适用范围 很少对基表进行增删操作 很少对其中的变长列进行修改操作,索引,建立索引是加快查询速度的有效手段建立索引DBA或表的属主(即建立表的人)根据需要建立有些DBMS自动建立以下列上的索引 PRIMARY KEY UNIQUE维护索引:DBMS自动完成使用索引:DBMS自动选择是否使用索引以及使用哪些索引,第三章 关系数据库标准语言SQL,3.1 SQL概述3.2 数据定义3.3 查询3.4 数据更新3.5 视图3.6 数据控制3.7 嵌入式SQL,3.3 查询,3.3.1 概述
12、3.3.2 单表查询3.3.3 连接查询3.3.4 嵌套查询3.3.5 集合查询3.3.6 小结,3.3.1 概述,查询语法SELECT ALL|DISTINCT,FROM,WHERE GROUP BY HAVING ORDER BY ASC|DESC;SELECT子句:指定要显示的属性列FROM子句:指定查询对象(基本表或视图)WHERE子句:指定查询条件GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。HAVING短语:筛选出只有满足指定条件的组ORDER BY子句:对查询结果按指定列值的升序或降序排序,3.3.1 概述,执行过程:1
13、)读取FROM子句中基本表、视图的数据,执行笛卡尔积操作。2)选取满足WHERE子句中给出的条件表达式的元组。3)按GROUP子句中指定列的值分组,同时提取满足HAVING短语中条件表达式的那些组。4)按SELECT子句中给出的列名或列表达式求值输出.5)ORDER子句对输出的目标表进行排序,3.3.1 概述,本节所用到的数据库:学生-课程数据库学生表:Student(Sno,Sname,Ssex,Sage,Sdept),3.3.1 概述,课程表:Course(Cno,Cname,Cpno,Ccredit),3.3.1 概述,学生选课表:SC(Sno,Cno,Grade),3.3.2 单表查询
14、,查询仅涉及一个表,是一种最简单的查询操作一、选择表中的若干列二、选择表中的若干元组三、对查询结果排序四、使用集函数五、对查询结果分组,一、选择表中的若干列(),例1 查询全体学生的学号与姓名。SELECT Sno,SnameFROM Student;/等价于 sno,Sname(Student)例2 查询全体学生的姓名、学号、所在系。SELECT Sname,Sno,SdeptFROM Student;例3 查询全体学生的详细记录。SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student;或SELECT*/表示将表中的列全部按序输出FROM Student;
15、,一、选择表中的若干列,1)目标列(SELECT子句)为表达式的查询目标列形式:算术表达式、字符串常量、函数、列别名等。例4 查全体学生的姓名及其出生年份。SELECT Sname,1996-SageFROM Student;,输出结果:Sname 1996-Sage-李勇 1976 刘晨 1977 王敏 1978 张立 1977,一、选择表中的若干列,例5 查询全体学生的姓名、出生年份和所在系,要求用小写字母表示所在系名。SELECT Sname,Year of Birth:,1996-Sage,ISLOWER(Sdept)FROM Student;,输出结果:Sname Year of B
16、irth:1996-Sage ISLOWER(Sdept)-李勇 Year of Birth:1976 cs 刘晨 Year of Birth:1977 is 王敏 Year of Birth:1978 ma 张立 Year of Birth:1977 is,2)使用列别名改变查询结果的列标题例5.1(上例)查询全体学生的姓名、出生年份和所在系,并将输出字段依次更名为:NAME、BIRTH、BIRTHDAY、DEPARTMENT。SELECT Sname NAME,Year of Birth:BIRTH,1996-Sage BIRTHDAY,ISLOWER(Sdept)DEPARTMENT F
17、ROM 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,3)消除结果中取值重复的行在SELECT子句中使用DISTINCT短语。例6 查询选修了课程的学生学号。,(1)SELECT SnoFROM SC;或(默认 ALL)SELECT ALL SnoFROM SC;,结果:Sno-95001 95001 95001 95002 95002,(2)SELEC
18、T DISTINCT Sno FROM SC;,结果:Sno-95001 95002,一、选择表中的若干列,注意:DISTINCT短语的作用范围是所有目标列例:查询选修课程的各种成绩错误的写法SELECT DISTINCT Cno,DISTINCT GradeFROM SC;正确的写法SELECT DISTINCT Cno,GradeFROM SC;注:在投影()运算的定义中直接去掉了结果中的重复元组,在SQL中必须在SELECT子句中用DISTINCT明确指定才能去掉重复列。,二、选择表中的若干元组(),使用WHERE子句WHERE子句常用的查询条件:,二、选择表中的若干元组(),1)使用比
19、较运算符确定元组例7 查询计算机系全体学生的信息。SELECT*FROM StudentWHERE Sdept=CS;/等价于Sdept=CS(Student)例8 查询所有年龄在20岁以下的学生姓名及其年龄。SELECT Sname,Sage FROM Student WHERE Sage=20;,二、选择表中的若干元组(),2)确定范围例10 查询年龄在2023岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。SELECT Sname,Sdept,SageFROM StudentWHERE Sage BETWEEN 20 AND 23;例11 查询年龄不在2023岁之间的学生姓名、系别
20、和年龄。SELECT Sname,Sdept,SageFROM StudentWHERE Sage NOT BETWEEN 20 AND 23;,二、选择表中的若干元组(),3)确定集合例12 查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。SELECT Sname,SsexFROM StudentWHERE Sdept IN(IS,MA,CS);例13 查询不是信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。SELECT Sname,SsexFROM StudentWHERE Sdept NOT IN(IS,MA,CS);,二、选择表中的若干元
21、组(),4)字符串匹配NOT LIKE ESCAPE:指定匹配模板。匹配模板:固定字符串或含通配符的字符串。当匹配模板为固定字符串时,可以用=运算符取代LIKE 谓词,用!=或 运算符取代 NOT LIKE 谓词。%(百分号):代表任意长度(长度可以为0)的字符串例:a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab 等都满足该匹配串。_(下横线):代表任意单个字符例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串当用户要查询的字符串本身就含有%或 _ 时,要使用ESCAPE 短语对通配符进行转义。,二、选择表中的若干元组(),匹配
22、模板为固定字符串 例14 查询学号为95001的学生的详细情况。SELECT*FROM Student WHERE Sno LIKE 95001;等价于:SELECT*FROM Student WHERE Sno=95001;,二、选择表中的若干元组(),匹配模板为含通配符的字符串例15 查询所有姓刘学生的姓名、学号和性别。SELECT Sname,Sno,Ssex FROM Student WHERE Sname LIKE 刘%;例16 查询姓欧阳且全名为三个汉字的学生的姓名。SELECT Sname FROM Student WHERE Sname LIKE 欧阳_ _;例17 查询名字中
23、第2个字为阳字的学生的姓名和学号。SELECT Sname,Sno FROM Student WHERE Sname LIKE _ _阳%;,例18 查询所有不姓刘的学生姓名。SELECT Sname FROM Student WHERE Sname NOT LIKE 刘%;用转义符将通配符转义为普通字符例19 查询DB_Design课程的课程号和学分。SELECT Cno,Ccredit FROM Course WHERE Cname LIKE DB_Design ESCAPE 例20 查询以DB_开头,且倒数第3个字符为 i的课程的详细情况。SELECT*FROM Course WHERE
24、 Cname LIKE DB_%i_ _ ESCAPE;,5)涉及空值的查询使用谓词 IS NULL 或 IS NOT NULL“IS NULL”不能用“=NULL”代替例21 某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。SELECT Sno,CnoFROM SCWHERE Grade IS NULL;例22 查询所有有成绩的学生学号和课程号。SELECT Sno,CnoFROM SC WHERE Grade IS NOT NULL;,二、选择表中的若干元组(),二、选择表中的若干元组(),6)多重条件查询用逻辑运算符AND和 OR来
25、联结多个查询条件AND的优先级高于OR可以用括号改变优先级可用来连接多种其他谓词条件,如:A BNOT BETWEEN AND NOT INLIKE,NOT LIKEIS NULL,IS NOT NULL可用作其他部分谓词条件的等价替换NOT BETWEEN AND NOT IN,二、选择表中的若干元组(),例23 查询计算机系年龄在20岁以下的学生姓名。SELECT SnameFROM StudentWHERE Sdept=CS AND Sage=20 AND Sage=23;,例12 查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。SELECT Sname,Sse
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 _ 关系 数据库 标准 语言 SQL
链接地址:https://www.31ppt.com/p-2410266.html