版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
章关系数据库标准语言SQL语言W
主要内容
■3.1SQL概述
■3.2查询语句
■3.3更新语句
■3.4SQLDDL
■3.5SQLDCL
■3.6视图
■3.7嵌入式SQL(*)
i
3.1SQL木既述
一、SQL的发展及现状
二、SQL数据库的体系结构
三、SQL的功能
四、SQL的形式
五、SQL的特点
2
3.1SQL概述.
一、SQL的发展及现状
-1974年,由Boyce和Chamber]in提出
-1975^1979,IBMSanJoseResearchLab的关系数据库管理系统原型
SystemR实施了这种语言
-SQL-86是第一个SQL标准
-SQL-89、SQL-92(SQL2)>SQL-99(SQL3)、SQL-2003
-大部分DBMS产品都支持SQL,成为操作数据库的标准语言
19702007
3.1SQL概述
、SQL数据库的体系结构
内模式
SQL语言支持的关系数据库的三级模式结构4
3.1SQL概述
、SQL数据库的体系结构
基本概念:
内模式
1、用户可以用SQL语言对视图(View)和基本表(Base
Table)进行查询等操作,在用户观点里,视图和表一样,
都是关系。
2、视图是从一个或多个基本表中导出的表,本身不存
储在数据库中,只有其定义,可以将其理解为一个虚表。
3、基本表是本身独立存在的表,每个基本表对应一个
存储文件,一个表可以带若干索引,存储文件及索引组
成了关系数据库的内模式。
5
3.1SQL概述河&
三、SQL的功能
■数据定义(DDL)
定义、删除、修改关系模式(基本表)
定义、删除视图(View)
定义、删除索引(Index)
-数据操纵(DML)
数据查询
数据增、册h改
■数据控制(DCL)
用户访问权限的授予、收回
6
3.1SQL概述
四、SQL的组成(分类)
DATABASE
TABLE
CREATEVIEW
INDEX
DDL:
ALTER
DROP
SQLQUERY:SELECT...FROM...
INSERT...
SQLDML:1UPDATE...
DELETE...
GRANT
SQLDCL:<REVOKE
AUDIT
l嵌入式SQL:
7
3.1SQL木既述
五、SQL的形式
■交互式SQL
■一般DBMS都提供联机交互工具
95010198
95020190
用户可直接键入SQL命令对95020278
95020168
数据库进行操作95010248
41
由DBMS来进行解释、国Results/
Querybatchcompleted.lExectime:0:00:00~~ferows1103.Cd20
■嵌入式SQL
■能将SQL语句嵌入到高级语言(宿主语言)
使应用程序充分利用SQL访问数据库的能力、宿主语言的过程
处理能力
一般需要预编译,将嵌入的SQL语句转化为宿主语言编译器能处
理的语句
8
3.1SQL木既述
六、SQL的特点
1.高度非过程化的语言:用户只需提出“干什么”,至于
“怎么干”由DBMS解决;用户只需要早查询语句中提出需
要什么,DBMS即可按路径存取,并把结果返回给用户。
2.面向集合的语言:每一个SQL的操作对象是一个或多个关系,操作的结
果也是一个关系。
3.一种语法结构,两种使用方式:即可独立使用,又可嵌入到宿主语言中使
用,具有自主型和宿主型两种特点。
4.具有查询、操作、定义和控制四种语言一体化的特点。它只向用户提供
一种语言,但该语言具有上述多种功能,且每种操作只需一种操作符。
3.1SQL概述
5.语言简洁、易学易用:核心功能只有9个动词,语法简单,
接近英语。
SQL功能动词
数据库查询SELECT
数据定义CREATE,DROP,ALTER
数据操纵INSERT,UPDATE,DELETE
数据控制GRANT,REVOKE
10
3.1SQL木既述
(-)数据类型
1、字符型:CHAR(n),VARCHAR
2、数字型:INT,SMALLINT,REAL...
3、日期型:DATE,TIME
(二)函数
1.数字函数:
ABS(X),SQRT(X),RAND(X),LOG(X),...
2.字符函数:
LENGTH(X$),LOWER(X$),UPPER(X$),
SUBSTRING(e孙start,length)...
3.分组函数:COUNT(*),MAX(X),MIN(X),AVG(X),SUM(X)
ii
3.1SQL概述
(三)运算符
1.句法操作符:&
2.数值操作符:…
3.逻辑操作符:=,>,<,W,三,W,IN,ANY,ALL,...
4.查询表达式操作符:UNION,...
5.其它操作符:…
3.2查询语句
数据查询是数据库应用的核心功能
基本结构
SelectAnA2,…,An
FromR15R25…,Rm
WhereP
Zjr■・・,可9。&XR2
13
3.2查询语句
■查询语句格式(P72)
SELECT[ALL|DISTINCT][表名.]{*|列名|表达式[AS新列名]}
[INTO:主变量1[,:主变量2]…]
FROM表名[表别名],...
[WHERE条件表达式|子查询]
[GROUPBY列名1,...
[HAVING分组表达式]]
[{UNION|INTERSECT|EXCEPT}SELECT...FROM..J
[ORDERBY列名|列序号[ASC|DESC],…];
14
3.2查询语句
SELECT…FROM常用语句执行过程
SELECT...投影
FROM...TABLE―内存
WHERE...选取元组
GROUP...分组
HAVING...选择分组
[{UNION|...查徇结果的集
合运算
SELECT...①〜⑤
ORDERBY⑦排序输出
15
3.2查询语句
查询主要分类
一、单表查询
二、连接查询
多表连接查询、单表连接查询、
外连接查询、复合条件连接查询.
三、嵌套查询
返回单个值的子查询
返回一组值的子查询
多重子查询
16
3.2查询语句
一、单表查询
1.选择表中的列
2.选择表中的行
3.分组与组函数
4.排序
・■,,人/5P(R&X...X/?m))
SelectA19A29…,An
FromRpR?,…,Rm
17
3.2查询语句
一、单表查询
1.选择表中的列(投影)
例1.求学生所在系及姓名
SELECTSdept,SnameFROMStudent
例2.求学生的全部信息
SELECTSno,Sname,Sage,SdeptFROMstudent
18
3.2查询语句河&
例3.查全体学生的姓名、出生年份和所有系,要求用
小写字母表示所有系名
SELECTSname,,YearofBirth:,,
2010-sage,LOWER(Sdept)
FROMStudent;
SELECTSnameNAME,JYearofBirth:?BIRTH,
2010-sageBIRTHDAY,
LOWER(Sdept)DEPARTMENT
FROMStudent;
19
3.2查询语句
尔雾风比祜IQ)XSELECTSnameNAME.YearofBirth:'BIRTH.
gXKF(sa)▼201。-sageBIRTHDAY,
LOWERtSdept)DEPARTMENT
JXKFFROMStudent:
+Uhotel
+jianan<L
1+Umaster
UmodelNAMEBIRTHEiIRTHD&YDEPARTMENT
田Utnsdb]李伟YearofBirth:1989管理学院
王UNorthwind2刘明旭YearofBirth:1987管理学院
田Upubs3杨婷YearofBirth:1990管理学院
,+Jstudent4王海亮YearofBirth:1988管理学院
[+■Utempdb5YearofBirth:1986文法学院
国Utest6欧阳克YearofBirth:1985文法学院
一J公用对象7李连杰YearofBirth:1990体育学院
$
_j配置函数(刘娟YearofBirth:1989管理学院
,游标函数
1+g朱红YearofBirth:1991管理学院
1+_J日期和时间函
出张兰YearofBirth:1990管理学院
[+'-J数学函数
20
3.2查询语句
2.选择表中的行(选择运算)
1)消除重复行:DISTINCT(缺省为ALL)
例:求选修了课程的学生号
SELECTDISTINCTSnoFROMSC
2)选满足一定条件的行:
Where子句----运算符
•比较:V、<=>>、>=、=、<>>not+〜
•确定范围:
BetweenAandB、NotBetweenAandB
•确定集合:IN、NOTIN
•字符匹配:LIKE,NOTLIKE
•空值:ISNULL>ISNOTNULL
•多重条件:AND、OR、NOT
21
3.2查询语句
求计算机学院年龄小于19的姓名及年龄
SELECTSname,Sage
FROMStudent
WHERESdept二,计算机,ANDSage<19;
•例:求年龄在18〜22(含18,22)之间的学生名及年龄(或
不在18〜22之间)
•SELECTSname,Sage
•FROMStudent
•WHERESageBETWEEN18AND22;
•(WHERESage>=18ANDSage<=22);
•(WHERESageNOTBETWEEN18AND22);
•(WHERESage<18ORSage>22);
22
3.2查询语句
3)查询条件来自集合:
•用INorNOTIN
•例:求人力系、会计系、电商系的系名、学生名(或不是这些
系的学生)
•SELECTClass,SnameFROMStudentWHERE
ClassIN。人力」会计;电商)
•(WHEREClass/人力'ORClass—会计'ORClass/电商')
•SELECTClass,SnameFROMStudentWHEREClassNOT
IN(‘人力’J会计「电商');
•(WHEREClass!/人力'CRCa";住计'ORClass!/电商')
23
3.2查询语句
4)字符匹配:
Where子句----Like
[NOT|LIKE,匹配串'[ESCAPE,换码字符']
:表示任意长度伫0的任意字符
:表示单个的任意字符
匹配串中‘换码字符'(转义符)之后的字(%,_),被定义为普通
字符(不作通配符用)
•例1:列出课程名称中带有的课号及课名。
-Selecteno,cname
-FromCourse
-WherecnameLIKEa%\_%9escape'\'
24
3.2查询语句
•例2:求课程名中有'数据库'的课程记录
-SELECT*
-FROMCourse
-WHERECnoLIKE,%数据库%,;
•例3:求倒数第三、四个汉字为'系统’的课程名
SELECTCname
FROMCourse
*
WHERECnameLIKE,%系统9
•例4:求以'DATA_BASE,开头且倒数第五个字符为'S,的课
程名
-SELECTCname
-FROMCourse
-WHERECnameLIKE
'DATA'BASE%S'ESCAPE'、';25
3.2查询语句
5)涉及空值的查询
例:查缺少成绩的学生的学号和相应的课程号
SELECTSno,Cno
FROMSC
WHEREGradeISNULL;
26
3.2查询语句
3、分组与组函数
GroupBy子句
将查询结果集按某一列或多列的值分组,值相等的为一组,一
个分组以一个元组的形式出现
-只有出现在GroupBy子句中的属性,才可出现在Select子
句中
例:统计各系学生的人数。
Selectsdept,count(*)asstucount
FromStudent
GroupBysdept
27
32查询语句。
组函数的使用:
•COUNT([DISTINCT|ALL]*囱」名)
•SUM([DISTINCT|ALL]列名)
•AVG([DISTINCT|ALL]列名)
•MAX([DISTINCT|ALL]列名)
•MIN([DISTINCT|ALL]列名)
•组函数可用于SELECT子句中的目标列表中,或在HAVING子
句的分组表达式中用作条件。
•对分出的每一组用HAVING进行筛选,筛选条件要用到组函数。
•注意:除了count(*),使用Count(列名)函数或者其他统计函数将
忽略空值。
•Distinct在count函数可以用于去除重复值,而在其他函数中则
没有意义28
3.2查询语句消
例1:查询各个课程号与相应的选课人数
SELECTCno,COUNT(Sno)FROMSCGROUPBYCno;
例2:查男女生人数
SELECTsex,COUNT(Sno)COUNTSNOFROMstudentGROUP
BYsex;
例3:求选修了课程的学生人数
SELECTCOUNT(DISTINCTSno)FROMSC;
例4:求选修各门课的人数及平均成绩
SELECTCno,COUNT(Sno),AVG(ALLGR)FROMSCGROUPBY
Cno;
例5:求选修课程在2门以上且都及格的学生号及总平均分
SELECTSno,AVG(ALLGrade)FROMSCGROUPBYSno29
HAVINGCOUNT(Cno)>2ANDMIN(Grade)>=60;29
3.2查询语句
Having与Where的区别
Where决定哪些元组被选择参加运算,作用
于关系中的元组
Having决定哪些分组符合要求,作用于分组
30
3.2查询语句.
4、排序
用ORDERBY子句对查询结果按照一个或多个列的值进行升
/降排列输出,升序为ASC;降序为DESC,空值将作为最大
值排序
;号升序排列
;SELECTSno,GradeFromSCWHERECno=C5'ORDER
;BYGradeDESC,SnoASC;
i
:例2:求每个学生的总分并按总分降序排列,学号升序
!SELECTSno,SUM(ALLGrade)astgFROMSC
!GROUPBYSnoORDERBYtgDESC,SnoASC
।
i
I31
I______________________________________________________________________
3.2查询语句
•COMPUTE函数的使用(用于汇总满足条件
元组在指定列的信息)
•Selectsc.sno,eno,gradefromsc,studentwhere
eno-cOOTandsc.sno=student.snoandsdept='
管理学院,computeavg(grade)
m
ono名zrade
2003001cOOl85
2003002cOO180
2003003cOO175
2003004cOO160
2003008cOOl56
sooaoodoOO1BT
200301OcOO176
7Q
3.2查询语句
•查询管理学院学生各门课程的平均分
•Selectsc.sno9cno5gradefromsc,studentwhere
sc.sno=student.snoandsdept='管理学院'
orderbyenocomputeavg(grade)byeno
Selectsu.sno.exxo..grade£=SC-su.sno-vxdeirft:.sno
ooiripi_rtea7Mgradecno|
E
snoenoghade
[2003001cOOl85
g2003002cOOl30
74
srtoenograde
I2003008cOO287
P2003004cOO290
|79
snoenograde
k2003001cOO391
\91
srrocrxo£rade
2003008cOO485
3.2查询语句
Compute与Groupby的区别
Groupby生成单个结果集,选择列表只能
包含分组列和聚合函数(分组函数)
Compute生成多个结果集,一个结果集中
包含每个组的明细行信息,另一个结果集中
包含组的聚合信息。选择列表可包含除分组
列或聚合函数外的其他表达式。同时,聚合
函数在compute子句中指定,而不是在选择
列中。
35
3.2查询语句
二、连接查询
多表连接查询、单表连接查询(自连接)、外连接查询、
复合条件连接查询.
示例数据表:
学生信息表Student;课程信息表Course;选课情况
表SC,教师信息表teacher
36
3.2查询语句
1、多表连接
1)连接条件一
[表名L]列名1比较运算符[表名2.]列名2
2)连接条件二
[表名L]列名1BETWEEN[表名2.]列名2
AND[表名2.]列名3
■连接条件中的列名称为连接字段,其各
字段应是可比的。
37
河&
3.2查询语句
执行过程:
在表1中找到第一个元组,然后从头开始扫描表2,查找到
满足条件的元组即进行串接并存入结果表中;再继续扫描表2,
依次类推,直到表2末尾。再从表1中取第二个元组,重复上述
的操作,直到表1中的元组全部处理完毕。
student
SC学号课程号学萧矗
学号学生姓名所属系名学生年龄snoCno
snoSnameSdeptSagestucentlClA
AstucentlC2A
student1Bcs20stucentlC3A
student2Ccs21stucentlC5B
student3DMaA19stucent2ClB
student4E19stucent2C2C
studentsMA20・・・♦••
38
3.2查询语句
求选课情况,要求输出学号、姓名、课程名与成绩
SELECTstudent,sno,Sname,Cname,Grade
FROMStudentS,CourseC,SC
WHERES.Sno=SC.SnoANDC.Cno=SC.Cno;
39
河&
3.2查询语句
2、单表连接(自连接)
用表别名把一个表定义为两个不同的表进行连接。
求每门课的间接先修课名(即先修课的先修课)
SELECTFIRST.Cno,THIRD.Cname
FROMCorseFIRST,CourseSECOND,CourseTHIRD
WHEREFIRST.CPno二SECOND.CnoAND
SECOND.CPno=THIRD.Cno
40
3.2查询语句
3、外连接
在连接条件的某侧加上(*)或(+),表示该侧所对应的表中可形成一个
各数据项均为空值的万能替代行,用来与另一侧对应的表中所有不满足条
件的元组进行连接。外连接符(*)或(+)出现在左侧称为右外连接、出现
在右侧称为左连接、两侧都出现的称为全外连接。
求各部门名及职工名,要求输出
无职工的部门(职工以空值出现)
SELECTDNAME,TNAMEFROMdepartmentD,teacherT
WHERED.DNO=T.DNO(*);
41
求各部门名及职工名,要求输出
未分配部门的职工(部门以空值出现)
SELECTDNAME,TNAMEFROM
departmentD,teacherT
WHERED.DNO(*)=T.DNO;
42
求各部门名及职工名,要求输出
无职工的部门和未分配部门的职工
SELECTDNAME,TNAMEFROM
departmentD,teacherT
WHERED.DNO(*)=T.DNO(*);
注意,在sqlserver中,Leftjoin左外连接
Rightjoin右外连接,Fulljoin全外连接
43
3.2查询语句3.2
SELECTDNAME,TNAMEFROMdepartmentDleftjointeacherT
onD.DNO=T.DNO
SELECTDNAME,TNAMEFROMdepartmentDrightjointeacher
T
onD.DNO=T.DNO
SELECTDNAME,TNAMEFROMdepartmentDfulljointeacherT
onD.DNO=T.DNO
44
3.2查询语句W
4、复合条件连接
WHERE子句中除了连接条件,还有其它限制条件。
例1:求选修'C6,课程且成绩超过90分的学生名与成绩
SELECTSname,Grade
FROMstudent,SC
WHEREstudent.sno=SC.snoANDSC.Cno='C6‘
/IANDSC.Grade>90;-Z
45
3.2查询语句
三、嵌套查询
在SELECT...FROM...WHERE语句结构的
WHERE子句中可嵌入一个SELECT语句块
其上层查询称为外层查询或父查询
其下层查询称为内层查询或子查询
SQL语言允许使用多重嵌套查询
在子查询中不允许使用ORDERBY子句
嵌套查询的实现一般是从里到外,即先进行
子查询,再把其结果用于父查询作为条件
46
:八嵌套查询
1、返回单个值的子查询:
例1:求与‘刘力'同一个学院的学生名,年
一:
SELECTSname,SageFROMstudentWHERESdept
(SELECTsdeptFROMstudentWHERESname=,刘力');
方法二:
SELECTFIRST.Sname,FIRST.SageFROMStudent
FIRST,StudentSECOND
WHEREFIRST.Sdept=SECOND.SdeptANDSECOND.Sname二
‘刘力’;
三、嵌套查询
2、返回一组值的子查询:
例1:求选修'C6,课程且成绩超过90分的学生
方法一:SELECT*FROMstudentWHEREsnoIN
(SELECTsnoFROMSCWHERECno='C6'ANDGrade>90
方法二(连接查询):
SELECTstudent.*
FROMstudent,SC
WHEREStudent.Sno=SC.Sno
ANDGrade>90
ANDCno='C6';
求比计算机系中某一学生年龄小的其他系的学
方法一:
SELECT*FROMstudentWHEREsdept!='CS'AND
sage(SELECTSageFROMStudentWHERE
Sdept='CS');
方法二:
SELECT*
FROMStudent
WHERESdept!='CS'
ANDSage
(SELECTMAX(Sage)
FROMStudent
WHERESdept'CS');
49
3.2查询语句
3、多重子查询:
求D01部门中工资与国贸系中任一职工相同
的职工和工资
Teacher(tno,tname5salary5dno)
Department(dno,dname)
50
SELECTTname,Salary
FROMTeacher
WHEREDno=TOF
ANDsalaryIN
(SELECTsalary
FROMteacher
WHEREDno=
(SELECTDNO
FROMdepartment
WHEREDnamei国贸,));
求工资介于‘张三'与'里司'
SELECT*
FROMteacher
WHERESalary>=
(SELECTMIN(Salary)
FROMteacher
WHERETnameIN('张三,J里司,))
ANDSalary<=
(SELECTMAX(Salary)
FROMteacher
WHERETnameIN('张三'」里司/
3.2查询语句
四、带有EXISTS的相关子查询
不相关子查询:子查询的查询条件不依赖于
父查询的称为不相关子查询。
相关子查询:子查询的查询条件依赖于外层父
查询的某个属性值的称为相关子查询
(CorrelatedSubquery),带EXISTS的子查询就
是相关子查询
EXISTS表示存在量词
带有EXISTS的子查询不返回任何记录的数据,
只返回逻辑值'True9或'False9
53
求所有选修了'CP课程的学生名。
不相关子查询:
SELECTSnameFROMstudentWHEREsnoINSELECT
snoFROMSCWHERECno=6CU);
相关子查询:
SELECTSnameFROMstudent
WHEREEXISTS
(SELECT*
FROMSC
WHERE
student.sno=SC.sno
ANDCno=©');
54
河&
相关子查询执行过程:
先在外层查询中取student表的第一个元组(记录),用该
记录的
相关的属性值(在内层WHERE子句中给定的)处理内层查询,若
外层的WHERE子句返回'TRUE,值,则此元组送入结果的表中。然
后再取下一个元组;重复上述过程直到外层表的记录全部遍历
一次为止。
SC
student学号课程号学习成绩
学号学生姓名所属系名学生年龄
snoSnameAMESdeptSagestucentlCl
studentlCS20stucentlC2
student2CS21stucentlC3
studentsMA19stucentlC5
student4CI19stucent2Cl
studentsMA20stucent2C2
55
说明:
不关心子查询的具体内容,因此用SELECT*,
Exists+子查询用来判断该子查询是否返回元组
当子查询的结果集非空时,Exists为"True
当子查询的结果集为空时,Exists为"False
NOTEXISTS:若子查询结果为空,返回'TRUE,值,
否则返回'FALSE,
56
列出没有选Cl课程的学生的学号、姓名
SELECTsno,Sname
FROMstudent
WHERENOTEXISTS
(SELECT*
FROMSC
WHEREstudent.sno=SC.sno
ANDCno=6CP);
57
查询选修了所有课程的学生的姓名
SELECTSname这样的课是不存在作
FROMstudent
O
WHERENOTEXISTS
(SELECT*这门课他没选
FROMCourseo°
WHERENOTEXISTS
(SELECT*
FROMSC
WHEREstudent.sno=SC.sno
ANDCourse.Cno=SC.Cno))•
查询至少选修了S1所选的全部课程的学生名曲
SELECTSname
FROMstudent
WHERENOTEXISTS
(SELECT*
FROMSCSCX
WHERESCX.sno=6sU
ANDNOTEXISTS
(SELECT*
FROMSCSCY
WHEREstudent.sno=SCY.sno
ANDSCX.Cno=SCY.Cno));
59
在FROM语句中使用子查询,对查询结果定义表
名及列名
例:求平均成绩超过80分的学号及平均成绩
1.SELECTSno,AVG_GFROM(SELECT
Sno,AVG(Grade)FROMSC
GROUPBYSno)AS
RA(Sno,AVG_G)WHEREAVG_G>80;
2.SELECTsno,AVG(Grade)
FROM
GROUPBYsno
HAVINGAVG(Grade)>80
五、SQL的集合操作
-属性个数必须一致
-对应的类型必须一致
-属性名无关
-最终结果集采用第一个结果的属性名
-缺省为自动去除重复元组
-除非显式说明ALL
■OrderBy放在整个语句的最后
SQL的集合操作——并
例L查询计算机系的学生年龄不大于19岁的学生,
并按年龄倒排序。
SELECT*
FROMstudent
WHERESdept='CS"
SELECT*
FROMstudent
WHEREAGE<=19
ORDERBYAGEDESC
62
SQL的集合操作——交
例2:查询计算机系的学生年龄不大于19岁的学生,
并按年龄倒排序。
(SELECT*
FROMstudent
WHERESdept='CS')
INTERSECT
(SELECT*
FROMstudent
WHEREAGE<=19)
ORDERBYAGEDESC
63
SQL的集合操作——差
例3:查询选修课程1但没有选修课程2的学生。
SELECTSname,Sdept
FROMstudent
WHEREsnoIN
((SELECTsno
FROMSC
WHERECno=P)
EXCEPT
(SELECTsno
FROMSC
WHERECno=?2'))
•注意:SQL92中支持并交差运算,但不同的数
据库产品对此支持是不同的,在使用前需要
查询使用说明.
•Sqlserver2000中支持并的操作.
65
3.3更新语句
一、插入操作INSERT
二、删除操作DELETE
三、修改操作UPDATE
66
、插入操作
1、插入单个元组:
格式:INSERTINTO表名[(列名1,…)]
VALUES(列值1,…);
■插入一已知元组的全部列值
■插入一已知元组的部分列值
67
■插入一已知元组的全部列值
新增一个学生信息
INSERTINTOstudent
VALUES('2003001「陈冬18「男电商
'管理学院',,徐州');
■插入一已知元组的部分列值
新增一条选课记录
INSERTINTOSC(Sno,Cno)
VALUES('2003001','C003');
68
•、插入操作
2、插入子查询的结果:
格式:INSERTINTO表名[(列名1,…)
(子查询);
设关系S_G(Sno,AVG_G),把平均成绩大于
80的男生的学号及平均成绩存入S_G中。
需要先建立SG表
69
INSERTINTOS_G(sno,AVG_G)
(SELECTsno,AVG(GRADE)
FROMSC
WHERESnoIN
(SELECTSno
FROMStudent
WHERESEX'男,)
GROUPBYSno
HAVINGAVG(GRADE)>80);
Selectsno,snameintostudent!fromstudent
创建表并插入数据70
、删除操作
格式:DELETEFROM表名
[WHERE条件];
■只能对整个元组操作,不能只删除某些属性上
的值
■只能对一个关系起作用,若要从多个关系中删
除元组,则必须对每个关系分别执行删除命令
■从关系夕中删除满足条件的元组,只是删除数据,
而不是定义
71
二、删除操作
1、删除单个元组:
删除学号为‘2003009"的学生。
DELETEFROMSC
WHEREsno=2003009';
DELETEFROMstudent
WHEREsno='2003009
72
:、删除操作
2、删除多个元组:
例2:删除选课但无成绩的学生的选课信息
DELETEFROMSC
WHEREGRADEIsNULL;
DELETEFROMSC清空SC表
73
河&
二、删除操作3.5
3、带子查询的删除语句:
删除选修'C004,且成绩小于该课程的平均成绩的1
录
DELETEFROMSC
WHERECno=6C0045ANDGrade<
(SELECTAVG(GRADE)
FROMSC
WHERECno=6C004O;
74
、修改操作
格式LUPDATE表名[别名]
SET列名=表达式,•••
[WHERE条件];
格式2:UPDATE表名[别名]
SET(列名,…)=(子查询)
[WHERE条件];
75
三、修改操作
1、修改单个元组的值:
把名为MARTIN的职工的工种改为MANAGER,
工资增加收入20%,
UPDATEEMPLOYEE
SETJ0B=6MANAGER\Salary=Salary*1.2
WHERENAME='MARTIN';
76
三、修改操作
2、修改多个元组的值:
例2:将所有学生的年龄增加1岁
UPDATEstudent
SETSage=Sage+l;
77
河&
三、修改操作
3、带子查询的修改语句:
工种为SALESMEN的职工的工资改为工种平均
工资的no%。
UPDATEEMPLOYEE
SETSalary=(SELECT1.UAVG(Salary)
FROMEMPLOYEEWHERE
JOBiSALESMEN')
WHEREJOB'SALESMEN';
78
三、修改操作
3、带子查询的修改语句:
管理学院全体学生成绩上浮10%
UPDATESC
SETGRADE=GRADE*1.10,
WHEREsnoIN
(SELECTsno
FROMstudent
WHERESdepti管理学院,);
79
三、修改操作
4、修改操作与数据库的一致性
UPDATE语句一次只能操作一个表。
例:学号为020011的学生休学一年,复学后需要将其学号改为
030011?
Student表和SC表都有020011的信息,两表都修改,一般这种修
改只能通过两条UPDATE语句进行。(假设student与sc之间
没有参照完整性约束)
第一条UPDATE语句:UPDATEStudentSETsno='030011'
WHEREsno二020011'
第二条UPDATE语句:UPDATESCSETsno=,030011'
WHEREsno二020011
80
问题:执行第一条UPDATE语句之后,数据库中的数据是否一致?
情况如下:
此时student中已没有0200H的学生
SC表中仍记录着020011学生的选课信息,数据的完整性和一致性
受到破坏,只有执行第2条UPDATE语句之后,数据才重新处
于一致状态。
假设执行完一条语句之后,机器突然出现故障,无法再继续执
行第二条UPDATE语句,则数据库中的数据将永远处于不一
致状态。因此必须保证这两条UPDATE语句要么都做,要么
都不做。
解决方法:事务(Transaction),我们将在后面章节介绍。
本题可以通过在student与sc之间设置参照完整性约束,强制级
联删除和更新.
3.4数据定义
一、定义基本表CREATETABLE
二、删除基本表DROPTABLE
三、修改基本表ALTERTABLE
四、定义索引CREATEINDEX
五、删除索引DROPINDEX
82
、定义基本表
格式:CREATETABLE表名
(列名类型(长度)[NOTNULL]
[DEFAULT{常量|系统变量|NULL}]
[列约束],……)
[PRIMARYKEY(列名,…)]
[FOREIGNKEY(列名,…)
REFERENCES表名(列名,…)]
[CHECK条件];
83
例:建立学生student、课程Course、
个表
student
表:
CREATETABLEstudent
(snoCHAR(6)primarykeyNOTNULL,
SnameCHAR(8)NOTNULL,
sageSMALLINT,
SdeptCHAR(10),
SEXCHAR(2)DEFAULT'男,
CHECK((SEX='男')OR(SEX二'女')))
也可以PRIMARYKEY
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年中国电镀锌圆钉市场调查研究报告
- 2024年中国树脂薄形隐形拉链市场调查研究报告
- 2024年中国手动预涂膜覆膜设备市场调查研究报告
- 2024年中国喷油泵回油阀试验台市场调查研究报告
- 2024-2025学年吉林省通榆县第一中学高考适应性月考卷(二)化学试题含解析
- 2024年喷淋箱项目可行性研究报告
- 注浆加固工程施工方案
- DB5118-T 10-2024 农产品地理标志 石棉黄果柑种植技术规范
- 2024年武功县一级造价工程师《土建计量》临考冲刺试卷含解析
- 《中学生学习心理》知识考试复习题库(含答案)
- 《汽车电工电子技术》全套教案(完整版)
- 国家开放大学《西方经济学(本)》章节测试参考答案
- 第三讲现代汉语词汇的分类及形成
- 三副常用英语 文档
- 领导综合评价表
- 《数学思想方法》教学大纲
- 口腔修复学练习试卷34-2(1)
- 适合打印的 五十音图表
- 人教版六年级数学上册《第三单元 分数除法》拓展提升练习题爬坡题及答案解析
- 职业健康体检质量管理手册(共58页)
- 苏教版六年级上册数学《第三单元 分数除法 第5课时 分数除法的实际问题》课件
评论
0/150
提交评论