版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章数据库语言SQL,2,概述,SQL的发展1974年,由Boyce和Chamberlin提出19751979,IBMSanJoseResearchLab的关系数据库管理系统原型SystemR实施了这种语言SQL-86是第一个SQL标准SQL-89、SQL-92(SQL2)、SQL-99(SQL3),3,概述,现状大部分DBMS产品都支持SQL,成为操作数据库的标准语言有方言,支持程度不同,4,数据定义(DDL)定义、删除、修改关系模式(基本表)定义、删除视图(View)定义、删除索引(Index)数据操纵(DML)数据查询数据增、删、改数据控制(DCL)用户访问权限的授予、收回,概述SQL
2、的功能,5,交互式SQL一般DBMS都提供联机交互工具用户可直接键入SQL命令对数据库进行操作由DBMS来进行解释,概述SQL的形式,6,嵌入式SQL能将SQL语句嵌入到高级语言(宿主语言)使应用程序充分利用SQL访问数据库的能力、宿主语言的过程处理能力一般需要预编译,将嵌入的SQL语句转化为宿主语言编译器能处理的语句,概述SQL的形式,7,数据定义Create、Drop、Alter数据操纵数据查询:Select数据修改:Insert、Update、Delete数据控制Grant、Revoke,概述SQL的动词,8,数据查询是数据库应用的核心功能基本结构SelectA1,A2,.,AnFrom
3、r1,r2,.,rmWherePA1,A2,.,An(p(r1r1.rm),数据查询,9,Select语句的含义,对From子句中的各关系,作笛卡儿积()对Where子句中的逻辑表达式进行选择()运算,找出符合条件的元组根据Select子句中的属性列表,对上述结果作投影()操作,10,Select语句的含义,结果集查询操作的对象是关系,结果还是一个关系,是一个结果集,是一个动态数据集,11,Select子句,对应于关系代数的投影()运算,用以列出查询结果集中的期望属性,12,SQL具有包的特性Select子句的缺省情况是保留重复元组(ALL),可用Distinct去除重复元组SelectDis
4、tinctsdeptFromStudentSelectAllsdeptFromStudent去除重复元组:费时需要临时表的支持,Select子句重复元组,13,Select子句*与属性列表,星号*表示所有属性星号*:按关系模式中属性的顺序排列,并具有一定的逻辑数据独立性显式列出属性名:按用户顺序排列Select*FromStudentSelectStudent.*,cno,gradeFromStudent,SCWhereStudent.sno=SC.sno,14,Select子句更名,为结果集中的某个属性改名使结果集更具可读性Selectsnoasstu_no,cnoascourse_no,g
5、radeFromSCSelectsno,sname,2001-sageasbirthdayFromStudent,15,Where子句,where子句对应与关系代数中的选择()查询满足指定条件的元组可以通过Where子句来实现使where子句中的逻辑表达式返回True值的元组,是符合要求的元组,将被选择出来,16,Where子句运算符,比较:、=、=、not+确定范围:BetweenAandB、NotBetweenAandB确定集合:IN、NOTIN字符匹配:LIKE,NOTLIKE空值:ISNULL、ISNOTNULL多重条件:AND、OR、NOT,17,Where子句Like,字符匹配:L
6、ike、NotLike通配符%匹配任意字符串_匹配任意一个字符大小写敏感,18,Where子句Like,例:列出姓张的学生的学号、姓名。Selectsno,snameFromStudentWheresnameLIKE张%,19,Where子句Like,例:列出张姓且单名的学生的学号、姓名。Selectsno,snameFromStudentWheresnameLIKE张_,20,Where子句转义符escape,例:列出课程名称中带有_的课号及课名。Selectcno,cnameFromCourseWherecnameLIKE%_%escape,21,From子句,From子句对应与关系代数中
7、的笛卡儿积()列出将被扫描的关系(表)例:列出所有学生的学号、姓名、课号、成绩。SelectSudent.sno,sname,SC.cno,gradeFromStudent,SCWhereStudent.sno=SC.sno,22,From子句元组变量,为From子句中的关系定义元组变量方便关系名的引用在同一关系的笛卡儿积中进行辨别例:列出与95001同岁的同学的学号,姓名,年龄SelectT.sno,T.sname,T.sageFromStudentasT,StudentasSWhereS.sno=95001ANDT.sage=S.sage,23,OrderBy子句,指定结果集中元组的排列次
8、序耗时ASC(缺省)、DESC、未选中的属性例:列出CS系中的男生的学号、姓名、年龄,并按年龄进行排列(升序)Selectsno,sname,sageFromStudentWheresdept=CSOrderBysageASC,24,SQL的集合操作,SQL的结果集是“包”多个Select语句的结果可以进行集合操作,使结果为“集合”(default)SQL-92支持参加集合操作的关系(结果集)必须是相容的,25,SQL的集合操作相容,属性个数必须一致对应的类型必须一致属性名无关最终结果集采用第一个结果的属性名缺省为自动去除重复元组除非显式说明ALLOrderBy放在整个语句的最后,26,SQL
9、的集合操作并,union(并,对应与关系代数的),标准SQL都支持的采用集合的观点,合成多个查询的结果select-without-orderby.UNIONALLselect-without-orderby.UNIONALLselect-without-orderby.ORDERBYintegerASC|DESC,.,27,例:查询计算机系的学生或者年龄不大于19岁的学生,并按年龄倒排序。,SQL的集合操作并,28,intersect(交,对应与关系代数的),并不是所有的DBMS都支持例:查询计算机系的学生并且年龄不大于19岁的学生,并按年龄倒排序。,SQL的集合操作交,29,except(
10、差,对应与关系代数的-),并不是所有的DBMS都支持例:查询计算机系的男生。,SQL的集合操作差,30,数据定义语言(DataDefinitionLanguage)Create、Drop、Alter定义一组关系(基本表)、说明各关系的信息各关系的模式各属性的值域完整性约束索引安全性和权限,数据定义语言(DDL),31,字符型char(n)、varchar(n)数值型integer、smallintnumeric(p,d)real、double、float(n)日期/时间型datetime,DDLSQL中的域类型,32,域定义语句(SQL-92支持)需重复使用的CreateDomainstu_n
11、amevarchar(20)CreateDomainzip_codechar(6),DDLSQL中的域类型,33,CreateTabler(A1D1,A2D2,AnDn,)其中:r关系名(表名)、Ai关系r的一个属性名Dn属性Ai域值的域类型主键声明:primarykey(Aj1,Aj2,Ajvm),DDLSQL的模式定义,34,CreateDomainstu_namevarchar(20)CreateTableStudent(snochar(10)primarykey(sno),snamestu_name,sagesmallint,ssexchar(1),sdeptchar(2),DDLSQ
12、L的模式定义,35,CreateTableCourse(cnochar(10)primarykey(cno),cnamevarchar(20),creditsmallint)CreateTableSC(snochar(10)notnull,cnochar(10)notnull,gradesmallint,primarykey(sno,cno),DDLSQL的模式定义,36,用SQL删除关系(表)将整个关系模式(表结构)彻底删除表中的数据也将被删除DropTablerDropTablestudent;,DDL删除表结构Drop,37,删除表中的某属性去除属性及相应的数据AlterTablerDr
13、opA,DDL修改模式Alter,38,增加表中的属性向已经存在的表中添加属性allownull已有的元组中该属性的值被置为NullAlterTablerAddADAlterTablestudentphonechar(16);,DDL修改模式Alter,39,属性的默认值用户不提供某属性的值时,默认值被使用初始值TimeStampDDL中:ModifyDatechar(30)DefaultTimeStamp;AlterTablestudentAddIDintegerDefaultAutoIncrement;,DDLDefaultValue,40,定义一个新的域(用户定义的域)需要重复使用的域必
14、须具有相同类型的属性CreateDomainAs;CreateDomaindatelogAschar(30)defaulttimestamp域的删除DropDomaindatelog各DBMS的方法是不同的Restrict/Cascade使用该域的属性的处理,DDL域定义,41,索引是一种数据结构,是对照表、指针表索引是为了加速对表中元组的检索而创建的一种分散存储结构(B树)索引是对表而建立的,由除存放表的数据页面以外的索引页面组成索引是把双刃剑,减慢更新的速度索引不是SQL标准的要求,DDL索引Index,42,索引的种类聚簇索引(ClusteredIndex)非聚簇索引(Non-Clust
15、eredIndex),DDL索引Index,43,聚簇索引(ClusteredIndex)表中的元组按聚簇索引的顺序物理地存放根级页面-中间层页面-叶级页面(数据页面)一个表中只能有一个聚簇索引更新的复杂性,需要大量的临时空间,DDL索引Index,44,非聚簇索引(Non-ClusteredIndex)表中元组存储的物理顺序与索引的顺序无关叶级索引页面是指向数据页面的指针每个表可有多个非聚簇索引,DDL索引Index,45,CREATEUNIQUECLUSTERED|NONCLUSTEREDINDEXindex-nameOnTableName(Column,Column,)CreateInd
16、exYearIndexOnMovie(year);CreateClusteredIndexSnoIndexOnstudent(sno);DropIndexYearIndex;,DDL索引Index,46,查询与更新的评估查询多?更新多?索引的覆盖Where表达式Where表达式的顺序索引越多越好吗?了解优化器,DDL索引的使用,47,数据添加用SQL的插入语句,向数据库表中添加数据按关系模式的属性顺序InsertIntoStudentValues(95001,张三,27,M,CS)按指定的属性顺序,也可以只添加部分属性(非Null属性为必需)InsertIntoStudent(sno,snam
17、e,sage)Values(95002,李四,26),48,把一列中的值进行聚合运算,返回单值的函数五个预定义的聚合函数平均值:Avg总和:Sum最小值:Min最大值:Max计数:CountCount(*)、Count(Distinct),聚合函数,49,GroupBy将查询结果集按某一列或多列的值分组,值相等的为一组,一个分组以一个元组的形式出现只有出现在GroupBy子句中的属性,才可出现在Select子句中例:统计各系学生的人数。Selectsdept,count(*)asstu_countFromStudentGroupBysdept,聚合函数,50,Having针对聚合函数的结果值进
18、行筛选(选择),它作用于分组计算结果集跟在GroupBy子句的后面,没有GroupBy则针对全表例:列出具有两门(含)以上不及格的学生的学号、不及格的课目数。Selectsno,count(sno)FromSCWheregrade=2,聚合函数,51,Having与Where的区别Where决定哪些元组被选择参加运算,作用于关系中的元组Having决定哪些分组符合要求,作用于分组聚合函数的条件关系必须用Having,Where中不应出现聚合函数,聚合函数,52,聚合函数忽略NullCount:不计Sum:不将其计入Avg:具有Null的元组不参与Max/Min:不参与例:Selectcount
19、(sdept)FromStudentSelectAvg(sage)FromStudent,聚合函数Null,53,子查询是嵌套在另一查询中的Select-From-Where表达式(Where/Having)SQL允许多层嵌套,由内而外地进行分析,子查询的结果作为父查询的查找条件可以用多个简单查询来构成复杂查询,以增强SQL的查询能力子查询中不使用OrderBy子句,OrderBy子句只能对最终查询结果进行排序,子查询(Subquery),54,返回单值的子查询,只返回一行一列父查询与单值子查询之间用比较运算符进行连接运算符:、=、=、例:找出与95001同龄的学生Select*FromStu
20、dentWheresage=(SelectsageFromStudentWheresno=95001),子查询单值比较,55,子查询返回多行一列运算符:In、All、Some(Any)、Exists,子查询多值,56,标量值与子查询返回集中的某一个相等,trueIN被用来测试多值中的成员例:查询选修C01课程的学生的学号、姓名。Selectsno,snameFromStudentWheresnoIN(SelectsnoFromSCWherecno=C01),子查询多值成员In,57,例:查询选修了数据库的学生的学号和姓名Selectsno,snameFromStudentWheresnoIN(
21、SelectsnoFromSCWherecnoIN(SelectcnoFromCourseWherecname=数据库),子查询多值成员In,58,多值比较:多行一列父查询与多值子查询之间的比较需用All来连接标量值s比子查询返回集R中的每个都大时,sAllR为TrueAll表示所有all、=all、allall等价于notin例:找出年龄最小的学生Select*FromStudentWheresageall(SelectsageFromStudent),子查询多值比较ALL,59,多值比较:多行一列父查询与多值子查询之间的比较需用Some/Any来连接标量值s比子查询返回集R中的某一个都大时
22、sSomeR为True或sAnyR为TrueSome(早期用Any)表示某一个,只要有一个即返回真some、=some、some=some等价于in、some不等价于notin,子查询多值比较Some/Any,60,例:找出不是最小年龄的学生Select*FromstudentWheresagesome(SelectsageFromStudent),子查询多值比较,61,例:找出具有最高平均成绩的学号及平均成绩Selectsno,avg(grade)FromSCGroupBysnoHavingavg(grade)=all(Selectavg(grade)FromSCGroupBysno),子查
23、询多值比较,62,Exists+子查询用来判断该子查询是否返回元组当子查询的结果集非空时,Exists为True当子查询的结果集为空时,Exists为False不关心子查询的具体内容,因此用Select*,子查询存在判断Exists,63,具有外部引用的子查询,称为相关子查询(CorrelatedQueries)外层元组的属性作为内层子查询的条件,子查询相关子查询,64,例:列出选修了C01课程的学生的学号、姓名Selectsno,snameFromStudentWhereExists(Select*FromSCWhereSC.sno=Student.snoAndcno=C01),子查询Cor
24、related&Exists,65,例:列出得过100分的学生的学号、姓名Selectsno,snameFromStudentWhereExists(Select*FromSCWhereSC.sno=Student.snoAndgrade=100),子查询Correlated&Exists,66,例:查询选修了C01课程的学生的系主任SelectmanagerFromdepartmentWhereExists(Select*FromstudentWheresdept=department.depidAndExists(Select*FromSCWhereSC.sno=student.snoAn
25、dcno=C01),子查询Correlated&Exists,67,例:列出没有选C01课程的学生的学号、姓名Selectsno,snameFromStudentWhereNotExists(Select*FromSCWhereSC.sno=Student.snoAndcno=C01),子查询Correlated&NotExists,68,例:查询选修了所有课程的学生的姓名(ForAll)SelectsnameFromStudentWhereNotExists(Select*FromCourseWhereNotExists(Select*FromSCWhereStudent.sno=SC.sn
26、oAndSC.cno=Co),子查询Correlated&NotExists,69,SQL-92支持多列的成员资格测试(ASA7.0不支持)例:找出同系、同年龄、同性别的学生Select*fromStudentasTWhere(T.sdept,T.sage,T.ssex)IN(Selectsdept,sage,ssexFromstudentasSWhereS.snoT.sno),子查询多列元组的比较,70,SQL-92允许在From中使用查询表达式必须为其取名例:查询平均成绩大于75分的学号、姓名、平均成绩Selectstu_no,sname,avg_gradeFromStudent,(Sel
27、ectsno,avg(grade)FromSCGroupBysno)asS(stu_no,avg_grade)WhereStudent.sno=S.stu_noAndavg_grade75,派生关系,71,NULL表示数据的缺失一个确实存在,但我们不知道的值对本实体此数值无意义,可能是设计上的失误是SQL的关键字,用于任何类型描述缺失的值UNKONW是三值逻辑的一个真值(True/False/Unkonw),空值和连接,72,NULL的运算法则对NULL值和其他任何值作算术运算时,结果为NULL对NULL值和其他任何值作比较时,结果为UNKOWNIsNull/IsNotNull,空值和连接,7
28、3,Unkown视True为1,False为0,Unkown为1/2AND:取小OR:取大NOT:取1的补真值表不必死记硬背,空值和连接,74,关系的连接连接操作是以两个关系为输入、将另一个关系作为结果返回笛卡儿积、条件连接、自然连接、外连接自然连接(Natural):连接条件是两个关系中具有公共名字的所有属性对均相等,不需要其他条件对每个相等属性对之一进行投影(去除重复属性)StudentNaturalJoinSCStudentSC,75,关系的连接内连接(InnerJoin):它是条件连接,要求参加连接的关系中至少有一对元组满足连接要求,才能生成连接关系可以是等值连接,也可以是不等值连接新
29、的关系的属性集是参加连接的关系的属性的组合,不去除重复属性Inner是缺省的连接方式也可以用笛卡儿积+选择的方法实现StudentInnerJoinSConStudent.sno=SC.sno,76,关系的连接外连接(OuterJoin):它是条件连接,且条件是必需的。若一个关系中的元组在另一个关系中没有相匹配的元组,则这些元组会在连接结果中出现,并在另一个关系的其他属性位置上放上Null,而不是像Inner那样被忽略。新的关系的属性集是参加连接的关系的属性的组合,不去除重复属性有左外连接、右外连接、全外连接,77,关系的连接左外连接(LeftOuterJoin):Select*From(St
30、udentLeftOuterJoinSConStudent.sno=SC.sno)右外连接(RightOuterJoin):Select*From(StudentRightOuterJoinSConStudent.sno=SC.sno)全外连接(FullOuterJoin):Select*From(StudentFullOuterJoinSConStudent.sno=SC.sno),78,数据库的修改,数据库修改包括插入数据、修改数据、删除数据,数据删除(Delete)只能对整个元组操作,不能只删除某些属性上的值只能对一个关系起作用,若要从多个关系中删除元组,则必须对每个关系分别执行删除命令
31、DeleteFromrWhereP从关系r中删除满足P的元组,只是删除数据,而不是定义,79,删除单个元组例:删除学号为95001的学生的选课信息DeleteFromSCWheresno=95001删除多个元组例:删除选课而未参加考试的学生的选课信息DeleteFromSCWheregradeisnull删除整个关系中的所有数据例:删除所有学生的选课信息DeleteFromSC,80,数据插入(Insert)单行插入:一次只插入一个元组例:新增一个学生信息InsertIntoStudentValues(98001,Gloria,25,F,CS)多行插入:插入一个集合例:给CS系的学生开设必修课
32、C05,建立选课信息InsertIntoSCSelectsno,cno,nullFromStudent,CourseWheresdept=CSandcno=C05,81,数据更新(Update)改变符合条件的某个(某些)元组的属性值例:将95001学生转入MA系UpdateStudentSetsdept=MAWheresno=95001例:所有学生年龄加1UpdateStudentSetsage=sage+1,82,数据更新(Update)例:将选修C05课程的学生的成绩改为该课的平均成绩UpdateSCSetgrade=(Selectavg(grade)FromSCWherecno=C05)
33、Wherecno=C05,先计算avg,再做Update,83,视图(View)是从一个或几个基本表(或视图)中导出的虚表数据库中只保存它的定义是RDBMS提供给用户以多种角度观察数据库中数据的重要机制创建视图、删除CreateViewvasDropViewv例:计算机系的花名册CreateViewCS_StuasSelectsno,sname,ssexFromStudentWheresdept=CS,84,视图(View)视图名可以出现在任何关系名可以出现的地方例:列出计算机系的男生Selectsno,snameFromCS_StuWheressex=M例:建立学生平均成绩视图CreateV
34、iewavg_grade(sno,avg)asSelectsno,avg(grade)FromSCGroupBysno,85,视图(View)例:找出平均成绩大于等75的学生Select*Fromavg_gradeWhereavg=75注意:此例的使用方法是非标准的。,86,视图(View)视图的更新:单表、原始属性构成的视图可以更新(像基本表那样更新)由多表构成的视图由很大的限制视图中的非原始属性也不能更新例:Updateavg_gradeSetavg=100Wheresno=95001,87,视图(View)视图的作用简化用户的操作不同的用户可从不同的角度看待同一数据支持一定的逻辑数据独立性数据的安全性,88,数据定义语言(DataDefinitionLanguage)Create、Drop、Alter定义一组关系(基本表)、说明各关系的信息各关系的模式各属性的值域完整性约束索引安全性和权限各关系在磁盘上的物理存储结构,数据定义语言(DDL),89,SQL中的域类型字符型char(n)varchar(n)数值型intsmallintnumeric(p,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 苏教版一年级上册数学6~9的认识和加减法单元教学设计
- 员工宿舍管理办法
- 公关服务公司出差管理制度
- 2026电商运营师面试题及答案
- 2026动画制作面试题及答案解析
- 工业机器人维护合同协议(2026年自动化生产)
- 快递员四级理论知识考试试题及答案
- 《住宅小区开关插座安装规范操作手册》
- 家禽呼吸道疾病防治手册
- 医疗机构消防安全管理手册
- 慢性肾脏病5期
- 2024年上海市中考语文备考之150个文言实词刷题表格及答案
- 设备采购与招标流程培训
- 1956-1967国家科学技术发展远景规划纲要
- 山西省万家寨水务控股集团有限公司招聘笔试试题及答案2022
- 口语交际:倾听
- 导线三角高程计算表(表内自带计算公式)
- 清明古诗欣赏课件
- 电路基础实验北大未名BBS北京大学教学课件
- 2023广东惠州市惠城区桥西街道办事处招聘治安队员、党建联络员、社区“两委”班子储备人选考试通告考试备考试题及答案解析
- 大学生心理健康教育(第3版)PPT全套完整教学课件
评论
0/150
提交评论