数据库基础教材_第1页
数据库基础教材_第2页
数据库基础教材_第3页
数据库基础教材_第4页
数据库基础教材_第5页
已阅读5页,还剩120页未读 继续免费阅读

下载本文档

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

文档简介

......./第1章数据库概述本章介绍数据库的一些基本术语和概念,介绍数据管理的几个阶段,以及关系数据库的一些特点.本章目标:完成本章内容后我们将能够:掌握数据库的术语和概念了解数据管理的几个阶段掌握关系型数据库1.1数据库常用的术语和基本概念〔1数据[Data]:是数据库中存储的基本对象.数据在大多数人头脑中的第一个反映就是数字.其实数字只是最简单的一种数据,是数据的一种传统和狭义的理解.广义的理解,数据的种类很多,例如:文字、图形、图像、声音、学生的档案记录、货运的运输情况等.描述事物的符号记录称为数据.描述事物的符号可以是数字,也可以是文字、图像、图形、声音、语言等,数据有多种表现形式,它们都可以经过数字化后存入计算机.举例:在学生档案中,描述一个学生的一条记录〔黎明,男,1988-08-08,XX,计算机专业,2001-07这就是数据.〔2数据库[DataBase],简称DB.数据库,顾名思义,是存放数据的仓库.只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的.所谓数据库是指长期储存在计算机内的、有组织的、可共享的数据集合.数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享.〔3数据库管理系统[DataBaseManagementSystem]简称DBMS如何科学地组织和存储数据,如何高效地获取和维护数据,完成这个任务的是一个系统软件-数据库管理系统.数据库管理系统是位于用户与操作系统之间的一层数据管理软件.数据库管理系统的主要功能:1数据定义功能:DBMS提供数据定义语言〔DataDefinitionLanguage,简称DDL,用户通过它可以方便地对数据库中的数据对象进行定义.2数据操纵功能:DBMS还提供数据操纵语言〔DataManipulationLanguage,简称DML,用户可以使用DML操纵数据实现对数据库的基本操作,如查询、插入、删除和修改等.3数据库的运行管理:数据库在建立、运用和维护时由数据库管理系统统一管理、统一控制,以保证数据的安全性、完整性、多用户对数据地并发使用及发生故障后的系统恢复.4数据库的建立和维护功能:它包括数据库初始数据的输入、转换功能,数据库的转储、恢复功能,数据库的重组织功能和性能监视、分析功能等.这些功能通常是由一些实用程序完成的.数据库管理系统是数据库系统的一个重要组成部分.〔4数据库系统[DataBaseSystem,简称DBS]数据库系统一般由数据库、数据库管理系统〔及其开发工具、应用系统、数据库管理员和用户构成.应当指出的是,数据库的建立、使用和维护等工作只靠一个DBMS远远不够,还要有专门的人员来完成,这些人被称为数据库管理员〔DataBaseAdministrator,简称DBA.数据库系统是指计算机系统中引进了数据库后的系统,其计算机硬件、软件如下图所示.下面用一个实体与数据库系统进行比较,例如数据库系统与图书馆的比较.数据库图书馆数据图书外存书库用户读者数据模型书卡格式数据库管理系统图书馆管理员数据的物理组织方法图书馆图书存放方法用户对数据库的操作读者对图书馆的访问〔使用数据操纵语言对数据检索、插入、删除、修改〔用普通语言借书、还书等1.2数据管理技术的产生和发展数据库技术是应数据管理任务的需要而产生的.数据的处理是指对各种数据进行收集、存储、加工和传播的一系列活动的总和.数据管理则是指对数据进行分类、组织、编码、存储、检索和维护,它是数据处理的中心问题.伴随着计算机技术的不断发展,数据处理及时地应用了这一先进的技术手段,使数据处理的效率和深度大大提高,也促使数据处理和数据管理的技术得到了很大的发展,其发展过程大致经历了人工管理、文件管理、数据库管理及分布式数据库管理等四个阶段.数据管理三个阶段比较人工管理阶段文件系统阶段数据库系统阶段时间-50年代中期50年代后期-60年代中期60年代后期—应用背景科学计算科学计算、管理大规模管理硬件背景无直接存取存储设备磁盘、磁鼓大容量磁盘软件背景没有操作系统有操作系统〔文件系统有DBMS处理方式批处理批处理联机实时处理批处理联机实时处理分布处理数据保存方式数据不保存以文件的形式长期保存,但无结构以数据形式保存,有结构数据管理考虑安排数据的物理存储位置与数据文件名打交道对所有数据实行统一、集中、独立的管理数据与程序数据面向程序数据与程序脱离数据与程序脱离实现数据的共享数据的管理者人文件系统DBMS数据面向的对象某一应用程序某一应用程序现实世界数据的共享程度无共享共享性差共享性高数据的冗余度冗余度极大冗余度大冗余度小数据的独立性不独立,完全依赖于程序独立性差具有高度的物理独立性和一定的逻辑独立性数据的结构化无结构记录内有结构整体无结构整体结构化用数据模型描述数据的控制能力应用程序自己控制应用程序自己控制由DBMS提供数据的安全性、完整性、并发控制和恢复能力〔1人工管理阶段该阶段指20世纪60年代以前,这一时期的计算机功能比较简单,主要用于科学计算.计算机外存储设备只有磁带和卡片等,计算机软件系统方面,还没有操作系统,也没有数据库系统等专门的数据管理软件,只有汇编语言.由于缺乏软件系统的支持,数据管理的工作由应用程序完成.在应用程序中不仅要规定数据的逻辑结构,还要设计数据的物理结构.这一阶段数据管理的特点是:不存储数据应用程序所对应的数据不单独存在,在程序运行时由数据卡片或数据磁带输入,运算后直接取走结果,源数据与结果都不保存.不具有数据独立性应用程序完全依赖于数据,不具有数据独立性,一旦数据的逻辑结构或物理结构发生变化,应用程序必须做相应的修改.数据不能共享数据是面向应用的,一个数据集只能对应一个应用程序.应用程序之间不能共享数据.数据大量冗余由于数据不能共享,因此即使两个应用程序使用到某些相同的数据,它们之间也无法相互利用对方的数据.〔2文件管理阶段该阶段指20世纪60年代早期到20世纪60年代后期.在这个时期,计算机开始大量用于非数值计算,磁盘,磁鼓等存储设备的出现大大增强了计算机的存取能力.软件方面,出现了操作系统,数据以文件的形式由操作系统的专门软件——文件管理系统,进行统一管理.其具有以下特点:数据以文件的形式长期保存在计算机中数据统一由操作系统组织成数据文件,并长期保存在磁盘存储器上.用户通过文件管理系统可以方便地进行访问与修改.数据的独立性有一定的提高由于文件的物理组织由操作系统完成,用户或者应用程序只须根据数据的逻辑结构,通过文件名进行访问,无须了解数据的物理结构,从而提高了数据的物理独立性.文件的组织形式多样化文件管理系统还为用户提供了多种文件组织形式,如顺序文件组织,索引文件组织,直接文件存取组织等.文件管理系统的出现,弥补了手工管理的一些缺陷,使得数据管理技术有了很大的提高,但是它在数据管理方面还存在一些不足,主要表现在以下几点:由于数据只能以文件为单位进行共享,不能实现以记录或数据项为单位的共享,因此数据还存在大量的冗余.数据缺乏逻辑独立性,应用程序与数据文件之间仍互相依赖,文件的逻辑结构一旦改变,应用程序也应做相应的修改.文件与文件之间相互对立,无法实现文件之间的相互联系,不能反映客观世界事物间的复杂联系.〔3数据库管理阶段20世纪60年代后期至今,由于计算机技术的迅速发展,磁盘存储技术取得重要进展,计算机更广泛地应用于管理.随着数据量的剧增,对数据管理提出了更高的要求:要求具有更高的独立性与共享性.文件管理技术已经不能适应上述要求.为了进一步减少数据冗余,满足多用户,多应用程序的数据独立与高度共享的需求,使数据为尽可能多的应用程序服务,出现了统一管理数据的专门软件系统——数据库管理系统〔databasemanagementsystem,DBMS.其具有以下特点:数据结构化数据库中的数据是按照一定的数据模型建立起来的相关的数据的集合,它既反映现实世界的客观事物,也反映事物之间的联系.数据结构化是数据库系统与文件系统的根本区别.数据独立性高数据库系统提供了数据的逻辑映射与物理映射,这样,数据库中的数据既有逻辑独立性,又有物理独立性.用户只须通过简单的局部逻辑结构来操作数据,无须考虑数据的全局逻辑结构及物理存储结构.因此确保了较高的数据独立性.实现数据的共享与最小冗余数据的共享性直接影响到数据的冗余度.数据库中的数据是面向整个系统,而不是面向某个应用,可以被多个用户共享.这样既可以保证最小的数据冗余,又可以避免数据的不相容性与不一致性.具有统一的数据管理和控制功能数据库系统中由数据库管理系统对数据进行统一的管理和控制.通过DBMS还可以保证数据库系统中数据的安全性,数据的完整性,数据的并发访问控制和数据的恢复.数据库技术在数据管理中的特点与优势,使得它在计算机数据管理中占据主导地位,成为各类信息系统的核心基础.1.2.分布式数据库系统〔DistributedDataBaseSystem,DDBS是在集中式数据库基础上发展起来的,是数据库技术与计算机网络技术、分布处理技术相结合的产物.分布式数据库系统是地理上分布在计算机网络不同结点,逻辑上属于同一系统的数据库系统,能支持全局应用,同时存取两个或两个以上结点的数据.分布式数据库系统的主要特点是:〔1数据是分布的.数据库中的数据分布在计算机网络的不同结点上,而不是集中在一个结点,区别于数据存放在服务器上由各用户共享的网络数据库系统.〔2数据是逻辑相关的.分布在不同结点的数据,逻辑上属于同一个数据库系统,数据间存在相互关联,区别于由计算机网络连接的多个独立数据库系统.〔3结点的自治性.每个结点都有自己的计算机软、硬件资源、数据库、数据库管理系统〔即LocalDataBaseManagementSystem,LDBMS局部数据库管理系统,因而能够独立地管理局部数据库.1.3关系型数据库一个关系型数据库由多个关系组成,每个关系是以二维表的形式组织数据的.介绍关系模型中一些术语关系〔Relation:一个关系对应通常说的一张表,如上表所示;元组〔Tuple:表中的一行即为一个元组;属性〔Attribute:表中的一列即为一个属性,给每一个属性起一个名称即属性名.如上表有六列,对应六个属性〔学号,姓名,年龄,性别,系和年级;主码〔Key:表中的某个属性组,它可以唯一确定一个元组,如上表中的学号,可以唯一确定一个学生,也就称为本关系的主码.域〔Domain:属性的取值范围,如人的年龄一般在1~150岁之间,大学生年龄属性的域是〔14~38,性别的域是〔男,女,系的域是一个学校所有系名的集合;分量:元组中的一个属性值;关系模式:对关系的描述,一般表示为:关系名〔属性1,属性2,属性3,…,属性n关系型数据库主要特点:一个关系〔表由行与列组成.在关系模式中,能唯一标识元组的属性集称为超键〔superkey;如果一个属性能唯一标识元组,且又不含有多余属性,那么这个属性称为候选键〔candidatekey;关系模式中用户正在使用的候选键称为主键〔primarykey.列是同质的,即同列所有分量是同类型的元素;用户能检索、查询表里的数据集.用户能把相关的表链接在一起,以便检索存储在不同表中的数据.关系数据库中的一个关系的限制关系中没有重复元组,任意元组在关系中都是唯一的元组的顺序无关紧要,即元组的次序可以任意交换.属性的顺序是非排序的,即它的次序可以任意交换.属性必须具有不同的属性名,不同的属性可来自同一个域.同一属性名下的诸属性值〔同列是同类型数据,且来自同一个域.所有的属性值都是原子的关系数据库系统的体系结构绝大多数数据库系统在总的体系结构上都具有三级模式的特征.三级模式是对数据的三个抽象级别:〔1外模式〔用户模式:也称为字模式,它是数据库用户〔包括应用程序员和最终用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示.外模式是保证数据库安全性的一个有力措施.每个用户只能看见和访问所对应的外模式中的数据,数据库中的其余数据是不可见的.〔2模式〔逻辑模式:是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图.一个数据库只有一个模式.定义模式时不仅要定义数据的逻辑结构,例如数据记录由哪些数据项构成,数据项的名字、类型、取值范围等,而且要定义数据之间的联系,定义与数据有关安全性、完整性要求.〔3内模式〔存储模式:一个数据库只有一个内模式.它是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式.例如:数据是否压缩存储,是否加密;数据的存储记录结构有何规定等.关系模型的三类完整性规则〔1实体完整性规则〔entityintegrityrule这条规则要求关系中元组在关键的属性上不能有空值.如果出现空值,那么关键值就起不了唯一标识元组的作用.〔2引用完整性规则〔referenceintegrityrule这条规则要求"不允许引用不存在的元组".这条规则也称为"参照完整性规则".举例说明:学生实体和专业实体可以用下面的关系表示,其中主码用下划线标识:学生〔学号,姓名,性别,专业号,年龄专业〔专业号,专业名这两个关系之间存在着属性的引用,即学生关系引用了专业关系的主码"专业号".显然,学生关系中的"专业号"值必须是确实存在的专业的专业号,即专业关系中有该专业的记录,这也就是说,学生关系中的某个属性的取值需要参照专业关系的属性取值.〔3用户定义的完整性规则这是针对某一具体数据的约束条件,由应用环境决定.它反应某一具体应用所涉及的数据必须满足的语义要求.第2章MySQL软件安装本章描述如何在Windows操作系统平台上安装MySQL服务器和客户端软件,安装MySQL服务器的步骤以及安装过程中的注意事项,同时还介绍MySQL客户端的工具的安装和使用.除了详细的操作步骤外,为了让读者能更形象地理解安装过程,还配备大量安装截屏图.本章目标:完成本章内容后我们将能够:掌握MySQL安装过程熟练MySQL客户端安装过程熟练应用MySQL客户端2.1安装MySQL读者可以从网站〔上下载MySQL5.0的软件,解压后双击Setup的文件,几秒钟后,会出现图2.1所示的窗口,这时就可以开始进行MySQL的安装了.选择窗口中的Next按钮.这时会出现如图2.2所示的窗口.图2.1启动安装向导图2.2选择安装类型在如图2.2所示的窗口中,会询问读者选择何种方式安装MySQL.选择Complete选项,接着会询问读者是否已准备好安装.如果已准备好,那么选择Next.这是会出现如图2.3所示的窗口.准备好后,选择Install.如果希望更改内容,可选择Back并更改一些安装参数.如果选择Install,则安装过程就会开始并显示其进程,如图2.4所示.图2.3准备安装MySQL图2.4MySQL正在安装中几秒钟后,会出现如图2.5所示的窗口.在该窗口中选择SkipSign-Up并单击Next,读者可在稍后进行登记.这时会出现如图2.6所示的窗口.图2.5登记窗口图2.6安装向导完成在图2.6中标记ConfiguretheMySQLServernow复选框后,选择Finish.这时会出现图2.7所示的窗口.选择Next,这时会出现如图2.8所示的窗口.图2.7开始配置MySQL图2.8选择所需要的配置在图2.8中,选择StandardConfiguration选项,然后单击Next.以后,当读者已有了一定经验并具有了MySQL的完整知识后,可以在重新安装MySQL时选择DetailedConfiguration选项.在这里选择DetailedConfiguration选项,选择Next后,会出现如图2.9所示的窗口.图2.9选择机器类型在图2.9中,根据需要选择机器配置类型,选择DeveloperMachine,选择Next,会出现如图2.10所示的窗口.图2.10选择应用类型在图2.10中,根据需要选择安装数据库应用类型,选择MultifunctionalDatabase,选择Next,会出现如图2.11所示的窗口.图2.11选择表空间位置在图2.11中,根据需要选择表空间存放的位置,选择Next,会出现如图2.12所示的窗口.图2.12选择连接数目在图2.12中,根据需要选择连接数目.如果想指定连接数目,必须选择ManualSetting,在后面的下拉框中输入要指定的连接数目,如不选择ManualSetting,但是在后面的下拉框中输入要指定的连接数目,这是无效的设置.现在选择ManualSetting,在后面的下拉框中输入连接数目30,选择Next,会出现如图2.13所示的窗口.图2.13选择网络端口在图2.13中,可以设置网络端口号,默认端口号3306,也可以进行修改.该端口号会在以后和Java程序进行连接时用到.在此建议读者不要修改端口号.确定端口号之后,选择Next,会出现如图2.14所示的窗口.图2.14选择字符集在图2.14中,可以设置数据库的字符集,以便解决字符乱码问题,默认字符集latin1,也可以进行修改.默认的字符集不支持汉字,可以选择gb2312或utf8字符集,就可以支持汉字了.因此在图2.14中,选择ManualSelectedDefaultCharacterSet/Collation,在下拉框中选择需要的字符集,选择Next,会出现如图2.15所示的窗口.图2.15作为WindowsService安装MySQL在图2.15中,选择InstallAsWindowsService选择并单击Next.这时会出现图2.16所示的窗口;此时读者必须输入由MySQL创建的用户口令.该用户的名称为root.当然,读者也可以给出自己的新口令;但在本书中,我们假设读者使用root.读者必须输入该口令两次.为了安全起见,这些口令以星号的形式出现.然后单击Next.这时会显示如图2.17所示的窗口.图2.16使用root作为口令图2.17做好开始配置的准备完成MySQL的配置后,单击图2.17所示窗口中的Execute按钮.这时会出现以复选标记标记的配置进行的状态,如图2.18所示.这个过程只需几秒钟时间.当该进程成功完成后,会出现图2.19所示的窗口.图2.18配置正在进行中图2.19MySQL的配置完成选择图2.19中的Finish,则安装过程结束,且MySQL数据库服务器已被安装.为检查其是否工作正常,可在操作系统的ControlPanel〔控制面板中选择AdministratorTools〔管理工具,然后选择Service〔服务,如图2.20所示.图2.20MySQL正在运行如果MySQL作为一个服务器出现在图2.20所示的列表中,则表明MySQL正在运行.下一个问题是读者是否使用数据库服务器,换言之,读者是否可成功登录.这很容易检查,方法是从任务栏启动程序MySQLCommandLineClient,如图2.21所示.图2.21启动MySQLCommandLineClient程序MySQLCommandLineClient程序会要求用户输入口令root.输入该口令后,会出现如图2.22所示的窗口.在该窗口中,输入如下这条简单的SQL语句〔不要遗漏分号并按回车键:selectversion〔;图2.22MySQLCommandLineClient程序需要口令结果显示在图2.23中.如果一切工作正常,在图2.23中键入exit关闭窗口.这时表明已正确地安装了MySQL.图2.23一切工作正常2.2MySQL客户端工具2.2.1客户端工具〔Navicat8安装双击"navicat8_mysql_cs.exe"文件,出现如图2.24所示的窗口.图2.24Navicat开始安装界面单击"下一步"按钮,进入图2.25所示的窗口.图2.25是否同意协议在图2.25中,选择"我同意",可以继续安装,选择"我不同意"就不可以继续安装,这里选择"我同意",点击"下一步"按钮,进入图2.26所示的窗口.图2.26选择安装路径在图2.26中,选择安装路径.点击"下一步"按钮,进入图2.27所示的窗口.图2.27选择开始目录在图2.27中,输入快捷方式文件夹名称.点击"下一步"按钮,进入图2.28所示的窗口.图2.28创建快捷方式图标在图2.28中,选择"Createadesktopicon",可以在桌面上自动创建快捷图标;选择"CreateaQuickLaunchicon",在快速启动中创建快捷图标,这里选择"Createadesktopicon",点击"下一步"按钮,进入图2.29所示的窗口.图2.29准备安装在图2.29中,选择"安装",开始进行安装,进入图2.30所示的窗口.图2.30安装进度在图2.30中经过几秒钟,安装就完成,出现图2.31所示的窗口.图2.31安装完成在图2.31中,点击"完成",安装完成.然后按照图2.32所示的窗口,进入客户端的连接界面如图2.33所示.图2.32启动客户端程序图2.33客户端连接MySQL在图2.33界面上,点击"连接",进入图2.34所示的窗口.图2.34连接参数在图2.34中,输入"连接名"信息,输入密码,如图2.35所示.图2.35参数设置在图2.35中,点击"连接测试"按钮,测试一下数据库连接状态,如果成功就出现图2.36所示的界面,点击"确定"按钮,进入图2.37所示的客户端主界面.图2.36测试成功图2.37客户端主界面在图2.37中,将鼠标移动到左边树结构的跟结点上,点击鼠标右键,选择"创建数据库",如下图2.38所示的界面.图2.38创建新数据库在图2.38中,点击"创建数据库",进入下图2.39所示的界面.图2.39设置数据库名称和字符集在图2.39中,输入数据库名称〔imti,同时要选择数据库中的字符集〔utf8,在整理下拉列表中选择utf8_general_ci,这一点需要注意,一般与安装MySQL服务器端字符集相对应,否则汉字会出现乱码.在图2.39中,配置完成后,单击"确定"按钮,进入下如图2.40所示的界面.图2.40数据库管理界面在图2.40中,点击左边的树结构中的数据库"imti",然后在单击"imti"下的"表",在"表"上点击鼠标右键,如下图2.41所示的界面.图2.41创建表在图2.41中,选择"创建表",在图2.42中创建表中的字段〔包括字段名称、类型、长度、是否允许为空、主键等信息,这里需要注意的是,当字段类型为字符串类型时,要选择字符集与当初安装数据库的字符集一致〔utf8,整理下拉列表中选择对应的信息,如图2.42所示.图2.42创建表结构创建表结构完成后,点击"保存"按钮,弹出保存窗口,如图2.43所示.图2.43输入表名称在图2.43中,输入数据表名称之后,点击"确定"按钮,这样就创建表结构完成.关于怎样修改表结构、删除表结构,这里就不作详细介绍了.第3章关系数据库标准语言SQLSQL是结构化查询语言StructuredQueryLanguage的缩写.查询是SQL语言的重要组成部分,但不是全部,SQL还包括数据定义、数据操纵和数据控制功能等部分.SQL已经成为关系数据库的标准数据语言.SQL〔StructuredQueryLanguage语言是1974年由Boyce和Chamberlin提出的.1975~1979年,IBM公司的SanJoseResearchLaboratory研制了著名的关系数据库管理系统原型SystemR,并实现了这种语言.经过各公司的不断修改、扩充和完善,1987年,SQL语言最终成为关系数据库的标准语言.1986年美国颁布了SQL语言的美国标准,1987年国际标准化组织将其采纳为国际标准.SQL由于其使用方便、功能丰富、语言简洁易学等特点,很快得到推广和应用.SQL语言集数据定义〔datadefinition、数据操作〔datamanipulation和数据控制〔datacontrol功能于一体,充分体现了关系数据库语言的特点和优点.本章目标:完成本章内容后我们将能够:掌握SQL简史及功能特性了解SQL语句的结构掌握常量的使用掌握SQL的数据类型掌握表达式和运算符的使用了解控制语句的分类和规则3.1SQL概述SQL语言简单易学、风格统一,利用简单的几个英语单词的组合就可以完成所有的功能.它不仅包含数据查询功能,还包括插入、删除、更新和数据定义功能.SQL的用户可以是应用程序,也可以是终端用户.3.1.1SQL和SQL标准简史SQL语言是IBM公司在20世纪70年代开发的关系数据库原型SYSTEMR的一部分.在20世纪70年代初,Dr.E.F.Codd首先提出了关系模型.70年代中期,IBM公司在研制SYSTEMR关系数据库管理系统中研制了SQL语言.1986年美国国家标准协会和国际标准化组织发布的ANSI/ISO标准正式确认SQL的标准地位.1989年.美国ANSI采纳在ANSIX3.135-1989报告中定义的关系数据库管理系统的SQL标准语言,称为ANSISQL89.SQL语言主要包括数据定义、数据控制、数据操纵和数据查询等功能,其中最重要的是数据查询功能.SQL是一种非过程化语言.不过,大多数数据库系统对SQL进行了有针对性的扩展使它们成为了过程化语言.现在SQL广泛地被采用,它使全部用户,包括应用程序员、DBA管理员和终端用户受益匪浅,其优点主要有以下几点:非过程化语言:非关系数据模型的数据操纵语言是面向过程的,若要完成某项请求,必须指定存取路径,而SQL是一个非过程化的语言,它让数据库系统负责决定怎样处理数据的查询问题.当进行数据操作时,只要指出要做什么,而无需指出怎么做,因此用户无需了解存取路径,存取路径的选择以及SQL语句的操作过程由系统自动完成,这样提高了数据的独立性.综合统一:非关系模型的数据语言分为模式定义语言和数据操纵语言,其缺点是,当要修改模式时,必须停止现有数据库的运行,转储数据,修改模式并编译后再重装数据库,因此很麻烦.SQL集数据定义、数据操纵和数据控制功能于一体,语言风格统一,可独立完成数据库生命周期的所有活动,包括定义关系模式、查询、更新、建立数据库、数据库安全性控制等一系列操作的要求,这就为数据库应用系统开发提供了良好的环境.可移植性:由于所有主要的关系数据库管理系统都支持SQL语言,用户可将使用SQL的技能从一个RDBMS转到另一个,所以用SQL编写的程序都是可以移植的.两种使用方式:第一个方式,用户可以在终端键盘上键入SQL命令,对数据库进行操作,称之为自含式语言.第二种方式,将SQL语言嵌入到高级语言程序中,此为嵌入语言.在这两种不同的使用方式下,SQL语言的语法结构基本上是一致的,它以统一的语法结构提供两种不同的使用方法,为用户提供了极大的灵活性与方便性.语言简洁,易学易用:SQL语言功能极强,但由于设计巧妙,语言十分简洁,而且SQL语言语法简单.完成数据定义、数据操纵、数据控制的核心功能只用了9个动词:CREATE、DROP、ALTER、SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE等,因此易于学习,容易使用.3.1.2SQL的功能和特性SQL是应用程序与DBMS进行通信的一种语言和工具,将DBMS的组件联系在一起,可以为用户提供强大的功能,使用户可以方便地进行数据库的管理、数据的操作.通过SQL命令,程序员或数据库管理员〔DBA可以完成以下功能.·数据定义:SQL能让用户自己定义所存储数据的结构,以及所存储数据各项之间的关系.·数据更新:SQL为用户和应用程序提供了添加、删除、修改等数据更新操作,使用户或应用程序可以向数据库中增加新的数据、删除旧的数据以及修改已有数据,有效地支持了数据库数据的更新.·数据查询:SOL使用户或应用程序可以从数据库中按照自己的需要查询数据并组织使用它们,SQL不仅支持简单条件的检索操作,而且支持子查询、查询的嵌套、视图等复杂的查询.·保护数据安全:SQL能对用户和应用程序访问数据、添加数据等操作的权限进行限制,以防止未经授权的访问,有效地保护数据库的安全.·维持数据完整性:SQL使用户可以定义约束规则,定义的规则将存在于数据库内部,可以防止因数据库更新过程中的意外或系统错误而导致的数据库崩溃.·修改数据库结构:SQL使用户或应用程序可以修改数据库的结构.·SQL是一种易于理解的语言,同时又是综合管理数据的工具.作为现在数据库市场普通应用的语言,它具有以下一些特性.·确定的标准:美国国家标准协会〔ANSI和国际标准化组织〔ISO在1986年制订了SQL的标准,并在1989年、1992年与1999年三次进行了扩展,使得所有厂商都可以按照统一标准实现对SQL的支持,SQL语言在数据库厂家之间具有广泛的适用性.虽然在不同厂家之间SQL语言的实现方式存在某些差异,但是通常情况下无论选择何种数据库平台,SQL语言都保持相同.·软件提供商的独立性:所有主流的DBMS软件提供商均提供对SQL的支持,SQL标准的确立使不同的厂商可以独立地进行DBMS软件的设计,查询、报表生成器等数据库工具能在许多不同类型的SQL数据库中使用.·各大公司的支持:SQL由IBM研究人员发明,然后得到了Microsoft公司、Oracle公司等数据库市场各大软件公司的支持,保证了SQL今后的发展.·数据的多视化:可以通过使用SQL产生不同的报表和视图,将数据库中数据从用户所需的角度显示出来供用户使用,具有很大的灵活性.同时,SQL的视图功能也能提高数据库的安全性,并且能满足特定用户的需要.·程序化数据库访问:SQL语句既能用于交互式访问也能用于程序化访问,这样应用程序就具有很大的灵活性,可以将这两种方式结合起来设计更好的程序.·可移植性:基于SQL的数据库产品能在不同计算机上运行,也支持在不同的操作系统上运行,还可以通过网络进行访问和管理.·应用程序的支持:在数据库发展的初期,SQL支持基于主机的应用程序;随着计算机技术的发展,客户机/服务器体系结构出现,SQL使每个系统处于最佳工作状态;而Internet和WWW的迅速发展,建立了以SQL作为应用程序和数据库连接的标准;Java的出现也引入了SQL,SQL在最新的编程语言中有了有效的应用.·可扩展性和对象:面向对象编程技术的兴起,使数据库市场也面临对象技术的引入,各个SQL数据库厂商正在扩展和提高SQL对对象的支持.3.1.3SQL语句的结构所有的SQL语句均有自己的格式,每条SQL语句由一个谓词开始,谓词描述该语句要产生的动作.因此,SQL语句可以被划分为3个部分:SQL操作、目标和条件.SQL操作和目标是必要的,至于条件,则根据执行的SQL操作决定其是否可选.〔1SQL操作SQL操作语句有4种基本操作:SELECT、INSERT、UPDATE、DELETE.每一个操作都是SQL语句名.这些操作语句在后面的章节将分别进行介绍.〔2目标所有的SQL操作语句都在一个或多个数据库表或视图上进行操作.目标组件的目的是定义那些表或视图.根据使用的语句不同,该组件也不同,例如,SELECT和DELETE语句具有相似的目标结构,而INSERT和UPDATE语句则具有不同的目标结构.〔3条件使用WHERE条件语句说明的条件定义了被SELECT、UPDATE或DELETE语句操作的特定行,而它最终是求得每行数据的TRUE或FALSE值,而且该行为控制了该操作是否发生在每一行上.3.1.4SQL的未来以访问二维表数据为主的SQL和XML的结合成了SQL的一个发展方向.SQL和XML结合的第一步是将关系型数据作为XML格式发布.XML发布是合乎逻辑的起点,因为它可以容易地在XML中代表SQL结果集合,因为很多的动态网页都是由SQL查询来提供的.传统的方法要求用程序访问结果集合和用程序构建网页.新方法以完全公布的方式制作动态网页,利用SQL-to-XML查询生成数据的XML表示,并利用XSLT〔可扩展样式表语言转换将XML融入到HTML中.最初这些虚拟文档是利用专有的SQL扩展来创建的.现在有了一种叫做SQL/XML的新ISO/ANSI标准,这项标准定义了一种通用的方法.目前,SQL/XML得到了Oracle和DB2的支持.它定义了用于这些产品中的本机XML数据类型的面向XML的运算符.不过,SQLServer现在还不支持XML数据类型或SQL/XML扩展.3.2常量常量也称为字面值或标量值,是表示一个特定数据值的符号.常量的格式取决于它所表示的值的数据类型.同其他编程语言一样,SQL也提供了对常量的支持,以方便用户更好更灵活地使用SQL语句.SQL支持数字、字符串、时间和日期、符号常量等4种常量.3.2.1数字常量整数和浮点数类型的数据都可以作为常量使用.整形常量由没有用引号括起来且不含小数点的一串数字表示,例如11111.在Danwei数据表中,如果想列出编号在15以上的员工的名字,可以使用下面的SQL语句:SELECTnameSELECTnameFROMDanweiWHEREid>15在SQL中,常量前面也可以加上加号或减号.如+700,-100等.对于浮点数据类型的常量,通常规定使用符号E,如6.25E5,+6.25E5,6.05E-7.其中,E代表"乘以10的几次方".所以,6.25E5就代表常量6.25×字符串常量字符串常量括在单引号内并包含字母数字字符〔a~z、A~Z和0~9以及特殊字符,如感叹号〔!、at符〔@和数字号〔#.字符串常量的引入,大大方便了人们使用SQL语句,如查询、添加等操作.例如,在Danwei数据库中,查找名字叫作"王五"的工作人员的详细情况,可以使用下面的SQL.语句:SELECT*SELECT*FROMDanweiWHEREname=’王五’SQL标准中规定,字符串常量要包括在单引号中,例如’王五’、’张三’、’李四’,如果字符串常量中包括单引号,在其之前再加上一个单引号,以表示其是字符串常量中的一个字符,如:’Idon"tknow’.注意:如果单引号中的字符串包含一个嵌入的引号,可以使用两个单引号表示嵌入的单引号.对于嵌入在双引号中的字符串则没有必要这样做.空字符串用中间没有任何字符的两个单引号来表示.注意:如果单引号中的字符串包含一个嵌入的引号,可以使用两个单引号表示嵌入的单引号.对于嵌入在双引号中的字符串则没有必要这样做.空字符串用中间没有任何字符的两个单引号来表示.3.2.3时间和日期常量在使用时,也要将时间和日期常量用单引号括起来.例如:’04/15/99’〔日期常量,’15:30:20’〔时间常量.如果要在Danwei数据库中查询启动时间早于SELECT*SELECT*FROMDanweiWHEREgongcheng<TO_DATE〔‘2008-02-02’,’该例中使用了Oracle数据库系统中的TO_DATE函数,来将一个字符串常量转换为Oracle的内部数据格式.大多数数据库系统都提供了时间和日期的转换函数,以使系统中时间和日期的格式得以统一.注意:通常时间和日期的使用都必须结合转换函数一起使用,以保证进行操作时,时间和日期的格式是相同的.注意:通常时间和日期的使用都必须结合转换函数一起使用,以保证进行操作时,时间和日期的格式是相同的.3.2.4符号常量除了上面3种常量外,SQL语言还包含了许多特殊的符号常量,如CURRENT_DATE、USER、SYSTEM_USER、SESSION_USER等等.这些都是在当前数据库系统中使用得比较多且很有用的符号常量.例如,在Danwei数据库中,查询当前正在进行的项目的信息,可以使用下面的SQL语句:SELECT*SELECT*FROMDanweiWHEREgongcheng<CURRENT_DATE符号常量CURRENT_DATE能生成当前日期的值.注意:在某些数据库产品中,是通过内嵌函数而不是符号常量来访问系统值,如在Sybase中是通过GETDATE〔函数.注意:在某些数据库产品中,是通过内嵌函数而不是符号常量来访问系统值,如在Sybase中是通过GETDATE〔函数.3.3数据类型如果您曾经使用过某种编程语言,那么一定对数据类型的概念很熟悉.数据类型是数据的一种属性,代表数据所表示信息的类型.关系数据库提供了很大范围的数据类型供用户使用,包括字符串数据类型、数字数据类型、日期时间数据类型及大型对象等.关系数据库中的字符串数据类型基本上也可以拥有其他类型的数据,但这些数据只是作为字符串来对待的.目前,大多数的关系数据库系统产品均提供了丰富的数据类型,并且在不同的系统中,提供的数据类型有一定的差异.有时甚至在两种系统中名称相同的数据类型,其表达的含义也可能不相同.另外,字符串数据、时间数据在SQL语句中使用时都必须用单引号包括,而数字数据则不必包括在单引号中.若将数字数据包括在单引号中,它将被作为字符串数据来对待.这是数字数据类型和其他数据类型之间一个重要的差异.3.3.1数字数据类型数字数据类型是可以不进行数据转换而直接参与算术运算的数据,即数字数据类型可以直接在数学表达式中使用.数字数据类型在使用时不必包括在单引号中.一般来说,数字数据类型可以分成两类:·整数数据类型:整数数据类型只存储整数,通常叫做INTEGER、INT、NUMBER等.这种数据类型的列一般存储的是计数值、数量或年龄等.所有的关系数据库系统都提供了对算术运算符的支持,提供了用于整数计算的聚集函数以计算所有数值的最大值、最小值、总值、平均值以及计数值.·浮点数数据类型:浮点数数据类型存储的是浮点数,通常称精确的小数数字为DECIMAL或NUMERIC,一般的浮点数称为FLOAT、REAL.等.对于精确的小数通常可以定义它们的精度〔小数点两边数字的个数和位数〔小数点后数字的个数.例如,需要一个精确小数,精度为7,位数为4,则应该描述为DECIMAL〔3,4或NUMERIC〔3,4.不过,在不同的关系数据库系统中,精确小数的精度和位数的定义可能会有所变化.注意:DECIMAL是一个十进制数.小数点的位置由数字的精度〔p和小数位〔s确定.精度是数字的总位数,必须小于32.小数位是小数部分数字的位数且总是小于或等于精度值.如果未指定精度和小数位,则十进制值的默认精度为5,默认小数位为0.注意:DECIMAL是一个十进制数.小数点的位置由数字的精度〔p和小数位〔s确定.精度是数字的总位数,必须小于32.小数位是小数部分数字的位数且总是小于或等于精度值.如果未指定精度和小数位,则十进制值的默认精度为5,默认小数位为0.有些系统中提供了特定的货币数据类型〔小数点后面恰好包含两位数字的精确小数,例如,在SQLServer中,货币数据的数据类型是Money和Smallmoney;Money数据类型要求8个存储字节,Smallmoney数据类型要求4个存储字节.而对于没有提供货币数据类型的系统,可以用定义小数点后数字个数为2个的精确小数类型来替代.当然,也可以将数字数据存储在字符串中.例如,对于邮政编码、电话号码这样的数据,它们虽然由数字组成,但也可以将其存在字符串中,因为许多系统中会自动删除数据开头的0,在这样的系统中,以0开头的邮政编码和电话号码就不能正确存储.同时,所有的关系数据库系统都为数字数据类型提供了很多内嵌函数,可以很方便地使用这些内嵌函数进行特定的计算,如POWER〔函数可以进行求幂运算,这大大方便了用户的使用.3.3.2字符串数据类型字符串数据类型是指不能成为算术操作的直接目标的单字节或多字节数据字符串.字符串数据类型用于存储字母、数字和特殊字符.在使用时,必须为字符串加上单引号.一般来说,字符串数据类型有两种基本形式:·定长字符串〔CHAR:CHAR的长度属性在1~254之间,并包括1和254.对于CHAR,不论实际存放的数据是多长,在内存中总是占据相同的空间,系统会自动插入固定的字符来填满剩余的空间.一般来说,在定义定长字符串时,必须根据实际情况指定字符串的长度,以保证字符串的长度足够使用,又不至于造成存储空间的浪费;·变长字符串〔VARCHAR:在实际应用中,很多情况下无法明确确定所需字符串的长度,此时,可以应用变长字符串.在变长字符串中,存放的字符长度允许不同,只要不超过系统支持的最大限制,例如,可以将长度为9的字符串插入VARCHAR〔15中,而该字符串的长度将仍然为9.注意:字符串的最大长度在不同系统中可能会有很大变化.例如,Oracle中提供给定长字符串CHAR类型多达2000个字节长度,而变长字符串则为4000个字节长度.注意:字符串的最大长度在不同系统中可能会有很大变化.例如,Oracle中提供给定长字符串CHAR类型多达2000个字节长度,而变长字符串则为4000个字节长度.另外,还有许多特殊的字符串类型,如图形字符串类型、二进制字符串类型等.同时,一些系统为大型文本提供特殊字符数据,通常称为LOAD或TEXT.关系数据库系统也为字符串类型数据提供了很多内嵌函数,以方便用户进行字符串的转换、字符串的截取等等,如LOWER〔Str函数用于将字符串"Str"中的大写字母转换成小写字母,而UPPER〔Str函数则可以将字符串"Str"中的小写字母转换成大写字母.3.3.3日期时间数据类型日期时间数据类型是日期、时间以及时间戳记的表示,用于存储日期、时间、时间与日期的组合.日期时间值也可以用于某些算术运算和字符串运算,并且与某些字符串是相容的.与其他数据类型一样,日期和时间的值也存储在列表中.在SQL标准中有三种用来存储日期和时间的数据类型:〔1DATE用于存储日期数据,可分为3个部分〔年、月、日.其格式为:YYYY〔year-MM〔Month-DD〔day有效范围为:0001-01-01到9999-12-31.例如,2008-2-10.〔2TIME用于存储时间数据,是用24小时制式来指定一天内的时间值,分为3个部分〔小时、分钟、秒.其格式为:HH:MI:SS.nn…有效范围为:00:00:00…到23:59:59.999….例如,20:15:10.〔3TIMESTAMP用于存储日期和时间数据,分为7个部分〔年、月、日、小时、分钟、秒及微秒.其格式为:YYYY-MM-DDHH:MI:SS.nn…有效范围为:0001-01-0100:00:00…到9999-12-3123:59:59.999….例如,2008-2-1020:15:10注意:不同数据库系统处理日期时间数据的方式有很多种,日期的存储和显示方法都可以变化.这与很多国家的习惯有关,如美国习惯用month/day/year的格式来表示日期,用hour:minuteam/pm的格式来表示时间,例如注意:不同数据库系统处理日期时间数据的方式有很多种,日期的存储和显示方法都可以变化.这与很多国家的习惯有关,如美国习惯用month/day/year的格式来表示日期,用hour:minuteam/pm的格式来表示时间,例如10/2/2008,5:27pm.SQL标准中还提供了INTERVAL来存储时间间隔.如果是一个年—月间隔,则组合了日期字段YEAR、MONTH等,例如,’06-05’表示6年零5个月的时间间隔;如果是一个日—3.4SOL表达式表达式是符号与运算符的组合,简单的表达式可以是一个常量、变量、列或标量函数,也可以用运算符将两个或更多的简单表达式联接起来组成复杂的表达式.表达式的应用,使SQL的查询操作有了更大的灵活性.一个表达式返回的值,不仅可以用来计算查询返回的数据,还可以用于限制筛选查询返回的行.数据库中基本的数据类型,如数字数据类型、字符串数据类型、时间和日期数据类型等,都可以在表达式中使用.SQL标准中规定了4种能用于表达式中的运算符:加号〔+、减号〔-、乘号〔*和除号〔/.在SQL中,这四种运算符的优先级与数学中的优先级相同,乘除的优先级高于加减的优先级,乘除具有相同的优先级,加减之间也具有相同的优先级.它们都可以在同一表达式中使用,具有相同优先级的符号按照从左到右的顺序来计算.例如,列出数据库Danwei中所有项目的项目编号、员工ID号及项目的利润,可以使用下面的SQL语句:SELECTnumber,id,shou-zhiSELECTnumber,id,shou-zhiFROMDanwei在SQL中也可以使用括号使运算式的表达更加清晰,这样就可以编写复杂的条件语句以便更好地查询数据,增加了语句的可读性,并使SQL语句更易于维护.例如,查询数据库Danwei中所有利润大于3000元的项目编号及员工ID号,可以使用下面的SQL语句:SELECTnumber,idSELECTnumber,idFROMDanweiWHERE〔shou-zhi>3000同编程语言一样,SQL表达式中进行运算的两个值,其数据类型必须相同.不能将不同类型的数据随意进行操作.SQL标准中也支持数据类型的自动转化,可以将数据从整型自动转化到浮点型.这样就可以在数字表达式中同时使用这些数据类型,而不会造成错误.另外,在表达式中还可以使用比较运算符〔=,<>,<,>,>=,<=、逻辑运算符〔AND,OR,NOT,ANY,ALL等很多其他的运算符.如果两个表达式是用比较或者逻辑运算符组合的,则结果的数据类型是布尔型,其值有三种:TRUE、FALSE或UNKNOWN.如果两个表达式是用算术运算符、位运算符或者字符串运算符组合的,则结果的数据类型由运算符确定.复杂的表达式由很多符号与运算符构成,得出一个单值结果,通过对子表达式进行组合来确定结果表达式的数据类型、排序规则、精度和值,进行计算时,每次组合两个表达式,直到得到最后结果.表达式中元素组合的顺序由表达式中运算符的优先级决定.3.5SQL控制语句每条SQL语句均由一个关键字开头,这个关键字描述了这条语句将要执行的动作,如SELECT、CREATE、INSERT、UPDATE等.每个关键字后都跟了一个子句,子句可以指定语句作用的数据,也可以提供语句作用的更详细的情况.子句可以包含表名、字段名,还可以包含表达式、常量及其他的一些关键字〔如AND、NOT、OR等.3.5.1语句的分类语句是SQL的主体,SQL中的操作都是由SQL语句实现的.SQL语句主要分为4类:数据定义类、数据操作类、访问控制类、事务控制类.〔1数据定义类.SQL中包含了定义数据的语句,主要包括以下几种:·CREATEDATABASE创建数据库·CREATETABLE创建表·DROPTABLE删除表·ALTERTABLE修改表的结构·CREATEVIEW创建视图·DROPVIEW删除视图·CREATEINDEX创建索引·DROPINDEX删除索引〔2数据操作类.SQL中包含了操作数据的语句,主要包括以下几种:·INSERT添加记录·UPDATE修改记录·DELETE删除记录·SELECT检索数据〔3访问控制类.SQL中包含了控制访问的语句,主要包括以下两种:·GRANT授予权限·REVOKE撤消权限〔4事务控制类.SQL中包含了控制事务的语句,主要包括以下两种:·COMMIT提交事务·ROLLBACK取消事务上面列出了SQL中使用的基本SQL语句,还有许多SQL语句并没有列出,如果读者有兴趣可以参考相关的SQL资料.3.5.2语句的规则虽然SQL中并没有规定SQL语句应该怎样书写,但是,在SQL语句中最好按照统一的格式书写,以使SQL语句清晰易懂.SQL是一门格式自由的语言,既不要求在一行放置的单词数,也不要求断行的地方.但是,一般来说,SQL中每一个子句都从一个新的行开始,过长或复杂的子句放在附加的行,这样SQL语句就显得比较清晰明了.例如:SELECT*FROM表名WHERE条件SELECT*FROM表名WHERE条件或者SELECT*FROM表名WHERE条件SQL语句不区分大小写.一般来说,SQL语句中的关键字如SELECT、FROM等使用大写字母,表名的第一个字母采用大写,而表名的其他字母都采用小写字母,表中列的名称都采用小写字母.在这种约定下,编写的SQL代码就比较容易阅读.例如:SELECTnameSELECTnameFROMDanweiWHEREid=10注意:一些数据库允许指定数据库中使用的名称是否区分大小写.SQL中关键字的大小写并不会影响SQL语句执行结果.但是,SQL语句中数据的大小写对数据库则是敏感的.例如,数据库存储字符串数据时,如果将字符串以大写字母的方式存储,而访问时若以小写字母进行比较,则无法找到匹配的字符串,这时应该进行大小写的转换.注意:一些数据库允许指定数据库中使用的名称是否区分大小写.SQL中关键字的大小写并不会影响SQL语句执行结果.但是,SQL语句中数据的大小写对数据库则是敏感的.例如,数据库存储字符串数据时,如果将字符串以大写字母的方式存储,而访问时若以小写字母进行比较,则无法找到匹配的字符串,这时应该进行大小写的转换.数据库中的数据对大小写是敏感的,假设存储数据时名字都是小写,则在查找名字为大写的数据时,查询将找不到任何记录.因此,数据的大小写会影响SQL语句的执行结果.花括号"{}"表示至少选择一个选项.若选项之间用逗号分隔,则可以选择一个选项也可以选择多个选项.例如,{apple,banana,pear}表示必须从中选择一个或多个选项,而如果选项用竖线〔|分隔,就只能选择一个选项.例如,{applelbanana|pear}表示必须从中选择一个,而不能选择多个.方括号"[]"表示是一个可选项.若选项用竖线分隔,则可以选择一个,也可以不选择.例如,[applelbanana|pear]表示可以从中选择一个或不选择.而如果选项用逗号分隔,则可以不选择,也可以选择一个或多个.例如,[apple,banana,pear]表示可以从中选择一个、多个或不选择.3.6丢失数据在实际的数据库中,数据常常会不可避免地出现丢失、不可知或不可用的情况.例如,在一个数据库中,一项工程可能还没有确定具体的完工日期,这种信息的缺失使得表中缺少了内容.在数据库中,缺失一些内容问题倒不大,真正的问题是这些缺失的内容可能会给数据库带来危险,导致数据库的完整性出现问题.例如,在一个表中工作人员的地址、生日等列的信息缺少是可以允许的,这些信息的缺失并不会给数据库带来危险.而由于公司中每个工作人员都只有惟一的ID号,职员ID号的缺失将导致无法区分工作人员记录,使数据库的完整性出现问题.因此,数据库中提供了NuLL来处理数据缺失的问题.通过规定表中的列是否允许空值,明确表明该列是否支持丢失、不可知或不可用的数据.SQL标准中规定了在不同的SQL语句和子句中一组处理NULL值的特殊规则.下面看两个例子,如果用户需要显示EMP数据表中所有工资未知的职员的全部信息,可以使用如下SELECT语句:SELECT*SELECT*FROMEMPWHERESALARYISNULL如果用户需要EMP数据表中所有已知工资数据的职员的信息,可以使用以下语句:SELECT*SELECT*FROMEMPWHERESALARYISNOTNULLNULL与0不相同.任何包含NULL的数据元素的算术运算将得到NULL值.例如,如果a的当前值为NULL,那么下面的表达式将等于NULL:〔a+10*10注意:NULL既不是字符,也不是数字,而是默认数据.字符和数字数据都可以被设置为NULL.注意:NULL既不是字符,也不是数字,而是默认数据.字符和数字数据都可以被设置为NULL.NULL表示未知的值.对于SQL来说意味着这个值是未知的,而只要这个值为未知,就不能将其与其他值比较,即使其他值也是NULL.所以SQL允许除了在TRUE和FALSE之外还有第三种类型的值,称之为"非确定"〔unknown值.如果比较的两边都是NULL,就被认为是非确定的.将一个非确定值取反或使用AND或OR与其他进行合并之后,其结果仍是非确定的.由于结果表中只包括值为"真"的行,所以NULL不可能满足该检查,需要使用特殊的运算符ISNULL和ISNOTNULL.虽然NULL并不能很好地解决信息缺失的问题,但是,不管如何,NULL值是SQL标准的一部分,在实际数据库系统中,也都提供了对NULL值的支持.在数据库开发中,NULL值有着重要的作用.习题1.选择题〔1SQL语句可以被划分为〔部分.A.SQL操作B.目标C.条件D.结果〔2SQL操作语句中的基本操作有〔.A.SELECTB.INSERTC.UPDATED.DELETE〔3SQL中支持〔常量.A.数字B.字符串C.时间和日期D.符号〔4字符串数据类型有〔基本形式.A.图形字符串类型B.定长字符串类型C.二进制字符串类型D.变长字符串类型〔5SQL标准中规定的能用于表达式的运算符有〔.A.加号〔+B.减号〔-C.乘号〔*D.除号〔/2.填空题〔1SQL是结构化查询语言〔StructuredQueryLanguage的缩写,是IBM公司在20世纪70年代开发的________________________________________的一部分.〔2常量也称为字面值或标量值,是表示一个___________________的符号.〔3表达式是_________________与____________________________的组合.〔4SQL语言核心功能使用的9个动词为_____________、_____________、_____________、_____________、_____________、_____________、_____________、_____________、_____________.第4章SQL函数与其他编程语言一样,SQL提供了许多内置的函数,例如计算多行数据的聚合函数、求字符串子串的字符串函数、处理日期和时间的日期时间函数、求数字的数字函数、转换数据类型的转换函数等等.通过使用这些函数,用户可以对数据表中的数据按照自己的需要进行各种复杂的运算和操作.这些内置函数可以大大提高在SQL语句中操纵信息的能力,使得对SQL语句的使用有了更大的灵活性.本章将对这些SQL函数进行简单介绍.本章目标:完成本章内容后我们将能够:掌握聚合函数掌握字符串函数了解日期时间函数了解数学函数了解转换函数4.1聚合函数在实际应用中,有时候需要知道所有记录中某项值的总和、平均值等等,这时可以使用SQL.提供的聚合函数.聚合函数是SQL中很重要的一部分.聚合函数不是对某个记录进行操作,而是对表中或查询到的所有记录的某个项进行操作.在实际应用中,聚合函数还可以被称为汇合函数、聚集函数、汇总函数等等.聚合函数是设计为允许大家汇总表或视图的多行数据的SQL函数,以便用户进行特定的查询,如COUNT〔函数可以统计满足WHERE子句中的条件的记录总数.所有聚合函数都具有确定性,任何时候用一组给定的输入值调用它们时,都返回相同的值.SQL中支持的聚合函数有以下5种:··COUNT〔统计列中值的数量.·SUM〔计算总和.·AVG〔计算平均值.·MAX〔计算最大值.·MIN〔计算最小值.在使用聚合函数时,需要注意:··在函数COUNT〔、SUM〔、AVG〔中可以使用DISTINCT关键字,以便在计算中不包含重复的行.而对于函数MAX〔、MIN〔与COUNT〔*,由于不会改变其结果,因此没有必要使用DISTINCT.·函数SUM〔、AVG〔只能对数字数据类型的列使用,而函数COUNT〔、MAX〔、MIN〔与COUNT〔*可以对所有数据类型使用.但在不同的数据库系统中,又提供一些其他的聚合函数,如Oracle中提供了STDDEV〔、VARIANCE〔函数,SQLServer中提供了STDEV〔、VAR〔函数等.COUNT〔函数COUNT〔函数可以用来计算查询结果中某个特定列出现的次数.SQL提供了COUNT〔和COUNT〔*函数.这两个函数很相似,但使用是完全不同的.COUNT〔*函数计算所有的记录,不用考虑空值.当然,如果COUNT〔函数在没有空值的列上进行计算,得到的值与COUNT〔*函数相同.DISTINCT关键字与COUNT〔一起使用,就可以不计算重复的值,而返回特定列中惟—值的数目.而DISTINCT不与函数COUNT〔*一起使用,因为COUNT〔*计算的是表中含有的记录的数目,并不对特定列进行计算.SUM〔与AVG〔函数SUM〔函数用来计算特定列所有值的总和并返回计算结果.AVG〔函数用来计算特定列所有值的平均值.因此,SUM〔与AVG〔函数只能处理数字数据类型的列.而且,AVG〔函数计算值的数目时,并不会将空值计算在内.DISTINCT关键字也可以在SUM〔与AVG〔函数中使用.在SUM〔函数中使用DISTINCT时,SUM〔函数将只计算列中惟一值的总和.在AVG〔函数中使用DISTINCT时,AVG〔函数将只计算列中惟一值的平均值.例如,下面的语句在AVG〔函数中使用DISTINCT:SELECTAVG〔DISTINCTpriceSELECTAVG〔DISTINCTpriceFROMDanweiWHEREtype-’business’MAX〔与MIN〔函数MAX〔函数用来计算特定列包含的所有值中最大的值,而MIN〔函数用来计算特定列包含的所有值中最小的值.例如,可以使用这些函数返回最低和最高的货运成本.因此,MAX〔与MIN〔函数中没有必要使用DISTINCT关键字.另外,当列中存在非空值时,MAX〔与MIN〔函数并不会返回空值.因为,空值是未知的,不能认为大于或小于任何值.在后面的章节里将继续介绍聚合函数的使用.4.2字符串函数字符串是数据库中使用较多的数据类型,很多数据的存储都要使用到字符串.对字符串进行操作是数据库中很重要的一种操作,SQL中也为字符串提供了很多函数,如SUBSTR〔函数用于从字符串中取出一个子串.SQL中常见的字符串函数有:··CHR〔code返回字符代码数值等于code的字符.如果数据库采用ASCII字符集,则code代表字符的ASCII代码,CHR〔code返回该ASCII代码所代表的字符.例如,ASCII代码65、49分别代表字符"A"、"l".·CONCAT〔strl,str2返回的字符串是strl和str2连接的结果.·INITCAP〔str返回将str的首字符大写,其余字符小写的字符串.·LOWER〔str返回将str的所有字母都变成小写后的字符串.·UPPER〔str返回将str的所有字母都变成大写后的字符串.例如,下面的语句分别将name列的所有字母变成小写、大写和首字母大写其余字符小写,然后将结果返回.SELECTname,LOWER〔name,UPPER〔name,INITCAP〔UPPER〔nameSELECTname,LOWER〔name,UPPER〔name,INITCAP〔UPPER〔nameFROMDanwei·REPLACE〔str1,str2,str3返回在strl中使用str3对str2进行替换后的字符串,strl是被查找的字符串,str2是查找的字符串,str3是替换字符串.如果第三个参数默认,或者是NULL,则在被查找的字符串中删去查找的字符串.·SUBSTR〔strl,n,m返回按参数要求得到的一个strl的子串,str1是主串,n是所求子串的第一个字符在strl中的位置,m是子串的字符数.n为负数时表示子串在strl中的开始位置由后向前确定.例如,下面的语句返回FIRSTNAME列中字符串从第2位开始长度为3的字符.SELECTFIRSTNAME,SUBSTR〔FIRSTNAME,2,3SELECTFIRSTNAME,SUBSTR〔FIRSTNAME,2,3FROMDanwei·INSTR〔str1,str2,n,m返回指定子串在主串中的位置.str1是主串,str2是要查找的子串,n是在主串中开始查找时的位置,m表示要返回的子串是第几个.n,m的默认值是1,如果n是负数,表示查找时从strl的末尾计数.例如,下面的语句将从字符串的第2个字符开始搜索并返回第一个以O开头的字符的位置.SELECTFIRSTNAME,INSTR〔FIRSTNAME,SELECTFIRSTNAME,INSTR〔FIRSTNAME,‘O’,2,1FROMDanwei·LENGTH〔str1返回字符串strl的长度.例如,下面的语句返回指定的FIRSTNAME列中字符串的长度.SELECTFIRSTNAME,LENGTH〔FIRSTNAMESELECTFIRSTNAME,LENGTH〔FIRSTNAMEFROMDanwei各种SQL工具都支持多种字符串函数,以方便对数据库中存储的大量字符串数据进行处理.这些函数在不同的数据库可能有着不同的函数名称,例如,在Oracle数据库系统中,返回字符串长度的函数是LENGTH〔,在SQLServer数据库系统中,返回字符串长度的函一是CHAR_LENGTH〔.所以,在使用这些字符串函数前要先查阅当前使用的数据库系统的文档资料.4.3日期时间函数时间和日期在现在的数据库中使用很频繁.SQL中也定义了很多时间日期函数,可以方便地进行时间和日期的显示、比较、修改和格式转换,如SYSDATE〔函数用于返回系统时间和日期.这些日期时间函数在不同的数据库可能有着不同的函数名称,如Oracle系统中返回系统的时间和日期的函数是SYSDATE〔函数,但在SQLServer中返回系统的时间和日期的函数是GETDATE〔.所以,在使用这些函数前一定要先查阅当前使用的数据库系统的文档资料.SQL中常见的日期时间函数有:·ADD_MONTHS〔date,n返回将指定日期date所在的月份增加n后的日期.例如,下面的语句把显示的所有员工的生日延迟两个月.SELECTid,birthday,ADD_MONTHS〔birthday,2SELECTid,birthday,ADD_MONTHS〔birthday,2FROMDanwei·LAST_DAY〔date返回指定日期date所在月份的最后一天的日期.例如,下面的语句返回ENDDATE列中给出的日期所在月份的最后一天是几号.SELECTENDDATE,LAST_DAY〔ENDDATESELECTENDDATE,LAST_DAY〔ENDDATEFROMDanwei·MONTHS_BETWEEN〔datel,date2返回指定的日期datel和date2之间的月数.例如,下面的语句返回给定的日期startdate、enddate有几个月.SELECTstartdate,enddate,MONTHS_BETWEEN〔startdate,enddateSELECTstartdate,enddate,MONTHS_BETWEEN〔startdate,enddateFROMDanwei·NEW_TIME〔date,zonel,zone2返回依据指定时区调整后的日期时间.例如,下面的语句将时区E的日期时间调整到时区P日期时间,然后返回结果.SELECTENDDATEE,NEW_TIME〔ENDDATE,SELECTENDDATEE,NEW_TIME〔ENDDATE,’E’,’P’F

温馨提示

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

评论

0/150

提交评论