资源预览内容
第1页 / 共112页
第2页 / 共112页
第3页 / 共112页
第4页 / 共112页
第5页 / 共112页
第6页 / 共112页
第7页 / 共112页
第8页 / 共112页
第9页 / 共112页
第10页 / 共112页
亲,该文档总共112页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第三章 结构化查询语言SQL,本章要点,关系数据库标准语言SQL 用SQL建立、维护和控制关系数据库,本章学习目标,掌握SQL的基本概念。 掌握SQL的数据定义功能。 掌握SQL的数据操纵功能。 掌握SQL的数据控制功能,3.1 SQL的基本概念,SQL是一种特殊用途的语言,尽管它不是一个通用的程序语言,但包含了数据库生成、维护并保证安全的全部内容。其功能包括查询(query)、操纵(manipulation)、定义(definition)和控制(control)等方面,是一个综合的、通用的、功能极强的关系数据库语言。,3.1 SQL的基本概念,SQL的主要特点是: 一体化的特点 高度非过程化 两种使用方式及统一的语法结构 语言简洁、易学易用,3.1.1 基本操作模式、数据类型和空值,操作模式(表和视图) SQL使用关系数据模式,所有数据都是用表的形式定义与存取,通过表可对数据进行各 种运算和处理。视图(View)是用户在表的基础上自行定义的一种虚表,即它本身并不存储在目标数据厍中,但在数据库字典中存储了视图的定义,一经定义就可能被检索、删除与更新,也可以用视图再定义其他视图。使用视图的目的在于简化用户对数据的理解,从而减轻用户的工作。,例如,一个数据库表可以含有许多行和列,有时你对所有的数据感兴趣,有时并不是这样,可能只对表中的某些列或某些满足一定条件的行感兴趣,也许你还会对一个表的某些列和相关表的另一些列(即两个表连接后的一些列)感兴趣,这时,你就可以定义一些视图,以后当需要访问这些你感兴趣的行和列时,通过访问视图来实现。视图是一个虚拟的数据库子集,可以含有数据库中一个表的部分或多个表的部分内容。,下面给出五个样本表:,(1)学生表 表名为S,表中包含有学号(Snum)、姓名(Sname)、性别(V)、出生年月(Sbirth)、电话(Sphone)、系编号(Dnum)等列。表的当前值如图31所示。,图31 S表,(2)教师表 表名为T,表中包含有教师号(Tnum)、姓名(Tname)、性别(Tsex)、出生日期(Tbirth)、职称(Ttitle)、工资(Tsalary)、电话(Tphone)、系编号(Dnum)等列。表的当前值如图32所示。,图32 T表,(3)学生选课表 表名为SC,表中包含有学号(Snum)、课程号(Cnum)、成绩(Score)等列。表的当前值如图33所示。,图33 SC表,(4)课程表 表名为C,表中包含有课程号(Cnum)、课程名称(Cname)、学分(Cfreq)等列。表的当前值如图34所示。,图34 C表,(5)院系表 表名为D,表中包含有系编号(Dnum)、系名称(Dname)、负责人(Tnum)等列。表的当前值如图35所示。,图35 D表,3.1.1 基本操作模式、数据类型和空值,数据类型 根据不同的发展历史,SQL工具支持不同的数据类型。可是在SQL3定义中,只支持6种通用的数据类型:精确数、近似数、字符串、位串、日期时间、区间,在每一种通用类型内可以有一些子类型。下面介绍各种类型的使用格式列。,精确数 所谓精确数类型即这种类型的数据可以精确地表示一个数的值。有4种子类型包括在这种类型里:INTEGER、SMALLINT、NUMERIC、DECIMAL。 近似数 有时某些量的可能值的范围非常大,以至于不能用一个给定的计算机的寄存器(16位、32位、64位是计算机寄存器的可能位数)来准确地表示。在这种情况下,准确性似乎不是最重要的,而一个比较接近的数值是可以接受的。SQL3定义了3种近似数据类型来处理这种数据:REAL 、 DOUBLE PRECISION 、 FLOAT 。,字符串 当今的数据库存储了许多不同的数据类型,包括图象、声音、卡通片,当然文字依然是不可省的。在数值型数据类型之后的另一种最常用的数据类型是字符串类型。 有两种主要的字符串数据类型:定长字符串(CHARACTER或CHAR)和变长字符串 (CHARACTER VARYING或VARCHAR)。这些数据类型还有两种变型:NATIONAL CHARACTER和NATIONAL CHARACTER VARYING。 日期和时间 SQL3定义了5种不同的数据类型来处理日期和时间:DATE 、 TIME TIMESTAMP 、 TIME WITH TIME ZONE 、 TIMESTAMP WITH TIME ZONE 、 INTERVALS,3.1.1 基本操作模式、数据类型和空值,空值(NULL) 不是所有的列都可以装入空值,这是由定义基本表时来确定的。在定义表中的列时,其中有一项NULL VALUES ALLOWED用来决定该列以后是否可以装入空值。例如定义S表,对Snum列规定NOT NULL,这个规定的作用是保证S表中每个记录中对应Snum列的值将总是一个真正的值(即非空值),这个列实际上是表中的关键字。相反,表中其他任何列上的值都可以设置为空值,对这些列则可以输入NULL值或在添加数据时不对该列输入数据(在INSERT命令中,不列出该列的列名),系统将自动赋给其NULL值。对于空值的使用要非常小心,因为有时它会引起处理数据的不一致性。,3.1.2 表达式与函数,在对数据库的操作中,最终要关心的是数据本身。在数据库表中行与列的交叉处的数据是原始数据,从这些原始数据中,我们可以派生出有意义的各种结果。 数据可以用几种方式表示,可以直接表示它们,也可以派生它们。下面介绍SQL的不同类型的数据、函数以及表达式。,3.1.2 表达式与函数,数据 在SQL中,一个数据既可以用变量表示又可以用常量来表示。 常量 常量即其值不能变化的数据。SQL有许多丕匝鲍数据类型,同样也有许多不同类型的常量。表31有关数据类型的实例值中给出了几种不同类型的常量值。 注意:数值常量和字符常量可以直接给出,而其他一些类型的常量则需要加各自的前缀才能表示。,变量 变量即系统运行期间其内容可以发生变化的数据。变量要有变量名,取名的规则依赖于具体的SQL工具。变量值有不同的类型,也就是说,有什么样的SQL数据类型,就有这种数据类型的变量。,3.1.2 表达式与函数,函数 函数检查数据并依据数据计算出一个数据值。一个函数是一个并不太复杂的操作,这种操作不能用一个SQL命令完成,但它在实际应用中却很重要。当然,在嵌入方式下,对于SQL提供的函数所完成的功能来说,用由SQL的主语言编制的应用程序也能实现。SQL具有两种主要函数类:集合函数和值函数。,一集合函数 COUNT函数 格式1:COUNT(*) 取表中所有满足条件的行数; 格式2:COUNT(DISTINCT) 取表中满足条件但在指定的列名上有具体值的行数。在该格式下对那些列值为NULL的行不予计数。DISTINCT是可选项,可用来限定对那些列值相同的行只计数一次。,AVG函数 该函数用来计算出全部或部分满足特定条件的行中指定列的平均值,当然AVG只考虑数值类型的列。 MAX函数 该函数用来返回全部或部分满足特定条件的行中指定列的最大值,当然MAX也只考虑数值类型的列。,MIN函数 该函数用来返回全部或部分满足特定条件的行中指定列的最小值,同样MIX也只考虑数值类型的列。 SUM函数 该函数用来给出全部或部分满足特定条件的行中指定列的数据和,它也只对数值类型的列起作用。,3.1.2 表达式与函数,二值函数 字符串函数 数值函数 时间日期函数,3.1.2 表达式与函数,三、运算符和表达式 表达式由常量、变量和函数经由运算符以及括号连接而成(有时也可把单个的常量、变量和函数看作是表达式)。大多数表达式含有一个或多个运算符。在SQL3中,有5种不同类型的表达式,它们是:串表达式、数值表达式、日期时间表达式、区间表达式、条件表达式。,一个表达式可能很简单也可能很复杂,但不论它有多么复杂,表达式最终被计算并得到一个值。由于篇幅有限,我们不打算给出详细的介绍,只对上述5种类型的表达式以及所涉及的运算符作一简单说明。,3.1.2 表达式与函数,四、其他逻辑、比较运算符 BETWEEN IS NULL LIKE IN ALL、ANY、SOME EXISTS UNIQUE OVERLAPS,3.1.3 SQL命令和保留字,SQL命令语言是由只有与数据操作有关的一些命令组成。这些命令中有些完成数据定义功能,有些完成数据操作功能,有些完成数据控制功能。表32列出了部分SQL3的命令。,表32 SQL3的命令,SQL生成数据库的那一部分语言叫做数据定义语言(DDLData Definition Language),用来生成、修改、删除关系数据库的基本要素的部分。它提供完整定义数据库模式所必需的全部内容及数据库生成后的结构修改、删除等功能。这里的定义包括对表的定义,对视图的定义及对索引的定义等等。,32 SQL的数据定义功能,定义基本表的语句格式 CREATE TABLE ( NOT NULL , NOT NULL),3.2.1 基本表的定义、修改和删除,其他参数; 其中CREATE TABLE后跟要定义的表的名称,列名和数据类型中给出表的逻辑数据结构定义,即表中的列命名、数据类型选择并给出是否允许空值。各列名信息之间用逗号相隔,列名与类型说明之间、类型说明与是否允许空值之间用空格相隔。任选项“其他参数”与具体系统有关,这里不作说明。,表结构的修改 当需要贮存的信息结构发生变化时,用户可能需要改变原先表的定义,这就必须要修改表。SQL提供了在表定义中增加列的ALTER TABLE语句。 语句格式: ALTER TABLE ADD ; 此语句用来在已有表的右边增加一列。其中在ALTER TABLE后面的表名指定为哪个表增加列,ADD后面指定增加的列名及其数据类型,在这里不需要指定NOT NULL,对于增加的列都允许放置空值。当该命令执行后,原表中增加一列,并且系统为原表中所有行在该列的值均置以空值,真实数据加入时要使用UPDATE语句或交互方式下输入。,3.2.1 基本表的定义、修改和删除,例如:ALTER TABLE S ADD ADDRESS CHAR(30); 该例为S表增加了一个ADDRESS(地址)列。 尽管SQL提供了为一个表增加一列的语句,它并没有提供删除表的列、改变列名或改变列的数据类型的语句。因此,如果要这么做,那就必须生成一个新的表。,删除一个表 当某些表不再有用时,就应该把它们从数据库中删除掉。用DROP TABLE语句可以删除一个表。 语句格式: DROP TABLE ; 执行此命令将删除由表名指定的表的数据,并从系统数据字典中删除有关该表的全部描述。在该表上定义的索引和视图也自动撤消。,3.2.1 基本表的定义、修改和删除,视图的定义 在311节已经提到,视图是一个虚表,即它自身并不独立存在,但在用户看来好像是存在的。它不像表,视图没有自己独立存储的数据,因此它是依赖于表的存在而存在的。 定义视图的语句格式: CREATE VIEW (,) AS(SELECT命令);,3.2.2 视图,视图的定义就是把某一查询结果作为一个新的表“存储”起来。当需要时,对该视图可以进行查询与修改。实际上,执行CREATE VIEW语句的结果是把视图的定义存入系统数据字典中,定义中的SELECT语句(将在数据操纵功能一节介绍)并不执行,而要到对该视图进行操作时才执行。使用此语句必须注意以下几点:,视图名是要定义的视图的名字,同表名一样,要经常用到。 语句中的SELECT语句作为子查询将以虚拟表的形式得出结果。SELECT子查询中不能使用ORDER BY子句,也不能包含UNION(合并有类似结构的表的关系代数并操作符)操作,子句FROM 中的表名既可以是表,也可以是视图,即视图既可以根据表,也可以根据其他视图来定义。,在视图定义中可以包括连接,因此在SELECT子查询的FROM子句中可带多个表,连接后抽取用户所需要的列来组成一个视
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号