数据库技术及应用软件章语言_第1页
数据库技术及应用软件章语言_第2页
数据库技术及应用软件章语言_第3页
数据库技术及应用软件章语言_第4页
数据库技术及应用软件章语言_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

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

文档简介

Page111一月2024

关系数据库标准语言SQL虞娟Page211一月2024

第四章关系数据库标准语言SQL4.1SQL概述4.2SQL数据定义语言4.3SQL数据查询语言4.4SQL数据更新语言4.5视图4.6数据控制Page311一月2024教学重点Sql定义、查询、更新语言Sql数据视图Sql数据控制Page411一月2024教学难点数据库表的定义Select连接查询、嵌套查询、相关子查询数据视图Page511一月2024教学时数理论学时12学时实践学时10学时Page611一月20244.1SQL概述一些概念:1、用户可以用SQL语言对视图(View)和基本表(BaseTable)进行查询等操作,在用户观点里,视图和表一样,都是关系。2、视图是从一个或多个基本表中导出的表,本身不存储在数据库中,只有其定义,可以将其理解为一个虚表。3、基本表是本身独立存在的表,每个基本表对应一个存储文件,一个表可以带若干索引,存储文件及索引组成了关系数据库的内模式。Page711一月20244.1SQL概貌及其特点SQL语言的功能包括:查询(Query)操纵(manipulation)定义(definition)控制(Control)SQL语言是一个综合的、通用的、功能极强的关系数据库语言。Page811一月20244.1SQL概貌及其特点主要特点:1.语言简洁、易学易用:核心功能只有9个动词,语法简单,接近英语。

SQL功能动词

数据库查询SELECT

数据定义CREATE,DROP,ALTER

数据操纵INSERT,UPDATE,DELETE

数据控制GRANT,REVOKEPage911一月20244.1SQL概貌及其特点主要特点:2.高度非过程化的语言:用户只需提出“干什么”,至于“怎么干”由DBMS解决;用户只需要早查询语句中提出需要什么,DBMS即可按路径存取,并把结果返回给用户。3.面向集合的语言:每一个SQL的操作对象是一个或多个关系,操作的结果也是一个关系。4.即可独立使用,又可嵌入到宿主语言中使用,具有自主型和宿主型两种特点。Page1011一月20244.1SQL概貌及其特点主要特点:5.具有查询、操作、定义和控制四种语言一体化的特点。它只向用户提供一种语言,但该语言具有上述多种功能,且每中操作只需一种操作符。Page1111一月2024

SQL用户BaseTableB1ViewV1ViewV2BaseTableB2BaseTableB3BaseTableB4StoredFileS1StoredFileS1StoredFileS1StoredFileS1外模式模式内模式

SQL语言支持的关系数据库的三级模式结构Page1211一月2024

第四章SQL语言4.1SQL概述4.2SQL数据定义语言4.3SQL数据查询语言4.4SQL数据更新语言4.5视图4.6数据控制Page1311一月20244.2SQL数据定义语言4.2.1定义、删除与修改基本表4.2.2建立与删除索引Page1411一月2024

4.2.1定义、删除与修改基本表1.定义基本表

定义基本表语句的一般格式为:

CREATETABLE[〈库名〉]〈表名〉(〈列名〉〈数据类型〉[〈列级完整性约束条件〉][,

〈列名〉〈数据类型〉[〈列级完整性约束条件〉]][,…n]

[,〈表级完整性约束条件〉][,…n]);Page1511一月2024

类型表示类型说明数值型数据SMALLINT半字长二进制整数。15bits数据INTEGER或INT全字长(四字长)整数。31bits数据DECIMAL(p[,q])十进制数,共p位,其中小数点后q位。0≤q≤p,q=0时可省略不写FLOAT双字长浮点数字符型数据CHARTER(n)或CHAR(n)长度为n的定长字符串VARCHAR(n)最大长度为n的变长字符串特殊数据类型GRAPHIC(n)长度为n的定长图形字符串VARGRAPHIC(n)最大长度为n的变长图形字符串日期时间型DATETIME日期型,格式为YYYY-MM-DDTIME时间型,格式为HH.MM.SSTIMESTAMP日期加时间(1)SQL支持的数据类型Page1611一月2024

(2)列级完整性的约束条件针对属性值设置的限制条件。1)NOTNULL或NULL约束。NOTNULL约束不允许字段值为空,而NULL约束允许字段值为空。2)UNIQUE约束。UNIQUE约束是惟一性约束,即不允许列中出现重复的属性值。3)DEFAULT约束。DEFAULT为默认值约束。

DEFAULT〈约束名〉〈默认值〉4)CHECK约束。CHECK为检查约束。

CONSTRAINT〈约束名〉CHECK(〈约束条件表达式〉)

Page1711一月2024

(3)表级完整性约束条件

涉及到关系中多个列的限制条件。

1)UNIQUE约束。惟一性约束。

2)PRIMARYKEY约束。定义主码,保证惟一性和非空性。CONTRAINT〈约束名〉PRIMARYKEY[CLUSTERED](〈列组〉)

3)FOREIGNKEY约束。用于定义参照完整性。

CONTRAINT〈约束名〉FOREIGNKEY(〈外码〉)

REFERENCES〈被参照表名〉(〈与外码对应的主码名〉)Page1811一月2024

【例4-1】建立基本表:学生(学号,姓名,年龄,性别,所在系);

课程(课程号,课程名,先行课);选课(学号,课程号,成绩).

CREATETABLE学生(学号CHAR(5)NOTNULLUNIQUE,

姓名CHAR(8)NOTNULL,

年龄SMALLINTDEFAULT20,

性别CHAR(2),

所在系CHAR(20),

CONSTRAINTC2CHECK(性别IN('男','女')));

CREATETABLE课程(课程号CHAR(5)PRIMARYKEY,

课程名CHAR(20),

先行课CHAR(5));

CREATETABLE选课(学号CHAR(5),

课程号CHAR(5),

成绩SMALLINT,

CONSTRAINTC3CHECK(成绩BETWEEN0AND100),

CONSTRAINTC4PRIMARYKEY(学号,课程号),

CONSTRAINTC5FOREIGNKEY(学号)REFERENCES学生(学号),

CONSTRAINTC6FOREIGNKEY(课程号)REFERENCES课程(课程号));Page1911一月2024

2.修改基本表和删除基本表

ALTERTABLE〈表名〉

[ADD〈新列名〉〈数据类型〉[完整性约束][,…n]]

[DROPCOLUMN<列名>[〈完整性约束名〉]]

[ALTERCOLUMN(〈列名〉〈数据类型〉[,…n])];

(1)使用ADD子句增加新列

【例4-2】向课程表中增加“学时”字段。

ALTERTABLE课程ADD学时SMALLINT;

(2)使用ALTERCOLUMN子句修改列的原定义

(3)使用DROP子句删除指定的完整性约束条件

【例4-3】删除学生表中对年龄的默认值的定义。

ALTERTABLE学生DROPC1;

删除基本表的一般格式为:DROPTABLE〈表名〉;Page2011一月2024

4.2SQL数据定义语言4.2.1定义、删除与修改基本表4.2.2建立与删除索引Page2111一月2024

4.2.2建立与删除索引1.索引的作用

1)使用索引可以明显地加快数据查询的速度。

2)使用索引可保证数据的惟一性。

3)使用索引可以加快连接速度。2.建立索引的原则

1)索引的建立和维护由DBA和DBMS完成。

2)大表应当建索引,小表则不必建索引。

3)对于一个基本表,不要建立过多的索引。

4)根据查询要求建索引。

Page2211一月2024

3.建立和删除索引的格式建立格式为:

CREATE[UNIQUE][CLUSTER]INDEX〈索引名〉ON〈表名〉(〈列名〉[〈次序〉][,〈列名〉[〈次序〉]]…);删除索引格式为:DROPINDEX〈索引名〉;

【例4-4】为学生_课程数据库中的学生、课程和选课三个表建立索引。其中,学生表按学号升序建立索引;课程表按课程号升序建惟一索引;选课表按学号升序和课程号降序建惟一索引。

CREATEUNIQUEINDEX学号ON学生(学号);

CREATEUNIQUEINDEX课程号ON课程(课程号);

CREATEUNIQUEINDEX选课号ON选课(学号ASC,课程号DESC);

Page2311一月2024

第四章SQL语言4.1SQL概述4.2SQL数据定义语言4.3SQL数据查询语言4.4SQL数据更新语言4.5视图4.6数据控制Page2411一月2024

4.3SQL数据查询语言4.3.1SELECT语句介绍1.SELECT语句的语法SELECT〈目标列组〉FROM〈数据源〉[WHERE〈元组选择条件〉][GROUPBY〈分列组〉[HAVING〈组选择条件〉]][ORDERBY〈排序列1〉〈排序要求1〉[,…n]];Page2511一月2024

语法说明(1)SELECT子句:指明目标列(字段、表达式、函数表达式、常量)。基本表中相同的列名表示为:〈表名〉.〈列名〉(2)FROM子句:指明数据源。表间用“,”分割。数据源不在当前数据库中,使用“〈数据库名〉.〈表名〉”表示。一表多用,用别名标识。定义表别名:〈表名〉〈别名〉(3)WHERE子句:元组选择条件。(4)GROUPBY子句:结果集分组。当目标列中有统计函数,则统计为分组统计,否则为对整个结果集统计。子句后带上HAVING子句表达组选择条件(带函数的表达式)。(5)ORDERBY子句:排序。当排序要求为ASC时升序排序;排序要求为DESC时降序排列。Page2611一月2024

2.SELECT语句的操作符(1)算术操作符

+(加号)、-(减号)、*(乘号)和/(除号)。(2)比较操作符

=(等于)、>(大于)、<(小于)、<=(小于等于)、>=(大于等于)、!=(不等于)、<>(小于大于)、!>(不大于)和!<(不小于),共9种操作符。

Page2711一月2024

(3)逻辑操作符

语义操作符使用格式或示例在[不在]其中[NOT]IN〈字段〉IN(〈数据表|子查询〉)任何一个ANY〈字段〉〈比较符〉ANY(数据表|子查询)例:〈字段〉>ANY(数据表|子查询)全部(每个)ALL〈字段〉〈比较符〉ALL(数据表|子查询)例:〈字段〉>ALL(数据表|子查询)[不]存在EXISTSEXISTS(〈子查询〉)在[不在]范围[NOT]BETWEEN…AND…〈字段〉[NOT]BETWEEN小值

AND大值是[不是]空值IS[NOT]NULL〈字段〉IS[NOT]NULL模式比较[NOT]LIKE〈字段〉[NOT]LIKE〈字符常数〉

其中,“_”单字符通配符和“%”多字符通配符与运算AND〈条件1〉AND〈条件2〉或运算OR〈条件1〉OR〈条件2〉非运算NOTNOT〈条件〉Page2811一月2024

4.3.2SQL的查询实例及分析学生课程库结构为:学生(学号,姓名,年龄,所在系);课程(课程号,课程名,先行课);选课(学号,课程号,成绩).1.简单查询:查询过程中只涉及到一个表的查询语句。

【例4-5】求数学系学生的学号和姓名。

SELECT学号,姓名

FROM学生

WHERE所在系=‘计算机’;

【例4-6】求选修了课程的学生学号。

SELECTDISTINCT学号

FROM选课;Page2911一月2024

例子【例4-7】求选修C1课程的学生学号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同则按学号的升序排列。

SELECT学号,成绩

FROM选课

WHERE课程号='C1'

ORDERBY成绩DESC,学号ASC;【例4-8】求选修课程C1且成绩在80~90之间的学生学号和成绩,并将成绩乘以系数0.8输出。

SELECT学号,成绩*0.8

FROM选课

WHERE课程号='C1'AND成绩BETWEEN80AND90;Page3011一月2024

例子【例4-9】求数学系或计算机系姓张的学生的信息。

SELECT*

FROM学生

WHERE所在系IN(‘数学系’,‘计算机系’

)AND姓名LIKE‘张%’;【例4-10】求缺少了成绩的学生的学号和课程号。

SELECT学号,课程号

FROM选课

WHERE成绩ISNULL;

Page3111一月2024

2.连接查询

连接查询中的连接条件通过WHERE子句表达,连接条件和元组选择条件之间用AND(与)操作符衔接。(1)等值连接和非等值连接

[〈表名1〉.]〈列名1〉〈比较运算符〉[〈表名2〉.]〈列名2〉

比较运算符:=、>、<、>=、<=和!=;列名称为连接字段。

【例4-11】查询每个学生的情况以及他(她)所选修的课程。

SELECT学生.*,选课.*

FROM学生,选课

WHERE学生.学号=选课.学号;

Page3211一月2024

例子

【例4-12】求学生的学号、姓名、选修的课程名及成绩。

SELECT学生.学号,姓名,课程名,成绩

FROM学生,课程,选课

WHERE学生.学号=选课.学号AND课程.课程号=选课.课程号;

【例4-13】求选修C1课程且成绩为80分以上的学生学号、姓名及成绩。

SELECT学生.学号,姓名,成绩

FROM学生,选课

WHERE学生.学号=选课.学号AND课程号=‘C1’AND成绩>80;Page3311一月2024

例子(2)自身连接

例如,课程表中的先行课是在上学期应开设的,先行课的先行课,即间接先行课应提前一学年开设。如果求查询某门课的间接先行课或全部课程的间接先行课,就需要对课程表进行自身连接。

课程号课程名先行课C1计算机引论—C2PASCAL语言C1C3数据结构C2C4数据库C3C5软件工程C4课程的先行关系链为:C5→C4→C3→C2→C1,课程的间接关系链为:C5→C3→C1。

Page3411一月2024

【例4-14】查询每一门课的间接先行课。

SELECTA.课程号,A.课程名,B.先行课

FROM课程A,课程B

WHEREA.先行课=B.课程号

课程号课程名先行课

课程号课程名先行课C1计算机引论

C1计算机引论

C2Pascal语言C1C2Pascal语言C1C3数据结构C2C3数据结构C2C4数据库C3C4数据库C3C5软件工程C4C5软件工程C4A.课程号A.课程名B.先行课C2Pascal语言

C3数据结构C1C4数据库C2C5软件工程C3AB结果Page3511一月2024

(3)外部连接

左外部连接操作是在结果集中保留连接表达式左表中的非匹配记录;右外部连接操作是在结果集中保留连接表达式右表中的非匹配记录。左外部连接符号为“*=”,右外部连接符号为“=*”。外部连接中不匹配的分量用NULL表示。职工号姓名性别年龄所在部门

部门号部门名称电话1010李勇男201111生产科5661011刘晨女19

12计划科5781012王敏女221213一车间4671014张立男211314科研所

职工表部门表

Page3611一月2024

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

1012王敏女2212计划科5781014张立男2113一车间467内连接的结果集

左外部连接的结果集Page3711一月2024

【例4-15】用SQL表达职工和部门之间的内连接、左外部连接和右外部连接的语句内连接:

SELECT职工.*,部门名称,电话

FROM职工innerjoin部门

on职工.所在部门=部门.部门号;左外部连接:

SELECT职工.*,部门名称,电话

FROM职工leftouterjoin部门

on职工.所在部门*=部门.部门号;右外部连接:

SELECT职工.*,部门名称,电话

FROM职工rightouterjoin部门

on职工.所在部门=*部门.部门号;Page3811一月2024

3.嵌套查询(1)使用IN操作符的嵌套查询

【例4-16】求选修了高等数学的学生学号和姓名。

SELECT学号,姓名

FROM学生

WHERE学号IN(SELECT学号

FROM选课

WHERE课程号IN(SELECT课程号

FROM课程

WHERE课程名='高等数学'));

该题也可以使用下面的连接查询表达。

SELECT学生.学号,姓名

FROM学生,课程,选课

WHERE学生.学号=课程.学号AND课程.课程号=选课.课程号

AND课程.课程名='高等数学';Page3911一月2024

(2)使用比较符的嵌套查询【例4-17】求C1课程的成绩高于张华的学生学号和成绩。

SELECT学号,成绩

FROM选课

WHERE课程号=‘C1’AND成绩>(SELEC成绩

FROM选课

WHERE课程号=‘C1’AND学号=

(SELECT学号

FROM学生

WHERE姓名=‘张华'));Page4011一月2024

(3)使用ANY或ALL操作符的嵌套查询格式为:〈字段〉〈比较符〉[ANY|ALL]〈子查询〉

操作符语意>ANY大于子查询结果中的某个值,即表示大于查询结果中最小值>ALL大于子查询结果中的所有值,即表示大于查询结果中最大值<ANY小于子查询结果中的某个值,即表示小于查询结果中最大值<ALL小于子查询结果中的所有值,即表示小于查询结果中最小值>=ANY大于等于子查询结果中的某个值,即表示大于等于结果集中最小值>=ALL大于等于子查询结果中的所有值,即表示大于等于结果集中最大值<=ANY小于等于子查询结果中的某个值,即表示小于等于结果集中最大值<=ALL小于等于子查询结果中的所有值,即表示小于等于结果集中最小值=ANY等于子查询结果中的某个值,即相当于IN=ALL等于子查询结果中的所有值(通常没有实际意义)!=(或<>)ANY不等于子查询结果中的某个值,!=(或<>)ALL不等于子查询结果中的任何一个值,即相当于NOTINPage4111一月2024

例子【例4-18】求其他系中比计算机系某一学生年龄小的学生。

SELECT*

FROM学生

WHERE年龄<ANY(SELECT年龄

FROM学生

WHERE所在系=‘计算机系’

)AND所在系<>‘计算机系’;【例4-19】求其他系中比计算机系学生年龄都小的学生。

SELECT*

FROM学生

WHERE年龄<ALL(SELECT年龄

FROM学生

WHERE所在系='计算机系')AND所在系<>'计算机系';Page4211一月2024(4)使用EXISTS操作符的嵌套查询测试集合是否为空[not]exists

(子查询)判断子查询的结果集合中是否有任何元组存在 in后的子查询与外层查询无关,每个子查询执行一次,而exists后的子查询与外层查询有关,需要执行多次,称之为相关子查询Page4311一月2024

(4)使用EXISTS操作符的嵌套查询【例4-20】求选修了C2课程的学生姓名。

SELECT姓名

FROM学生

WHEREEXISTS(SELECT*

FROM选课

WHERE学生.学号=学号AND课程号='C2');【例4-21】求没有选修C2课程的学生姓名。

SELECT姓名

FROM学生

WHERENOTEXISTS(SELECT*

FROM选课

WHERE学生.学号=学号AND课程号='C2');Page4411一月2024

例子【例4-22】查询选修了全部课程的学生的姓名。

SELECT姓名

FROM学生

WHERENOTEXISTS(SELECT*

FROM课程

WHERENOTEXISTS

(SELECT*

FROM选课

WHERE学生.学号=学号AND

课程.课程号=课程号));任意课程,所求学生选之

不存在任何一门课程,所求学生没有选之Page4511一月2024

例子【例4-23】求至少选修了学号为“070101”的学生所选修的全部课程的学生学号和姓名。

SELECT学号,姓名

FROM学生

WHERENOTEXISTS(SELECT*FROM选课选课1WHERE选课1.学号=‘070101'ANDNOTEXISTS(SELECT*FROM选课选课2WHERE学生.学号=选课2.学号

AND选课2.课程号=选课1.课程号);任意课程,070101号学生选之,所求学生选之

不存在任何一门课程,070101号学生选之,所求学生没有选之Page4611一月2024

4.组合查询【例4-24】求选修了C1课程或选修了C2课程的学生学号。

SELECT学号

FROM选课

WHERE课程号='C1'

UNION

SELECT学号

FROM选课

WHERE课程号='C2';

【例4-25】求选修C1课程,并且也选修C2课程的学生学号。

SELECT学号

FROM选课

WHERE课程号='C1'

INTERSECT

SELECT学号

FROM选课

WHERE课程号='C2';Page4711一月2024

【例4-25】求选修了C1课程但没有选修C2课程的学生学号。

SELECT学号

FROM选课

WHERE课程号='C1'

MINUS

SELECT学号

FROM选课

WHERE课程号='C2';

本例也可以用下面的EXISTS嵌套查询表示。

SELECT学号

FROM选课选课1

WHERE课程号='C1'ANDNOTEXISTS

(SELECT学号

FROM选课选课2

WHERE选课1.学号=选课2.学号AND选课2.课程号='C2');

Page4811一月20245.使用分组和SQL函数查询分组命令groupby

列名[having

条件表达式]groupby将表中的元组按指定列上值相等的原则分组,然后在每一分组上使用聚集函数,得到单一值

having则对分组进行选择,只将聚集函数作用到满足条件的分组上Page4911一月20245.使用分组和SQL函数查询SnoCnoGs1c184s1c290s1c396s2c180s2c290s3c296s3c388{{{SnoCnoGs1c184s1c290s1c396s2c180s2c290s3c296s3c388列出每个学生的平均成绩列出每门课程的平均成绩groupbySnogroupbyCno928590929290Page5011一月2024

函数功能AVG(〈数值表达式〉)求与字段相关的数值表达式的平均值SUM(〈数值表达式〉)求与字段相关的数值表达式的和值MIN(〈字段表达式〉)求字段表达式的最小值MAX(〈字段表达式〉)求字段表达式的最大值COUNT(*|〈字段〉)求记录行数(*),或求不是NULL的字段的行数5.使用分组和SQL函数查询【例4-26】求学生的总人数。

SELECTCOUNT(*)FROM学生;count(*)与count(列名)的差别Page5111一月2024

例子【例4-27】求选修了课程的学生人数。

SELECTCOUNT(DISTINCT学号)

FROM选课;【例4-28】求课程和选修该课程的人数。

SELECT课程号,COUNT(学号)

FROM选课

GROUPBY课程号;【例4-29】求选修课超过3门课的学生学号。

SELECT学号

FROM选课

GROUPBY学号HAVINGCOUNT(*)>3;Page5211一月2024空值空值测试is

[not]null测试指定列的值是否为空值示例找出年龄值为空的老师姓名

selectPNAME

fromPROF

whereAGEisnull不可写为whereAGE=nullPage5311一月2024空值注意事项除is[not]null之外,空值不满足任何查找条件如果null参与算术运算,则该算术表达式的值为null如果null参与比较运算,则结果可视为false。在SQL-92中可看成unknown如果null参与聚集运算,则除count(*)之外其它聚集函数都忽略null

Page5411一月2024空值例:select

sum(G)

fromSC例:select

count(*)

fromSCSnoCnoGs1c180s1c290s1c395s2c185s2c2nulls3c2null3606Page5511一月2024

第四章SQL语言4.1SQL概述4.2SQL数据定义语言4.3SQL数据查询语言4.4SQL数据更新语言4.5视图4.6数据控制Page5611一月2024

4.4SQL数据更新语言4.4.1SQL的数据插入功能

1.使用常量插入单个元组

格式为:

INSERT

INTO〈表名〉[(〈属性列1〉[,〈属性列2〉…)]

VALUES(〈常量1〉[,〈常量2〉]…);Page5711一月2024

例子【例4-35】将一个新学生记录(学号:‘071010’,姓名:‘张三’,年龄:20,所在系:‘计算机’

)插入到学生表中。

INSERT

INTO学生

VALUES(‘071010’,‘张三’,20,‘计算机’);【例4-36】插入一条选课记录(学号:'071010',课程号:'C1',成绩不详)。

INSERT

INTO选课(学号,课程号)

VALUES(‘071010','C1');

Page5811一月2024

2.在表中插入子查询的结果集INSERT

INTO〈表名〉[(〈属性列1〉[,〈属性列2〉]…)]

〈子查询〉;

【例4-37】求每个系学生的平均年龄,并把结果存入数据库中。

CREATETABLE系平均年龄(系名称CHAR(20),

平均年龄SMALLINT);

INSERT

INTO系平均年龄

SELECT所在系,AVG(ALL年龄)

FROM学生

GROUPBY所在系;Page5911一月2024

4.4.2SQL的数据修改功能

UPDATE〈表名〉

SET〈列名〉=〈表达式〉[,〈列名〉=〈表达式〉][,…n]

[WHERE〈条件〉];

【例4-38】将学生表中全部学生的年龄加上2岁。

UPDATE学生

SET年龄=年龄+2;

【例4-39】将选课表中的数据库课程的成绩乘以1.2。

UPDATE选课

SET成绩=成绩*1.2

WHERE课程号=(SELECT课程号

FROM课程

WHERE课程名='数据库');Page6011一月2024

4.4.3SQL的数据删除功能

DELETE

FROM〈表名〉

[WHERE〈条件〉];

【例4-40】删除艺术系的学生记录及选课记录。

DELETE

FROM选课

WHERE学号IN(SELECT学号

FROM学生

WHERE所在系='艺术系');

DELETE

FROM学生

WHERE所在系='艺术系';Page6111一月2024

第四章SQL语言4.1SQL概述4.2SQL数据定义语言4.3SQL数据查询语言4.4SQL数据更新语言4.5视图4.6数据控制Page6211一月20244.5.1定义视图一、建立视图一般格式:CREATEVIEW<视图名>[(<列名>[,<列名>]…)] AS<子查询> [WITHCHECKOPTION];Page6311一月2024说明:WITHCHECKOPTION表示对视图进行更新、插入或删除的行满足视图定义中的谓词条件组成视图的属性列名或者全部省略,或者全部指定。或省略则表示视图属性列由子查询SELECT子句目标列中的字段组成。以下三种情况必须明确指定视图的列名:1)、目标列是集函数或列表达式而非单纯的属性名2)、多表连接时出现同名列作为视图的字段3)、在视图中为某个列指定新的更合适的名字Page6411一月2024举例:例一:建立计算机系学生的视图

CREATEVIEWIS_STUDENT ASSELECTSno,Sname,Sage FROMStudent WHERESdept=‘计算机’;例二:建立计算机系学生视图,要求进行修改和插入操作时仍需保证该视图只有计算机系学生。

CREATEVIEWIS_STUDENT ASSELECTSno,Sname,Sage FROMStudent WHERESdept=‘计算机’

WITHCHECKOPTION;Page6511一月2024举例:例三:建立计算机系选修了1号课程的学生的视图

CREATEVIEWIS_S1(Sno,Sname,Grade) ASSELECTStudent.Sno,Sname,Grade FROMStudent,SC WHERESdept=‘计算机’

ANDStudent.Sno=SC.SnoAND SC.Cno=‘1’;例四:建立计算机系选修了1号课程且成绩在90分以上的学生的视图

CREATEVIEWIS_S2 ASSELECTSno,Sname,Grade FROMIS_S1 WHEREGrade>=90;Page6611一月2024举例例五:定义一个反映学生出生年份的视图

CREATEVIEWBT_S(Sno,Sname,Sbirth) ASSELECTSno,Sname,1996-Sage FROMStudent;Page6711一月20244.5.1定义视图二、删除视图格式如下:

DROPVIEW<视图名>;例如:删除视图IS_S1 DROPVIEWIS_S1;Page6811一月20244.5.2查询视图例一:在计算机系学生的视图中找出年龄小于20岁的学生

SELECTSno,Sage FROMIS_IStudent WHERESage<20;该查询等价于:

SELECTSno,Sage FROMStudent WHERESdept=‘计算机’

ANDSage<20;Page6911一月20244.5.3更新视图例一:将计算机系学生视图IS_Student中的学号为070101的学生姓名改为“刘晨”

UPDATEIS_Student

温馨提示

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

评论

0/150

提交评论