1、第第3 3章章 管理管理SQL Server 2005SQL Server 2005的工具的工具-SQL-SQL语言语言经过前面两个章节的学习我们已经对经过前面两个章节的学习我们已经对SQL Server 2005数据库管理系统有了一个大致的概念,从这一章开始我们将数据库管理系统有了一个大致的概念,从这一章开始我们将对该数据库管理系统的具体内容展开一个全面的介绍,让读对该数据库管理系统的具体内容展开一个全面的介绍,让读者通过自己的努力去揭开者通过自己的努力去揭开SQL Server 2005的神秘面纱,本的神秘面纱,本章将从章将从SQL语言讲起,让读者对语言讲起,让读者对SQL语言的基本语法现
2、有一语言的基本语法现有一个大致的了解,为方便以后的学习打下一个基础。本章大致个大致的了解,为方便以后的学习打下一个基础。本章大致的内容主要包括的内容主要包括SQL语言简介语言简介SQL语言中的数据类型语言中的数据类型SQL语言中变量语言中变量SQL语言中的运算符语言中的运算符SQL语言中的表达式语言中的表达式3.1 SQL3.1 SQL语言简介语言简介SQL是是Structured Query Language(机构化查询语言)(机构化查询语言)的简写,是高级的非过程化编程语言,允许用户在高层数据结构的简写,是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方
3、法,也不需要用户了上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统可以使用相同的库系统可以使用相同的SQL语言作为数据输入与管理的接口。最语言作为数据输入与管理的接口。最早是早是IBM的圣约瑟研究实验室为其关系数据库管理系统的圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言,它的前身是开发的一种查询语言,它的前身是SQUARE语言。语言。SQL语言结语言结构简洁,功能强大,简单易学,所以自从构简洁,功能强大,简单易学,所以自从IBM公司公司198
4、1年推出以年推出以来,来,SQL语言得到了广泛的应用。如今无论是像语言得到了广泛的应用。如今无论是像Oracle、Sybase、Informix、SQL Server这些大型的数据库管理系统,这些大型的数据库管理系统,还是像还是像Visual Foxpro、PowerBuilder这些这些PC上常用的数据库开上常用的数据库开发系统,都支持发系统,都支持SQL语言作为查询语言。语言作为查询语言。3.1.1 SQL3.1.1 SQL语言的主要特点语言的主要特点 SQL是一种面向数据库的通用数据处理语言规范,它具有是一种面向数据库的通用数据处理语言规范,它具有非常强大的功能主要包括以下几类:非常强大
5、的功能主要包括以下几类:提取查询数据。提取查询数据。插入修改删除数据。插入修改删除数据。生成修改和删除数据库对象。生成修改和删除数据库对象。数据库安全控制。数据库安全控制。数据库完整性及数据保护控制。数据库完整性及数据保护控制。SQL语言的这些强大功能充分体现了关系数据语言的特点语言的这些强大功能充分体现了关系数据语言的特点和优点。其主要的特点包括:和优点。其主要的特点包括:1综合统一综合统一2高度非过程化高度非过程化3面向集合的操作方式面向集合的操作方式4以同一种语法结构提供两种使用方式以同一种语法结构提供两种使用方式5语言简洁,易学易用语言简洁,易学易用3.1.2 3.1.2 如何分类如何
6、分类SQLSQL语言语言在上一节中我们提到了在上一节中我们提到了SQL语言具有强大的功能,这些功能可语言具有强大的功能,这些功能可以归纳为数据查询,数据定义,数据操纵以及数据控制,而我们给以归纳为数据查询,数据定义,数据操纵以及数据控制,而我们给SQL语言进行分类也是从语言进行分类也是从SQL语言所起的作用的角度进行的,所以语言所起的作用的角度进行的,所以我们可以将我们可以将SQL语言分为以下几类:语言分为以下几类:1数据查询语言(数据查询语言(Data Query Language,DQL)2数据定义语言(数据定义语言(Data Definition Language,DDL)3数据操纵语言
7、(数据操纵语言(Data Manipulation Language,DML)4数据控制语言(数据控制语言(Data Control Language,DCL)3.1.3 SQL3.1.3 SQL语法简介语法简介其实其实SQL命令并不是非常多,可是要把命令并不是非常多,可是要把SQL用到出神用到出神入化,却也只需要短短几个命令便够,因为入化,却也只需要短短几个命令便够,因为SQL命令是针对命令是针对关系型数据库所建立出来的语法叙述,所以关系型数据库所建立出来的语法叙述,所以SQL在这类数据在这类数据库中所发挥的功能非常的强,下面将对库中所发挥的功能非常的强,下面将对SQL语法基本命令进语法基本
8、命令进行简单的介绍,在后面的学习中我们将详细的介绍行简单的介绍,在后面的学习中我们将详细的介绍SQL语法语法中涉及的内容。大致上中涉及的内容。大致上SQL语法所使用到的类型,基本上可语法所使用到的类型,基本上可以概括为一下几类。以概括为一下几类。类属性(类属性(Predicates):):声明(声明(Declaration):):条件字句(条件字句(Clause):):运算符(运算符(Operator)与操作数()与操作数(Operation):):函数(函数(Function):):SQL语句(语句(Statement):):3.1.4 3.1.4 如何给标识符起名如何给标识符起名计算机语言
9、发展至今,标识符命名逐渐摆脱了早期不计算机语言发展至今,标识符命名逐渐摆脱了早期不区分大小写的书写样式,以及微软借区分大小写的书写样式,以及微软借 Windows 平台推荐平台推荐和推广的匈牙利命名法(和推广的匈牙利命名法(Hungarian Notation),形成目),形成目前主流的命名规则,包括以下四种样式:完全大写、完全小前主流的命名规则,包括以下四种样式:完全大写、完全小写、写、Pascal 大小写和大小写和 Camel 大小写。所谓大小写。所谓 Pascal 大小大小写即组成标识符的每个单词的首字母大写,其余字母小写的写即组成标识符的每个单词的首字母大写,其余字母小写的书写约定;而
10、书写约定;而 Camel 大小写与大小写与 Pascal 大小写相似,区别大小写相似,区别仅在于其标识符的首字母恒为小写。此外,作为上述规则的仅在于其标识符的首字母恒为小写。此外,作为上述规则的补充约定,对于双字母的缩写单词,补充约定,对于双字母的缩写单词,Pascal 大小写要求它大小写要求它们全部大写,而们全部大写,而 Camel 大小写则要求它们出现在标识符首大小写则要求它们出现在标识符首部时全部小写,否则全部大写。需要强调,这条规则仅适用部时全部小写,否则全部大写。需要强调,这条规则仅适用于缩写的双字母单词,像于缩写的双字母单词,像“To”、“Is”、“As”这样原生这样原生的双字母单
11、词上。的双字母单词上。3.2 3.2 数据类型大家族数据类型大家族任何一种高级语言都有数据类型的概念,任何一种高级语言都有数据类型的概念,SQL语言也语言也不例外,在数据结构中数据类型的定义为一个值的集合以及不例外,在数据结构中数据类型的定义为一个值的集合以及定义在这个值集上的一组操作。下面这一节我们将对定义在这个值集上的一组操作。下面这一节我们将对SQL语语言的数据类型做一个详细的介绍,读者在学习的时候可以和言的数据类型做一个详细的介绍,读者在学习的时候可以和学过的其他高级语言中的数据类型进行比较学习。学过的其他高级语言中的数据类型进行比较学习。3.2.1 SQL Server 3.2.1
12、SQL Server 数据类型概述数据类型概述在本节中我们可能会遇到一些我们以前没有接触到的概在本节中我们可能会遇到一些我们以前没有接触到的概念,例如表的创建,对于这些我们现在不用太过关心,我们只念,例如表的创建,对于这些我们现在不用太过关心,我们只要能够理解什么时候需要用到数据类型,以及怎样使用数据类要能够理解什么时候需要用到数据类型,以及怎样使用数据类型就可以了,至于具体的操作流程我们会在后面的章节中进行型就可以了,至于具体的操作流程我们会在后面的章节中进行具体的介绍。具体的介绍。在计算机中数据有两种特征:类型和长度。所谓数据类在计算机中数据有两种特征:类型和长度。所谓数据类型就是以数据的
13、表现方式和存储方式来划分的数据的种类。在型就是以数据的表现方式和存储方式来划分的数据的种类。在SQL Server中每个变量、参数、表达式都有数据类型。中每个变量、参数、表达式都有数据类型。3.2.2 3.2.2 系统数据类型系统数据类型SQL Server中的数据类型大致分为一下七种类型:整中的数据类型大致分为一下七种类型:整数数据类型,浮点数据类型,二进制数据类型,逻辑数据类数数据类型,浮点数据类型,二进制数据类型,逻辑数据类型,字符数据类型,文本和图形数据类型以及日期和时间数型,字符数据类型,文本和图形数据类型以及日期和时间数据类型。下面我们对这几种数据类型进行逐一介绍,以便读据类型。下
14、面我们对这几种数据类型进行逐一介绍,以便读者对者对SQL Server数据类型有一个充分的认识。数据类型有一个充分的认识。1整数数据类型整数数据类型2浮点数据类型浮点数据类型3二进制数据类型二进制数据类型4逻辑数据类型逻辑数据类型5货币数据类型货币数据类型6字符数据类型字符数据类型7文本和图形数据类型文本和图形数据类型8日期和时间数据类型日期和时间数据类型3.2.3 3.2.3 自定义数据类型自定义数据类型我们在对表列的数据类型进行定义时,我们除了可以使我们在对表列的数据类型进行定义时,我们除了可以使用系统提供的数据类型外,还可以根据需要用自定义的数据用系统提供的数据类型外,还可以根据需要用自
15、定义的数据类型来进行定义。类型来进行定义。1使用对象资源管理器方用户自定义数据类型使用对象资源管理器方用户自定义数据类型2使用使用SQL编程方式来创建用户自定义数据类型编程方式来创建用户自定义数据类型3.2.3 3.2.3 自定义数据类型自定义数据类型3.2.3 3.2.3 自定义数据类型自定义数据类型3.3 3.3 变量变量变量是一种语言中必不可少的组成部分。在变量是一种语言中必不可少的组成部分。在SQL Server依赖的依赖的Transact-SQL语言中有两种的形式的变量,一种是用语言中有两种的形式的变量,一种是用户自己定义的局部变量,另一种是系统提供的全局变量。在户自己定义的局部变量
16、,另一种是系统提供的全局变量。在SQL语言中和变量相关的概念还有批和脚本的概念,下面我语言中和变量相关的概念还有批和脚本的概念,下面我们就是先介绍一下批和脚本的概念,然后再介绍变量。们就是先介绍一下批和脚本的概念,然后再介绍变量。3.3.1 3.3.1 批和脚本批和脚本在在SQL Server中为了方便变量以及函数的处理提出了中为了方便变量以及函数的处理提出了批和脚本的概念,批就是一条或者多条批和脚本的概念,批就是一条或者多条SQL语句的集合,而语句的集合,而脚本则是按照一系列顺序提交的批。通过这两个概念我们可脚本则是按照一系列顺序提交的批。通过这两个概念我们可以非常清晰的以非常清晰的SQL语
17、句之间的关系,便于我们对语句之间的关系,便于我们对SQL语句的语句的管理。管理。1批批2脚本脚本3.3.2 3.3.2 局部变量局部变量局部变量是用户自定义的变量。使用范围是定义它的批、局部变量是用户自定义的变量。使用范围是定义它的批、存储过程或触发器。局部变量的作用范围仅限制在程序内部。存储过程或触发器。局部变量的作用范围仅限制在程序内部。局部变量可以作为计数器来计算循环执行的次数,或是控制循局部变量可以作为计数器来计算循环执行的次数,或是控制循环执行的次数。另外,利用局部变量还可以保存数据值,以供环执行的次数。另外,利用局部变量还可以保存数据值,以供控制流语句测试以及保存由存储过程返回的数
18、据值等。局部变控制流语句测试以及保存由存储过程返回的数据值等。局部变量前面通常加上量前面通常加上标记。用标记。用DECLARE 对局部变量进行定义,对局部变量进行定义,并指明此变量的数据类型,用并指明此变量的数据类型,用SET或或SELECT命令对其赋值。命令对其赋值。局部变量的数据类型可以是用户自定义的数据类型,也可以是局部变量的数据类型可以是用户自定义的数据类型,也可以是系统数据类型,但不能将其定义为系统数据类型,但不能将其定义为TEXT或或IMAGE数据类型。数据类型。1定义局部变量定义局部变量2用用SELECT为局部变量赋值为局部变量赋值3用用SET为局部变量赋值为局部变量赋值3.3.
19、3 3.3.3 全局变量全局变量全局变量是由全局变量是由SQL Server系统提供并赋值的变量。用系统提供并赋值的变量。用户不能建立全局变量,也不能修改全局变量的值。与局部变户不能建立全局变量,也不能修改全局变量的值。与局部变量不同量不同,全局变量在所有存储过程内均有效。通常将全局变量全局变量在所有存储过程内均有效。通常将全局变量的值赋给局部变量,以便保存和处理。的值赋给局部变量,以便保存和处理。3.4 SQL3.4 SQL的佐料的佐料运算符运算符为了实现编程的功能,与其他高级语言一样,为了实现编程的功能,与其他高级语言一样,Transact-SQL运用运算符和函数实现各种计算和处理功能。运
20、用运算符和函数实现各种计算和处理功能。Transact-SQL提供了如下几种类型的运算符:算术运算提供了如下几种类型的运算符:算术运算符、比较运算符、字符连接运算符和逻辑运算符,按位运算符。符、比较运算符、字符连接运算符和逻辑运算符,按位运算符。3.4.1 3.4.1 算术运算符算术运算符算术运算符对两个表达式执行数学运算,这两个表达式算术运算符对两个表达式执行数学运算,这两个表达式可以是数值数据类型类别的一个或多个数据类型。可以是数值数据类型类别的一个或多个数据类型。对于算术运算符这里有两点需要说明:对于算术运算符这里有两点需要说明:加(加(+)和减()和减(-)运算符也可用于对)运算符也可
21、用于对datetime和和smalldatetime值执行算术运算。值执行算术运算。取模运算符的作用是返回一个除法运算的整数余数,例取模运算符的作用是返回一个除法运算的整数余数,例如,如,12%5=2,这是因为,这是因为12除以除以5,余数为,余数为2。3.4.2 3.4.2 比较运算符比较运算符在在SQL语言中,比较运算符能够进行除语言中,比较运算符能够进行除text、ntext和和image数数据类型之外的其他数据类型表达式的比较操作。比较运算表达式的据类型之外的其他数据类型表达式的比较操作。比较运算表达式的返回值为布尔数据类型,即返回值为布尔数据类型,即true、false。SQL语言中
22、的比较运算符主要包括等于,大于,小于,大于或语言中的比较运算符主要包括等于,大于,小于,大于或等于,小于或等于,不大于,不小于,不等于,控制实行优先级等于,小于或等于,不大于,不小于,不等于,控制实行优先级小括号。小括号。1=(等于)(等于)2(大于)(大于)3=(大于或等于)(大于或等于)5(不大于)(不大于)7!(不小于)(不小于)8、!=(不等于)(不等于)9()(控制实行优先级)(控制实行优先级)3.4.3 3.4.3 逻辑运算符逻辑运算符逻辑运算符用于测试条件是否为真,根据测试结果返回逻辑运算符用于测试条件是否为真,根据测试结果返回布尔值布尔值TURE、FALSE或或UNKNOWN。
23、AND:OR:NOT:ALL:ANY:BETWEEN:EXISTS:IN:LIKE:SOME:3.4.4 3.4.4 连接运算符连接运算符连接运算符是指可以将一个或多个文连接为一个组合文连接运算符是指可以将一个或多个文连接为一个组合文本的运算符号,在本的运算符号,在SQL语言中连接运算符就只有一种那就是语言中连接运算符就只有一种那就是“+”。但是这时。但是这时+运算符的含义不是加法,而是字符串的连运算符的含义不是加法,而是字符串的连接,例如:接,例如:fullName=”givenName”+”+”familyName”这句话我们就是使用了连接运算符这句话我们就是使用了连接运算符“+”生成了一
24、个新生成了一个新的字符串的字符串fullName,这个,这个fullName的值就是的值就是“givenName familyName”。3.4.5 3.4.5 按位运算符按位运算符位运算符对整数或二进制数据进行按位与位运算符对整数或二进制数据进行按位与(&)、或、或(|)、异或异或()、求反、求反()等逻辑运算。等逻辑运算。1&(位与)(位与)2(位非)(位非)3|(位或)(位或)4(位异或)(位异或)3.4.6 3.4.6 运算符的优先级运算符的优先级在实际的在实际的SQL语言的编程中,可能在一个运算符中出现多语言的编程中,可能在一个运算符中出现多个运算符,那么计算时,就按照优先级级别的高
25、低进行计算,级个运算符,那么计算时,就按照优先级级别的高低进行计算,级别高的运算符先运算,级别低的运算符后计算。别高的运算符先运算,级别低的运算符后计算。优先级运算符1+(正)、-(负)、(按位 NOT)2*(乘)、/(除)、%(取模)3+(加)、(+串联)、-(减)4除法运算符5=,=,=,!=,!,!比较运算符6(位异或)、&(位与)、|(位或)7NOT8AND9ALL、ANY、BETWEEN、IN、LIKE、OR、SOME10=(赋值)3.5 3.5 认识表达式认识表达式表达式在表达式在SQL语言中起着非常重要的作用,可以说是语言中起着非常重要的作用,可以说是整个整个SQL语言的核心部分
26、,因为语言的核心部分,因为SQL语言中的很多重要操作语言中的很多重要操作都需要表达式来完成,这一节我们主要的目的就是让读者对都需要表达式来完成,这一节我们主要的目的就是让读者对表达式有一个大致的认识,关于表达式的详细内容我们会在表达式有一个大致的认识,关于表达式的详细内容我们会在以后的章节中渐渐的深入了解。以后的章节中渐渐的深入了解。3.5.1 3.5.1 什么是表达式什么是表达式表达式是指用运算符和圆括号把常量、变量和函数等运表达式是指用运算符和圆括号把常量、变量和函数等运算成分连接起来的有意义的式子,应该特别指出的是单个的算成分连接起来的有意义的式子,应该特别指出的是单个的常量、变量、函数
27、也可以看成是一个表达式。常量、变量、函数也可以看成是一个表达式。SQL语言的核心就是语言的核心就是SQL表达式,表达式可用于很多方表达式,表达式可用于很多方面例如,执行计算、检索控件的值或向查询提供条件等。面例如,执行计算、检索控件的值或向查询提供条件等。在在后面的章节中后面的章节中SQL表达式会随处可见,特别是下一章表达式会随处可见,特别是下一章走走进进SQL语句世界中的大部分语句世界中的大部分SQL语句都是由语句都是由SQL关键字加上关键字加上SQL表达式组成的。在这里我们只是需要先了解一下表达式组成的。在这里我们只是需要先了解一下SQL语语句的简单概念和分类,具体的介绍我们在下一章展开。
28、句的简单概念和分类,具体的介绍我们在下一章展开。3.5.2 SQL3.5.2 SQL中表达式的分类中表达式的分类对于对于SQL表达式的分类我们可以有两种分类方法,一种表达式的分类我们可以有两种分类方法,一种是按照连接表达式的运算符进行分类,我们可以将表达式分是按照连接表达式的运算符进行分类,我们可以将表达式分为算术表达式、比较表达式、逻辑表达式,按位表达式和混为算术表达式、比较表达式、逻辑表达式,按位表达式和混合表达式等,另一种分类方法是按照表达式的作用来进行分合表达式等,另一种分类方法是按照表达式的作用来进行分类,我们可以将表达式分为字段名表达式,目标表达式和条类,我们可以将表达式分为字段名
29、表达式,目标表达式和条件表达健件表达健对于第一种分类方法就是按照连接运算因子的运算符进对于第一种分类方法就是按照连接运算因子的运算符进行的划分,我们很容易就能够理解,这里就不在进行过多的行的划分,我们很容易就能够理解,这里就不在进行过多的阐述,下面我们按照第二种分类方式简单介绍一下阐述,下面我们按照第二种分类方式简单介绍一下SQL中表中表达式。达式。1字段名称表达式字段名称表达式2目标表达式目标表达式 3条件表达式条件表达式3.6 SQL3.6 SQL利器利器通配符通配符在搜索数据库中的数据时,您可以使用在搜索数据库中的数据时,您可以使用 SQL 通配符。通配符。SQL 通配符在搜索数据库中的
30、数据时,通配符在搜索数据库中的数据时,SQL 通配符可以替通配符可以替代一个或多个字符。需要特别注意的是代一个或多个字符。需要特别注意的是SQL 通配符必须与通配符必须与 LIKE 运算符一起使用。在运算符一起使用。在SQL语言中我们通常使用的通配语言中我们通常使用的通配符有以下几种。符有以下几种。%:包含零个或更多字符的任意字符串。:包含零个或更多字符的任意字符串。_(下划线):任何单个字符。(下划线):任何单个字符。:指定范围:指定范围(a-f)或集合或集合(abcdef)中的任何单个中的任何单个字符。字符。或或!:不属于指定范围:不属于指定范围(a-f)或集合或集合(abcdef)的任何
31、单个字符。的任何单个字符。3.7 SQL3.7 SQL语言中的注释语言中的注释和大多数的高级编程语言一样,和大多数的高级编程语言一样,SQL语言也有自己的语言也有自己的代码注释的标准与规则。注释的好处在让你的代码变得更加代码注释的标准与规则。注释的好处在让你的代码变得更加清晰和易于理解,对清晰和易于理解,对SQL代码加上注释之后不仅能够让自己代码加上注释之后不仅能够让自己很容易的理解自己以前写过的代码,更重要的是团队协作开很容易的理解自己以前写过的代码,更重要的是团队协作开发的时候,确保你所交付给同伴的源码能够易于被读懂,从发的时候,确保你所交付给同伴的源码能够易于被读懂,从而不必花费大的精力
32、在于代码的交接上。而不必花费大的精力在于代码的交接上。SQL中的注释方法大致分为两种:中的注释方法大致分为两种:1单行注释:单行注释:2多行注释多行注释3.8 3.8 小结小结通过本章的学习我们会对通过本章的学习我们会对SQL语言有一个大致的了解语言有一个大致的了解了了SQL语言的大致内容,更加具体和详细的内容我们会在后语言的大致内容,更加具体和详细的内容我们会在后面的章节中进行详细的阐述。面的章节中进行详细的阐述。本章我们主要学习了本章我们主要学习了SQL语言中的数据类型,变量,语言中的数据类型,变量,运算符,表达式以及其他的一些辅助的与运算符,表达式以及其他的一些辅助的与SQL语言开发相关
33、语言开发相关的一些内容。在本章的讲述中读者可以非常清楚的理清讲解的一些内容。在本章的讲述中读者可以非常清楚的理清讲解的思路,本章的讲解思路清晰,重点突出,我们把的思路,本章的讲解思路清晰,重点突出,我们把SQL语言语言中的数据类型,运算符、表达式等内容做了详细的阐述,他中的数据类型,运算符、表达式等内容做了详细的阐述,他们在我们今后的使用中会经常的用到,是我们进行们在我们今后的使用中会经常的用到,是我们进行SQL编程编程的重点内容也是基础内容,我们只有能够充分理解的他们在的重点内容也是基础内容,我们只有能够充分理解的他们在能在后面的学习中游刃有余。下一章我们将进行能在后面的学习中游刃有余。下一章我们将进行SQL语句的语句的学习,这是学习,这是SQL Server中的一个非常中心的内容,中的一个非常中心的内容,SQL语语句的编写在很大程度上可以说是句的编写在很大程度上可以说是SQL语言的具体应用。语言的具体应用。