




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第九章 SQL Server数据库基础本章要点本章要点客户客户/服务器体系结构服务器体系结构SQL Server 2000应用环境概述应用环境概述Transact-SQL程序设计程序设计存储过程存储过程触发器触发器9.1 客户/服务器体系结构l从技术角度看,客户从技术角度看,客户/服务器结构本身是一个非常简单的概服务器结构本身是一个非常简单的概念。它是将计算机应用的大任务分解成多个子任务,由多念。它是将计算机应用的大任务分解成多个子任务,由多台计算机协同完成。台计算机协同完成。l客户机接收客户的数据和处理要求,执行相应程序,把其客户机接收客户的数据和处理要求,执行相应程序,把其中的服务请求发给
2、服务器,即向服务器提出对某种信息或中的服务请求发给服务器,即向服务器提出对某种信息或数据的服务请求,系统将选择最适宜完成该任务的服务器数据的服务请求,系统将选择最适宜完成该任务的服务器完成处理,服务器将结果作为服务响应返回客户。完成处理,服务器将结果作为服务响应返回客户。l在这一过程中,多任务之间存在多种交互关系,即在这一过程中,多任务之间存在多种交互关系,即“服务服务请求请求/服务响应服务响应”关系。因此客户关系。因此客户/服务器不应理解为是一种服务器不应理解为是一种硬件结构,而是一种计算(处理)模式。硬件结构,而是一种计算(处理)模式。9.1 客户/服务器体系结构 客户客户/服务器具有以下
3、几个特征:服务器具有以下几个特征:l服务服务l位置透明性位置透明性l可扩展性可扩展性9.2 SOL Server 2000 应用环境概述lSQL Server是一个关系数据库管理系统,最初由是一个关系数据库管理系统,最初由Microsoft,Sybase和和Ashton-Tate三家公司联合开发的,于三家公司联合开发的,于1988年推出了第年推出了第一个一个OS/2版本。后来,版本。后来,Ashton-Tate公司退出了公司退出了SQL Server的开的开发。而在发。而在Windows NT推出后,推出后,Microsoft与与Sybase在在SQL Server的开发上就分道扬镳了,的开发
4、上就分道扬镳了,Microsoft将将SQL Server移植到移植到 Windows NT系统上,专注于开发推广系统上,专注于开发推广SQL Server的的Windows NT版本;版本;Sybase则较专注于则较专注于SQL Server在在UNIX操作系统上的应操作系统上的应用。用。1996年,年,Microsoft推出了推出了SQL Server 6.5版本,版本,1998年,年,SQL Server 7.0版本和用户见面;我们介绍的版本和用户见面;我们介绍的SQL Server 2000是是Microsoft公司公司2000推出的最新版本。推出的最新版本。9.2 SOL Serve
5、r 2000 应用环境概述Microsoft SQL Server 2000包括四个常见版本:包括四个常见版本: 企业版(企业版(Enterprise Edition) 标准版(标准版(Standard Edition) 个人版(个人版(Personal Edition) 开发者版(开发者版(Developer Edition)l此外,此外,SQL Server 2000还有还有Desktop Engine(桌(桌面引擎)和在面引擎)和在Windows CE设备上进行数据存储的设备上进行数据存储的Windows CE版,用户可以根据实际情况选择所要安版,用户可以根据实际情况选择所要安装的装的S
6、QL Server 2000版本。版本。9.2.2 SQL Serve9.2.2 SQL Server数据库组成l每个每个SQL服务器都有两种类型的数据服务器都有两种类型的数据库:系统数据库(库:系统数据库(System Database)和用户数据库(和用户数据库(User Database), 如图如图9.2所示。系统数据库一般用于存所示。系统数据库一般用于存储储SQL Server的系统信息,的系统信息,SQL Server用系统数据库来操作和管理系用系统数据库来操作和管理系统。用户数据库是用户所创建的数据统。用户数据库是用户所创建的数据库。库。 9.2.2 SQL Server数据库组
7、成系统数据库mastermodeltempdbmsdbUser1Northwindpubs图9.2 Microsoft SQL Server数据库用户数据库l系统数据库和用户数据库在结构上完全相同。系统数据库和用户数据库在结构上完全相同。Microsoft SQL Server数据库有两种主要的结构:物理结构和逻辑结数据库有两种主要的结构:物理结构和逻辑结构。数据库的物理存储结构是讨论数据库文件是如何在磁构。数据库的物理存储结构是讨论数据库文件是如何在磁盘上存储的,数据库的逻辑存储结构指的是数据库是由哪盘上存储的,数据库的逻辑存储结构指的是数据库是由哪些性质的信息组成。图些性质的信息组成。图9
8、.3中的中的Table就是组成数据库的逻就是组成数据库的逻辑成分,而物理实现部分的辑成分,而物理实现部分的mdf文件构成了数据库的物理文件构成了数据库的物理结构。结构。物理结构是指实际存储的数据,其构架包括文件,文件组,页,盘区物理结构是指实际存储的数据,其构架包括文件,文件组,页,盘区等。文件包括数据库文件和事物日志文件,等。文件包括数据库文件和事物日志文件,SQL Server的数据和日的数据和日志文件可以放置在志文件可以放置在FAT或或NTFS文件系统中,但不能放在压缩文件系文件系统中,但不能放在压缩文件系统中。统中。物理结构物理结构图9.3 Microsoft SQL Server数据
9、库结构简化示意图 页和盘区页和盘区l页是基本存储单位,大小为页是基本存储单位,大小为8KB/页。页包含页。页包含了数据本身以及数据的物理存放位置的信息。了数据本身以及数据的物理存放位置的信息。每页的开始每页的开始96字节就是用于存储系统信息的,字节就是用于存储系统信息的,如页大小,剩余空间大小和该页所属对象的如页大小,剩余空间大小和该页所属对象的ID。l在在SQL Server 2000 数据库系统中,页的类数据库系统中,页的类型有型有8种,如表种,如表9.1所示。所示。l表表9.1 SQL Server 2000页的类型页的类型表表9.1 SQL Server 2000页的类型页的类型页类型
10、内容数据引擎文本和图象全局分配图,辅助全局分配图页剩余空间索引分配图批修改图变化图包含数据行中除text,ntext和image数据外的所有数据索引属性text,ntext和image数据有关盘区分配的信息关于页剩余空间的信息有关表或索引所使用的盘区的信息从上次执行BASKUP LOG语句到批操作之间所修改的盘区信息从上次执行BACKUP DATABASE到现在的更改的盘区的信息l在数据页上,数据行紧接着页首按顺序放置。在页尾有一个行偏在数据页上,数据行紧接着页首按顺序放置。在页尾有一个行偏表。在行偏表中,页面上的每一行都有一个条目,每个条目记录表。在行偏表中,页面上的每一行都有一个条目,每个
11、条目记录那一行的第一个字节与页首的距离。行偏移的条目序列与页中行那一行的第一个字节与页首的距离。行偏移的条目序列与页中行的序列相反,见图的序列相反,见图9.4。在。在SQL Server中,行不能跨页。中,行不能跨页。数据页结构数据页结构首页数据1数据2可用空间123数据3图9.4 Microsoft SQL Server数据页的结构盘区盘区l首页数据1数据2可用空间123数据3图9.4 Microsoft SQL Server数据页的结构l盘区是为表和索引分配存储空间的基本单元,大小为8个相邻的页,即64KB。为了使空间指派更有效。SQL Server 2000对只含少量数据的表不分配完整的
12、盘区。SQL Server 2000有两种类型的盘区:统一扩展盘区,由单个对象所有,8页全部只能由拥有该盘区的对象使用;混合扩展盘区,最多可由8个对象共享。l通常从混合扩展盘区中向新表或新索引分配页。当表或索引增长到8页时,就变成统一扩展盘区,如果在现有表上创建索引,并且该表包含的行足以在索引中生成8页,则对该索引的所有分配都在统一扩展盘区内进行。l数据库文件(数据库文件(Database File)是存放数据库和数据库对象的文件。)是存放数据库和数据库对象的文件。一个数据库可以有一个或多个数据库文件,一个数据库文件只属一个数据库可以有一个或多个数据库文件,一个数据库文件只属于一个数据库。当有
13、多个数据库文件时,有一个文件被定义为主于一个数据库。当有多个数据库文件时,有一个文件被定义为主数据库文件(数据库文件(Primary Database File),扩展名为),扩展名为.mdf,它用来,它用来存储数据库的启动信息和部分或全部信息。一个数据库只能有一存储数据库的启动信息和部分或全部信息。一个数据库只能有一个 主 数 据 库 文 件 。 其 他 数 据 库 文 件 被 称 为 次 数 据 库 文 件个 主 数 据 库 文 件 。 其 他 数 据 库 文 件 被 称 为 次 数 据 库 文 件(Secondary Database File),扩展名为扩展名为.ndf ,用来存储主文
14、件没用来存储主文件没存储的其他数据。在数据庞大时,次数据库文件可以帮助存储数存储的其他数据。在数据庞大时,次数据库文件可以帮助存储数据。据。 数据库文件数据库文件l采用多个数据库文件来存储数据的优点体现在:采用多个数据库文件来存储数据的优点体现在:l数据库文件可以不断扩充而不受操作系统文件大小的限制。数据库文件可以不断扩充而不受操作系统文件大小的限制。l可以将数据库文件存储在不同的硬盘中,这样可以同时对几个硬可以将数据库文件存储在不同的硬盘中,这样可以同时对几个硬盘做数据存取,提高了数据处理的效率,这对于服务型的计算机盘做数据存取,提高了数据处理的效率,这对于服务型的计算机尤为有用。尤为有用。
15、l事务日志文件事务日志文件l事务日志文件(事务日志文件(Transaction Log File)是用来记录数据库更新)是用来记录数据库更新情况的文件,扩展名情况的文件,扩展名.ldf。例如,使用。例如,使用INSERT,UPDATE,DELETE等对数据库进行更改的操作都会记录在此文件中,而如等对数据库进行更改的操作都会记录在此文件中,而如SELECT等对数据库内容不会有影响的操作则不会记录在案。一等对数据库内容不会有影响的操作则不会记录在案。一个数据库可以有一个或多个事务日志文件。个数据库可以有一个或多个事务日志文件。lSQL Server中采用中采用“提前写日志(提前写日志( Write
16、-Ahead Logging)”方式,即对数据库的修改先写入事务日志中,再写入数据库。方式,即对数据库的修改先写入事务日志中,再写入数据库。 数据库文件数据库文件l为了便于分配和管理,为了便于分配和管理,SQL Server允许将多个文件归纳为一组,允许将多个文件归纳为一组,并赋予此组一个名称,这就是文件组(并赋予此组一个名称,这就是文件组(File Group),文件组是),文件组是将多个数据库文件集合起来形成的一个整体。每个文件组有一个将多个数据库文件集合起来形成的一个整体。每个文件组有一个组名。一个文件只能存在于一个文件组中,一个文件组也只能被组名。一个文件只能存在于一个文件组中,一个文
17、件组也只能被一个数据库使用。一个数据库使用。l与数据库文件一样,文件组也分为主文件组和次文件组,主文件与数据库文件一样,文件组也分为主文件组和次文件组,主文件中包含了所有的系统表。当建立数据库时,主文件组包括主数据中包含了所有的系统表。当建立数据库时,主文件组包括主数据库文件和未明确指定组的其他文件。文件组中可以指定一个缺省库文件和未明确指定组的其他文件。文件组中可以指定一个缺省文件组,那么在创建数据库文件时,如果没有指定将其放在哪一文件组,那么在创建数据库文件时,如果没有指定将其放在哪一个文件组中,就会将它放在缺省文件组中。如果没有指定缺省文个文件组中,就会将它放在缺省文件组中。如果没有指定
18、缺省文件组,则主文件组为缺省文件组。件组,则主文件组为缺省文件组。l只有数据文件才能作为文件组的成员,日志文件不能作为文件组只有数据文件才能作为文件组的成员,日志文件不能作为文件组的成员。的成员。 (3) (3) 文件组文件组l逻辑结构对应存储数据的抽象表示。逻辑结构对应存储数据的抽象表示。SQL Server的数据库不仅仅的数据库不仅仅是数据的存储,所有与数据处理操作相关的信息都存储在数据库是数据的存储,所有与数据处理操作相关的信息都存储在数据库中,是一个存放数据的表和支持这些数据的存储、检索、安全性中,是一个存放数据的表和支持这些数据的存储、检索、安全性和完整性的逻辑成分所组成的集合。组成
19、数据库的所有逻辑成分和完整性的逻辑成分所组成的集合。组成数据库的所有逻辑成分称为数据库的对象,如:关系图、表、视图、存储过程、用户、称为数据库的对象,如:关系图、表、视图、存储过程、用户、角色、规则、默认值、用户自定义数据类型和用户自定义函数等。角色、规则、默认值、用户自定义数据类型和用户自定义函数等。lSQL Server的对象名可以是对象的全名(完全限定名),也可以的对象名可以是对象的全名(完全限定名),也可以是对象的省略名(部分限定名)。完全限定名包含四个标识符:是对象的省略名(部分限定名)。完全限定名包含四个标识符:服务器名,数据库名,所有者名和数据库对象名,顺序如下:服服务器名,数据
20、库名,所有者名和数据库对象名,顺序如下:服务 器 名 、 数 据 库 名 、 所 有 者 名 、 数 据 库 对 象 名务 器 名 、 数 据 库 名 、 所 有 者 名 、 数 据 库 对 象 名(Server.database.owner.object),包含全部这四部分的对象名包含全部这四部分的对象名叫做全名。叫做全名。 逻辑结构逻辑结构 表结构和视图表结构和视图表9.2 常用的系统表sysloginssysdatadasessysmessagessysuserssysobjectsmastermastermaster全部全部系统表数据库功能每个连接到SQL服务器的登录帐号,都有相应的一
21、行每个SQL服务器返回的警告或系统错误,都有相应的一行SQL服务器中每个数据库,都有相应的一行每个Windows用户, Windows工作组,SQL服务器用户和SQL服务器角色,都有相应的一行数据库中每个对象,都有相应的一行 数据类型数据类型 lSQL Server 2000的数据类型分为系统数据类型与自定义数据类型。l系统数据类型如表9.3(详见教材)所示,只有字符与二进制数据类型需要指定长度,其他如整型,日期时间,浮点数据类型,定义时不用指定长度,即长度是默认值。l自定义数据类型是建立在SQL Server系统数据类型基础上的。需要指定该类型的名称,建立在其上的系统数据类型及是否允许为空。
22、 存储过程l存储过程是一组编译在单个执行计划中的Transat-SQL语句。可以从客户端应用程序,或从其他存储过程和触发器来调用它。l存储过程帮助在不同的应用程序之间实现一致的逻辑。在一个存储过程中,可以设计,编码和测试执行某个常用任务所需的SQL语句和逻辑。之后,每个需要执行该任务的应用程序只须执行此存储过程即可。将业务逻辑编入单个存储过程还提供了单个控制点,以确保业务规则正确执行。l存储过程还可以提高性能。许多任务以一系列SQL语句来执行。对前面SQL语句的结果所应用的条件逻辑决定后面执行的SQL语句。如果将这些SQL语句和条件逻辑写入一个存储过程,它们就成为服务器上一个执行计划的一部分,
23、所有工作都可以在服务器上完成。l应用程序不必传输存储过程中的所有SQL语句:它们只需传输包含过程名和参数值的EXECUTE。 用户自定义函数l在SQL Server 2000 中,用户可以创建自定义函数。在SQL Server 2000中用户自定义函数是作为一个数据库对象来管理的。可以使用企业管理器或Transat-SQL命令来创建,修改,删除。 约束,规则,默认值和触发器l表中列的属性除了包含数据类型和长度外,还有一些重要的信息,共同维护数据完整性。用于维护数据完整性的对象包括:约束,规则,默认值和触发器。其中,约束在第三章有简单的介绍。l规则是一个向后兼容的功能,用于执行一些与CHECK约
24、束相同的功能。CHECK约束是用来限制列值的首选标准方法。CHECK约束比规则更简明,一个列只能应用一个规则,但可以应用多个CHECK约束。CHECK约束作为CREATE TABLE语句的一部分进行指定,而规则以单独的对象创建,然后绑定到列上。l如果在插入行时没有指定列的值,那么将使用默认值。默认值可以是任何取值为常量的对象,例如,常量,内置函数和数学表达式。l在Microsoft SQL Server 2000 中,触发器是一类特殊的存储过程,被定义为在表或视图发出UPDATE,INSERT或DELETE语句时自动执行。触发器是功能强大的工具,使每个站点可以在有数据修改时自动强制执行其业务规
25、则。触发器可以扩展SQL Server约束,默认值和规则的完整性逻辑检查,但只要约束和默认值提供了全部所需的功能,就应使用约束和默认值。在9.5节将详细介绍触发器。1.企业管理器企业管理器2.查询分析器查询分析器3.服务管理器(服务管理器(Server Manager)4.客户端网络实用工具(客户端网络实用工具(Client Network Utility)5.服务器网络实用工具(服务器网络实用工具(Server Network Utility)6.导入和导出数据(导入和导出数据(Import and Export Data)7.在在IIS中设置中设置SQL XML支持(支持(Configur
26、e SQL XML Support in IIS)8.事件探查器(事件探查器(Profiler)9.联机丛书(联机丛书(Book Online)10.SQL Server的升级向导的升级向导9.2.3 SQL Server工具9.3 Transact-SQL 程序设计lTransact-SQL是是SQL Server 2000支持的数据库语言,不支持的数据库语言,不但遵从入门级的但遵从入门级的SQL-92标准。而且还支持标准。而且还支持SQL-92标准的标准的一些强大的扩展。一些强大的扩展。Transact-SQL也有类似于也有类似于SQL语言的语言的分类,不过做了许多扩充,包括数据定义语言分
27、类,不过做了许多扩充,包括数据定义语言DDL(Data Definition Language)、数据操纵语言)、数据操纵语言DML(Data Manipulation Language)、数据控制语言)、数据控制语言DCL(Data Control Language)、系统存储过程)、系统存储过程(System Stored Procedure)和一些附加的语言元素等。和一些附加的语言元素等。l在第在第3章中,我们曾介绍了标准章中,我们曾介绍了标准SQL语言的语法及其基本语言的语法及其基本使用方法(包括使用方法(包括DDL、DML和和DCL)。在此只介绍)。在此只介绍Transact-SQL
28、语言中与语言中与SQL-92不同的一些语句及格式,不同的一些语句及格式,此外还介绍一些附加的语言元素,包括注释、变量、运算此外还介绍一些附加的语言元素,包括注释、变量、运算符、函数和流程控制语句。符、函数和流程控制语句。1. 创建和管理数据库创建和管理数据库l创建数据库包括:定义数据库名;确定数据创建数据库包括:定义数据库名;确定数据库文件及其大小;确定事务日志文件的位置库文件及其大小;确定事务日志文件的位置和大小。创建数据库使用和大小。创建数据库使用CREATE DATABASE语句,其语法为:语句,其语法为:9.3.1 Transact-SQL的数据定义功能及实例CREATE DATABA
29、SEON PRIMARY(NAME= FILENAME= ,SIZE= ,MAXSIZE= ,FILEROWTH= ),nLOG ON (NAME= , FILENAME= ,SIZE= ,FILEROWTH= ),nFOR RESTORE9.3.1 Transact-SQL的数据定义功能及实例Create Database 学生选课学生选课on(Name=学生选课学生选课_DAT,FileName=d:学生选课学生选课学生选课学生选课_DAT.MDF,Size=2MB,FileGrowth=10%)Log on(Name=学生选课学生选课_LOG,FileName=d:学生选课学生选课学生选
30、课学生选课_LOG.LDF,Size=1MB,FileGrowth=10%)例9.1 创建一个学生选课数据库数据库的选择使用数据库的选择使用USE命令,其格式为:命令,其格式为:lUSE 注意:在注意:在Transact SQL中没有语法结束符号。中没有语法结束符号。语句结束后按语句结束后按键,并另起一行输入键,并另起一行输入GO语句,再按语句,再按键。否则语句不会执键。否则语句不会执行。行。(2)选择数据库删除数据库的语法为:删除数据库的语法为: DROP DATABASE ,.数数据库名据库名n (3)删除数据库2. 2. 定义表定义表定义基本表使用定义基本表使用CREATE TABLE
31、命令,其功能命令,其功能是定义表名、列名、数据类型、初始值和步长是定义表名、列名、数据类型、初始值和步长等,还包括定义表的完整性约束和缺省值。等,还包括定义表的完整性约束和缺省值。定义基本表的格式为:定义基本表的格式为: CTEATE TABLE ( |AS , )上述格式有以下问题需要说明。上述格式有以下问题需要说明。2. 2. 定义表定义表上述格式有以下问题需要说明。上述格式有以下问题需要说明。(1)字段级约束)字段级约束字段级约束指只涉及到单个字段的约束,可以使用以下短语定义:字段级约束指只涉及到单个字段的约束,可以使用以下短语定义:1)NOT NULL|NULL:定义不允许或允许字段值
32、为空。:定义不允许或允许字段值为空。2)PRIMATY KEY CLUSTERED|NON CLUSTERED:定义该字:定义该字段为主码并建立聚集或非聚集索引。段为主码并建立聚集或非聚集索引。3)REFERENCES ( ):定义该字段为:定义该字段为外码,并指出被参照表及对应字段外码,并指出被参照表及对应字段4)DEFAULT :定义字段的缺省值。:定义字段的缺省值。5)CHECK( ):定义字段应满足的条件表达式。:定义字段应满足的条件表达式。6)IDENTITY( , ):定义字段为数值型数据,:定义字段为数值型数据,并指出它的初始值和逐步增加的步长值。并指出它的初始值和逐步增加的步长
33、值。2. 2. 定义表定义表(2)记录级约束)记录级约束 记录级约束指涉及到表中多个字段的约束,其格式为:记录级约束指涉及到表中多个字段的约束,其格式为: CONSTRAINT 约束式主要有以下几种。约束式主要有以下几种。 1)PRIMARY KEY CLUSTERED|NONCLUSTERED( ):定义表的主码并建立主码的聚集或非聚集索引。:定义表的主码并建立主码的聚集或非聚集索引。 2)FOREIGN KEY( ) REFERENCES ( ):指出表的外码和被参照表。:指出表的外码和被参照表。3)CHECK( ):定义记录应满足的条件。:定义记录应满足的条件。4)UNIQUE( ):定
34、义不允许重复值的字段组。:定义不允许重复值的字段组。(1)修改基本表)修改基本表修改基本表是指修改列的数据类型、长度、列的完整性约修改基本表是指修改列的数据类型、长度、列的完整性约束、增加一个新列或删除列,修改表还包括对修改记录束、增加一个新列或删除列,修改表还包括对修改记录级完整性约束。修改表的语法可分为级完整性约束。修改表的语法可分为4种。种。1)修改字段的定义。)修改字段的定义。修改字段的定义主要为修改字段宽度和字段约束,不能改修改字段的定义主要为修改字段宽度和字段约束,不能改动字段名称。修改字段的语法为:动字段名称。修改字段的语法为: ALTER TABLE ALTER COLUMN
35、NULL|NOT NULL 3.基本表的维护基本表的维护2)增加字段和表约束规则。)增加字段和表约束规则。增加字段和表约束规则的格式为:增加字段和表约束规则的格式为: ALTER TABLE ADD | .3)删除字段或约束规则。)删除字段或约束规则。删除字段或表级约束规则的格式为:删除字段或表级约束规则的格式为: ALTER TABLE DROPCONSTRAINT |COLUMN 4)使约束有效或无效。)使约束有效或无效。使原表定义的约束暂时有效或无效的格式为:使原表定义的约束暂时有效或无效的格式为: ALTER TABLE CHECK|NOCHECKCONSTRAINTALL| 其中:其
36、中:CHECK为使约束有效,为使约束有效,NOCHECK为使约束无效;为使约束无效;ALL指全部约束。指全部约束。(2)删除基本表)删除基本表删除基本表的语法为:删除基本表的语法为: DROP TABLE 3.基本表的维护基本表的维护数据操纵语句主要包括数据操纵语句主要包括SELECT(查询)、(查询)、INSERT(插入)、(插入)、UPDATE(修改)和(修改)和DELETE(删除)(删除)4种语句。种语句。Transact-SQL对对SQL-92的数据操纵语句细节作了改进,使之的数据操纵语句细节作了改进,使之功能更强大,使用更方便。本节对其扩展部分功能更强大,使用更方便。本节对其扩展部分
37、着重讲述。着重讲述。9.3.2 Transact-SQL的数据操纵功能及实例的数据操纵功能及实例1. 数据检索语句的语句格式数据检索语句的语句格式在在SQL-92中,组成中,组成SELECT语句的子句有语句的子句有SELECT、FROM、WHERE、GROUP BY 和和ORDER BY,其作用分别是指定列、表、,其作用分别是指定列、表、元组条件、分组条件和排序要求。元组条件、分组条件和排序要求。Transact-SQL语句则有更多的语句则有更多的子句,其语法为:子句,其语法为: SELECT INTO FROM WHERE GROUP BY HAVING ORDER BY COMPUTE B
38、Y 9.3.2 Transact-SQL的数据操纵功能及实例的数据操纵功能及实例下面以子句为例,对上述语句进行解释。下面以子句为例,对上述语句进行解释。(1)SELECT子句子句SELECT子句的功能是确定结果列。子句的功能是确定结果列。SELECT子句的语法为:子句的语法为: SELECTALL|DISTINCTTOP PERCENT 其中的查询列可以表示为:其中的查询列可以表示为: :=*| .*| AS | = 上述上述SELECT子句语法中:子句语法中:1)ALL|DISTINCT选项:选项:ALL为返回结果集中的所有行;为返回结果集中的所有行;DISTINCT为仅显示结果集中的唯一行
39、。该项不选时,为仅显示结果集中的唯一行。该项不选时,ALL是缺省是缺省值。值。9.3.2 Transact-SQL的数据操纵功能及实例的数据操纵功能及实例2)TOP 选项:仅返回结果集中的前选项:仅返回结果集中的前 行。行。如果有如果有PERCENT,则返回结果集中的百分之,则返回结果集中的百分之 行记录。行记录。3)“*”:指明返回在:指明返回在FROM子句中包括的表和视图的子句中包括的表和视图的全部列。全部列。4) .*:指明返回指定表或视图的全部列。:指明返回指定表或视图的全部列。5):结果列表达式可以是一个由列名、常量、:结果列表达式可以是一个由列名、常量、函数,通过操作符(或者子查询
40、)连接起来的数据表函数,通过操作符(或者子查询)连接起来的数据表达式。达式。6):用来代替出现在结果集中的列名或表达:用来代替出现在结果集中的列名或表达式,别名可以在式,别名可以在ORDER BY 子句中出现,但不能在子句中出现,但不能在WHERE、GROUP BY或或HAVING子句中出现。子句中出现。9.3.2 Transact-SQL的数据操纵功能及实例的数据操纵功能及实例(2)INTO子句子句INTO子句用于创建一个表,并将查询结果添加子句用于创建一个表,并将查询结果添加到该表中。到该表中。INTO不能与不能与COMPUTE子句同时使子句同时使用。如果创建的是临时表,则在表名前加用。如
41、果创建的是临时表,则在表名前加“#”字符。字符。(3)FROM子句子句FORM子句用于指定查询的数据源表,子句用于指定查询的数据源表,FROM子子句一般为必选子句,其语法格式为:句一般为必选子句,其语法格式为: FROM 9.3.2 Transact-SQL的数据操纵功能及实例的数据操纵功能及实例数据源的语法为:数据源的语法为: := AS WITH( ) | AS | AS | AS | 上面的语法中,数据源包括表、视图、行集合函数表示的数据集合、上面的语法中,数据源包括表、视图、行集合函数表示的数据集合、嵌套的嵌套的SELECT语句表示的结果集以及数据连接表的结果集。连语句表示的结果集以及
42、数据连接表的结果集。连接表的语法为:接表的语法为: := ON | CROSSJOIN | :=INNER| LEFT|RIGHT|FULLOUTERJOIN9.3.2 Transact-SQL的数据操纵功能及实例的数据操纵功能及实例其中:其中:1)INNER为内连接,它返回所有连接匹配的行。内连接是连接类型为内连接,它返回所有连接匹配的行。内连接是连接类型的缺省值。的缺省值。2)LEFT OUTER为左外连接。左外连接的结果集中不但包括了内为左外连接。左外连接的结果集中不但包括了内连接返回的行,而且还包括了左边表中不满足连接条件的行。那连接返回的行,而且还包括了左边表中不满足连接条件的行。那
43、些不满足连接条件的行所对应的右边表的列将会显示些不满足连接条件的行所对应的右边表的列将会显示NULL值。值。3)RIGHT OUTER为右外连接。右外连接的结果集中不但包括内为右外连接。右外连接的结果集中不但包括内连接返回的行,而且还包括右边表中不满足连接条件的行。那些连接返回的行,而且还包括右边表中不满足连接条件的行。那些不满足连接条件的行所对应的左边表的列将会显示不满足连接条件的行所对应的左边表的列将会显示NULL值。值。4)FULL OUTER为完全外连接。完全外连接的结果集中不但包括为完全外连接。完全外连接的结果集中不但包括了内连接返回的行,同时也包括左边表和右边表中的所有不满足了内连
44、接返回的行,同时也包括左边表和右边表中的所有不满足条件的行,但是与其对应的右边表或左边表的列将会显示条件的行,但是与其对应的右边表或左边表的列将会显示NULL值。值。9.3.2 Transact-SQL的数据操纵功能及实例的数据操纵功能及实例5)ON 用于指定连接条件。连接条件表达用于指定连接条件。连接条件表达式为:式为: 条件表达式中的两个列名并不一定是相同的名字或具有条件表达式中的两个列名并不一定是相同的名字或具有相同的数据类型,但是两者必须是相兼容的或者相同的数据类型,但是两者必须是相兼容的或者SQL Server可以对它们做隐式转换的。如果它们不可以进可以对它们做隐式转换的。如果它们不
45、可以进行隐式转换,则必须使用专门的函数(如行隐式转换,则必须使用专门的函数(如CAST函数)函数)进行显式转换。进行显式转换。6)CROSS JOIN为交叉连接,即对两个表进行笛卡儿为交叉连接,即对两个表进行笛卡儿积运算。其结果是返回两个表的交叉匹配结果。交叉积运算。其结果是返回两个表的交叉匹配结果。交叉连接也可以通过在连接也可以通过在FROM子句中指定连接表而在子句中指定连接表而在WHERE子句中不指明连接条件来表达。子句中不指明连接条件来表达。9.3.2 Transact-SQL的数据操纵功能及实例的数据操纵功能及实例(4)WHERE子句子句WHERE子句用于指定查询条件以及数据连接条件。
46、子句用于指定查询条件以及数据连接条件。WHERE子句的语法为:子句的语法为: WHERE | := *=|=* 虽然旧格式的外连接条件也可以表示表间的左连接(虽然旧格式的外连接条件也可以表示表间的左连接(*=)或右连接(或右连接(=*),但由于这种表示存在二义性,所以),但由于这种表示存在二义性,所以外连接最好通过外连接最好通过FROM子句表示。子句表示。9.3.2 Transact-SQL的数据操纵功能及实例的数据操纵功能及实例(5)GROUP BY子句子句GROUP BY子句用于对结果集分组。分组会影响到统计子句用于对结果集分组。分组会影响到统计函数的结果:如果有函数的结果:如果有GROU
47、P BY子句,则按组进行数子句,则按组进行数据统计;否则,对全部数据统计。据统计;否则,对全部数据统计。GROUP BY的语法为:的语法为: GROUP BYALL 其中:其中:1)ALL为在结果集中包括所有的组,其中包括一组不为在结果集中包括所有的组,其中包括一组不满足满足WHERE子句指定条件的记录。这个由不满足条子句指定条件的记录。这个由不满足条件的元组构成的组,其总和将返回一个空值。件的元组构成的组,其总和将返回一个空值。2)分组表达式是分组所基于的表达式,该表达式一般)分组表达式是分组所基于的表达式,该表达式一般为列名。为列名。SELECT语句可以有多个分组表达式。语句可以有多个分组
48、表达式。9.3.2 Transact-SQL的数据操纵功能及实例的数据操纵功能及实例(6)HAVING子句子句HAVING子句用于指定分组或汇总筛选条件,子句用于指定分组或汇总筛选条件,HAVING子句的格式为:子句的格式为: HAVING (7)ORDER BYORDER BY子句用于指明排序项和排序要求,其语法为:子句用于指明排序项和排序要求,其语法为: ORDER BY ASC|DESC,n(8)COMPUTE子句子句COMPUTE子句的作用是产生汇总值,并在结果集后将汇总值放入摘子句的作用是产生汇总值,并在结果集后将汇总值放入摘要列,要列,COMPUTE与与BY配合,将起到换行控制和分
49、段小计的作用。配合,将起到换行控制和分段小计的作用。COMPUTE子句的语法如下:子句的语法如下: COMPUTE BY 其中:其中:BY 表示在结果集中产生换行控制及分段小计。表示在结果集中产生换行控制及分段小计。COMPUTE BY必须和必须和ORDER BY配合使用,分组项应完全等于配合使用,分组项应完全等于排序项。排序项。9.3.2 Transact-SQL的数据操纵功能及实例的数据操纵功能及实例查询语句中使用的运算符号查询语句中使用的运算符号Transact-SQL的查询语句中使用的运算符,如表的查询语句中使用的运算符,如表9.4所示。所示。9.3.2 Transact-SQL的数据
50、操纵功能及实例的数据操纵功能及实例类别类别符号符号算术运算符+(加), (减), *(乘), /(除), %(取余或模)比较运算符=(等于), (大于),=(大于等于或不小于),!(不小于),(不小于),(不等于),!=(不等于)范围运算符BETWEENAND.(在.之间),NOT BETWEEN.AND.(不在.之间)子查询运算符IN(在之中),NOT IN(不在之中),ALL(全部),ANY(任一),SOME(一些),EXISTS(存在),NOT EXISTS(不存在)字符串查询符+(连接),LIKE(匹配),NOT LIKE(匹配)未知值运算符IS NULL(是空值),NOT IS NU
51、LL(不是空值)逻辑运算符NOT(非),AND(与),OR(或)组合运算符UNION(并),NUION ALL(并,允许重复的元组)LIKE是字符模式匹配操作符。是字符模式匹配操作符。LIKE操作符使用的通配符如表操作符使用的通配符如表9.5所示。所示。 9.3.2 Transact-SQL的数据操纵功能及实例的数据操纵功能及实例通配符通配符描述描述示例示例%包含零个或更多字符的任意字符串。WHERE title LIKE %computer% 将查找处于书名任意位置的包含单词 computer 的所有书名。_(下划线) 任何单个字符。WHERE au_fname LIKE _ean 将查找以
52、 ean 结尾的所有 4 个字母的名字(Dean、Sean 等)。 指定字符范围 (a-f) 或集合 (abcdef) 中的任何单个字符。WHERE au_lname LIKE C-Parsen 将查找以arsen 结尾且以介于 C 与 P 之间的任何单个字符开始的作者姓氏,例如,Carsen、Larsen、Karsen 等。不属于指定范围 (a-f) 或集合 (abcdef) 的任何单个字符。WHERE au_lname LIKE del% 将查找以 de 开始且其后的字母不为 l 的所有作者的姓氏。在Transact-SQL还提供了一些常用函数以供表达式使用,见表9.6所示。9.3.2 T
53、ransact-SQL的数据操纵功能及实例的数据操纵功能及实例函数参数意义AVG(ALL|DISTINCT )求数值表达式的值,可以针对全部值或不重复值两种情况COUNT(ALL|DISTINCT )统计表达式的值,可以针对全部值或不重复值两种情况COUNT(*)统计记录数MAX()求表达式的最大值MIN()求表达式的最小值SUM(ALL|DISTINCT )求算术表达式的和,可有针对全部值或不重复值两种情况STDEV()求表中所有值的标准偏差STDEVP()求所有涉及数值的标准偏差VAR()求表中所有值的方差VARP()求所涉及数值的方差例例9.2 9.2 在学生选课数据库中定义学生表在学生
54、选课数据库中定义学生表S Suse 学生选课学生选课-如果在如果在sysobjects表中存在表中存在S表的定义,则首先进行删除处理表的定义,则首先进行删除处理if (select count(*) from sysobjects where name=S and Xtype=U)0drop table dbo.sGOCREATE TABLE s (snum char (7) primary key ,sname char (8) NOT NULL ,ssex char (2) default 男男 check (ssex in (男男,女女),sbirth datetime,sphone c
55、har (10),dnum char (7)goselect * into S_1 from S where SSex=女女go例例9.3 选择出选择出S表中的女同学,并存入到表中的女同学,并存入到S_1表中表中例例9.4 9.4 在在SCSC表中使用表中使用ComputeComputeByBy子句子句select Snum,Scorefrom SCorder by Snumcompute AVG(Score) by Snum9.3.39.3.3 注释符与运算符注释是程序代码中不执行的文本字符串(也称为注释)。在注释是程序代码中不执行的文本字符串(也称为注释)。在SQL Server中,中,可
56、以使用两种类型的注释字符:可以使用两种类型的注释字符:ANSI标准的注释符标准的注释符“-”用于单行注释。用于单行注释。与与C语言相同的程序注释符号,即语言相同的程序注释符号,即“/*/”, “/*”用于注释文字的开头,用于注释文字的开头,“*/” 用于注释文字的结尾,可在程序中标识多行文字为注释。用于注释文字的结尾,可在程序中标识多行文字为注释。 例如:例如:-单行注释单行注释/* 多行注释多行注释 Snum VARCHAR(4):存放学号:存放学号 Snum VARCHAR(4):存放姓名:存放姓名*/运算符是在关系的属性或变量之间进行各种运算的符号,包括算术运算符、运算符是在关系的属性或
57、变量之间进行各种运算的符号,包括算术运算符、位运算符、比较运算符、逻辑运算符等,另外,位运算符、比较运算符、逻辑运算符等,另外,SQL Server使用算使用算术运算符加(术运算符加(+)作字符串的连接运算。)作字符串的连接运算。变量是一种语言中必不可少的组成部分。变量是一种语言中必不可少的组成部分。Transact-SQL语言中有两种形式的变量:一语言中有两种形式的变量:一种是用户自己定义的局部变量;另外一种是系种是用户自己定义的局部变量;另外一种是系统提供的全局变量。统提供的全局变量。局部变量局部变量局部变量被引用时要在其名称前加上标志局部变量被引用时要在其名称前加上标志“”,而且必须先用
58、而且必须先用DECLARE命令定义后才可以使命令定义后才可以使用。其说明形式如下:用。其说明形式如下:DECLARE 变量名变量名 变量类型变量类型,变量名变量名 变量变量类型类型9.3.4 变量同时,在同时,在Transact-SQL中不能像在一般的程序语言中中不能像在一般的程序语言中一样使用一样使用“变量变量=变量值变量值”来给变量赋值,必须使用来给变量赋值,必须使用SELECT 或或SET命令来设定变量的值。其语法如下:命令来设定变量的值。其语法如下:SELECT 局部变量局部变量1=变量值变量值1,局部变量局部变量n=变量值变量值nSET 局部变量局部变量=变量值变量值例例9.5 声明
59、一个长度为声明一个长度为4个字符的变量个字符的变量Snum,并赋值一并赋值一个学号个学号“S003”。解:解:declare Snum char(4)-存放学号存放学号 select Snum = S003-赋值赋值9.3.4 变量全局变量全局变量 全局变量是全局变量是SQL Server系统内部使用的变量,其作用范围并不仅仅系统内部使用的变量,其作用范围并不仅仅局限于某一程序,而是任何程序均可以随时调用。全局变量通局限于某一程序,而是任何程序均可以随时调用。全局变量通常存储一些常存储一些SQL Server的配置设定值和统计数据。用户可以在的配置设定值和统计数据。用户可以在程序中用全局变量来
60、测试系统的设定值或者是程序中用全局变量来测试系统的设定值或者是Transact-SQL命命令执行后的状态值。令执行后的状态值。全局变量不是由用户的程序定义的,它们是在服务器级定义的,只全局变量不是由用户的程序定义的,它们是在服务器级定义的,只能使用预先说明及定义的全局变量。局部变量的名称不能与全能使用预先说明及定义的全局变量。局部变量的名称不能与全局变量的名称相同,否则会在应用中出错。局变量的名称相同,否则会在应用中出错。引用全局变量时必须以引用全局变量时必须以“”开头。开头。例例9.6 输出当前版本信息。输出当前版本信息。解:解:print version-输出当前版本信息输出当前版本信息9
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 养生馆广告经营合同范例
- 不锈钢家具合同范例
- 代卖矿山合同范例
- 2013制式合同范例
- 上海劳动合同范例
- 买卖商场合同范例
- 农村联营合同范例
- 会计职工合同范例
- 美团餐饮供应链冷链物流配送合同
- 自媒体项目合作协议资讯
- 2025年乡村振兴战略相关考试试题及答案
- 2025防撞缓冲车标准
- 中职ps期末考试试卷及答案
- 高温下质子交换膜燃料电池密封垫泄漏机理分析
- 2024-2025学年全国版图知识竞赛(小学组)考试题库(含答案)
- 2024年广东大亚湾开发区招聘公办学校教师笔试真题
- 江苏交控笔试试题及答案
- 《低压电工实操及考证》全套教学课件
- JJF1033-2023计量标准考核规范
- 2022-2023学年上海市闵行区八年级(下)期末数学试卷
- 三对三篮球赛记录表
评论
0/150
提交评论