购买

¥ 30.0

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 SQL-Server-2005数据库实践教程第1章-关系数据库标准语言SQL

SQL-Server-2005数据库实践教程第1章-关系数据库标准语言SQL.ppt

SQL-Server-2005数据库实践教程第1章-关系数据库…

烟雨梦兮
2018-10-14 0人阅读 举报 0 0 暂无简介

简介:本文档为《SQL-Server-2005数据库实践教程第1章-关系数据库标准语言SQLppt》,可适用于IT/计算机领域

SQLServer数据库实践教程开发与设计篇主编:钱哨中国水利水电出版社第章关系数据库标准语言SQL课程目标了解SQL语言掌握数据定义语言的使用掌握数据操纵语言的使用掌握数据控制语言的使用了解视图掌握数据查询语言的使用SQL概述SQL:(StructuredQueryLanguage结构化查询化语言)不仅仅具有查询功能。它是一个通用的、功能极强的关系数据库操作语言。年Boyce和Chamberlin提出首先在IBM公司的关系数据库系统SystemR上实现年月ANSI(美国国家标准局)的数据库委员会批准了SQL作为关系数据库语言的美国标准年ISO(国际标准化组织)也通过了这一标准。目前的大中型数据库基本都支持于年发布的SQL标准SQL概述(续)标准化有关组织ANSI(AmericanNaturalStandardInstitute)ISO(InternationalOrganizationforStandardization)有关标准SQL“数据库语言SQL”SQL“具有完整性增强的数据库语言SQL”增加了对完整性约束的支持SQL“数据库语言SQL”是SQL的超集增加了许多新特性如新的数据类型更丰富的数据操作更强的完整性、安全性支持等。SQL正在讨论中的新的标准将增加对面向对象模型的支持SQL对关系数据库模式的支持用户用户用户视图V视图V用户基本表B基本表B基本表B基本表B存储文件S存储文件S存储文件S存储文件SSQL用户VIEWBaseTableStoredfileSQL数据库体系结构SQL的特点面向集合操作一次一集合高度非过程化用户只需提出“做什么”无须告诉“怎么做”不必了解存取路径集数据定义、数据查询和数据控制功能于一体统一语法结构的两种使用方式简单易学SQL语言的动词SQL语言书写注意事项大小写不敏感sql语句中出现的所有单双引号逗号分号必须为半角字符。字符常量要用引号引起数字常量不用加引号不同具体RDBMS中命令可能有差异以该RDBMS命令手册为准物理数据库文件和文件组SQLServer将数据库映射为一组操作系统文件。数据和日志信息从不混合在相同的文件中而且各文件仅在一个数据库中使用。文件组是命名的文件集合用于帮助数据布局和管理任务例如备份和还原操作。、数据库文件SQLServer数据库具有三种类型的文件:主数据文件主数据文件是数据库的起点指向数据库中的其性。使用关系代数的方法合并数据显示销售商的基本信息和其购买货物的基本情况usecpxsgoselect销售商表*,产品销售表*from产品销售表,销售商表where产品销售表销售商号=销售商表销售商号orderby产品销售表销售商号或者select销售商表*,产品销售表*from产品销售表innerjoin销售商表on产品销售表销售商号=销售商表销售商号orderby产品销售表销售商号一个例子:问题:查询是否正确呢?丢了什么?使用关系代数的方法合并数据三、外连接左外连接右外连接注意:外连接不仅仅会将两个数据集中相互重叠的属性涉及的元组抽出而且会将重叠部分以外非匹配的那些元组一并纳入到集合中来。使用关系代数的方法合并数据基本语法Select需要查询的属性项目FromtableLeftright(outer)jointableOntablecolumn=tablecolumnWhere…这里面的outer是可以省略的使用关系代数的方法合并数据左右外连接的区别:看一个例子:SELECT销售商表*,产品销售表*FROM产品销售表RIGHTOUTERJOIN销售商表ON产品销售表销售商号=销售商表销售商号换成为左和右之后有什么不同呢?请完成练习后得出结论。使用关系代数的方法合并数据左右外连接的区别:从本质上说左右外连接没有任何区别!左和右仅仅是人为的感觉。所谓左和右用于指定无论是否具有匹配的行都要保留全部行的那个表称作为“外连接表”通常我们将用户定义的第一个表习惯性称为“外连接表”也称作是“驱动表”所以“左外连接”就成为经常使用的原因了。这里的左和右指的是表在SQL语句中的位置而与图形化工具所指定的表的位置毫无关系!使用关系代数的方法合并数据四、通过WHERE语句进行“左右外连接”●左外连接:*=●右外连接:=*例如:SELECT销售商表*,产品销售表*FROM销售商表,产品销售表where销售商表销售商号*=产品销售表销售商号使用关系代数的方法合并数据五、自身连接自身连接:是指同一个表中自己连接自己相当于一种自反关系或者是递归关系下面以家庭数据库为例子说明:createtablemarriage(marriageidintprimarykeyidentity,husbandidint,wifeidint,dateweddingsmalldatetime,datedivorcesmalldatetime,foreignkey(husbandid)referencesperson(personid),foreignkey(wifeid)referencesperson(personid))createtableperson(personidintprimarykeyidentity,personnamechar(),fatheridint,motheridint,sexchar()default'男',marriagedchar(),datebirthsmalldatetime,datedeathsmalldatetime,foreignkey(fatherid)referencesperson(personid),foreignkey(motherid)referencesperson(personid),check(sexin('男','女')))具体关系中请你完成任务:、查找“吴芳”的孩子有谁?、请查询一下每个人的父亲和母亲是谁?、那些人是双胞胎?、每个人的外公和外婆是谁、每位母亲生育多少孩子?每个人的母亲是谁?usefamilygoselectpersonpersonidas编号,personpersonnameas姓名,motherpersonnameas母亲姓名frompersoninnerjoinpersonmotheronpersonmotherid=motherpersonid请查询一下每个人的父亲和母亲是谁?selectpersonpersonnameas姓名,personsexas性别,fatherpersonnameas父亲姓名,motherpersonnameas母亲姓名frompersonleftouterjoinpersonfatheronpersonfatherid=fatherpersonidleftouterjoinpersonmotheronpersonmotherid=motherpersonidselectpersonpersonnameas姓名,personsexas性别,twinpersonnameas双胞胎姓名,persondatebirthas出生日期frompersoninnerjoinpersontwinontwinpersonid<>personpersonidandpersondatebirth=twindatebirthandpersonmotherid=twinmotheridwherepersondatebirthisnot每个人的外公和外婆是谁(每个人的母亲是谁母亲的父母是谁)selectpersonpersonnameas姓名,personsexas性别,grandfatherpersonnameas外公姓名,grandmotherpersonnameas外婆姓名frompersonleftouterjoinpersonmotheronpersonmotherid=motherpersonidleftouterjoinpersongrandfatheronmotherfatherid=grandfatherpersonidleftouterjoinpersongrandmotheronmothermotherid=grandmotherpersonidselectmepersonnameas姓名,mesexas性别,grandfatherpersonnameas外公姓名,grandmotherpersonnameas外婆姓名frompersonme,personmother,persongrandfather,persongrandmotherwherememotherid=motherpersonidandmotherfatherid=grandfatherpersonidandmothermotherid=grandmotherpersonid离异者姓名,以及其原配姓名和再婚后配偶姓名及其原配子女和再婚子女情况selectpersonnamefrompersonwherepersonidin(selecthusbandidfrommarriagegroupbyhusbandidhavingcount(husbandid)>)orpersonidin(selectwifeidfrommarriagegroupbywifeidhavingcount(wifeid)>)交叉与无限制连接交叉无限制连接用于对两张源表进行纯粹的关系代数乘运算。人们将这种乘积的结果叫做“笛卡儿乘积”基本公式:SelectSomethingFromTableACrossJoinTableB关系代数之并操作UNION的使用例:SELECT*FROMStudentWHERESdept=‘CS’UNIONSELECT*FROMStudentWHERESage<=并操作不同于连接操作。并操作是集合的加法而连接操作是乘法。并操作必须遵循的原则是:列的名字必须由第一个SELECT语句选择列决定。每个SELECT语句选择的列数目必须相同在默认情况下SELECT语句将去掉重复的行如果希望出现重复的行必须加上SELECTALL关系代数之交操作intersect的使用例:SELECTcnoFROMScoreWHERESno=''intersectSELECTcnoFROMScoreWHEREsno=''关系代数之差与除(一)差差操作通常称之为“集合差”一般都是采用notin谓词来进行这种查询应该采用嵌套的形式来进行。(二)除除操作在SQLSEVER中并没有特定的谓词来表示。通常是采用复杂的SQL查询来完成的。例如:查询哪一些“学生通过了所有的课程?”就是在关系代数中典型的关系除操作。selectscsno,snamefromstudentjoinsconscsno=studentsnojoincourseonsccno=coursecnowherescdegree>=groupbyscsno,snamehavingcount(distinctsccno)=(selectcount(coursecno)fromcourse)关系代数之除第一个问题谁选修了王萍老师的全部课程但没有选修其他任何老师的课程呢?第二个问题谁不仅选修了王萍老师的全部课程还可能选修了其他任何老师的课程呢?selectscoresno,snamefromstudentjoinscoreonscoresno=studentsnojoincourseonscorecno=coursecnojointeacheronteachertno=coursetnowhereteachername='王萍'groupbyscoresno,snamehavingcount(distinctscorecno)=(selectcount(coursecno)fromcoursewherecoursetno=(selecttnofromteacherwhereteachername='王萍'))=======================================================selectdistinctstudentwpsno,snamefrom(selectscoresno,snamefromstudentjoinscoreonscoresno=studentsnojoincourseonscorecno=coursecnojointeacheronteachertno=coursetnowhereteachername='王萍'groupbyscoresno,snamehavingcount(distinctscorecno)=(selectcount(distinctcoursecno)fromcoursewherecoursetno=(selecttnofromteacherwhereteachername='王萍')))asstudentwpjoinscoreonscoresno=studentwpsnojoincourseonscorecno=coursecnojointeacheronteachertno=coursetnowherescorecnoin(selectcnofromcoursewheretnoin(selecttnofromteacherwherename<>'王萍'))关系代数之全称谓词查询至少选修了张旭老师和李诚老师全部课程的学生姓名?求陆君同学和曾华同学都没有选修的课程和任课教师名单(求交集)小知识:关于exists谓词的查询意义通过exists实现全称谓词的子查主要用于在某个集合之中查询全部信息例子、查询没有选修号课程的学生姓名selectsnamefromstudentwheresnonotin(selectsnofromscorewherecno='')另解:selectsnamefromstudentwherenotexists(select*fromscorewheresno=studentsnoandcno='')例子、查询选修了全部课程的学生姓名没有一门课程student表中某个(任意个)学生都没有选修过。selectsnamefromstudentwherenotexists(select*fromcoursewherenotexists(select*fromscorewheresno=studentsnoandcno=coursecno))备注:SQL中是没有全称谓词的因此多转化成为否定之否定的逻辑语义。例子、查询至少选修了号学生选修的全部课程的学生号码selectdistinctsnofromscorescwherenotexists(select*fromscorescwherescsno=''andnotexists(select*fromscorescwherescsno=scsnoandsccno=sccno))注意:这种查询的逻辑与嵌套查询的差异是:嵌套查询首先将子查询的结果集求出后为上级查询提供条件逻辑集合并逐级上溯直至查询完结。而exists查询的逻辑是:、查询逻辑首先取外层查询中的第一个元组行根据它与内层查询相关的属性值处理内层查询若where条件子句返回值为true则取外层查询中该元组的查询结果放入这个内层查询里面。然后以此类推直至最内部的查询逻辑被执行为止。、查询效率由于带有exists量词的相关子查询只关心内层查询值是否返回逻辑值无须查到具体的值因此效率并不低于不相关的子查询有时候是高效率的查询方法。不存在这样的课程y学生a选修了y而学生b没有选修selectdistinctsnofromscorescwherenotexists(select*from(selectcnofromteacher,coursewhereteachertno=coursetnoandteachername='张旭'unionselectcnofromteacher,coursewhereteachertno=coursetnoandteachername='李诚')scwherenotexists(select*fromscorescwherescsno=scsnoandsccno=sccno))求陆君同学和曾华同学都没有选修的课程和任课教师名单selectteachername,cnamefrom(selectcnofromcoursewherecnonotin(selectcoursecnofromstudent,score,coursewherestudentsno=scoresnoandcoursecno=scorecnoandsname='陆君'intersectselectcoursecnofromstudent,score,coursewherestudentsno=scoresnoandcoursecno=scorecnoandsname='曾华'))ascno,course,teacherwherecnocno=coursecnoandcoursetno=teachertno视图视图的作用建立视图删除视图查询视图更新视图视图的作用简化用户的操作使用户能以多种角度看待同一数据对重构数据库提供了一定程度的逻辑独立性能够对机密数据提供安全保护建立视图建立视图的一般格式为:CREATEVIEW<视图名>(<列名>,<列名>…)AS<子查询>WITHCHECKOPTION有下列三种情况下必须明确指定视图的所有列名:某个目标列不是单纯的属性名而是集函数或列表达式多表连接时选出了几个同名列作为视图的字段需要在视图中为某个列启用新的更合适的名字。withcheckoption指明当对视图进行数据修改时要检查是否满足视图定义中的条件。建立视图中的子查询语句可以是任意复杂的SELECT语句但通常不允许含有ORDERBY子句和DISTINCT短语。建立视图(续)在建立视图语句中省略属性列名例:CREATEVIEWISStudentASSELECTSno,Sname,SageFROMStudentWHERESdept=‘IS’建立视图,查询同类商品的库存信息createviewcpxias(select产品号,产品名称,sum(库存量)as总库存量from产品入库表groupby产品号,产品名称)select*fromcpxi查询日商场产品销售明细单select产品销售表产品流水号,产品名称,数量as销售数量,客户名称from产品销售表,客户表,产品入库表where产品销售表客户号=客户表客户号and产品销售表产品流水号=产品入库表产品流水号and产品销售表销售日期=‘’创建视图,课程及格的学生姓名,班级,课程名,成绩表createviewjgstuasselectsname,class,cname,degreefromsc,student,coursewheresccno=coursecnoandstudentsno=scsnogroupbysccno,sname,class,cname,degreehavingdegree>withcheckoptiondropviewjgstu在每一门课程都及格的学生中,选修了计算机导论课程的成绩比操作系统的平均成绩要高的学生的姓名useschoolcreateviewstujgasselectstudentsno,sname,class,coursecno,cname,degreefromsc,student,coursewheredegree>=andscsno=studentsnoandsccno=coursecnowithcheckoptionselect*fromstujginsertintostujg(sno,sname,class,cno,cname,degree)values('','张三风','','','大学语文',)select*fromcourseselect*fromstudentselect*fromsc建立视图(续)带WITHCHECKOPTION子句的视图定义例:CREATEVIEWISStudentASSELECTSno,Sname,Sname,SageFROMStudentWHERESdept=‘IS’WITHCHECKOPTIONcreateviewjgstuasselect*fromscwheredegree>=withcheckoptionselect*fromscinsertintojgstuvalues('','',)建立视图(续)带WITHCHECKOPTION子句的视图和不带WITHCHECKOPTION子句的视图的区别:在插入和更新视图的时候,也希望受到where语句的限制的时候,就必须带上WITHCHECKOPTION例子:创建视图建立视图(续)在多个基本表上建立视图例:CREATEVIEWISS(Sno,Sname,Grade)ASSELECTStudentSno,Sname,GradeFROMStudent,SCWHERESdept=‘IS’ANDStudentSno=SCSnoANDSCCno=‘’createviewjgstuasselect*fromscwheredegree>=withcheckoptionselect*fromscinsertintojgstuvalues('','',)建立视图(续)在定义好的视图上建立视图例:CREATEVIEWISSASSELECTSno,Sname,GradeFROMSISWHEREGrade>=建立视图(续)定义带表达式(虚拟列)的视图例:CREATEVIEWSBT(Sno,Sname,Sbirth)ASSELECTSno,Sname,SageFROMStudent删除视图删除视图的一般格式为:DROPVIEW<视图名>例:DROPVIEWISS查询视图例:SELECTSno,SageFROMISStudentWHERESage<本例转换后的查询语句为:SELECTSno,SageFROMStudentWHERESdept=‘IS’ANDSage<查询视图(续)视图和基本表的连接查询例:SELECTSno,SnameFROMISStudent,SCWHEREISStudentSno=SCSnoANDSCCno=‘’更新视图数据修改UPDATEISStudentSETSname=‘刘辰’WHERESno=‘’转换后的更新语句为:UPDATEStudentSETSname=‘刘辰’WHERESno=‘’ANDSdept=‘IS’注:ISStudent视图的定义如下:CREATEVIEWISStudentASSELECTSno,Sname,Sname,SageFROMStudentWHERESdept=‘IS’WITHCHECKOPTION更新视图(续)数据插入例:INSERTINTOISStudentVALUES(‘’,’赵新’)转换为对基本表的插入语句为:INSERTINTOStudent(Sno,Sname,Sage,Sdept)VALUES(‘’,’赵新’‘IS’)数据删除例:DELETEFROMISStudentWHERESno=‘’转换为对基本表的删除语句为:DELETEFROMStudentWHERESno=‘’ANDSdept=‘IS’视图更新约束select子句中的目标列不能包含聚集函数select子句中不能使用unique或distinct关键字不能包括groupby子句不能包括经算术表达式计算出来的列对于行列子集视图可以更新(视图是从单个基本表使用选择、投影操作导出的并且包含了基本表的主码)本章总结了解SQL语言掌握数据定义语言的使用掌握数据操纵语言的使用掌握数据控制语言的使用了解视图掌握数据查询语言的使用USEmasterGOCreatethedatabasewiththedefaultdatafilegroupandalogfileSpecifythegrowthincrementandthemaxsizefortheprimarydatafileCREATEDATABASEMyDBONPRIMARY(NAME='MyDBPrimary',FILENAME='c:ProgramFilesMicrosoftSQLServerMSSQLMSSQLdataMyDBPrmmdf',SIZE=MB,MAXSIZE=MB,FILEGROWTH=MB),FILEGROUPMyDBFG(NAME='MyDBFGDat',FILENAME='c:ProgramFilesMicrosoftSQLServerMSSQLMSSQLdataMyDBFGndf',SIZE=MB,MAXSIZE=MB,FILEGROWTH=MB),(NAME='MyDBFGDat',FILENAME='c:ProgramFilesMicrosoftSQLServerMSSQLMSSQLdataMyDBFGndf',SIZE=MB,MAXSIZE=MB,FILEGROWTH=MB)LOGON(NAME='MyDBlog',FILENAME='c:ProgramFilesMicrosoftSQLServerMSSQLMSSQLdataMyDBldf',SIZE=MB,MAXSIZE=MB,FILEGROWTH=MB)GOALTERDATABASEMyDBMODIFYFILEGROUPMyDBFGDEFAULTGOCreateatableintheuserdefinedfilegroupUSEMyDBCREATETABLEMyTable(colaintPRIMARYKEY,colbchar())ONMyDBFGGO注意:()其中表名是所要定义的基本表名称它可以由一个或多个属性列组成。()建立表的时候还可以定义与该表有关的关系性约束性条件这些关系性约束性条件被存入系统的数据字典中。当用户操作数据库中表内的数据的时候由DBMS自动检查该项操作是否违背这些关系性约束条件。()语句定义说明:、Default:设置该列的缺省值当插入数据没有指定该列的值的时候默认取该值。、UNIQUE:唯一性约束该列不允许取重复的值。、NOT:该列不允许取空值。、PrimaryKey:主键约束。、foreignkey……references…:外键约束。、CHECK:用户自定义的约束条件根据实际需要而定。创建school数据库usemastergocreatedatabaseschoolon(name=schooldata,filename='E:ProgramFilesMicrosoftSQLServerMSSQLDataschooldatamdb',size=,maxsize=,filegrowth=)logon(name=schoollog,filename='E:ProgramFilesMicrosoftSQLServerMSSQLDataschoollogldf',size=,maxsize=,filegrowth=)useschoolgo创建关系表createtablestudent(snointprimarykeyidentity(,),snamevarchar()notunique,ssexchar()default'男',departchar(),sageint,check(ssexin('男','女')andsagebetweenand))createtablecourse(cnointprimarykeyidentity(,),cnamevarchar()notunique,cpnoint,creditsmallintnot,foreignkey(cpno)referencescourse(cno))createtablesc(snoint,cnoint,gradefloat,primarykey(sno,cno),foreignkey(sno)referencesstudent(sno),foreignkey(cno)referencescourse(cno),check(gradebetweenand))altertablecourseaddtnointaltertablecoursedropcolumntnoaltertablecourseaddtnointforeignkey(tno)referencesteacher(tno)createtableteacher(tnointprimarykeyidentity(,),tnamevarchar()not,homechar(),telchar(),tsexchar(),cnoint,foreignkey(cno)referencescourse(cno),)将sdept由char改变成为varcharaltertablestudentaltercolumnsdeptvarchar()将cpno变成为与cno相同的属性altertablecoursealtercolumncpnoint指定cpno必须受到cno的参照完整性的约束altertablecourseaddconstraintfkforeignkey(cpno)referencescourse(cno)将SC表中的sno和cno同时指定成为主键altertablescaltercolumnsnointnotaltertablescaltercolumncnointnotaltertablescaddconstraintfkprimarykey(sno,cno)将grade变成为float类型altertablescaltercolumngradefloat设定sc表的参照完整性约束altertablescaddconstraintfkforeignkey(sno)referencesstudent(sno)altertablescaddconstraintfkforeignkey(cno)referencescourse(cno)修改teacher表中的tnoaltertableteacheraltercolumntnointnotaltertableteacheraddconstraintfkprimarykey(tno)altertableteacheraltercolumntnointidentity(,)在teacher表中增加一项内容,cno并且增加参照完整性altertableteacheraddsnointconstraintfkreferencesstudent(sno)将tname的char变成为varcharaltertableteacheraltercolumntnamevarchar()分别给student和teachar表增加性别项并且仅仅只能够是‘男’‘女’altertableteacheraddtsexchar()constraintfknotcheck(tsexin('男','女'))default'男'将学生的年龄限制在之间altertablestudentaddconstraintfkcheck(sagebetweenand)为了追踪哪些页保存了这个表的数据SQLServer会为每一张表建立一个或多个IAM页。这些IAM页指向保存表数据的页因为这个表的数据以无索引的方式保存在页上并且只通过IAM页连接在一起所以这些表被称为是堆。堆内的数据页和数据行之间没有任何的逻辑关联与顺序也比链接在一起数据页之间唯一的链接就是IAM页内信息。SQLServer必须阅读这个表的IAM页并且通过扫描IAM页所指向的所有页面来访问一个堆的数据这种操作被称为是表扫描。表扫描以无序的方式遍历读取所有的数据如果一个特定的查询要搜索某个特定的航数据那么一个堆数据遍历扫描将查询所有的IAM页链接页面无疑开销是巨大的效率是低效的。中间级别或者最低级别中的每个页都指向上级或者下级的指针从而形成双向指链表。次结构提供了高度有效的机制以加速查询数据的过程。在聚簇索引中根和中间节点包含带有索引行的索引页。每个索引行包括一个键值和一个指针该指针指向中间级别页中的数据行。索引的每个级别中的页在双向链表中实现链接。数据表在物理磁盘中随着存储数据的增长将会跨越多个页如果这些页是散乱的放置对于数据查询而言是毫无效率可言的。聚簇索引根据存储在数据表中数据的内容结构将数据存储在分级的页面之中同时最大化中间节点内子节点的数目以减少查询树的深度从而提高查询的效率。CLUSTER表示将要建立的索引是聚簇索引。一、聚簇索引:是指索引项的顺序与表中纪录的物理顺序一致的索引结构。学习要点:、用户可以在最常查询的列上建立聚簇索引以提高查询效率。、由于一个基本表只有一个物理结构所以一个表最多只能够建立一个聚蔟索引。、建立聚蔟索引后更新数据列的时候往往导致表中物理存储结构的变化查询代价就会变的很大因此对于需要经常更新的列不建议建立聚蔟索引。、聚蔟索引在ORACLE系统中不支持。二、UNIQUE:唯一性索引学习要点:、该索引不允许表中不同的行在索引列上取相同的值。、如果已经有相同的值存在则系统给出相关的信息不建立此索引并且系统将拒绝违背唯一性原则的插入和更新。CLUSTER表示将要建立的索引是聚簇索引。一、聚簇索引:是指索引项的顺序与表中纪录的物理顺序一致的索引结构。学习要点:、用户可以在最常查询的列上建立聚簇索引以提高查询效率。、由于一个基本表只有一个物理结构所以一个表最多只能够建立一个聚蔟索引。、建立聚蔟索引后更新数据列的时候往往导致表中物理存储结构的变化查询代价就会变的很大因此对于需要经常更新的列不建议建立聚蔟索引。、聚蔟索引在ORACLE系统中不支持。二、UNIQUE:唯一性索引学习要点:、该索引不允许表中不同的行在索引列上取相同的值。、如果已经有相同的值存在则系统给出相关的信息不建立此索引并且系统将拒绝违背唯一性原则的插入和更新。CLUSTER表示将要建立的索引是聚簇索引。一、聚簇索引:是指索引项的顺序与表中纪录的物理顺序一致的索引结构。学习要点:、用户可以在最常查询的列上建立聚簇索引以提高查询效率。、由于一个基本表只有一个物理结构所以一个表最多只能够建立一个聚蔟索引。、建立聚蔟索引后更新数据列的时候往往导致表中物理存储结构的变化查询代价就会变的很大因此对于需要经常更新的列不建议建立聚蔟索引。、聚蔟索引在ORACLE系统中不支持。二、UNIQUE:唯一性索引学习要点:、该索引不允许表中不同的行在索引列上取相同的值。、如果已经有相同的值存在则系统给出相关的信息不建立此索引并且系统将拒绝违背唯一性原则的插入和更新。CLUSTER表示将要建立的索引是聚簇索引。一、聚簇索引:是指索引项的顺序与表中纪录的物理顺序一致的索引结构。学习要点:、用户可以在最常查询的列上建立聚簇索引以提高查询效率。、由于一个基本表只有一个物理结构所以一个表最多只能够建立一个聚蔟索引。、建立聚蔟索引后更新数据列的时候往往导致表中物理存储结构的变化查询代价就会变的很大因此对于需要经常更新的列不建议建立聚蔟索引。、聚蔟索引在ORACLE系统中不支持。二、UNIQUE:唯一性索引学习要点:、该索引不允许表中不同的行在索引列上取相同的值。、如果已经有相同的值存在则系统给出相关的信息不建立此索引并且系统将拒绝违背唯一性原则的插入和更新。参数tablename|tableid|viewname|viewid是要对其碎片信息进行检查的表或视图。如果未指定则对当前数据库中的所有表和索引视图进行检查。若要获得表或视图ID请使用OBJECTID函数。indexname|indexid是要对其碎片信息进行检查的索引。如果未指定则该语句对指定表或视图的基索引进行处理。若要获得索引ID请使用sysindexes。WITH指定由DBCC语句所返回的信息类型选项。FAST指定是否要对索引执行快速扫描和输出最少信息。快速扫描不读取索引的叶或数据级页。TABLERESULTS将结果显示为带有附加信息的行集。ALLINDEXES显示指定表和视图的所有索引的结果(即使指定特定的索引)。ALLLEVELS只能与TABLERESULTS选项一起使用。不能与FAST选项一起使用。指定是否为所处理的每个索引的每个级别产生输出。如果未指定将只对索引叶级或表数据级进行处理。每个人的母亲是谁?usefamilygoselectpersonpersonidas编号,personpersonnameas姓名,motherpersonnameas母亲姓名frompersoninnerjoinpersonmotheronpersonmotherid=motherpersonid请查询一下每个人的父亲和母亲是谁?selectpersonpersonnameas姓名,personsexas性别,fatherpersonnameas父亲姓名,motherpersonnameas母亲姓名frompersonleftouterjoinpersonfatheronpersonfatherid=fatherpersonidleftouterjoinpersonmotheronpersonmotherid=motherpersonidselectpersonpersonnameas姓名,personsexas性别,twinpersonnameas双胞胎姓名,persondatebirthas出生日期frompersoninnerjoinpersontwinontwinpersonid<>personpersonidandpersondatebirth=twindatebirthandpersonmotherid=twinmotheridwherepersondatebirthisnot每个人的外公和外婆是谁(每个人的母亲是谁母亲的父母是谁)selectpersonpersonnameas姓名,personsexas性别,grandfatherpersonnameas外公姓名,grandmotherpersonnameas外婆姓名frompersonleftouterjoinpersonmotheronpersonmotherid=motherpersonidleftouterjoinpersongrandfatheronmotherfatherid=grandfatherpersonidleftouterjoinpersongrandmotheronmothermotherid=grandmotherpersonidselectmepersonnameas姓名,mesexas性别,grandfatherpersonnameas外公姓名,grandmotherpersonnameas外婆姓名frompersonme,personmother,persongrandfather,persongrandmotherwherememotherid=motherpersonidandmotherfatherid=grandfatherpersonidandmothermotherid=grandmotherpersonid离异者姓名,以及其原配姓名和再婚后配偶姓名及其原配子女和再婚子女情况selectpersonnamefrompersonwherepersonidin(selecthusbandidfrommarriagegroupbyhusbandidhavingcount(husbandid)>)orpersonidin(selectwifeidfrommarriagegroupbywifeidhavingcount(wifeid)>)selectscsno,snamefromstudentjoinsconscsno=studentsnojoincourseonsccno=coursecnowherescdegree>=groupbyscsno,snamehavingcount(distinctsccno)=(selectcount(coursecno)fromcourse)selectscoresno,snamefromstudentjoinscoreonscoresno=studentsnojoincourseonscorecno=coursecnojointeacheronteachertno=coursetnowhereteachername='王萍'groupbyscoresno,snamehavingcount(distinctscorecno)=(selectcount(coursecno)fromcoursewherecoursetno=(selecttnofromteacherwhereteachername='王萍'))=======================================================selectdistinctstudentwpsno,snamefrom(selectscoresno,snamefromstudentjoinscoreonscoresno=studentsnojoincourseonscorecno=coursecnojointeacheronteachertno=coursetnowhereteachername='王萍'groupbyscoresno,snamehavingcount(distinctscorecno)=(selectcount(distinctcoursecno)fromcoursewherecoursetno=(selecttnofromteacherwhereteachername='王萍')))asstudentwpjoinscoreonscoresno=studentwpsnojoincourseonscorecno=coursecnojointeacheronteachertno=coursetnowherescorecnoin(selectcnofromcoursewheretnoin(selecttnofromteacherwherename<>'王萍'))小知识:关于exists谓词的查询意义通过exists实现全称谓词的子查主要用于在某个集合之中查询全部信息例子、查询没有选修号课程的学生姓名selectsnamefromstudentwheresnonotin(selectsnofromscorewherecno='')另解:selectsnamefromstudentwherenotexists(select*fromscorewheresno=studentsnoandcno='')例子、查询选修了全部课程的学生姓名没有一门课程student表中某个(任意个)学生都没有选修过。selectsnamefromstudentwherenotexists(select*fromcoursewherenotexists(select*fromscorewheresno=studentsnoandcno=coursecno))备注:SQL中是没有全称谓词的因此多转化成为否定之否定的逻辑语义。例子、查询至少选修了号学生选修的全部课程的学生号码selectdistinctsnofromscorescwherenotexists(select*fromscorescwherescsno=''andnotexists(select*fromscorescwherescsno=scsnoandsccno=sccno))注意:这种查询的逻辑与嵌套查询的差异是:嵌套查询首先将子查询的结果集求出后为上级查询提供条件逻辑集合并逐级上溯直至查询完结。而exists查询的逻辑是:、查询逻辑首先取外层查询中的第一个元组行根据它与内层查询相关的属性值处理内层查询若where条件子句返回值为true则取外层查询中该元组的查询结果放入这个内层查询里面。然后以此类推直至最内部的查询逻辑被执行为止。、查询效率由于带有exists量词的相关子查询只关心内层查询值是否返回逻辑值无须查到具体的值因此效率并不低于不相关的子查询有时候是高效率的查询方法。不存在这样的课程y学生a选修了y而学生b没有选修selectdistinctsnofromscorescwherenotexists(select*from(selectcnofromteacher,coursewhereteachertno=coursetnoandteachername='张旭'unionselectcnofromteacher,coursewhereteachertno=coursetnoandteachername='李诚')scwherenotexists(select*fromscorescwherescsno=scsnoandsccno=sccno))求陆君同学和曾华同学都没有选修的课程和任课教师名单selectteachername,cnamefrom(selectcnofromcoursewherecnonotin(selectcoursecnofromstudent,score,coursewherestudentsno=scoresnoandcoursecno=scorecnoandsname='陆君'intersectselectcoursecnofromstudent,score,coursewherestudentsno=scoresnoandcoursecno=scorecnoandsname='曾华'))ascno,course,teacherwherecnocno=coursecnoandcoursetno=teachertno建立视图,查询同类商品的库存信息createviewcpxias(select产品号,产品名称,sum(库存量)as总库存量from产品入库表groupby产品号,产品名称)select*fromcpxi查询日商场产品销售明细单select产品销售表产品流水号,产品名称,数量as销售数量,客户名称from产品销售表,客户表,产品入库表where产品销售表客户号=客户表客户号and产品销售表产品流水号=产品入库表产品流水号and产品销售表销售日期=‘’创建视图,课程及格的学生姓名,班级,课程名,成绩表createviewjgstuasselectsname,class,cname,degreefromsc,student,coursewheresccno=coursecnoandstudentsno=scsnogroupbysccno,sname,class,cname,degreehavingdegree>withcheckoptiondropviewjgstu在每一门课程都及格的学生中,选修了计算机导论课程的成绩比操作系统的平均成绩要高的学生的姓名useschoolcreateviewstujgasselectstudentsno,sname,class,coursecno,cname,degreefromsc,student,coursewheredegree>=andscsno=studentsnoandsccno=coursecnowithcheckoptionselect*fromstujginsertintostujg(sno,sname,class,cno,cname,degree)values('','张三风','','','大学语文',)select*fromcourseselect*fromstudentselect*fromsccreateviewjgstuasselect*fromscwheredegree>=withcheckoptionselect*fromscinsertintojgstuvalues('','',)例子:创建视图createviewjgstuasselect*fromscwheredegree>=withcheckoptionselect*fromscinsertintojgstuvalues('','',

VIP尊享8折文档

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/180

SQL-Server-2005数据库实践教程第1章-关系数据库标准语言SQL

¥30.0

会员价¥24.0

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利