第四章关系数据库语言_第1页
第四章关系数据库语言_第2页
第四章关系数据库语言_第3页
第四章关系数据库语言_第4页
第四章关系数据库语言_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

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

文档简介

第四章关系数据库语言SQL4.1SQL简介4.2查询语句4.3数据更新4.4数据定义小结4.1SQL简介SQL是结构化查询语言(StructuredQueryLanguage)的缩写,是一种面向关系数据库的国际标准语言,在当前数据库领域中应用最为广泛和成功,美国国家标准局ANSI在1986年将SQL作为关系数据库系统的标准语言,后被国际标准化组织(ISO)采纳为国际标准。现在很多大型数据库都实现了SQL语言。4.1.1SQL语言的发展SQL的发展历程主要有以下几个阶段:(1)1974年由Boyce和Chamberlin提出,当时称为SEQUEL(StructuredEnglishQueryLanguage)。(2)1975~1979年IBM公司对SEQUEL进行了修改,并由SanJoseResearchLaboratory研制了著名的关系数据库管理系统原型SystemR,实现了这种语言。(3)1981年IBM推出了商用关系数据库SQL/DS,并将其改名为SQL,由于它功能丰富,语言简洁,因此倍受用户及计算机工业界欢迎,被众多计算机公司和软件公司所采用。(4)目前SQL语言不仅用于小型数据库如Foxpro、Access,而且更广泛用于各种大型数据库,如Sysbase、SQLServer、Oracle、Informix、DB2、Ingres等。SQL在发展中经历了一系列标准化过程:(1)1982年美国国家标准局(AmericanNationalStandardInstitute,简称ANSI)开始制订SQL标准。(2)1986年10月ANSI的数据库委员会X3H2批准了SQL作为关系数据库语言的美国标准;同年ANSI公布SQL语言的第一个标准SQL-86,并于次年由国际标准化组织(InternationalStandardizationOrganization,简称ISO)通过SQL-86标准。(3)1989年ISO对SQL-86进行补充,推出SQL-89标准,也称SQL1。(4)1992年ISO又推出SQL-92标准,亦称SQL2。(5)1999年起ANSI陆续公布增加了面向对象功能的新标准SQL-99(亦称SQL3)的12个标准文本。4.1.2SQL语言的特点(1)非过程化:SQL语言是非过程化语言,在SQL语言中,只要求用户提出“做什么”,而无需指出“怎样做”。SQL语句操作的过程由系统自动完成。(2)一体化:SQL可以操作于不同层次模式,集数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)为一体。用SQL语言可实现DB生命周期的全部活动,其中包括建立数据库、建立用户账号、定义关系模式、查询及数据维护、数据库安全控制等。(3)两种使用方式,统一的语法结构:两种使用方式:自含式语言与嵌入式语言自含式方式就是联机交互使用方式;嵌入式方式是指SQL语句嵌入某种高级程序设计语言的程序中,以实现数据库操作。尽管这两种使用方式不同,但SQL语言的语法结构基本是一致的。4.1.3SQL语言的书写准则

遵从某种准则可以提高语句的可读性,通常遵循的准则主要有:SQL语句对大小写不敏感,但关键字常用大写

SQL语句可写在一行上,但为便于理解,增强条理性,常习惯于每个字句占用一行关键字不能在行与行之间分开,很少采用缩写形式

SQL中的数据项需同时列出时,分隔符用“,”;字符或字符串常量的定界符用单引号“

'”表示4.2查询语句4.2.1基本查询4.2.2使用列表达式4.2.3WHERE从句的进一步使用4.2.4数据汇总4.2.5连接查询4.2.6嵌套查询4.2.7联合查询4.2.8使用系统内置函数的查询

SQL的核心是数据查询。对于数据库的查询操作是通过SELECT

查询命令实现的,它的基本形式由

SELECT-FROM-WHERE

查询块组成,多个查询块可以嵌套执行。总述SQL查询语句的完整语法描述如下:SELECT

[ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]…FROM

<表名或视图名>[,<表名或视图名>]…[WHERE<条件表达式>][GROUPBY<列名1>[HAVING<条件表达式>]][ORDERBY<列名2>[ASC|DESC]];

指定要显示的属性列指定查询对象指定查询条件查询结果按指定列的值分组筛选出只有满足指定条件的组对查询结果表按指列值的升序或降序排序

4.2.1基本查询最基本的查询就是从指定的表中找出符合条件的记录。这样的查询由SELECT和FROM短语构成无条件查询,或由SELECT、FROM和WHERE或其他短语构成条件查询。

(1)简单的无条件查询设某个数据库中有表stu_info,请把该表中的所有记录的所有属性查询出来:

SELECT*//*表示所有字段,是通配符

FROMstu_info//选定数据库中的表

(2)简单的条件查询请查找stu_info表中所有的女生的信息。SELECT*

FROMstu_info

WHERExbm='女'

//设定条件在SELECT子句中可以决定哪些列出现在结果关系中,这相当于关系代数中的投影运算。具体办法:在SELECT子句之后不是写“*”,而是根据需要列出在FROM子句中声明的诸关系的属性。例:SELECTxh,xm//选定字段FROMstu_info //选定数据库中的表WHERExbm='女'

//设定条件(3)查询语句中的投影操作使用SQL的SELECT可以将查询结果排序,排序的短语是ORDERBY,具体格式如下:

SELECT列名1,列名2,…FROM表名WHERE条件表达式

ORDERBY

列名1[ASC|DESC][,列名2[ASC|DESC]…]按升序(ASC)或降序(DESC)排序,允许按一列或多列排序。(4)设定排序条件下面是使查询结果排序的例子:SELECT*

//“*”表示所有字段

FROM

stu_info//选定数据库中的表

WHERExbm='女'//设定条件

ORDERBYxh

//设定排序字段

在查询过程中经常会出现一些重复记录,例如“SELECTbhFROMstu_info”。其查询结果将会有多个重复的班级名,显然这种结果不能令人满意。因此需要去掉重复值,此时需要指定DISTINCT

短语:

SELECTDISTINCTbhFROMstu_info

这里短语DISTINCT的作用是去掉查询结果中的重复值。执行结果中班级名都不重复。(5)限定重复记录4.2.2使用列表达式在SQL中,指定列的方法我们学习了以下两种:(1)指定列(2)使用通配符*第(3)种是:可用列表达式,来获取经过计算的查询结果。列表达式不仅可以是算术表达式,还可以是字符串常量、函数等。(6)计算列值SELECT'学号',xh,'年龄',YEAR(GETDATE())-YEAR(CSRQ),bhFROMstu_info(7)修改查询结果的列标题(1)SELECTYEAR(GETDATE())-YEAR(CSRQ)

AS年龄,nlFROMstu_info(2)SELECT

学号=xh,nlFROMstu_info(3)SELECTxh'学号',nlFROMstu_info查询工作的关键就在通过分析怎样把实际问题中的自然语言描述转化为1)从哪个表中查询。即:from子句2)要查询哪些列。即:select子句3)要查询的条件。即:where子句完成查询工作的三个关键步骤其中第3步最复杂4.1.3WHERE从句的进一步使用常用的查询条件查询条件谓词比较=><>=<=!=<>!>!<确定范围between…and,notbetween…and确定集合in,notin字符匹配like,notlike空值isnull,isnotnull多重条件and,or(8)表达式比较如:SELECT*

FROMstu_info

WHEREnl>20(9)确定范围between…and…和notbetween…and…如:查询考试成绩在60-70之间的学号、课程号、考试成绩:SELECTxh,kch,

kscjFROMxkWHEREkscjBETWEEN60AND70(10)确定集合

IN和NOTIN例:查询复材0108、复材0109班的学生的信息SELECTxh,xm,xbm,bhFROMstu_infoWHEREbhIN('复材0108','复材0109')(11)字符匹配NOTLIKE和LIKE与%和_搭配。%代表任意长度的字符串.如a%b:acb,addgb等都满足匹配_(下横线)代表任意单个字符。例:查询班级名中第1个字为“计”字的学生信息:

SELECT*

FROMstu_info

WHEREbhlike'计%'例:查询名字中第2个字为“宁”字的学生信息:

SELECT*

FROMstu_info

WHERExmlike'_宁%'例:查询DB_Design课程的课程号和学分。

SELECTckh,kcxfFROMGCourseWHEREkmLIKE'DB\_Design'ESCAPE'\'例:查询以"DB_"开头,且倒数第3个字符为i的课程的详细情况。

SELECT*FROMGCourseWHEREkmLIKE'DB\_%i__'ESCAPE'\'当用户要查询的字符串本身就含有%或_时,要使用ESCAPE

'换码字符'

短语对通配符进行转义。(12)涉及空值的查询SELECT*FROMstu_infoWHEREbhISNULL(13)多重条件查询用逻辑运算符and和or连接,and的优先级高于or。如:查询应什么班,姓刘的学生。SELECT*FROM

stu_infoWHEREbhlike'应%'and

姓名like'刘%'4.2.4数据汇总(14)聚合函数count(*)统计元组(记录)个数count([distinct|all]<列名>)统计一列中值的个数sum([distinct|all]<列名>)求一列值的总和(数值型)avg([distinct|all]<列名>)求一列值的平均数max([distinct|all]<列名>)求一列值中的最大值min([distinct|all]<列名>)求一列值中的最小值聚合函数一览表例:查询学生总数

SELECT

count(*)

FROMstu_info例:已知数据库表XK中高等数学课程的代码为090101,查询学生选修高等数学的平均成绩:

SELECT

avg(KSCJ)

AS

高等数学

FROMXK

WHEREKCH='090101'(15)GROUPBY子句Groupby子句将查询结果表按某一列或多列值分组,值相等的分为一组。如:在表xk中查询各课程编号及相应的选课人数注:GROUPBY子句中不能使用聚合函数,并且必须在GROUPBY子句中列出SELECT列表中所有的非聚合项。例:在表stu_info中查询每个专业的男生、女生人数在groupby子句后面加WITHROLLUP或WITHCUBE如果还要显示每个专业的总人数及全体学生总人数,如何实现?SELECTkch,count(xh)

FROMxk

GROUPBYkchSELECTzyh,xbm,count(*)as'人数'

FROMstu_info

GROUPBYzyh,xbm例:查询选修了3门以上课程的学生及选课数:SELECTXH,COUNT(*)FROMXKGROUPBYXHHAVING(COUNT(*)>3)

HAVING短语指定分组或聚合的条件。只有满足条件的分组才被选出来,HAVING一般与GROUPBY子句一起使用。(16)HAVING

短语SELECTXH,COUNT(*)FROMXKWHERE(XHLIKE'2001%')GROUPBYXHHAVING(COUNT(*)>3)例:查询学号前四位是2001的学生的学号及选课数:having短语指定选择组的条件,只有满足条件的组才被选出来。一般和groupby子句一起使用where子句从基本表中选择满足条件的元组,而不是指定满足条件的分组,这是二者的根本区别。若一个查询同时涉及两个以上的表,称为连接查询。连接查询是关系数据库中最主要的查询,按连接类型可分为:内连接、外连接和交叉连接。其中内连接又分:等值连接、非等值连接和自然连接;外连接又分:左外连接、右外连接和全外连接等。4.2.5连接查询

连接查询中用来连接两个关系的条件称为连接条件或连接谓词,格式:表名1.列名

比较运算符表名2.列名其中比较运算符主要有:=、>、<、>=、<=、!=当连接运算符为=时,叫等值连接。使用其它运算符称为非等值连接。连接谓词中的列名称为连接字段。

例:查询每个学生及其选课情况SELECT*FROMstu_info,xkWHERE

stu_info.xh=xk.xh例:查询应化041班每个学生及其选修课程的情况SELECT

stu_info.xh,stu_info.xm,stu_info.bh,

stu_info.xbm,xk.kch,xk.kscjFROM

stu_info,xkWHERE

stu_info.xh=xk.xh

and

stu_info.bh='应化041'

//复合条件连接多表查询:涉及两个表以上的查询SELECTxmFROMstu_info,xk,gcourseWHEREgcourse.km='数据库原理'

andgcourse.kch=xk.kch

andxk.xh=stu_info.xh为了简化,表名可以取别名,且别名只在本次查询有效增加表别名后的结果:SELECTxmFROMstu_infoa,xkb,gcoursecWHEREc.km='数据库原理'

andc.kch=b.kch

andb.xh=a.xh例如:查询选修了有机化学这门课程的学生的姓名下面讨论另一类基于多个关系的查询,这类查询所要求的结果出自一个关系,但相关的条件却涉及多个关系。在前面的例子中,WHERE之后是一个相对独立的条件,这个条件或者为真、或者为假。但是,有时需要用另外的方式来表达检索要求。比如,当检索关系X中的记录时,它的条件依赖于相关的关系Y中的记录属性值,这时使用SQL的嵌套查询功能将非常方便。4.2.6嵌套

查询在SQL语言中,一个select-from-where语句称为一个查询块,将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询称为嵌套查询。等价形式:SELECTxm

FROMstu_info,xk

WHEREstu_info.xh=xk.xh

andkch='05'SELECTxmFROMstu_info例:在stu_info表中查询选修了05号课程的学生姓名WHERExhIN(SELECTxhFROMxkWHEREkch='05')例:查询与刘玉涛在同一个班学习的学生的学号、姓名、班级。SELECTxh,xm,bhFROMstu_infoWHERE

bhIN(17)带有in谓词的子查询(18)带有比较运算符的子查询例:查询与学号是20029001的学生在同一个班学习的学生,按学号排序。SELECTxh,xm,bhFROMstu_infoWHERE

bh

ORDERBYxh

(SELECTbhFROMstu_infoWHERExm='刘玉涛')

=(SELECTbhFROMstu_infoWHERExh='20029001')(19)带有any或all谓词的子查询比较子查询通常用到操作符ALL、ANY。其通用格式为:

<列><比较运算符>[ALL|ANY]<内部查询>例:查询其他班级中比应化041班某个学生年龄小的那些学生的姓名和年龄。SELECTxm,nl

FROMstu_info

WHEREbh<>'应化041'andnl<any(selectnlfromstu_infowherebh='应化041')(20)带有exists谓词的子查询EXISTS是测试子查询是否有数据行返回,有则返回TRUE,否则返回FALSE。例:查询选修了高等数学(090101)的学生姓名、性别和班级。SELECTxm,xbm,bhFROMstu_infoWHEREexists(select*fromxkwherexh=stu_info.xh

andkch='090101')例:查询没有选修高等数学(090101)的学生姓名、性别和班级。SELECTxm,xbm,bhFROMstu_infoWHEREnotexists(select*fromxkwherexh=stu_info.xhandkch='090101')4.2.7联合(集合)查询select语句的查询结果是元组的集合,所以多个select语句的结果可进行集合操作。集合操作主要包括:并操作UNION、交操作INTERSECT、差操作MINUS标准SQL只提供UNION,其语法格式如下:

SELECT_1UNION[ALL]SELECT_2…如果要将查询的结果保存在当前数据库新建的表NEWSTU中,可以使用INTO子句:SELECT*INTONEWSTUFROMaUNIONALLSELECT*FROMb例:查询编号为01的学院的学生及所有学院的本科生SELECT*FROMstu_infoWHERExsh='01'UNIONSELECT*FROMstu_infoWHEREpyccm='本科'4.2.8使用系统内置函数的查询(21)数学函数

ABS(数字型表达式)、RAND(整型表达式)(22)字符串处理函数

ASCII(字符型):返回表达式最左端字符的ASCII值

CHAR(0-255之间的整数):将ASCII转换为字符

LEFT(字符型,整型):返回从字符串左边开始指定个数的字符LTRIM(字符型):删除字符串最左边的空格,并返回字符串REPLACE(字符型1,字符型2,字符型3):用3替换1中包含的2,并返回替换后的表达式SUBSTRING(express,start,length):返回express中指定的部分数据STR(float_exp[,length[,decimal]]):将数字数据转换为字符数据(23)系统函数getdate():返回当前的系统日期和时间year()、month()、day():分别返回指定日期的年、月、日

cast(表达式AS数据类型):将表达式的值转换为数据类型参数所指定的类型。case函数:一种是简单的CASE函数,另一种是搜索型的CASE函数。简单CASE语法格式:CASE输入表达式

WHEN比较表达式THEN结果表达式

……ELSE表达式END搜索CASE语法格式:CASE

WHEN条件1THEN表达式1

WHEN条件2THEN表达式2

……ELSE表达式END例:在STU_INFO中查询03学院学生的学号、姓名、性别,并将性别分别转换成“男生”、“女生”。 SELECTXH,XM,XBM,XBM= CASE'男'

WHENXBMTHEN'男生'

ELSE'女生'

END FROMSTU_INFO WHEREXSH='03'例:查询成绩表CS中选修了“数据库技术及应用”课程的学生的学号、姓名、5分制成绩 SELECT学号,姓名,’5分制成绩’=

CASE WHEN成绩<60THEN‘不及格’

WHEN成绩>=60AND成绩<70THEN‘及格’

WHEN成绩>=70AND成绩<80THEN‘中等’ WHEN成绩>=80AND成绩<90THEN‘良好’

WHEN成绩>=90THEN‘优秀’

END FROMCS4.3数据更新4.3.1插入数据4.3.2修改数据4.3.3删除数据4.2.1插入数据语句格式INSERTINTO<表名>[(<属性列1>[,<属性列2>]…)]VALUES(<常量1>[,<常量2>]…)功能将新元组插入指定表中。(1)插入单个元组例:INSERTINTO

stu_info(xh,xm,xbm)

VALUES('2005090209','王东方','男')如果基本表只有上述三个属性,则该句等价于:

INSERTINTO

stu_info

VALUES

('2005090209','王东方','男')(2)插入子查询结果例:在STU_INFO表中查询出应化041班的学生情况并存放在YINGHUA表中。

INSERTINTOyinghua

SELECTxh,xm,xbm,csrqFROMstu_infoWHEREbh='应化041'语句格式

INSERT[INTO]<表名>[(<属性列1>[,<属性列2>]…)]

子查询功能:将子查询结果插入指定表中,用以插入批量记录4.3.2修改数据

语句格式UPDATE<表名>SET<列名>=<表达式>[,<列名>=<表达式>,…][WHERE<条件>]

功能修改指定表中满足WHERE子句条件的元组(3)修改一个元组的值UPDATEstu_infoSETbh='材0169'WHERExh='2005090209'注意:对批量数据的修改,一定把将要修改的记录先查询出来,确认无误后再修改。(4)修改多个元组的值UPDATEgcourse

SETkcxf=2

(5)带子查询的修改语句将选修了高数的学生的成绩加10分UPDATExkSETkscj=kscj+10WHEREkch=(selectkchfromgcoursewherekm='高等数学')4.3.3删除数据语法格式

DELETEFROM<表名>[WHERE<条件>]功能删除指定表中满足WHERE子句条件的元组WHERE子句指定要删除的元组缺省表示要删除表中的所有元组(6)删除一个元组的值

DELETEFROMstu_info

WHERExh='2006050010'(7)删除多个元组的值

DELETEFROMstu_info

WHEREbh='应0203'

删除表中所有数据

DELETEFROMstu_info

(8)带子查询的删除语句

将信息学院学生的成绩全部删除DELETEFROMxkWHERE'12'=(SELECTxshFROMstu_info

WHEREstu_info.xh=xk.xh)注意:在日常工作中,操作删除语句,一定要先查询要删除的数据,确认无误后再删除。SELECT*

FROMxkWHERE'12'=(selectxshfromstu_infowherestu_info.xh=xk.xh)4.4数据定义4.4.1定义基本表4.4.2修改基本表4.4.3删除基本表4.4.4视图4.4.5索引4.4数据定义

SQL的数据定义语句操作对象操作方式创建删除修改表createtabledroptablealtertable视图createviewdropview索引createindexdropindex4.4.1定义基本表语句格式:

CREATETABLE<表名>

(<列名><数据类型>[<列级完整性约束条件>][,<列名><数据类型>[<列级完整性约束条件>]]…[,<表级完整性约束条件>])<表名>:所要定义的基本表的名字<列名>:组成该表的各个属性(列)<列级完整性约束条件>:涉及相应属性列的完整性约束条件<表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件例:建立一个学生表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。其中学号不能为空,值是唯一的,并且姓名取值也唯一。

CREATETABLEStudent

(

SnoVARCHAR(5)NOTNULLUNIQUE,SnameVARCHAR(20)UNIQUE,SsexVARCHAR(1),SageINT,SdeptVARCHAR(15))SnoSnameSsexSageSdept字符型长度为5不能为空值取值唯一字符型长度为20字符型长度为1整数字符型长度为15常用完整性约束主码约束:PRIMARYKEY唯一性约束:UNIQUE非空值约束:NOTNULL默认值约束:DEFAULT检查约束:

CHECK参照完整性约束:FOREIGNKEY…REFERENCE例:建立一个“学生选课”表SC,它由学号Sno、课程号Cno,修课成绩Grade组成,其中(Sno,Cno)为主码。CREATETABLESC(SnoVARCHAR(5),CnoVARCHAR(3),Gradeint,

Primarykey(Sno,Cno)

)例:创建表n_jobsCREATETABLEn_jobs(job_idsmallintIDENTITY(1,1)PRIMARYKEYCLUSTERED,job_descvarchar(50)NOTNULLDEFAULT('新部门'),

min_lvltinyintNOTNULLCHECK(min_lvl>=12),max_lvltinyintNOTNULLCHECK(max_lvl<=250))例:使用表达式((最低分+最高分)/2)生成中等分计算列。CREATETABLE得分(最低分int,

最高分int,

中等分AS(最低分+最高分)/2)4.4.2修改基本表语法格式:ALTERTABLE<表名>[ALTERCOLUMN<列名><新数据类型>][ADD<新列名><数据类型>[完整性约束]][DROP<完整性约束名>]<表名>:要修改的基本表ALTERCOLUMN

子句:要更改的列,要更改的列不能是数据类型为text,image,ntext或timestamp等列ADD子句:增加新列和新的完整性约束条件DROP子句:删除指定的完整性约束条件或列名1、添加列例:向学生表中添加入学时间列,其数据类型为日期型

ALTERTABLEstu_infoADDrxsjDATETIME可能破坏已有数据2、修改列例:将教师表的xb列改为smallint数据类型

ALTERTABLEgtechALTERCOLUMNxbsmallint3、删除列或约束例:将数据库表gtech中的xb列删除

ALTERTABLEgtechDROPCOLUMNxb例:删除学生姓名必须取唯一值的约束

ALTERTABLEstu_infoDROPUNIQUE(xm)4.4.3删除基本表语法格式:

DROPTABLE<表名>基本表定义一旦删除,表中的数据、表上的索引和视图都将自动被删除删除基本表时,系统会从数据字典中删去有关该基本表及其索引的描述。

例:删除EDU_D库中的表stu_info

DROPTABLE

stu_info4.4.4视图视图是关系数据库系统提供给用户以多种角度观察数据库中数据的重要机制。视图是从一个或多个基本表(或视图)导出的表,是个虚表。数据库只存放视图的定义,不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以,视图的数据跟随基本表的数据而变化。视图一旦被定义,就可以被查询、删除,修改及再定义一个新的视图等。视图包含一系列带有名称的列和行数据。这些数据来自定义视图的查询所引用的基表中,并且在引用视图时动态生成。1、定义视图(1)用企业管理器建立视图请同学们上机自己学习建立视图的方法。(2)用SQL语句建立视图

CREATEVIEW视图名

AS<子查询>[WITHCHECKOPTION]其中[WITHCHECKOPTION]表示对视图进行UPDATE、INSERT和DELETE操作时要保证更新、插入或删除的行满足视图定义中的条件表达式A、选择列定义视图可定义一个视图,该视图由表的部分列组成。下例中,视图MyView1包含了employees表中的三个列。

CREATEVIEW

MyView1AS

SELECTlname,fname

FROMemployee定义了视图后,可以和表一样,使用SELECT语句访问它。例如:SELECT*FROMMyView1B、基于列的表达式定义视图在定义视图时,除了使用基础表的列外,还可使用基本表的列的表达式,生成自己的列。下例中,视图MyView2的第四列即由表达式计算而来。

CREATEVIEW

MyView2(xh,xm,xbm,nl)ASSELECTxh,xm,xbm,year(getdate())-year(csrq)

FROMstu_infoC、选择行定义视图可定义一个视图,该视图由表的部分行组成。下例中,视图MyView3只包含employee表中姓名包含sh的行。

CREATEVIEW

MyView3ASSELECT*FROMemployeeWHEREfnameLIKE'%sh%'D、选择行和列可定义一个视图,该视图由表的部分行和列联合组成。下例中,视图MyView4只包括三列

CREATEVIEW

MyView4ASSELECTlname,fname,pub_idFROMemployeeWHEREfnameLIKE'%sh%'E、基于多个表定义视图CREATVIEW

查询学生选课情况AS

SELECTstu_info.xh,stu_info.xm,gcourse.kmFROMstu_info,gcourse,xkWHEREstu_info.xh=xk.xh

andxk.kch=gcourse.kch2、更新视图更新视图是指通过视图来插入(INSERT)、删除(DELETE)、修改(UPDATE)数据。由于视图是不实际存储数据的虚表,因此,对视图的更新最终要转换为对基本表的更新。例、在stu_info表创建信息学院学生的视图:

CREATEVIEWis_stuASSELECT*FROMstu_infoWHERExsh=’03’

例:现将视图is_stu中学号为1998031001的学生的学院代号改为“12”:UPDATEis_stuSETxsh=‘12’WHERExh=‘1998031001’WITHCHECKOPTION会使

温馨提示

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

评论

0/150

提交评论