关系数据库标准语言-SQL.ppt

上传人:wuy****n92 文档编号:78994381 上传时间:2023-03-19 格式:PPT 页数:59 大小:848KB
返回 下载 相关 举报
关系数据库标准语言-SQL.ppt_第1页
第1页 / 共59页
关系数据库标准语言-SQL.ppt_第2页
第2页 / 共59页
点击查看更多>>
资源描述

《关系数据库标准语言-SQL.ppt》由会员分享,可在线阅读,更多相关《关系数据库标准语言-SQL.ppt(59页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、数据库系统原理数据库系统原理韶关学院计算机科学与技术系第第5 5章章 关系数据库标准语言关系数据库标准语言SQLSQL5.1SQL概述及特点概述及特点5.2数据定义语句数据定义语句 5.3数据查询语句数据查询语句5.4数据更新语句数据更新语句5.5嵌入式嵌入式SQL5.6数据控制机制和语句数据控制机制和语句5.1 SQL5.1 SQL概述及特点概述及特点1.SQL1.SQL的主要功能的主要功能(1)(1)数据定义功能数据定义功能 定定义关义关系系数数据据库库的模式、外模式和的模式、外模式和内内模式,以模式,以实现实现对对基本表、基本表、视图视图以及索引文件的定以及索引文件的定义义、修改和、修改

2、和删删除等操除等操作。作。(2)(2)数据操纵功能数据操纵功能 包括包括数数据据查询查询和和数数据更新据更新两种数两种数据操作据操作语语句:句:数数据据查询查询指指对数对数据据库库中的中的数数据据查询查询、统计统计、分、分组组、排序操作;、排序操作;数数据更新指据更新指数数据的据的插插入、入、删删除、修改等除、修改等数数据据维护维护操作。操作。(3)(3)数据控制功能数据控制功能 通通过对数过对数据据库库用用户户的授的授权权和收和收权权命令命令来实现来实现有有关数关数据的存取控制,以保据的存取控制,以保证数证数据据库库的安全性。的安全性。2.SQL2.SQL的特点的特点 (1)SQL(1)SQ

3、L具有自含式和嵌入式两种形式。具有自含式和嵌入式两种形式。(2)SQL(2)SQL具有语言简洁、易学易用的特点。具有语言简洁、易学易用的特点。(3)SQL(3)SQL支持三级模式结构。支持三级模式结构。全体基本表构成了数据库的模式。全体基本表构成了数据库的模式。视图和部分基本表构成了数据库的外模式。视图和部分基本表构成了数据库的外模式。数据库的存储文件和它们的索引文件构成了关系数据数据库的存储文件和它们的索引文件构成了关系数据库的内模式。库的内模式。5.2 5.2 数据定义语句数据定义语句5.2.1 5.2.1 基本表的定义和维护基本表的定义和维护1.1.定义基本表定义基本表定义基本表语句的一

4、般格式为:定义基本表语句的一般格式为:CREATE TABLE CREATE TABLE 库名库名 表名表名(列名数据类型列名数据类型 列级完整性约束条件列级完整性约束条件 ,列名数据类型列名数据类型 列级完整性约束条件列级完整性约束条件 ,nn ,表级完整性约束条件,表级完整性约束条件 ,n)n);类型表示类型表示类型说明类型说明数值型数值型数据数据SMALLINT半字长二进制整数。半字长二进制整数。15bits数据数据INTEGER或或INT全字长(四字长)整数。全字长(四字长)整数。31bits数据数据DECIMAL(p,q)十进制数,共十进制数,共p位,其中小数点后位,其中小数点后q位

5、。位。0qp,q=0时可省略不写时可省略不写FLOAT双字长浮点数双字长浮点数字符型字符型数据数据CHARTER(n)或或CHAR(n)长度为长度为n的定长字符串的定长字符串VARCHAR(n)最大长度为最大长度为n的变长字符串的变长字符串特殊数据类型特殊数据类型GRAPHIC(n)长度为长度为n的定长图形字符串的定长图形字符串VARGRAPHIC(n)最大长度为最大长度为n的变长图形字符串的变长图形字符串日期时日期时间型间型DATE日期型,格式为日期型,格式为YYYY-MM-DDTIME时间型,格式为时间型,格式为HH.MM.SSTIMESTAMP日期加时间日期加时间(1)SQL(1)SQL

6、支持的数据类型支持的数据类型(2)(2)列级完整性的约束条件列级完整性的约束条件针对属针对属性性值设值设置的限制置的限制条条件。件。1)NOT NULL1)NOT NULL或或NULLNULL约束。约束。NOT NULLNOT NULL约束不允许字段值为空,约束不允许字段值为空,而而NULLNULL约束允许字段值为空。约束允许字段值为空。2)UNIQUE2)UNIQUE约束。惟一性约束,即不允许列中出现重复的属约束。惟一性约束,即不允许列中出现重复的属性值。性值。3)DEFAULT3)DEFAULT约束。默认值约束。约束。默认值约束。DEFAULTDEFAULT约约束名默束名默认值认值FORF

7、OR列名列名4)CHECK4)CHECK约束。检查约束。约束。检查约束。CONSTRAINTCONSTRAINT约约束名束名CHECK(CHECK(约约束束条条件表件表达达式式)(3)(3)表级完整性约束条件表级完整性约束条件 涉及到关系中多个列的限制条件。涉及到关系中多个列的限制条件。1)UNIQUE1)UNIQUE约束。惟一性约束。约束。惟一性约束。2)PRIMARY KEY2)PRIMARY KEY约束。定义主码,保证惟一性和非空性。约束。定义主码,保证惟一性和非空性。CONTRAINT CONTRAINT约束名约束名PRIMARY KEY CLUSTERED(PRIMARY KEY C

8、LUSTERED(列组列组)3)FOREIGN KEY3)FOREIGN KEY约束。用于定义参照完整性。约束。用于定义参照完整性。CONTRAINTCONTRAINT约束名约束名FOREIGN KEY(FOREIGN KEY(外码外码)REFERENCESREFERENCES被参照表名被参照表名(与外码对应的主码名与外码对应的主码名)CREATE TABLE CREATE TABLE 学生学生(学号学号 CHAR(5)NOT NULL UNIQUE CHAR(5)NOT NULL UNIQUE,姓名姓名 CHAR(8)NOT NULL CHAR(8)NOT NULL,年龄,年龄 SMALLI

9、NT SMALLINT,性别性别 CHAR(2)CHAR(2),所在系,所在系 CHAR(20)CHAR(20),DEFAULT C1 20 FOR DEFAULT C1 20 FOR 年龄,年龄,CONSTRAINT C2 CHECK(CONSTRAINT C2 CHECK(性别性别 IN(IN(男男,女女);CREATE TABLE CREATE TABLE 课程课程(课程号课程号 CHAR(5)PRIMARY KEY CHAR(5)PRIMARY KEY,课程名课程名 CHAR(20)CHAR(20),先行课,先行课 CHAR(5)CHAR(5);CREATE TABLE CREATE

10、TABLE 选课选课(学号学号 CHAR(5)CHAR(5),课程号,课程号 CHAR(5)CHAR(5),成绩成绩 SMALLINT SMALLINT,CONSTRAINT C3 CHECK(CONSTRAINT C3 CHECK(成绩成绩 BETWEEN 0 AND 100)BETWEEN 0 AND 100),CONSTRAINT C4 PRIMARY KEY(CONSTRAINT C4 PRIMARY KEY(学号,课程号学号,课程号),CONSTRAINT C5 FOREIGN KEY(CONSTRAINT C5 FOREIGN KEY(学号学号)REFERENCES)REFEREN

11、CES 学生学生(学号学号),CONSTRAINT C6 FOREIGN KEY(CONSTRAINT C6 FOREIGN KEY(课程号课程号)REFERENCES)REFERENCES 课程课程(课程号课程号);【例【例5-15-1】建立基本表:建立基本表:学生学生(学号,姓名,年龄,性别,所在系学号,姓名,年龄,性别,所在系);课课程程(课程号,课程名,先行课课程号,课程名,先行课);选课选课(学号,课程号,成绩学号,课程号,成绩).).2.2.修改基本表和删除基本表修改基本表和删除基本表 ALTER TABLEALTER TABLE表名表名 ADD(ADD(新列名新列名数数据据类类型

12、型 完整性完整性约约束束 ,n)n)DROP DROP完整性完整性约约束名束名 MODIFY(MODIFY(列名列名数数据据类类型型,n)n);(1)(1)使用使用ADDADD子句增加新列子句增加新列【例【例5-25-2】向】向课课程表中增加程表中增加“学时学时”字段。字段。ALTER TABLE ALTER TABLE 课课程程 ADD ADD 学时学时 SMALLINT SMALLINT;(2)(2)使用使用MODIFYMODIFY子句修改列的原定子句修改列的原定义义(3)(3)使用使用DROPDROP子句子句删删除指定的完整性除指定的完整性约约束束条条件件【例【例5-35-3】删删除除学

13、学生表中生表中对对年年龄龄的默的默认值认值的定的定义义。ALTER TABLE ALTER TABLE 学学生生 DROP C1 DROP C1;删删除基本表的一般格式除基本表的一般格式为为:DROP TABLE DROP TABLE表名;表名;5.2.2 5.2.2 索引的定义和维护索引的定义和维护1.索引的作用1)1)使用索引可以明显地加快数据查询的速度。使用索引可以明显地加快数据查询的速度。2)2)使用索引可保证数据的惟一性。使用索引可保证数据的惟一性。3)3)使用索引可以加快连接速度。使用索引可以加快连接速度。2.建立索引的原则1)1)索引的建立和维护由索引的建立和维护由DBADBA和

14、和DBMSDBMS完成。完成。2)2)大表应当建索引,小表则不必建索引。大表应当建索引,小表则不必建索引。3)3)对于一个基本表,不要建立过多的索引。对于一个基本表,不要建立过多的索引。4)4)根据查询要求建索引。根据查询要求建索引。3.3.建立和删除索引的格式建立和删除索引的格式建立格式建立格式为为:CREATE UNIQUE CLUSTER INDEXCREATE UNIQUE CLUSTER INDEX索引名索引名 ON ON表名表名(列名列名 次序次序,列名,列名 次序次序);删删除索引格式除索引格式为为:DROP INDEX DROP INDEX 索引名;索引名;【例【例5-45-4

15、】为学为学生生_ _课课程程数数据据库库中的中的学学生、生、课课程和程和选课选课三三个个表建表建立索引。其中,立索引。其中,学学生表按生表按学号学号升序建立索引;升序建立索引;课课程表按程表按课课程程号号升序建惟一索引;升序建惟一索引;选课选课表按表按学号学号升序和升序和课课程程号号降序建惟一降序建惟一索引。索引。CREATE UNIQUE INDEX CREATE UNIQUE INDEX 学号学号ON ON 学学生生(学号学号);CREATE UNIQUE INDEX CREATE UNIQUE INDEX 课课程程号号 ON ON 课课程程(课课程程号号);CREATE UNIQUE I

16、NDEX CREATE UNIQUE INDEX 选课号选课号 ON ON 选课选课(学号学号 ASC ASC,课课程程号号 DESC)DESC);5.2.3 5.2.3 视图的定义和维护视图的定义和维护1.1.视图的优点视图的优点1)1)视图能够简化用户的操作。视图能够简化用户的操作。2)2)视图机制可以使用户以不同的方式看待同一数据。视图机制可以使用户以不同的方式看待同一数据。3)3)视图对数据库的重构提供了一定程度的逻辑独立性。视图对数据库的重构提供了一定程度的逻辑独立性。4)4)视图可以对机密的数据提供安全保护。视图可以对机密的数据提供安全保护。2.2.视图定义的格式视图定义的格式一般

17、格式为:一般格式为:CREATE VIEW CREATE VIEW视图名视图名(列名组列名组)AS AS子查询子查询 WITH CHECK OPTION WITH CHECK OPTION;视图举例视图举例【例【例5-65-6】建立】建立计计算机系算机系学学生的生的视图视图。CREATE VIEW CREATE VIEW 计计算机系算机系学学生生 AS SELECT AS SELECT 学号学号,姓名,年,姓名,年龄龄 FROM FROM 学学生生 WHERE WHERE 所在系所在系=计计算机系算机系;【例【例5-75-7】由】由学学生、生、课课程和程和选课选课三三个个表,定表,定义义一一个

18、计个计算机系的算机系的学学生成生成绩视图绩视图,其,其属属性包括性包括学号学号、姓名、姓名、课课程名和成程名和成绩绩。CREATE VIEW CREATE VIEW 学学生成生成绩绩(学号学号,姓名,姓名,课课程名,成程名,成绩绩)AS SELECT AS SELECT 学学生生.学号学号,学学生生.姓名,姓名,课课程程.课课程名,程名,选课选课.成成绩绩 FORM FORM 学学生,生,课课程,程,选课选课 WHERE WHERE 学学生生.学号学号=选课选课.学号学号 AND AND 程程.课课程名程名=选课选课.课课程程号号 AND AND 学学生生.所在系所在系=计计算机系算机系;3.

19、3.视图的删除视图的删除 、查询和维护、查询和维护视图删除语句的一般格式为:视图删除语句的一般格式为:DROP VIEW DROP VIEW视图名;视图名;视图可以和基本表一样被查询,其使用方法与基本表视图可以和基本表一样被查询,其使用方法与基本表相同,但利用视图进行数据增、删、改操作,会受到相同,但利用视图进行数据增、删、改操作,会受到一定的限制。一定的限制。5.3 5.3 数据查询语句数据查询语句 5.3.1 5.3.1 数数据据查询查询的基本的基本语语法法1.SELECT1.SELECT语句的语法语句的语法SELECTSELECT目目标标列列组组 FROM FROM数数据源据源 WHER

20、E WHERE元元组选择条组选择条件件 GROUP BY GROUP BY分列分列组组HAVING HAVING 组选择条组选择条件件 ORDER BY ORDER BY排序列排序列1 1排序要求排序要求1 1 ,nn;语法说明语法说明(1)(1)SELECTSELECT子子句句:指指明明目目标标列列(字字段段、表表达达式式、函函数数表表达达式式、常量)。基本表中相同的列名表示常量)。基本表中相同的列名表示为为:表名:表名.列名列名(2)(2)FROMFROM子子句句:指指明明数数据据源源。表表间间用用“,”分分割割。数数据据源源不不在在当当前前数数据据库库中中,使使用用“数数据据库库名名.表

21、表名名”表表示示。一一表表多用,用多用,用别别名名标识标识。定。定义义表表别别名:表名名:表名别别名名(3)WHERE(3)WHERE子句:子句:元元组选择条组选择条件。件。(4)(4)GROUP GROUP BYBY子子句句:结结果果集集分分组组。当当目目标标列列中中有有统统计计函函数数,则则统统计计为为分分组组统统计计,否否则则为为对对整整个个结结果果集集统统计计。子子句句后后带带上上HAVINGHAVING子句表子句表达组选择条达组选择条件(件(带带函函数数的表的表达达式)。式)。(5)(5)ORDER ORDER BYBY子子句句:排排序序。当当排排序序要要求求为为ASCASC时时升升

22、序序排排序序;排序要求排序要求为为DESCDESC时时降序排列。降序排列。2.SELECT2.SELECT语句的操作符语句的操作符(1)(1)算术操作符算术操作符+(加号)、(减号)、(加号)、(减号)、*(乘号)和(乘号)和/(除号)。(除号)。(2)(2)比较操作符比较操作符=(等于)、(等于)、(大于)、(大于)、(小于)、(小于)、=(大于等于)、(大于等于)、!=!=(不等于)、(不等于)、(小于(小于大于)、大于)、!(不大于)和(不大于)和!、=、=9090;例子例子(2)(2)自身自身连连接接例如,例如,课课程表中的先行程表中的先行课课是在上是在上学学期期应开设应开设的,先行的

23、,先行课课的先行的先行课课,即即间间接先行接先行课应课应提前一提前一学学年年开设开设。如果求。如果求查询查询某某门课门课的的间间接先行接先行课课或全部或全部课课程的程的间间接先行接先行课课,就需要,就需要对课对课程表程表进进行自身行自身连连接。接。课程号课程号课程名课程名先行课先行课C1计算机引论计算机引论C2PASCAL语言语言C1C3数据结构数据结构C2C4数据库数据库C3C5软件工程软件工程C4课程的先行关系链为:课程的先行关系链为:C5C4C3C2C1,课程的间接关系链为:课程的间接关系链为:C5C3C1。课程号课程号课程名课程名先行课先行课课程号课程号课程名课程名先行课先行课C1计算

24、机引论计算机引论C1计计 算算 机机 引引论论C2Pascal语言语言C1C2Pascal语言语言C1C3数据结构数据结构C2C3数据结构数据结构C2C4数据库数据库C3C4数据库数据库C3C5软件工程软件工程C4C5软件工程软件工程C4A.课程号课程号A.课程名课程名B.先行课先行课C2Pascal语言语言C3数据结构数据结构C1C4数据库数据库C2C5软件工程软件工程C3AB结果【例【例5-185-18】查询每一门课的间接先行课。SELECT A.SELECT A.课程号,课程号,A.A.课程名,课程名,B.B.先行课先行课 FROM FROM 课程课程 A A,课程,课程 B B WHE

25、RE A.WHERE A.先行课先行课=B.=B.课程号课程号(3)(3)外部连接外部连接 左外部连接操作是在结果集中保留连接表达式左表中的非匹配记录;右外部左外部连接操作是在结果集中保留连接表达式左表中的非匹配记录;右外部连接操作是在结果集中保留连接表达式右表中的非匹配记录。外部连接符号连接操作是在结果集中保留连接表达式右表中的非匹配记录。外部连接符号为为“*=”“*=”,右外部连接符号为,右外部连接符号为“=*”“=*”。外部连接中不匹配的分量用。外部连接中不匹配的分量用NULLNULL表示。表示。职工职工号号姓名姓名性别性别年龄年龄所在部所在部门门部门部门号号部门名部门名称称电话电话10

26、10李勇李勇男男201111生产科生产科5661011刘晨刘晨女女1912计划科计划科5781012王敏王敏女女221213一车间一车间4671014张立张立男男211314科研所科研所职工表职工表 部门表部门表 连接的结果集连接的结果集 职工号职工号姓名姓名性别性别年龄年龄所在部门所在部门部门名称部门名称电话电话1010李勇李勇男男2011生产科生产科5661012王敏王敏女女2212计划科计划科5781014张立张立男男2113一车间一车间467职工号职工号姓名姓名性别性别年龄年龄所在部门所在部门部门名称部门名称电话电话1010李勇李勇男男2011生产科生产科5661011刘晨刘晨女女19

27、1012王敏王敏女女2212计划科计划科5781014张立张立男男2113一车间一车间467内连接的结果集 左外部连接的结果集 内连接:内连接:SELECT SELECT 职工职工.*.*,部门名称,电话,部门名称,电话 FROM FROM 职工,部门职工,部门 WHERE WHERE 职工职工.所在部门所在部门=部门部门.部门号;部门号;左外部连接:左外部连接:SELECT SELECT 职工职工.*.*,部门名称,电话,部门名称,电话 FROM FROM 职工,部门职工,部门 WHERE WHERE 职工职工.所在部门所在部门*=*=部门部门.部门号;部门号;右外部连接:右外部连接:SEL

28、ECT SELECT 职工职工.*.*,部门名称,电话,部门名称,电话 FROM FROM 职工,部门职工,部门 WHERE WHERE 职工职工.所在部门所在部门=*=*部门部门.部门号;部门号;【例【例5-195-19】用用SQLSQL表达职工和部门之间的内连接、左外部连接和右外部连表达职工和部门之间的内连接、左外部连接和右外部连接的语句接的语句3.嵌套查询(1)(1)使用使用ININ操作符的嵌套操作符的嵌套查询查询【例例5-205-20】求求选选修了高等修了高等数学数学的的学学生生学号学号和姓名。和姓名。SELECT SELECT 学号,姓名学号,姓名 FROM FROM 学生学生 WH

29、ERE WHERE 学号学号 IN(SELECT IN(SELECT 学号学号 FROM FROM 选课选课 WHERE WHERE 课程号课程号 IN(SELECT IN(SELECT 课程号课程号 FROM FROM 课程课程 WHERE WHERE 课程名课程名=高等数学高等数学);该题该题也可以使用下面的也可以使用下面的连连接接查询查询表表达达。1.1.SELECT SELECT 学生学生.学号,姓名学号,姓名 FROM FROM 学生,课程,选课学生,课程,选课2.2.WHERE WHERE 学生学生.学号学号=课程课程.学号学号 AND AND 课程课程.课程号课程号=选课选课.课

30、课程号程号 AND AND 课程课程.课程名课程名=高等数学高等数学;(2)(2)使用比较符的嵌套查询使用比较符的嵌套查询【例【例5-215-21】求】求C1C1课课程的成程的成绩绩高于高于张张三的三的学学生生学号学号和成和成绩绩。SELECT SELECT 学号,成绩学号,成绩 FROM FROM 选课选课 WHERE WHERE 课程号课程号=C1 AND=C1 AND 成绩成绩 (SELEC SELEC 成绩成绩 FROM FROM 选课选课 WHERE WHERE 课程号课程号=C1AND=C1AND 学号学号=(SELECT (SELECT 学号学号 FROM FROM 学生学生 W

31、HERE WHERE 姓名姓名=张三张三);(3)(3)使用使用ANYANY或或ALLALL操作符的嵌套查询操作符的嵌套查询格式为:字段比较符格式为:字段比较符ANY|ALLANY|ALL子查询子查询操作符操作符语意语意ANY大于子查询结果中的某个值,即表示大于查询结果中最小值大于子查询结果中的某个值,即表示大于查询结果中最小值ALL大于子查询结果中的所有值,即表示大于查询结果中最大值大于子查询结果中的所有值,即表示大于查询结果中最大值ANY小于子查询结果中的某个值,即表示小于查询结果中最大值小于子查询结果中的某个值,即表示小于查询结果中最大值=ANY大于等于子查询结果中的某个值,即表示大于等

32、于结果集中最小值大于等于子查询结果中的某个值,即表示大于等于结果集中最小值=ALL大于等于子查询结果中的所有值,即表示大于等于结果集中最大值大于等于子查询结果中的所有值,即表示大于等于结果集中最大值=ANY小于等于子查询结果中的某个值,即表示小于等于结果集中最大值小于等于子查询结果中的某个值,即表示小于等于结果集中最大值=ALL小于等于子查询结果中的所有值,即表示小于等于结果集中最小值小于等于子查询结果中的所有值,即表示小于等于结果集中最小值=ANY等于子查询结果中的某个值,即相当于等于子查询结果中的某个值,即相当于IN=ALL等于子查询结果中的所有值等于子查询结果中的所有值(通常没有实际意义

33、通常没有实际意义)!=(或或)ANY不等于子查询结果中的某个值,不等于子查询结果中的某个值,!=(或或)ALL不等于子查询结果中的任何一个值,即相当于不等于子查询结果中的任何一个值,即相当于NOT IN例子例子【例【例5-225-22】求其他系中比计算机系某一学生年龄小的学生。】求其他系中比计算机系某一学生年龄小的学生。SELECT*SELECT*FROM FROM 学生学生 WHERE WHERE 年龄年龄 ANY(SELECT ANY(SELECT 年龄年龄 FROM FROM 学生学生 WHERE WHERE 所在系所在系=计算机系计算机系)AND)AND 所在系所在系计算计算机系机系;

34、【例【例5-235-23】求其他系中比计算机系学生年龄都小的学生。】求其他系中比计算机系学生年龄都小的学生。SELECT*SELECT*FROM FROM 学生学生 WHERE WHERE 年龄年龄 ALL(SELECT ALL(SELECT 年龄年龄 FROM FROM 学生学生 WHERE WHERE 所在系所在系=计算机系计算机系)AND)AND 所在系所在系 计算机计算机系系;(4)(4)使用使用EXISTSEXISTS操作符的嵌套查询操作符的嵌套查询【例【例5-245-24】求选修了】求选修了C2C2课程的学生姓名。课程的学生姓名。SELECT SELECT 姓名姓名 FROM FR

35、OM 学生学生 WHERE EXISTS(SELECT*FROM WHERE EXISTS(SELECT*FROM 选课选课 WHERE WHERE 学生学生.学号学号=学号学号 AND AND 课程号课程号=C2)=C2);【例【例5-255-25】求没有选修】求没有选修C2C2课程的学生姓名。课程的学生姓名。SELECT SELECT 姓名姓名 FROM FROM 学生学生 WHERE NOT EXISTS(SELECT*FROM WHERE NOT EXISTS(SELECT*FROM 选课选课 WHERE WHERE 学生学生.学号学号=学号学号 AND AND 课程号课程号=C2)=

36、C2);例子例子【例【例5-265-26】查询选修了全部课程的学生的姓名。】查询选修了全部课程的学生的姓名。SELECT SELECT 姓名姓名 FROM FROM 学生学生 WHERE NOT EXISTS(SELECT*FROM WHERE NOT EXISTS(SELECT*FROM 课程课程 WHERE NOT EXISTS(SELECT*WHERE NOT EXISTS(SELECT*FROM FROM 选课选课 WHERE WHERE 学生学生.学号学号=学号学号 AND AND 课程课程.课程号课程号=课程号课程号);例子例子【例例5-275-27】求求至至少少选选修修了了学学号

37、号为为“S2”“S2”的的学学生生所所选选修修的的全全部部课程的学生学号和姓名。课程的学生学号和姓名。SELECT SELECT 学号,姓名学号,姓名 FROM FROM 学生学生 WHERE NOT EXISTS(SELECT*FROM WHERE NOT EXISTS(SELECT*FROM 选课选课 选课选课1 1 WHERE WHERE 选课选课1.1.学号学号=S2 AND NOT EXISTS=S2 AND NOT EXISTS (SELECT*FROM (SELECT*FROM 选课选课 选课选课2 2 WHERE WHERE 学生学生.学号学号=选课选课2.2.学号学号 AND

38、 AND 选课选课2.2.课程号课程号=选课选课1.1.课程号课程号);4.4.组合查询组合查询【例【例5-285-28】求选修了】求选修了C1C1课程或选修了课程或选修了C2C2课程的学生学号。课程的学生学号。SELECT SELECT 学号学号 FROM FROM 选课选课 WHERE WHERE 课程号课程号=C1=C1 UNION UNION SELECT SELECT 学号学号 FROM FROM 选课选课 WHERE WHERE 课程号课程号=C2=C2【例【例5-295-29】求选修】求选修C1C1课程,并且也选修课程,并且也选修C2C2课程的学生学号。课程的学生学号。SELEC

39、T SELECT 学号学号 FROM FROM 选课选课 WHERE WHERE 课程号课程号=C1=C1 INTERSECT INTERSECT SELECT SELECT 学号学号 FROM FROM 选课选课 WHERE WHERE 课程号课程号=C2=C2;【例【例5-305-30】求选修了】求选修了C1C1课程但没有选修课程但没有选修C2C2课程的课程的学生学号。学生学号。SELECT SELECT 学号学号 FROM FROM 选课选课 WHERE WHERE 课程号课程号=C1=C1 MINUS MINUS SELECT SELECT 学号学号 FROM FROM 选课选课 WH

40、ERE WHERE 课程号课程号=C2=C2;本例也可以用下面的本例也可以用下面的EXISTSEXISTS嵌套嵌套查询查询表示。表示。SELECT SELECT 学号学号 FROM FROM 选课选课 选课选课1 1 WHERE WHERE 课程号课程号=C1 AND NOT EXISTS=C1 AND NOT EXISTS (SELECT (SELECT 学号学号 FROM FROM 选课选课 选课选课2 2 WHERE WHERE 选课选课1.1.学号学号=选课选课2.2.学号学号 AND AND 选课选课2.2.课程号课程号=C2)=C2);函数函数功能功能AVG(数值表达式数值表达式)

41、求与字段相关的数值表达式的平均值求与字段相关的数值表达式的平均值SUM(数值表达式数值表达式)求与字段相关的数值表达式的和值求与字段相关的数值表达式的和值MIN(字段表达式字段表达式)求字段表达式的最小值求字段表达式的最小值MAX(字段表达式字段表达式)求字段表达式的最大值求字段表达式的最大值COUNT(*|字段字段)求记录行数求记录行数(*),或求不是,或求不是NULL的字段的行数的字段的行数5.5.使用分组和使用分组和SQLSQL函数查询函数查询【例【例5-31】求学生的总人数。】求学生的总人数。SELECT COUNT(*)SELECT COUNT(*)FROM FROM 学生;学生;例

42、子例子【例【例5-325-32】求选修了课程的学生人数。】求选修了课程的学生人数。SELECT COUNT(DISTINCT SELECT COUNT(DISTINCT SELECT COUNT(DISTINCT SELECT COUNT(DISTINCT 学号学号学号学号)FROM FROM FROM FROM 选课;选课;选课;选课;【例【例5-335-33】求课程和选修该课程的人数。】求课程和选修该课程的人数。SELECT SELECT SELECT SELECT 课程号,课程号,课程号,课程号,COUNT(COUNT(COUNT(COUNT(学号学号学号学号)FROM FROM FRO

43、M FROM 选课选课选课选课 GROUP BY GROUP BY GROUP BY GROUP BY 课程号;课程号;课程号;课程号;【例【例5-345-34】求选修课超过】求选修课超过3 3门课的学生学号。门课的学生学号。SELECT SELECT SELECT SELECT 学号学号学号学号 FROM FROM FROM FROM 选课选课选课选课 GROUP BY GROUP BY GROUP BY GROUP BY 学号学号学号学号 HAVING COUNT(*)3 HAVING COUNT(*)3 HAVING COUNT(*)3 HAVING COUNT(*)3;5.4 5.4

44、数据更新语句数据更新语句5.4.1 5.4.1 数据插入语句数据插入语句1.1.使用常量插入单个元组使用常量插入单个元组格式为:格式为:INSERT INSERT INTO INTO表名表名(属性列属性列1 1,属性列,属性列2 2)VALUES(VALUES(常量常量1 1,常量,常量2 2);例子例子【例【例5-355-35】将一个新学生记录】将一个新学生记录(学号:学号:9801098010,姓名:,姓名:张三张三,年龄:,年龄:2020,所在系:,所在系:计算机系计算机系)插入到学插入到学生表中。生表中。INSERTINSERTINTO INTO 学生学生VALUES(98010VAL

45、UES(98010,张三张三,2020,计算机系计算机系);【例【例5-365-36】插入一条选课记录】插入一条选课记录(学号:学号:9801198011,课程号:,课程号:C10C10,成绩不详,成绩不详)。INSERTINSERT INTO INTO 选课选课(学号,课程号学号,课程号)VALUES(98011 VALUES(98011,C10)C10);2.2.在表中插入子查询的结果集在表中插入子查询的结果集 INSERTINSERT INTO INTO表名表名(属性列属性列1 1,属性列,属性列2 2)子查询;子查询;【例【例5-375-37】求每个系学生的平均年龄,把结果存入数据库中

46、。】求每个系学生的平均年龄,把结果存入数据库中。CREATE TABLE CREATE TABLE 系平均年龄系平均年龄(系名称系名称CHAR(20)CHAR(20),平均年龄平均年龄SMALLINT)SMALLINT);INSERT INSERT INTO INTO 系平均年龄系平均年龄 SELECT SELECT 所在系,所在系,AVG(ALLAVG(ALL年龄年龄)FROM FROM 学生学生 GROUP BY GROUP BY 所在系;所在系;5.4.2 5.4.2 数据修改语句数据修改语句UPDATEUPDATE表名表名SETSET列名列名=表达式表达式,列名,列名=表达式表达式,n

47、nWHEREWHERE条件条件;【例【例5-385-38】将学生表中全部学生的年龄加上】将学生表中全部学生的年龄加上2 2岁。岁。UPDATE UPDATE 学生学生 SET SET 年龄年龄=年龄年龄+2+2;【例【例5-395-39】将选课表中的数据库课程的成绩乘以】将选课表中的数据库课程的成绩乘以1.21.2。UPDATE UPDATE 选课选课 SET SET 成绩成绩=成绩成绩*1.2*1.2 WHERE WHERE 课程号课程号=(SELECT=(SELECT 课程号课程号 FROM FROM 课程课程 WHERE WHERE 课程名课程名=数据库数据库);5.4.3 5.4.3

48、数据删除语句数据删除语句 DELETEDELETE FROM FROM表名表名 WHERE WHERE条件条件;【例【例5-405-40】删除艺术系的学生记录及选课记录。】删除艺术系的学生记录及选课记录。DELETEDELETE FROM FROM 选课选课 WHERE WHERE 学号学号 IN(SELECT IN(SELECT 学号学号 FROM FROM 学生学生 WHERE WHERE 所在系所在系=艺术系艺术系);DELETE DELETE FROM FROM 学生学生 WHERE WHERE 所在系所在系=艺术系艺术系;5.5 嵌入式SQL5.5.1 5.5.1 嵌入式嵌入式SQL

49、SQL的特点的特点1.1.嵌入式嵌入式SQLSQL应注意的问题应注意的问题1)SQL1)SQL和主语言的配合问题。和主语言的配合问题。2)2)合理选择主语言。合理选择主语言。2.SQL2.SQL嵌入主语言时必须解决的三个问题嵌入主语言时必须解决的三个问题(1)(1)如何区别如何区别SQLSQL和主语言和主语言(2)(2)使数据库的工作单元与程序工作单元之间能够通信使数据库的工作单元与程序工作单元之间能够通信1)1)主语言通过主变量向主语言通过主变量向SQLSQL语句提供参数。语句提供参数。2)SQL 2)SQL语句的当前工作状态和运行环境数据要返馈给应用程序。语句的当前工作状态和运行环境数据要

50、返馈给应用程序。(3)(3)使用游标解决使用游标解决SQLSQL一次一集合的操作与主语言一次一一次一集合的操作与主语言一次一记录操作的矛盾记录操作的矛盾5.5.2 5.5.2 不用游标的不用游标的SQLSQL语句语句1.1.几种不需要使用游标的几种不需要使用游标的SQLSQL语句语句(1)(1)用于说明主变量的说明性语句用于说明主变量的说明性语句 SQLSQL的说明性语句主要有两条:的说明性语句主要有两条:EXEC SQL BEGIN DECLARE SECTION EXEC SQL BEGIN DECLARE SECTION;EXEC SQL END DECLARE SECTION EXEC

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁