数据库原理及应用课件:第4章 关系数据库标准语言SQL_第1页
数据库原理及应用课件:第4章 关系数据库标准语言SQL_第2页
数据库原理及应用课件:第4章 关系数据库标准语言SQL_第3页
数据库原理及应用课件:第4章 关系数据库标准语言SQL_第4页
数据库原理及应用课件:第4章 关系数据库标准语言SQL_第5页
已阅读5页,还剩172页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据库原理及应用第4章 关系数据库标准语言SQL7/18/20221SQL语言简介SQL的数据定义SQL数据查询数据更新视图SQL数据控制本章内容7/18/202224.1 SQL语言概述 SQL的发展及其特点SQL的基本概念SQL的功能7/18/20223 SQL是结构化查询语言Structured QueryLanguage 的缩写,它是数据库的核心语言。4.1.1 SQL的发展及其特点7/18/20224IBM的Boyce在1974年首先提出了SQL;1979年ORACLE公司发表第一个基于SQL的商业化RDBMS产品;随后,SQL在IBMSystem R上的关系数据库SQL/DS得到了

2、实现;发展史:7/18/202251986年美国国家标准协会(ANSI)公布了第一个SQL标准,即SQL86;国际标准化组织(ISO)于1987年正式采纳它为国际标准。1989年ISO提出了完整特性的SQL,并称之为SQL89,后来又发展的SQL92(也称为SQL2)。发展史(续):7/18/20226特点:1.功能一体化 SQL包括数据定义、数据查询、数据操纵和数据控制的功能。7/18/202272.语言简洁,易学易用 只用7个动词(select , drop, alter, create, insert, update, delete)就实现了SQL的核心功能。7/18/20228SQL使

3、用的动词SQL功能操作符(所用动词)数据定义CREATE,ALTER,DROP数据查询SELECT数据操纵INSERT,UPDATE,DELETE数据控制GRANT,REVOKE7/18/202297/18/2022103.高度非过程化 它没有必要告诉计算机“如何”去做,而只需要描述清楚用户“要做什么”,系统会自动完成。 7/18/2022114.语法结构统一SQL语言有两种使用方式:自含式和嵌入式。自含式:一般DBMS都提供联机交互工具,用户可直接键入SQL命令对数据库进行操作由DBMS来进行解释。嵌入式:能将SQL语句嵌入到高级语言(宿主语言),使应用程序充分利用SQL访问数据库的能力、宿

4、主语言的过程处理能力,一般需要预编译,将嵌入的SQL语句转化为宿主语言编译器能处理的语句。 7/18/2022125.面向集合的操作方式 SQL所作用的对象、作用后所得的结果都可以是元组的集合。 7/18/2022134.1.2 SQL的基本概念1SQL语言的组成(1)数据定义语言(DDL):用于实现SQL的数据定义功能。(2)数据操纵语言(DML):用于实现SQL的数据操纵功能。(3)数据控制语言(DCL):用于实现SQL的数据控制功能。7/18/2022144.1.2 SQL的基本概念2. SQL支持三级模式结构一个SQL数据库的总体逻辑结构是基本表(Table)的集合,对应于概念模式SQ

5、L数据库的底层存储结构采用文件,一个或几个表对应一个存储文件,以及索引文件。对应内模式用户所见的数据结构是视图(View),用户可直接操作的表,可为视图或部分基本表。对应外模式7/18/2022157/18/202216两个基本概念:基本表和视图。基本表(BASE TABLE):是独立存在的表,不是由其它的表导出的表。一个关系对应一个基本表,一个或多个基本表对应一个存储文件。视图(VIEW):是一个虚拟的表,是从一个或几个基本表导出的表。它本身不独立存在于数据库中,数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。当基本表中的数据发生变化时,从视图中查询出来的

6、数据也随之改变。7/18/202217例如:学生数据库中有学生基本情况表STUDENT(SNO,SNAME,SSEX,SAGE,SDEPT),此表为基本表,对应一个存储文件。可以在其基础上定义一个男生基本情况表STUDENT_MALE(SNO,SNAME,SAGE,SDEPT),它是从STUDENT中选择SSEX=男的各个行,然后在SNO,SNAME,SAGE,SDEPT上投影得到的。在数据库中只存有STUDENT_MALE的定义,而STUDENT_MALE的记录不重复存储。在用户看来,视图是通过不同路径去看一个实际表,就象一个窗口一样,透过视图可以看到数据库中自己感兴趣的内容。7/18/20

7、22184.1.3 SQL的功能数据定义(DEFINITION)数据查询(QUERY)数据操纵(MANIPULATION)数据控制(CONTROL)7/18/2022194.2 SQL的数据定义SQL语言使用数据定义语言(DATA DEFINITION LANGUAGE,简称DDL)实现其数据定义功能。 SQL的数据定义功能包括对数据库、基本表、视图和索引的定义,即对数据库和表的创建、删除和修改,以及对视图和索引的创建和删除 。7/18/202220SQL的数据定义 操作对象操作方式创建删除修改表Create tableDrop tableAlter table视图Create viewDro

8、p view索引Create indexDrop index数据库Create databaseDrop databaseAlter database7/18/2022214.2.1 创建与删除数据库要对数据库模式进行操作,首先要建立相应的数据库,并把它作为一个文件存放在磁盘上。现代的数据库管理系统都提供图形用户界面,可以通过点击菜单完成。7/18/202222使用SQL语句建立数据库的一般格式为:CREATE DATABASE 数据库名参数我们仅要求掌握参数省略的情况,即CREATE DATABASE 数据库名 创建数据库7/18/202223删除数据库 如果所建立的数据库不再需要时,可以对

9、此数据库进行删除,删除数据库的一般格式为: DROP DATABASE 数据库名7/18/202224 例4-1 创建一个名称为“学生管理”的学生信息管理数据库 SQL语句为: CREATE DATABASE 学生管理 7/18/202225 提示: 本章中所举例子均为基于学生管理数据库,假设“学生管理”为管理学生日常活动有关信息的数据库 。7/18/2022264.2.2 创建、删除和修改基本表 基本表是数据库中存储数据的最基本的对象,是构成数据库的一个重要组成部分。建立数据库后可以在其中创建基本表。 7/18/2022271. 创建基本表其一般格式为: CREATE TABLE (列级完整

10、性约束条件 ,列级完整性约束条件 ,); 7/18/202228常用数据类型数据类型说明CHAR(n)长度为n的定长字符串VARCHAR(n)最大长度为n的变长字符串INTEGER全字长整数SMALLINT半字长整数NUMERIC(p, d)由p位数字(不包括符号和小数点)组成的定点数,小数点后面有d位数字REAL浮点数DOUBLE RECISION双精度浮点数FLOAT(n)精度至少为n位数字的浮点数DATE日期,形如YYYY-MM-DD(年-月-日)TIME时间,形如HH:MM:SS(时:分:秒)7/18/202229 字符串使用一对单引号 来表示,例如数据库、表等。 不同的关系数据库系统

11、所支持的数据类型不完全相同。提示:7/18/202230几点说明:列级完整性约束仅作用在该列上;表级完整性约束作用在整个表上;完整性约束主要有五类:主关键字约束(PRIMARY KEY)、外关键字约束(FOREIGN KEY)、惟一性约束(UNIQUE)、检查约束(CHECK)和缺省约束(DEFAULT)。7/18/202231如果某一列作为表的关键字段,则该列应定义为非空(NOT NULL);省略的情况下表示允许为空。(了解)使用UNIQUE定义列取值唯一。(了解)7/18/202232主关键字(PRIMARY KEY)约束 主关键字约束指定表的一列或几列的组合的值在表中具有惟一性,即能惟一

12、的确定一行记录。每个表中主关键字是惟一的,不允许指定主关键字列有NULL属性。 PRIMARY KEY用于定义表约束时,即将某些列的组合定义为主键,其语法格式如下:CONSTRAINT PRIMARY KEY ()7/18/202233例 4-2 在学生管理数据库中建立院系表D,它有三个属性:院系编号(Dno)、院系名称(Dname)、联系方式(Dtel),其中院系编号为该表的主键,院系名称不能为空。7/18/202234 CREATE TABLE D (Dno CHAR(10) NOT NULL, Dname CHAR(20) NOT NULL, Dtel CHAR(18), PRIMARY

13、 KEY(Dno); /*主关键字约束*/ 执行该语句后在学生管理数据库中建立一个院系表D,并且将该表的有关定义和约束条件存放在数据字典中。 7/18/202235外关键字(FOREIGN KEY)约束外关键字约束定义了表之间的关系。当一个表中的一列或多个列的组合和其它表中的主关键字定义相同时,就可以将这些列或列的组合定义为外关键字。7/18/202236FOREIGN KEY既可用于列约束,也可用于表约束,其语法格式为:CONSTRAINT FOREIGN KEY REFERENCES ()FOREIGN KEY约束7/18/202237惟一性(UNIQUE)约束惟一性约束指定一列或几列的组

14、合的值具有惟一性,定义了惟一性约束的那些列称为惟一键,系统自动为惟一键建立惟一索引,以防止在列中输入重复的值。惟一性约束指定的列可以有NULL属性。由于主关键字值是有惟一性的,因此主关键字列不能再设定惟一性约束。7/18/202238例4-3在学生管理数据库中建立学生表S,它有六个属性:学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、所在系(Sdept)、身份证号(Sid)。其中学号为该表的主键,所在系是该表的外关键字,学生身份证号是惟一的。7/18/202239CREATE TABLE S(Sno CHAR(10) NOT NULL, Sname CHAR(8) CO

15、NSTRAINT Sname_CONS NOT NULL, Ssex CHAR(2), Sage INT, Sdept CHAR(10) , Sid CHAR(18) UNIQUE, /*惟一性约束*/ PRIMARY KEY(Sno), /*主关键字约束*/FOREIGN KEY(Sdept) REFERENCES D (Dno); /*外关键字约束*/7/18/202240二者类似,都是通过建立唯一索引来保证基本表在主键列取值的唯一性,但它们之间也存在着很大的区别:在一个基本表中只能定义一个PRIMARY KEY约束,但可定义多个UNIQUE约束;对于指定为PRIMARY KEY的一个列或

16、多个列的组合,其中任何一个列都不能出现空值,而对于UNIQUE所约束的唯一键,则允许为空。主关键字约束与唯一性约束区别7/18/202241不能为同一个列或一组列既定义UNIQUE约束,又定义PRIMARY KEY约束。注意:7/18/202242检查(CHECK)约束检查约束对输入列或整个表中的值设置检查条件,以限制输入值,保证数据库的数据完整性。7/18/202243CHECK约束CHECK既可用于列约束,也可用于表约束。其语法格式为:CONSTRAINT CHECK ()7/18/202244例4-4在学生管理数据库中建立课程表C,它有四个属性:课程编号(Cno)、课程名称(Cname)

17、、学分(Ccredit)、任课教师(Cteacher),其中课程号为该表的主键,学分取值必须大于等于0.5。7/18/202245CREATE TABLE C(Cno CHAR(5) NOT NULL, Cname CHAR(30), Ccredit REAL, Cteacher CHAR(10), PRIMARY KEY(Cno), /*主关键字约束*/ CONSTRAINT Ccredit_CHK CHECK(Ccredit=0.5); /*检查约束*/7/18/202246缺省约束缺省约束通过定义列的缺省值或使用数据库的缺省值对象绑定表的列,来指定列的缺省值,若某列设置有缺省值,则当该字

18、段未被输入数据时,以该缺省值自动填入该字段。注:此操作在Access中可通过设置字段属性完成。7/18/202247例4-5建立学生选课表SC,它有三个属性:学号(Sno)、课程编号(Cno)、成绩(Score),其中学号和课程编号的组合作为主关键字,成绩的缺省值为0。7/18/202248CREATE TABLE SC(Sno CHAR(10) NOT NULL, Cno CHAR(5) NOT NULL, Score REAL DEFAULT 0, /*缺省约束*/ PRIMARY KEY(Sno,Cno), /*主关键字约束*/ FOREIGN KEY(Sno) REFERENCES S

19、 (Sno), /*外关键字约束*/ FOREIGN KEY(Cno) REFERENCES C (Cno); /*外关键字约束*/7/18/2022492. 修改基本表一般格式为:ALTER TABLE ADD 完整性约束DROP ALTER;7/18/202250ALTER TABLE语句的几点说明:ADD子句用于增加新列和新的完整性约束条件。DROP子句用于删除指定的完整性约束条件。(了解)ALTER子句用于修改原有的列名和数据类型。7/18/202251例4-6向系院表D中增加新的属性列:系主任(Dhead),并为其设置惟一性约束。 ALTER TABLE D ADD Dhead CH

20、AR(10) CONSTRAINT Dhead_CONS UNIQUE;7/18/202252例4-7将院系表D中系主任列的惟一性约束条件删除。 ALTER TABLE D DROP CONSTRAINT Dhead_CONS; 7/18/202253 在这个例子中删除的仅仅是某列的约束条件,如果要删除基本表中的某列,则其句法如下: ALTER TABLE DROP CASCADE| RESTRICT;7/18/202254CASCADE| RESTRICT为列的删除方式。CASCADE方式表示在基本表中删除列时,所有引用该列的视图或完整性约束均一起自动删除;RESTRICT方式表示只有当没有

21、视图或完整性约束时该列才能被删除,否则拒绝删除操作。7/18/202255例. 将学生表S中的年龄Sage列删除,并将该列的所有视图和约束一起删除。 ALTER TABLE S DROP Sage CASCADE; 7/18/202256例4-8将学生表S中Sage的数据类型改成短整型。ALTER TABLE S ALTER COLUMN Sage SMALLINT;7/18/2022573.删除基本表一般格式为:DROP TABLE CASCADE| RESTRICT;注意删除基本表后,基本表的定义、表中数据和在此表上建立的索引都将自动被删除、但由此表导出的视图定义仍然保留,但已无法使用。7

22、/18/202258例4-9删除学生表S。 DROP TABLE S;7/18/2022594.2.3 创建和删除索引索引是根据数据库表中一列或多列的值进行排序的一种结构。索引有如下作用1. 加快查询速度;2. 保证行的唯一性。7/18/202260索引的分类1. 按照索引记录的存放位置可分为聚集索引与非聚集索引聚集索引:按照索引的字段排列记录,并且依照排好的顺序将记录存储在表中。非聚集索引:按照索引的字段排列记录,但是排列的结果并不会存储在表中,而是另外存储。2. 复合索引的概念复合索引是将两个字段或多个字段组合起来建立的索引,而单独的字段允许有重复的值。7/18/2022613. 唯一索引

23、的概念唯一索引表示表中每一个索引值只对应唯一的数据记录,这与表的PRIMARY KEY的特性类似,因此唯一性索引常用于PRIMARY KEY的字段上,以区别每一笔记录。当表中有被设置为UNIQUE的字段时,SQL SERVER会自动建立一个非聚集的唯一性索引。而当表中有PRIMARY KEY的字段时,SQL SERVER会在PRIMARY KEY字段建立一个聚集索引。7/18/2022621. 创建索引一般格式为:CREATE UNIQUE CLUSTER INDEX ON ( , );7/18/202263UNIQUE指明索引是否为唯一性索引。如果是唯一性索引,则该索引的每一个索引值不能相同

24、。CLUSTER项表示该索引为聚簇索引。聚簇索引是指索引项的顺序与基本表中记录的物理顺序一致的索引。一般在查询频率最高的列上建立聚簇索引,以提高查询效率说明:7/18/202264说明:索引可以建立在一个或多个列上,可选参数为ASC(升序)或DESC(降序),缺省的情况下,系统默认为升序。在数据库管理员建立索引后,它的使用和维护由数据库系统自动进行,用户不必也不能干预。一个基本表可以建立多个索引,以提供多条存取路径,但是相应基本表更新数据时会增加系统开销。7/18/202265例4-10在学生表S的姓名列Sname上建立索引。 CREATE INDEX index_Sname ON S (Sn

25、ame);7/18/202266在SC表的学号Sno和课程编号Cno上建立唯一索引,要求学号为主索引且为升序,课程编号为降序。 CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);例4-117/18/202267注意:1. 改变表中的数据(如增加或删除记录)时,索引将自动更新。索引建立后,在查询使用该列时,系统将自动使用索引进行查询。 2. 索引数目无限制,但索引越多,更新数据的速度越慢。对于仅用于查询的表可多建索引,对于数据更新频繁的表则应少建索引。7/18/2022682. 删除索引一般格式为:DROP INDEX ;7/18/202269删除

26、学生表S的index_Sname索引。 DROP INDEX S.index_Sname;例4-127/18/2022704.3 SQL数据查询 数据库的核心操作就是进行数据查询。数据查询就是根据用户的需要,以一种可读的方式从数据库中提取所需要的数据。 7/18/2022714.3.1 SELECT命令的一般格式说明 SELECT ALL|DISTINCT , FROM , WHERE GROUP BY HAVING ORDER BY ASC| DESC ;7/18/202272SELECT子句指明要查询的项目。ALL| DISTINCT为目标属性, 使用ALL来显示表中符合条件的所有行,默认

27、为ALL;使用DISTINCT选项时,删除重复的数据行。7/18/202273FROM子句指明被查询的基本表或视图,它们之间用逗号隔开。WHERE子句指明查询的条件。WHERE子句可以过滤掉不需要的数据行,用来查询满足指定条件的元组。7/18/202274GROUP BY子句指明如何将查询结果进行分组。使用GROUP BY子句将查询结果按某一列或多列值分组,值相等的为一组。如果GROUP子句带HAVING短语,则只有满足指定的组才给以输出。 7/18/202275ORDER BY子句指明查询结果如何排序。使用ORDER BY子句对查询返回的结果按一列或多列排序。其中ASC表示升序,为默认值,D

28、ESC为降序。7/18/202276SELECT语句的执行过程根据WHERE子句的检索条件,从FROM子句指定的基本表或视图中选取满足条件的元组,再按照SELECT子句中指定的列,投影得到结果表。如果有GROUP子句,则将查询结果按照相同的值进行分组。如果GROUP子句后有HAVING短语,则只输出满足HAVING条件的元组。如果有ORDER子句,查询结果还要按照的值进行排序。查询的结果是仍是一个表。7/18/2022774.3.1 单表查询单表查询是相对多表查询而言的,指从一个数据表中查询数据。因为单表查询不涉及多个基本表的连接查询和嵌套查询等复杂的情况,所以也称之为简单查询。7/18/20

29、2278例4-13 查询学生表中所有学生的学号、年龄及姓名。解 SELECT Sno,Sage,SnameFROM S;7/18/202279例4-14 查询系院表的所有情况。解一: SELECT Dno,Dname,Dtel,Dhead FROM D;解二: SELECT * FROM D;7/18/202280例4-15 列出所有选修课程的学生的学号。解:SELECT SnoFROM SC;7/18/202281例4-16 查询所有的系院编号及名称。解 SELECT Dno,系院名为:,DnameFROM D;7/18/202282例4-17 查询全体学生的学号及其出生年份和所在系别。解

30、SELECT Sno,2011-Sage AS BirthYear,SdeptFROM S;7/18/202283例4-18 查询每个系院的编号及其名称,在每个系院名后都加上“系”字。解 SELECT Dno,Dname+ 系 AS 社团名称 FROM D;“+”是一个字符运算符,表示字符串连接,该运算可以把两个字符串连接成一个字符串。7/18/202284查询表中的若干行(元组)1)消除取值重复的行在例4-15中,学生学号的重复行应该去掉,因此,可以使用下面的语句实现:解:SELECT DISTINCT Sno FROM SC;7/18/2022852)查询满足条件的元组例4-19查询所有年

31、龄大于18岁的学生信息。 解SELECT * FROM SWHERE Sage18;7/18/202286WHERE子句常用的查询条件运算符 7/18/202287比较运算符 、=、=、=、!、! =、! 比较运算符主要用来在WHERE子句中比较两个值的大小。7/18/202288例4-20查询学生表中所有男同学的信息。解 SELECT * FROM SWHERE Ssex=男;7/18/202289范围运算符BETWEEN AND、NOT BETWEEN AND 范围运算符用来判断表达式的值是否在(不在)指定的范围内。 7/18/202290例4-21查询考试成绩在75到90之间的学生学号及

32、课程编号。解 SELECT Sno,Cno,ScoreFROM SCWHERE Score BETWEEN 75 AND 90;7/18/202291列表运算符IN (项1,项2) 、NOT IN (项1,项2) 用于判断表达式是否为列表中的指定项。7/18/202292例4-22查询选修课程A01或B02的学生学号以及成绩。解 SELECT Sno,Score,CnoFROM SCWHERE Cno IN (A01,B02);7/18/202293模式匹配符(了解)LIKE、NOT LIKE 常用于模糊查找,判断列值是否与指定的字符串格式相匹配。7/18/202294可使用以下通配字符: 百

33、分号*:可匹配任意类型和长度的字符。 下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。如果要表示中文字符,就要使用_ _,因为一个汉字需要占两个字符的位置。7/18/202295方括号:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。:其取值也和 相同,但它要求所匹配对象为指定字符以外的任一个字符。 例如:限制以Publishing结尾,使用LIKE %Publishing;限制以A开头:LIKE A%;限制以A开头外:LIKE A%。7/18/202296例4-23.查询所有姓刘的学生的姓名及年龄。 SELECT Sname,SageFROM StudentWHERE

34、Sname LIKE 刘*;7/18/202297例4-24. 查询学生姓名是两个字的学生的学号、姓名及年龄。SELECT Sno,Sname,SageFROM SWHERE Sname LIKE _ _ _ _;7/18/202298通配符%或_ 如果所查询的字符或字符串本身带有通配符%或_,则要使用转义符ESCAPE对通配符进行转义。 7/18/202299例4.25.列出课程名称中带有_的课程信息。解Select *From CWhere Cname LIKE %_% ESCAPE;7/18/2022100空值判断符IS NULL、NOT IS NULL可以用来判断某个列值是否为空。例4

35、-26 查询年龄值为空的学生信息。解 Select * From S WHERE Sage IS NULL;7/18/2022101逻辑运算符此类运算符的优先级为:NOT、AND、OR;用户可以使用括号改变它们的优先级;逻辑运算符可以用来连接多个查询条件。7/18/2022102例4-27查询所在系为003的年龄小于20岁的女同学的信息。解 SELECT * FROM S WHERE Sdept=003 AND Sage=2;7/18/20221125.使用ORDER BY子句对查询结果排序使用ORDER BY子句对查询返回的结果按一列或多列排序。在该子句中的ASC表示升序,为默认值,DESC

36、为降序。 7/18/2022113例4-34将所有学生信息按学号降序排列。解 SELECT *FROM SORDER BY Sno DESC;7/18/2022114例4-35查询所有学生信息,结果按所在系升序排列,同一系中学生按年龄降序排列。解 SELECT *FROM SORDER BY Sdept ,Sage DESC;7/18/2022115多表查询 在数据库使用中,很多情况下数据的查询要跨两个或多个表进行,这种查询就称为多表查询。可以通过连接运算符实现多表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。7/18/20221164.3.2 连接查询

37、当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接查询可分为: 自连接查询、内部连接查询、外部连接查询和复合条件连接查询。7/18/20221171自连接查询连接不仅可以在表之间进行,也可以使一个表同其自身进行连接,这种连接称为自身连接(self join),相应的查询称为自连接查询。在自连接查询中,由于同一个基本表名在查询语句中出现多次,为了区别表的每次出现,需要为表定义一个别名。7/18/2022118例4-36查询同一个系里年龄相同的学生学号、姓名、年龄和所在系信息。解 SELECT a.Sno, a.Sname, a.Sage, a.Sdept, b.Sno, b.S

38、name, b.Sage, b.Sdept FROM S AS a , S AS b WHERE (a.Snob.Sno) AND (a.Sdept=b.Sdept) AND (a.Sage=b.Sage);7/18/20221192内连接查询内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行,如果数据无法满足连接条件则将其丢弃。 内连接查询操作返回查询结果集合中的仅是符合查询条件(WHERE搜索条件或HAVING 条件)和连接条件的行。7/18/2022120例4-37查询每个学生和他(她)所选修课程的详细情况。解 SELEC

39、T S.*,SC.*FROM S,SCWHERE S.Sno=SC.Sno7/18/2022121例4-38将上例用自然连接完成。解 SELECT S.*,Cno,ScoreFROM S,SCWHERE S.Sno= SC.Sno;7/18/2022122例4-39列出学生表中学号低于选课表中学号的所有学生信息和选课信息的组合。解 SELECT S.*, SC.Sno, Cno,ScoreFROM S,SCWHERE S.Sno, =, =, !=)将父查询和子查询连接起来。7/18/2022132例4-42查询与学号为03050211的学生在同一个系的学生的学号、姓名、性别及所在系。解 SE

40、LECT * FROM S WHERE Sdept=(SELECT Sdept FROM S WHERE Sno=03050211);7/18/2022133例4-43 列出年龄低于平均年龄的学生的信息。解: SELECT * FROM SWHERE Sage(SELECT AVG(Sage) FROM S);7/18/20221342. 使用由ANY或ALL修改的比较运算符的子查询如果子查询的返回值不止一个,而是一个集合时,则不能直接使用比较运算符,可以在比较运算符和子查询之间插入ANY或ALL。其具体含义详见下例。7/18/2022135例4-44查询其它系中比003系所有学生年龄都小的学

41、生学号、姓名、年龄以及所在系。解 SELECT Sno,Sname,Sage,SdeptFROM SWHERE SageALL(SELECT SageFROM SWHERE Sdept=003)AND Sdept003;7/18/20221363. 使用谓词IN的子查询在嵌套查询中,子查询的结果在很多时候不仅是一个单值,而往往是一个集合,这时就要用到谓词IN。在嵌套查询中IN运算符也是最常用到的。7/18/2022137例4-45查询选修了课程编号为B03的学生信息。解 SELECT * FROM S WHERE Sno IN(SELECT Sno FROM SC WHERE Cno=B03)

42、;7/18/2022138例4-46查询选修了“大学语文”课程的学生的姓名、年龄和所在系。解 SELECT Sname,Sage,SdeptFROM SWHERE Sno IN(SELECT Sno FROM SC WHERE Cno = (SELECT Cno FROM C WHERE Cname=大学语文);7/18/20221394.使用谓词EXISTS的子查询EXISTS是谓词,EXISTS或NOT EXISTS是用来检查在子查询中是否有结果返回,即存在元组或不存在元组。EXISTS代表存在量词。带有EXISTS的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”

43、。7/18/2022140例4-47查询所有选修了课程编号为A04的学生信息。解 SELECT * FROM S WHERE EXISTS (SELECT * FROM SCWHERE Sno=S.Sno AND Cno=A04);7/18/2022141子查询包含普通子查询和相关子查询。前面所讲的子查询均为普通子查询,而本例中子查询的查询条件引用了父查询表中的属性值(S表的Sno值),我们把这类查询称为相关子查询。7/18/2022142二者的执行方式不同:普通子查询的执行顺序是:首先执行子查询,然后把子查询的结果作为父查询的查询条件的值。普通子查询只执行一次,而父查询所涉及的所有记录行都与

44、其查询结果进行比较以确定查询结果集合。7/18/2022143相关子查询的执行顺序是:首先选取父查询表中的第一行记录,内部的子查询利用此行中相关的属性值进行查询,然后父查询根据子查询返回的结果判断此行是否满足查询条件。如果满足条件,则把该行放入父查询的查询结果集合中。重复执行这一过程,直到处理完父查询表中的每一行数据。由此可以看出,相关子查询的执行次数是由父查询表的行数决定的。7/18/20221444.3.4 组合查询当两个或多个查询块的结果为多个元组(即元组的集合)时,可以对这两个或多个结果集进行集合运算,这种查询称之为组合查询。进行集合运算的操作主要包括并(UNION)、交(INTERS

45、ECT)和差(MINUS)。7/18/2022145并(UNION)运算符可以将两个或两个以上的SELECT语句的查询结果集合并成一个结果集显示,即执行联合查询。并操作会将查询结果合并而且会去掉重复元组,如果要保留重复元组,则必须使用UNION ALL。7/18/2022146交操作是把同时出现在查询结果中的元组取出。差操作是把出现在第一个查询结果中但不出现在第二个查询结果中的元组取出。在实际运用中很少用到交操作和差操作,标准SQL中没有直接提供这两种操作,可以用其它方法来实现。7/18/2022147例4-48查询选修了课程编号为A02或选修了课程编号为B03的学生信息。解 SELECT *

46、 FROM SC WHERE Cno=A02 UNION SELECT * FROM SC WHERE Cno=B03;7/18/20221484.4 SQL数据更新INSERT:向数据库的表中添加记录;DELETE:从数据库的表中删除记录;UPDATE:修改数据库的表中已存在的记录。7/18/20221494.4.1 插入数据 当创建新表时,新表不包含任何数据。要将新的行输入表中,使用 INSERT 语句。此语句根据插入数据方式不同相应地也有两种不同格式: 插入元组值 插入子查询的结果(了解)7/18/2022150插入元组值 插入数据为元组值的时候,使用 VALUES 子句来指定一行或多行

47、的列值。一般格式如下:INSERTINTO ( , ) VALUES (,);7/18/2022151在此语句中,是用来指定用来来插入新元组的表的名称。常量1、常量2对应为列名1、列名2的值。在INTO子句中没有给出的列,系统将默认为空值。如果INTO子句中没有给出任何列,则新插入的元组在每个列上都必须有值。 7/18/2022152例4-49课程表中新增加一门课,其课程编号为C05,课程名为WEB程序设计,学分为2,任课教师卢伟。请将此记录添加到课程表C中。解 此题其实就是在课程表中添加一条课程记录:(Cno(课程编号):C05,Cname(课程名称):WEB程序设计,Ccredit(学分)

48、:2,Cteacher(任课教师):卢伟)使用INSERT语句将它加入到课程表中即可。解INSERTINTO CVALUES (C05,WEB程序设计,2,卢伟); 7/18/2022153例4-50学号为07070103的学生又选修了编号为A02的课程。解 INSERTINTO SC(Sno,Cno)VALUES (07070103,A02);7/18/2022154插入子查询的结果指定全查询而非指定 VALUES 来标识包含在其他表或视图中的行的列。全查询是 INSERT 或 CREATE VIEW 语句中所使用的选择语句、或者是跟在谓词后面的选择语句。括在括号中的全查询一般称为子查询。插

49、入的一般格式为:INSERT ( , ) 子查询;7/18/2022155例4-51将建筑工程系学生的所有信息存入一个新表建筑工程系中。 见教材7/18/2022156.4. 删除数据 SQL中使用 DELETE 语句,基于在 WHERE 子句中指定的搜索条件从表中删除数据行。其一般格式如下: DELETE FROM WHERE;7/18/2022157WHERE 子句是可选的,它指定要删除的行。如果省略 WHERE 子句,则数据库管理程序删除表或视图中的所有行。7/18/2022158例4-52删除学号为03060105的学生的记录。解 DELETEFROM SWHERE Sno=03060105;7/18/2022159.4. 修改数据 SQL中使用 UPDATE 语句来更改表中的数据。使用此语句,可以更改满足 WHERE 子句搜索条件的每行中的一列或多列的值。7/18/2022160一般格式如下:UPDATE SET = , = WHERE ;7/18/2022161用来指定要修改的表的名称,修改该表中满足WHERE子句条件的那些元组的列值。SET 子句指

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论