数据库-第3章sql基础_第1页
数据库-第3章sql基础_第2页
数据库-第3章sql基础_第3页
数据库-第3章sql基础_第4页
数据库-第3章sql基础_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

《数据库原理及第3SQL基电子科技大学计算机星期用以促SQL数据库的数据表的视索用以促SQL:StructuredQueryLanguage,结构化查询语言,SQL名称有些不贴切,SQL决不仅仅是一个查询工具,还用于控制DBMS提供给用户的所有功能,包括:数据定义(Daadition):SQL可用于定义被存放数据的结构和组织,以数据检索(Daaetrieval:S能使用户或应用程序从数据库中检索数据并数据(Daampulaio):用户或应用程序通过SQ更改数据库,如存取控制(Accessntrol:SL可用来限制用户检索,增加和修改数据的所被。数据共享(Daasharing:SQ可用于调整数据让并发用户共享,以保证用数据完整性(Daainegrity:SL用以促SQL用以促基本表模文件文件基本表基本表基本表视图视图 综合统集DDL、DML、DCL高度非过无需了解存取路径,存取路径的选择以及SQL语句的操作过程由系统自动完成用以促 以同一种语法结构提供两种使用方既是自含式语言,又是嵌入式语语言简洁,易学易用,功能只需9个动DDL:CREATE、DROP、DML:SELECT、INSERT、UPDATE、DCL:GRANT、用以促 SQL2 数据库的数据表的视索用以促SQLSERVER使用一组操作系统文件数据库。所有数第一类是主文扩展名为*.mdf第二是次要文件,也称从文件扩展名为*.ndf,含有主文件以外的所有数据次要文件的作用:提高数据效率第三类是事务扩展名为*.ldf,包含用于恢复数据库的日志信息每个数据库都必须至少有一个日志文件用以促用CREATEDATABASE语句,语法形式如下:CREATEDATABASE据库[<On 一个数据库可建多个文件,主文件是会有一个,默认在主文([Name使用[Filename限定的NTServer文件名],[Size=文件的初始大小],[MaxSize=最大的文件尺寸],[FileGrowth件量])…][<LogOn>([Name使用[Filename限定的NTServer文件名],[Size=文件的初始大小],[FileGrowth统的用以促简单示例如果要使用缺省参数创建医院信息系统数据库HIS使用如下命令:CreateDatabase用以促CREATEDATABASEON(NAME=FILENAME='d:\data\HIS_DATA1.mdf',SIZE=10,MAXSIZE=1500,FILEGROWTH=5(NAME=FILENAME'd:\data\HIS_DATA2.mdf',SIZE=10,MAXSIZE=500,FILEGROWTH=5)LOG(NAME=FILENAME='d:\data\HIS_LOG.ldf',SIZE=5MB,MAXSIZE=FILEGROWTH=5MB用以促可以对数据库原始定义进行更改,更改包括扩充数据库的数据或事务日志空间添加或删除数据和事务日志文件更改数据库的配置设置更改数据库名称更改数据库的所有者等用以促AlterDatabase语法如ALTERDATABASE[<Add(<Name使用[Filename限定的NTServer文件名],[Size=文件的初始大小],[MaxSize=最大的文件尺寸],[FileGrowth件量])…][<ModifyFile>(<Name使用[Filename限定的NTServer文件名],[Size=文件的初始大小], =最大的文件尺寸],[FileGrowth=系统的扩展文件量])…][<RemoveFile>使用文件的逻辑名>,…][<AddLogFile>(<Name使用[Filename限定的NTServer文件名],[Size=文件的初始大小],[MaxSize大的[FileGrowth统的用以促II的最大文件尺寸为100,并且要删除医院信息系统数据库A。ALTERDATABASEAdd(NAME=FILENAME='d:\data\HIS_DATA3.mdf',SIZE=10,MAXSIZE=1000,FILEGROWTH=5Modify(NAME=FILENAME='d:\data\HIS_DATA1.mdf',SIZE=10,MAXSIZE=1500,FILEGROWTH=5RemoveFile用以促当不再需要数据库,或者数据库数据被移到其他数据库或服务器时,即可删除该数据库。数据库删除之后,该数据库的文件及其数据都从服务器的磁盘删除。当数据库被删除,它即被删除,并且不能进行检索,除非使用以前的备份。不能删除系统数据库msdb,master,model和tempdb用以促删除数据库令格式为示例DROPDATABASE用以促创建Students2个数据文件,初始大小分别为1MB,最大大小分别为和100MB,文2个日志文件,起始大小分别为 名称自定用以促SQLSQLServer的数据类型。用以促11SQL2345视6索数据类功能及特固定长度字符串,长度范围是 000,默认值为1固定长度Unicode字符串,长度范围是 000,默认值为1变长字符串,长度范围是 000,如省略n,则默认最大长度是包含个字符的可变长度Uniod字符数据,的取值介于与00之间;如省略,则默认长度是。变长字符数据,最多达到31-字节,行中指向第一个数据页的指针,实际的文本是以树页面。SQLSQLServer的数据类型用以促SQLServer的数据类型。用以促数据类功能及特0~n用decimal(n)表示decimal(n,0)果用不带参数的decimal时,系统默认表示decimal(38,0),但是,这时SQLServer最度四字节二进制整数,范围是-231~231-1浮点数,n是尾数位数,范围是1~53。如果n为1~24则指定单(4字节),如果n为25~53则指定双精度(8字节);注意:可以使用loa本身表示Float(53)。数据类功能及特等价于Float(24),Real列有7四字节日期和时间,日期范围是~-6-2079;时间精度是自午夜开始的分钟之内。 变长二进制数据,长度从 000字节,如省略n,则默认值是变长二进制数据,用于图形数据,最长为231-1字节,行中示例:在HIS数据库中,建立药品基本信息表Medicine如示例:在HIS数据库中,建立药品基本信息表Medicine如下CREATETABLEMedicineMnoVARCHAR(10)PRIMARYKEY,MnameVARCHAR(50)NOTNULL,MpriceDECIMAL(18,2)NOTNULL,MunitVARCHAR(10)DEFAULT,MtypeVARCHAR(10))↑↑字符 字符↑↑长度为10长度为502位小数长度为10长度为 用以促CREATETABLE基表名…|PRIMARYKEY|UNIQUE>表名形式为:[数据库名[.拥有者.]]表用以促常用完整性约主码约束 PRIMARY非空值约束:NOT参照完整性约束:Foreign含有主键或者唯一性约束列的表为主表(或父表),含有外键的表为从表(或子表)。参照完整性:外键约束指定外键的列与主表中主键或者唯一性约束列相关联,也就是说,外键的每一个值至少能在主表的主键或唯一性约束列中找到一个相同的列值。外键是在从表上定义,当修改或删除主表的记录,或者在从表上修改或数据时,由数据库管理系统自动进行检查。用以促CREATETABLERecipeMaster(RnoVARCHAR(10)PRIMARYKEYPnoVARCHAR(10)NOTNULL,DnoVARCHAR(10)NOTNULL,DGnoVARCHAR(10),Rdatetime)CREATETABLERecipeDetail(Rnovarchar(10),Mnovarchar(10),Mamountdecimal(18,0),CONSTRAINTRnofkFOREIGNKEY(Rno)REFERENCESRecipeMaster(Rno)CONSTRAINTmnofkFOREIGNKEY(Mno)REFERENCESmedicine(Mno)用以促语法格式ALTERTABLE基表名ALTERCOLUMN列名据类ADD类型[DROP<列名>],DROP<约束规则<表名>:要修改的基本ADD子句:增加DROPALTER用以促修改表示例:在医院信息系统的数据库中,如果医院的某些药品价钱随着市场供求在不断调整,不同阶段的处方药品价钱不一样,因此在处方明细表RecipeDetail需要增加一列药品单价。ALTERTABLEADDPriceDecimal(5,3注意,使用ALTERTABLE语句在表中增加列,如果新增列定义为NOTNULL列,必须用Default子句指定缺省值,否则,没有指定缺省值,当给表增加新列时,表中原有记录的新增列将自动为NULL,这样就会违背NOTNULL的定义而出错。用以促DROPTABLE表名RESTRICT:拥有表的对象(Check、ForeignKey;CASCADE:级联删除表的所有对使用ALTERTABLE语句还可以从表中删除已有的列,但删除列之前,删除表示例:删除RecipeMaster表DROPTABLE用以促用DDL学生表课程表 ame,Cpno,Ccredit),Cpno为 o,Grade), 和o组合为主 用以促SQL简数据库的操数据表的操4 表中数据的操视索用以促语法格SELECT[ALL|DISTINCT]标列表达式标列表达式[INSERTINTO表名FROM名或视图名名或WHERE表达式GROUPBY1>HAVING条件表[ORDERBY<列名2>[ASC|DESC]];SELECTFROM子句WHEREGROUPBYHAVING BY用以促SELECT子句中的<查询列表 要查询哪些列的数据FROM子句的<基表名|视图名 要查找的数据源最简单的示例:查询医生基本信息表中所有医生的所有信息。SELECT*FROMDnoDname DageDdeptno----------------------------------------------------140 男 医副医罗医 医示示例:列查询显示指定的列,列的显示顺序与SELECT子句后指定的列顺序一致,这与关系代数的投影操作功能一致。查询显示各列的标题可以是列名,也可以改变查询显示列的标题。SELECTDname医 ,Dlevel专 FROM医 专 ------------------------------------------- 医 医 邓英 医 杨 医 用以促关键字DISTINCT是合并查询结果中的重复记录,当没有DISTINCT时,表示显示所有记录。SELECTDISTINCTDdeptnoFROM条件查在SELECT命令中使用WHEREWHERE运算类别具体含义比较运=等<>或不等<小<=或小于等>大>=或大于等逻辑运逻辑非,用于选择不满足条件逻辑与,用于选择同时满足多个条件的逻辑或,用于选择满足任意一个条件的集合运属于集合(或查询返回值构成的集合NOT不属于集合(或查询返回值构成的集合特殊运大于或等于A且小于或等于符模式匹配,“%”表示匹配任意多个字符,“-”匹配一个用以促横 优先级相同,在具体的运算表达式中在左边者优先用以促SELECT*FROMDoctorWHEREDsex=用以促优先级=、<>或!=、<、<=或!>、>、>=或IN,NOTIN,BETWEENAANDB,LIKE,NOTLIKE,ISNULL,ISNOTNULL DnameDsex ---------------------------------------------------------医男副医杨男副医百分号)代表百分号)代表任意长度(长度可以为0)的字例:a%b表示以a开头,以b结尾的任意长度的字符串。如ab满足该匹配_下横线)代表任意单个例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串查 为副的医生信Select*FromDoctorWhereDlevelLike Dname ------------------------------------------------------------------------------------------用以促查 小于或等于40岁的男医生信SELECT*FROMWHEREDsex=andDnameDsexDdeptno用以促男副医杨男副医男男副条件查询示例:包含查询查询部条件查询示例:包含查询查询部 为102,103和201的医生信SELECT*FROMWHEREDDdeptnoINDnoDsexDdeptno请用OR条件表示用以促男男副女女使用ORDERBY子句查通常在查询时,需要按一定顺序显示,可以使用ORDERBY子句升序或降序方式,排序方式的先后顺序与ORDERBY序一致。即首先由ORDERB后面的第一列确定顺序,其次由第二在SQLSERVER中,空用以促用以促用以促用以促用以促按照升序查询男医生信SELECT*FROMDoctorWHEREDsex='男'ORDERBYDageASCDno Ddeptno 男男副男副按部 升序而按降序查询医生SELECT*FROMORDERBYDdeptnoASC Dname 息o 男 男女男 女在药品信息表中,查询药品单价提高15%后超过30在药品信息表中,查询药品单价提高15%后超过30SELECT,Mname品名,Mprice价Mprice*1.15调整单价,Munit单位,Mtype类FROMWHERE药价单 类-------------------------------------------------------------------------------------------用以促带表达式的查在SQL查询中,可以使用由加(+)、减(-)、乘(*)、除(/)术运算符组成表达式。它们之间的优先顺序和普通的算术运算的优先顺序一致,即乘、除运算优先于加、减运算,表达式的运算遵循左结合,如果有括号,则优先处除FROM子句外,其他的查询子句均可使用表达式用以促27.1000盒西26.9000盒西L-谷氨酰胺26.9000盒西胃立康26.5000盒西依诺沙星注46.0000支西带函数的统计查如果函数加上选项ALL,表示对一组记录值进行计算,重复记录重复计算,但不包括NULL记录。如果加上选项DISTINCT,表示只计算不同记录值,不计算重复记录和空行,但该选项对COUNT(*)不起作用,缺省为ALL。格式为:<函数名 表达式用以查查询SELECTCOUNT(Dno)人FROM用以促人---------------------5分组查询:GROUPBY子 BY子句主要是完成将查询结果当WHERE子句和GROUPBY子句一起使用查询示例:分组统按部门统计不同部门的医生人SELECTDdeptno部门编码,COUFROMDoctorGROPBY组时,WHERE子句必须在GROUPBY子条件的数据行,然后按GROUPBYNT(Dno)人部门编------------------------- 21用以促1分组查询:HAVING当需要选出符合条件的分组统计值时,在GROUPBY子句之后,可使用HAVING子句与WHERE子句区别是:WHERE子句作用在分组之前选择符合条件的记录,而HAVING子句是作用在分组之后选择符合条件的分组结果。HAVING子句必须在含有GROUPBY用以促在医生在医生基本信息表中,按部门统计男医生的平 不超过40岁的部,并按平 升序显示SELECTDdeptno部 ,AVG(Dage)平FROMDoctorWHEREDsex='男'GROUPBYDdeptnoHAVINGORDERBY部平------------------------------ 用以促男医男副医罗女主治医邓英女医杨男副医多表间的连接运算遵循笛卡尔规则,但“笛卡尔”查询会产生大量的无意义的数据记录。因此,在进行连接时加上一些限制条件,使产生的数据记录是笛卡尔连接结果集的子集。进行连接运算的表,必须存在着有某种关系的公共列,连接运算实际是比较各表的公共列值,如果满足条件的连接产生组合输出行。用以促2424执行过程:嵌套循环 (NESTED-果表中一个ABCBE53678ab表2全部查找完后,再找表1元组,然后再从头开始扫描表2, 一查找满足连接条件的元组,找到ACE53678用以促格式SELECT列表>INTO新表FROM基表名1|视图名11基表名2|视图名22WHERE1.列名1>较2.列名2>……[GROUPBY<分组条件>]HAVING组后ORDERBY排序ASC|DESC为了避免相同列名出现在同一查询的多个表(或视图)起二义性,则需要在列的前面加上限定前缀,可以使用表名或表的别名作为前缀。表名AS别名用以促内连要求参与连接运算的表(或视图),满足给定的用以促等值连 MnoMamount MpriceMunit---------------------------------------------------------------------------------------------------1282317314418 314418替硝唑葡萄糖针11.5000 西1282317316910 316910依诺沙星注射液46.0000 西1282872315501 315501阿奇霉素胶 21.0000 西1282872317660 317660蒲公英胶 25.5000 中成1283998315189 315189心胃止痛胶 26.9000 西1283998316792 316792雷尼替丁胶囊 西1284041315722 315722谷氨酰胺胶 26.9000 西1284041315805 315805雷尼替丁胶囊 西1284041315977 315977胃立康 26.5000 西1284256314172 314172卡托普利 0.0370 西1458878314941 314941肾石通颗 27.1000 西用以促自然连在连接查询中,如果要求连接条件列的列名相同,并且查询结果列不重复,称这样的连接为自然连接。SELECTRno,Pno,D.Dno,Dname,Dsex,Dage,Ddeptno,DlevelFROMRecipeMasterR,DoctorDWHERE PnoDno DsexDageDdeptno------------------------------------------------------------------------------------------1282317男医1282872男副医1283998杨男副医1284041杨男副医1284256女医学以1458878罗女主治医用以促部部门名部----------------------------------------门诊 XX医消化内 门诊内 门诊门内三诊 门诊社区医疗 XX医社区医疗用以促自连SELECT语句不但支持不同表之间的连接,而且支持表自身的连接,称这样的连接为自连接。可以把自连接理解为同一张表(或视图) SELECTFirst.DeptName部门名称,Second.DeptName FROMDeptFirst,DeptSecondWHERE查询每一门课的间接先修课(即先修课的先修课 FROMCourseFIRST,CourseSECONDWHEREFIRST.Cpno= 用以促外连在某些应用中,两张表的连接查询,要输出一张表的所有记录,另外一张表输出满足连接条件的记录,如果没有满足条件的记录,则用NULL匹配输出,称这种连接查询为外连接。左连接(LEFTOUTERJOIN):输出左表的所有记录相关列值,右右连接(RIGHTOUTEROUT):输出右表的所有记录相关列值,左全外连接(FULLOUTERJOIN用以促SQLSERVER数据库系统令格式INTOFROM1|视图1>AS1{<LEFT|RIGHT|FULL>[OUTER]<基表2|视图2>AS2ON<连接条件>用以促外连接示例:SQLSERVER在医院部门表中,查询医院的名称和该部门医生SELECTDeptName名称,DNameFROMDeptleftouterjoinDoctorONDept.DeptNo=Doctor.Ddeptno部门名 医---------------------------------门诊 内 罗社区医疗 家庭病床病 邓英用以促ORACLE数据库系统令格式SELECT<查询列表>INTOFROM<基表名1|视图名1>[别名1][,<基表名2|视图名22WHERE{<别名1.列名1别名2.列名用以促外连接示例:ORACLE在医院部门表中,查询医院的名称和该部门医生SELECTDeptNameDNameFROMDept,WHEREDept.DeptNo部门名 医---------------------------------门诊 内 罗社区医疗 家庭病床病 邓英用以促在查询的条件子句含有SELECT查询子外层的查询被称为主查询(或父查询内层的SELECT嵌套查询可分为不相关子查询和相关子查询用以促SELECT<查询列表>INTO新表FROM|视图名WHERE列表较运算符>(SELECT<查询列>FROM<基表名|名WHERE达式GROUPBY分组内容>]HAVING内条GROUPBY分组内容>][HAVING<组内条件>]ORDERBY排序ASC|DESC用以促不相关子查执行顺序从嵌套层次最内层子查询开始执行,每个子查询在其直接外查询处理之前执行,查询返回结果作为父查询的查询条件,最后执行最外嵌套查询示例:不相关子查询在医院数据库中,查询与医生关系患者SELECTPnameFROMWHEREPnoIN(SELECTPnoFROMWHEREDnoIN(SELECTDnoFROMWHEREDname=‘)用以促IN和NOTIN运算IN表示某元素值是属于集合,而NOTIN则表示元嵌套查询示例:IN和NOTIN运算在医院数据库中,查询所开处方不包含药品“胃立康片”的医生SELECTDnameFROMdoctorWHEREDnoIN(SELECTDnoFROMWHERERnoIN(SELECTRnoFROMWHEREMnoNOT(SELECTMnoFROMMedicineWHEREMname='胃立))用以促以以ANY和ALL在ANY和ALL一般需要=,!=,>,<,<=或>=等比学嵌套查询示例:ANY和ALL运算在医院数据库中,查询比某个女医生都大的男医生和SELECTDname,DageFROMDoctorWHEREDsexANDDage>ANY(SELECTFROMDoctorSELECTDname,DageFROMDoctorWHEREDsexANDDageSELECTFROMDoctor用以促相关子查语法如下FROM基表名1|视图名1>1WHERE<列名或列表达式><比较运SELECT查询列FROM基表名2|视图名2名2WHERE<表名1<比较运算符表名2.列名>[GROUPBY<分组内容>]HAVING组内用以促查询102部门中大于部门医生平均的医生和SELECTDname,DageFROMDoctorWHEREDdeptnoANDDage>(SELECTFROMWHERE用以促EXISTS与NOTEXISTS通常与相关子查询相连。如果EXISTS运算符限定的子查询有查询记录返回,那么该条件为真,否则为假。NOTEXISTS不用指定匹配的列值,而使用*作为选择列表EXISTS,ANY,ALL只能用于嵌套查询,而 IN也可用于集合EXISTS一般只用用以促嵌套查询在医院数据库中,查询给为“刘景”的患者开过处方的医生。解法一:相关子查询SELECTDno医生,Dname,Dsex,Dage,DlevelFROMDoctorWHEREEXISTS(SELECT*FROMWHEREANDEXISTS(SELECT*FROMWHEREPatient.Pname='刘景'AND))用以促嵌套查询示。SELECTDno医生,Dname,Dsex,Dage,DlevelFROMDoctorWHEREDoctor.DnoIN(SELECTFROMRecipeMasterWHEREIN(SELECTFROMWHEREPatient.Pname='刘景))用以促嵌套查询在医院数据库中,查询给为“刘景”的患者开过处方的医生。解法三:连接查询SELECTD.Dno医生,Dname,Dsex,Dage,DlevelFROMDoctorD,RecipeMasterR,PatientPWHERED.Dno=R.DnoANDR.Pno=P.PnoANDPname用以促联合查询UNION运算符就是将多个查询结果集合并返回,当两个结果集有相同记录时,则合并成唯一记录返回。语法形式SELECT<查询列表[WHERE<表达式>][HAVING<组内条件>]UNION[ALL]SELECT<查询列表[WHERE<表达式>]GROUPBY分组内容…[HAVING<组内条件ORDERBY排序列的序号ASC|DESC用以促联合查询在医院数据库中,为了提高系统处理效率,在要定期对患者的信息归档,假定患者归档信息表为DiagnosisBak,如果医生要查询患者“刘景”的近期和历史信息,以便分析患者的病因。SELECTDGno号,Dname医生,Symptom症状,Diagnosis诊FROMDiagnosisBakDiagB,DoctorDoc,PatientWHEREDiagB.Dno=Doc.DnoANDP.Pno=DiaB.PnoANDP.Pname='刘景'SELECTDGno,Dname,Symptom,Diagnosis,DiagDateTimeFROMDiagnosisDiag,DoctorDoc,PatientPWHEREDiag.Dno=Doc.DnoANDP.Pno=DiaB.PnoANDP.Pname=用以促当UNION运算符连接多个SELECT语句时,只能在最后SELECT查询表达式之后指定ORDERBY子句,但ORDERBY子句后面不能列名,仅能相应列在查询列表中的顺序号。指定多个SELECT查询语句的联合时,这些查询结果集的类型必须兼容,即各SELECT查询语句的输出的列数相同,且在对应位置的数据类型相同或兼容,输出结果集的列名与第一个SELECT语句的查询列表相同。当指定UNION运算符时,如果在结果集中存在重复记录,一般是将重复记录合并输出。但是,如果指定为UNIONAll,则保留结果集的重复记录。SELECT语句的查询列表中不能出现如SQLSERVER的TEXEXT,BINARY,用以促用VALUES,格式为INSERTINTO基表(<列名表>)(<值表<基表名>是指要数据的目标表<列名表>是指定目标表的目标列,该参数可以省略;如果省略列名表,表示向目标表所有列数据;<值表>是指定具体要的值用以促数据示例INTODoctor(Dno,Dname,Dsex,Dage,DDeptNO,Dlevel)或 VALUES('145','王军','男',28,'101','医师用以促用SELECT,格式为INSERTINTO基表(<列名<SELECT<SELECT子句>可以使用前面介绍的所有SELECT查询语句,但要保证<SELECT子句>中选择的列与<列名表>中的列一一对应,且数据类型和长度兼容,但列名可以不同,只要求位置相对应。用以促数据示例:(1)建立一个新表,包含医生编码、日期和患者数量CREATETABLEDiagNum(DnoVARCHAR(10)NOTPatientNumINT)(2)根据主处方统计每个医生每天的数量INTODiagNum(Dno,DiagDate,PatientNum)SELECTDno,Rdatetime,COUNT(DGno)FROMRecipeMasterGROUPBYDno,Rdatetime用以促UPDATE[WHERE<条件表达式>]数据修改UPDATEWHEREPno='423'用以促数据删除语法格式DELETEFROM表名>数据删除示在医院数据库中,将为“423”的患者从系统中删除DELETEFROMPatientWHEREPno='423'用以促SQL数据库的数据表的5 视 索用以促 视图的特点虚表,是从一个或几个基本表(或视图)导出视图优点限制用户直接存取基表的某些列或记录,从而为基表带来附加的安全性用以促 CREATEVIEW<视图名>[(<列名>[,<列名AS[WITHCHECK省略列名时,则由子查询中SELECT»某个目标列是集函数或列表达»目标列为»多表连接时选出了几个同名列作为视图的字»需要在视图中为某个列启用新的更合适的名DBMS执行CREATEVIEW语句时只是把视图的定义存入数据字典,并不执行其中的子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDERBY子句和WITHCHECKOPTION用于限定数据的改INSERT和UPDATE时,如果修改的数据,不符合WITHCHECKOPTION的限制,是会报错,不被修改的。用以促 创建视图示例在医院数据库中,假设要为消化内科的患者信息建立一个视图CREATEVIEWDiagViewFROMDiagnosisDiag,DoctorDoc,PatientPWHEREDiag.Dno=Doc.DnoANDP.Pno=Diag.PnoANDDoc.DdeptNoIN(SELECTDeptNoFROMDept用以促 DROPVIEW删除视图DiagViewDROPVIEW用以促 SQL语言标准规定:只能对直接定义在一个基表上的视图进行、修改、删除等更新操作,对定义在多个基表或其它视图之上的视图,数据库管理系统不允许进行更新操作。CREATEVIEWDiagViewSELECTDGno,P.Pno,Pname,Doc.Dno,Dname,FROMDiagnosisDiag,DoctorDoc,PatientPWHEREDiag.Dno=Doc.DnoANDP.Pno=Diag.Pno用以促 更新视尽管视图数据只来源于一个基表,如果SELECT语句含有GROUPBY、 CREATEVIEWDiagNum(Dno,DiagDate,PatientNum)FROMRecipeMasterGROUPBY用以促 如果视图中包含由表达式计算的列,则不允许进行更新操作例如:在药品信息表中,假如为药品单价提高15%后建立的药品价格视图,则不能修改该视图中的药品单价。CREATEVIEWMedicineNewPrice(Mno,Mname,Newprice,Munit,Mtype)SELECTMno,Mname,Mprice*1.15,Munit,MtypeFROMMedicineWHERE用以促 更新视尽管视图满足上述3个条件,如果该视图中没有包含基表的所有NOTNULL列,原因是,对视图的实际是对基表的操作,当视图没有包含基表的所有NOTNULL列时,在向视图进行时,系统默认为NULL,这与定义中的NOTNULLL相,因此系统就会并给出错误提示。用以促 视图能够简化用户的操视图使用户能以多种角度看待同一数视图机制能使不同用户以不同方式看待同一数据,适应数据库共享的需视图能够对数据提供安全保对不同用户定义不同视图,使每个用户只能看到他看到的数通过WITHCHECKOPTION对关键数据定义操作时间限利用视图可以清晰地表达查复杂查询分步实用以促 由于对视图的更新是有条件的,因此应用程序中修改数据的语句可能仍会因基本表结构的改变而改变例如:数据库逻辑结构发生改变,学生关系Sage,Sdept)“垂直”地分成两个基本表:SX(Sno,Sname,Sage)SY(Sno,Ssex,通过建立一个视图CREATEVIEWStudent(Sno,Sname,Ssex,Sage,Sdept)SELECTFROMSX,SYWHERE用以促SQL简数据库的操数据表的操表中数据的操视6 索用以促 索引的概数据库中的索引是一个表中所包含的值的列表,其中注明了表中包含各个值的记录所在的位置。索引通常采用采用B树或B数据库系统检索数据时,根据索引提供的信息,可以直接找到与该条件临近的数据区,而不是一条一条记录地比较,因此可提高查询速度。索引示用以促 索引的概索引由DBMS实现,属于内模式范建立索DBA或表的属主(即建立表的人)根据有些DBMS自动建立以下列上的索引:PRIMARYKEY和索DBMS自动完使用索DBMS用以促 聚簇索建立聚簇索引后,基表

温馨提示

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

评论

0/150

提交评论