您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 数据库技术基础chp4
数据库技术基础第4章结构化查询语言SQL第4章结构化查询语言SQL4.1学习目标4.2SQL概述4.3单表查询4.4多表查询4.5集合操作4.6嵌套查询4.7小结4.1学习目标学完本章后,读者应具备以下能力:了解SQL的发展过程。熟练掌握单表查询的SELECT子句、WHERE子句、ORDER子句。理解分组的概念,掌握常用聚集函数和GROUPBY子句的使用方法。理解连接的过程,掌握条件连接和外连接的使用方法。了解嵌套查询的概念,掌握简单嵌套查询的使用方法。了解常用的集合操作的实现。第4章结构化查询语言SQL4.1学习目标4.2SQL概述4.3单表查询4.4多表查询4.5集合操作4.6嵌套查询4.7小结4.2SQL概述4.2.1SQL的产生与发展4.2.2SQL的组成4.2.3SQL的特点4.2.1SQL的产生与发展标准发布年份SQUARE1972年SEQUEL1974年SQL/861986年SQL/89(FIPS127-1)1989年SQL/921992年SQL991999年SQL20032003年4.2.2SQL的组成1.操作对象(1)表关系模型中的关系。表名、表结构(关系模式)和数据三部分组成表的名字和结构存储在DBMS的数据字典中,表中的数据保存在数据库中。(2)视图是一个特殊的表,基本上可以把它当作表使用。视图的概念将在下一章中介绍。4.2.2SQL的组成(续)2.操作分类(1)数据定义语言(DataDefinitionLanguage,DDL)定义数据库的逻辑结构,包括定义表、视图和索引。只是定义结构,不涉及具体的数据。执行结果是在数据字典中记录下了这些定义。(2)数据操纵语言(DataManipulationLauguage,DML)数据更新包括插入、删除和修改操作。数据操纵就是指对数据库中数据进行上述这些存取操作。4.2.2SQL的组成(续)(3)数据控制语言(DataControlLanguage,DCL)包括对数据的安全性控制、完整性规则的描述以及对事务的控制语句。(4)嵌入式SQL(EmbededSQL)规定如何在诸如C、Fortan、Cobol等宿主语言中使用SQL的规则。4.2.3SQL的特点1.综合统一集数据定义语言、数据操纵语言、数据控制语言的功能于一身,语言风格统一。可以独立完成数据库生命周期中的全部活动,为数据库应用系统的开发提供了良好的环境。数据库系统投入运行后,还可根据需要随时地逐步地修改模式,且不影响数据库的运行。数据结构的单一性带来了数据操作符的统一,克服了非关系系统由于信息表示方式的多样性带来的操作复杂性。4.2.3SQL的特点(续)2.高度非过程化需指明“做什么”,而无须指明“怎么做”。3.面向集合的操作方式SQL语言采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。4.以同一种语法结构提供两种使用方式SQL语言既是自含式语言,又是嵌入式语言。4.2.3SQL的特点(续)5.语言简捷,易学易用SQL语言接近英语口语,因此容易学习,容易使用。语言十分简捷,完成核心功能只用了9个动词,如表4.1所示。SQL功能动词数据查询SELECT数据定义CREATE,DROP,ALTER数据操纵INSERT,UPDATE,DELETE数据控制GRANT,REVOKE表4.1SQL语言的动词第4章结构化查询语言SQL4.1学习目标4.2SQL概述4.3单表查询4.4多表查询4.5集合操作4.6嵌套查询4.7小结4.3单表查询单表查询就是从一个表生成另外一个表。可以从横向和纵向对表进行操纵。请注意:查询操作的目的是将表的全部或部分内容显示给用户,或者做其他处理。查询操作不影响原表,其结构和内容不会发生任何变化。新表是一个临时结果,没有名字,表中的内容也没有保存到数据库中。4.3单表查询(续)SnoSnameSgenderSageSdept20007012马翔男19计算机学院2007113刘大方男18管理学院2007256史玉明女19管理学院2007278龚兵男19管理学院2007014张晓敏女18计算机学院SnoSnameSdept20007012马翔计算机学院2007113刘大方管理学院2007256史玉明管理学院2007278龚兵管理学院2007014张晓敏计算机学院图4.1表的生成-选择列student4.3单表查询(续)studentSnoSnameSgenderSageSdept20007012马翔男19计算机学院2007113刘大方男18管理学院2007256史玉明女19管理学院2007278龚兵男19管理学院2007014张晓敏女18计算机学院SnoSnameSgenderSageSdept2007113刘大方男18管理学院2007256史玉明女19管理学院2007278龚兵男19管理学院图4.2表的生成-选择行4.3单表查询(续)SnoSnameSgenderSageSdept20007012马翔男19计算机学院2007113刘大方男18管理学院2007256史玉明女19管理学院2007278龚兵男19管理学院2007014张晓敏女18计算机学院SnoSnameSdept2007113刘大方管理学院2007256史玉明管理学院2007278龚兵管理学院student图4.3表的生成-选择行和列4.3单表查询4.3.1SELECT语句简介4.3.2选择列4.3.3选择行4.3.4排序4.3.5聚集函数4.3.6分组4.3.7分组选择4.3.1SELECT语句简介SELECT语句是SQL的核心语句,格式如下:SELECT[ALL|DISTINCT]目标列表达式[别名][,目标列表达式[别名]]…FROM表名或视图名[别名][,表名或视图名[别名]]…[WHERE条件表达式][GROUPBY列名表[HAVING条件表达式]][ORDERBY列名[ASC|DESC][,列名[ASC|DESC]];4.3单表查询4.3.1SELECT语句简介4.3.2选择列4.3.3选择行4.3.4排序4.3.5聚集函数4.3.6分组4.3.7分组选择4.3.2选择列1.查询指定列[例4.1]查询全体学生的学号、姓名和所在学院。SELECTSno,Sname,Sdept--新表中要出现的列名FROMStudent--原表的名称20007012马翔男19计算机学院2007113刘大方男18管理学院2007256史玉明女19管理学院2007278龚兵男19管理学院2007014张晓敏女18计算机学院2000712马翔计算机学院2007113刘大方管理学院2007256史玉明管理学院2007278龚兵管理学院2007014张晓敏计算机学院图4.4例4.1的执行结果4.3.2选择列(续)2.查询全部列[例4.2]查询全体学生的全部信息SELECTSno,Sname,Sgender,Sage,Sdept--新表中要出现原表的全部列FROMStudent--原表的名称由于经常会遇到要罗列表的全部列的场合,SQL提供了一个简单方法,用符号*表示枚举表的全部列。用这种方法,例2可以表述为:SELECT*--*代表Student的全部列名FROMStudent--原表的名称4.3.2选择列(续)3.查询经过计算的值[例4.3]查询全体学生的姓名及其出生年份。由于Student表中存放的是每个学生的年龄(假设每年年初由应用程序自动将年龄增加1岁),因此,无法直接得到出生年份。但是,可以通过将今年的年份减去年龄的运算,计算出每个学生的出生年份。SELECTSname,2007-Sage--2007–Sage是一个表达式FROMStudent--原表的名称图4.5表达式作为列4.3.2选择列(续)3.查询经过计算的值(续)SQL提供了别名机制。例如,将表达式2007–Sage命名为BirthDay,Sname命名为姓名,则例4.3可以表达为:SELECTSnameAS姓名,2007-SageASBirthDay--2007–Sage是一个表达式FROMStudent--原表的名称图4.6别名的作用4.3.2选择列(续)3.查询经过计算的值(续)使用函数getdate()返回系统当前的日期和时间。使用函数datepart()返回日期的年份部分。如:SELECTSname,datepart(getdate(),year)--表达式中可以出现函数FROMStudent--原表的名称图4.7增加新列4.3.2选择列(续)4.过滤掉重复元组SELECT语句提供了消除重复元组的手段,在SELECT子句中加上DISTINCT关键词。如果没有DISTINCT则保留重复值。[例4.4]给出学校中每个学院的名称。在Student表中记录了每个学生所在的学院,因此,可以通过取出每个学生在列Sdept上的值完成题目要求的操作:SELECTSdept--只取出列Sdept的值FROMStudent--原表的名称查询结果如右图4.8(a)所示:Sdept计算机学院管理学院管理学院管理学院计算机学院(a)图4.8消除重复元组Sdept计算机学院管理学院(b)4.3.2选择列(续)4.过滤掉重复元组(续)在SELECT子句中加上DISTINCT关键词将例4.4改写为:SELECTDISTINCTSdept--只取出列Sdept的值FROMStudent--原表的名称查询结果如4.8(b)所示:4.3单表查询4.3.1SELECT语句简介4.3.2选择列4.3.3选择行4.3.4排序4.3.5聚集函数4.3.6分组4.3.7分组选择4.3.3选择行WHERE子句是在行方向上对表进行操作,返回满足条件表达式的元组集。常用的运算符见表4.2。查询条件谓词比较=,,,=,=,确定范围BETWEENAND,NOTBETWEENAND确定集合IN,NOTIN字符匹配LIKE,NOTLIKE空值ISNULL,ISNOTNULL逻辑运算符AND,OR,NOT表4.2常用的运算符4.3.3选择行(续)1.比较大小比较运算符一般包括:=(等于),(大于),(小于),=(大于等于),=(小于等于),!=或(不等于)。用比较运算符构成的条件表达式的形式是:列名运算符常数列名运算符列名常数运算符列名4.3.3选择行(续)1.比较大小(续)[例4.5]查询管理学院学生的信息SELECT*--包含Student的全部列FROMStudent--原表的名称WHERESdept=‘管理学院’--过滤条件[例4.6]查询年龄在20岁以下(不包含20岁)的学生信息。SELECT*--包含Student的全部列FROMStudent--原表的名称WHERESage20--过滤条件[例4.7]查询管理学院学生的Sno、Sname和Sdept的信息,SELECTSno,Sname,Sdept--仅包含指定的列FROMStudent--原表的名称WHERESdept=‘管理学院’--过滤条件4.3.3选择行(续)2.确定范围用谓词BETWEEN…AND…和NOTBETWEEN…AND…来查找属性值在(或不在)指定范围内的元组。[例8]查询年龄在18~20岁(包括18岁和20岁)之间的学生的姓名、所在学院和年龄。SELECTSname,Sdept,SageFROMStudentWHERESageBETWEEN18AND204.3.3选择行(续)2.确定范围(续)[例4.9]查询年龄不在18~20岁(包括18岁和20岁)之间的学生的姓名、学院和年龄。SELECTSname,Sdept,SageFROMStudentWHERESageNOTBETWEEN18AND204.3.3选择行3.确定成员关系谓词IN用来判断某个值是否是一个集合中的成员。语句格式为:v[NOT]IN{e1,e2,…,en}[例4.
本文标题:数据库技术基础chp4
链接地址:https://www.777doc.com/doc-3981874 .html