SQL是结构化查询语言(Structure Query Language)的英文缩写,是关系模型的数据库应用语言,由IBM在20世纪70年代开发。20世纪80年代初,美国国家标准局(ANSI)制订了SQL标准,被称为SQL-86。SQL标准经过多次修改,目前最新的SQL标准是1992年制订的SQL-92。Transact-SQL不仅包含了SQL-86和SQL-92的大多数功能,而且还发展了许多新的特性,增强了可编程性和灵活性。
本章将介绍Transact-SQL语言的基础知识,包括以下内容:
n SQL运算符
n 数据类型
n SQL常用函数
n SQL的SELECT语句
n SQL的批处理和流程控制语言
运算符是用来进行列间或者变量之间的比较和数学运算的。在Microsoft SQL Server 2000中,运算符有算术运算符、字符串运算符、比较运算符和逻辑运算符等。
算术运算符可以用在各种列和变量上,列和变量的数据类型是INT、SMALLINT、TINYINT、FLOAT、REAL、MONE或者SMALLMONEY。算术运算符包括加(+)、减(-)、乘(*)、除(/)和取模(%)。运算符如表3-1所示。
表3-1 算术运算符
|
符 号 |
功 能 |
可以操作的数据类型 |
|
+ |
加 |
INT、SMALLINT、TINYINT、FLOAT、REAL、MONEY或者SMALLMONEY |
|
- |
减 |
INT、SMALLINT、TINYINT、FLOAT、REAL、MONEY或者SMALLMONEY |
|
* |
乘 |
INT、SMALLINT、TINYINT、FLOAT、REAL、MONEY或者SMALLMONEY |
|
/ |
除 |
INT、SMALLINT、TINYINT、FLOAT、REAL、MONEY或者SMALLMONEY |
|
% |
取模 |
INT、SMALLINT、TINYINT |
@ 需要注意两个方面:一是算术运算符只能和数字变量或者数字列进行运算;取模运算中只能使用INT、SMALLINT和TINYIINT数据类型。
图3-1显示了重量提高了30%后的数据。
图3-1 使用算术运算符进行查询
字符串运算符用来实现对字符串的操作,字符串由字母、符号和数字组成。字符串连接运算符可以运算的数据类型有Char、Varchar和Text,以及可以转化成Char和Varchar的数据类型。
例如,使用下面的字符串运算符实现两个字符串的连接:
‘Good luck’+‘to you’!
比较运算符用来比较两个表达式。在Microsoft SQL Server 2000中,比较运算符如表3-2所示。
表3-2 比较运算符
|
运算符 |
功 能 |
|
= |
等于 |
|
> |
大于 |
|
< |
小于 |
|
>= |
大于或等于 |
|
<= |
小于或等于 |
|
<>,!= |
不等于 |
续 表
|
运算符 |
功 能 |
|
!> |
不大于 |
|
!< |
不小于 |
|
() |
优先级控制符 |
在SQL Server Query Analyzer中执行以下语句:
SELECT * From titles
WHERE price>$15.0
将列出书价高于$15.0的书目,如图3-2所示。
图3-2 使用大于号的查询结果
使用逻辑运算符可以把多个条件合并起来。逻辑运算符包括AND、OR和NOT等运算。在Transact-SQL语句中对整数数据进行比较时,首先将它们转化成二进制数,然后再进行比较。
AND运算符只有当所有条件都为真时才返回真,只要有一个条件为假,便返回假;OR运算符只要有一个条件为真,便返回真;NOT运算符取反。三个运算符的优先级为:NOT、AND、OR。
表3-3列出了逻辑运算符可以运算的数据类型。
使用逻辑运算符进行比较的语法形式如下:
SELECT select_list
FROM table_list
WHERE [NOT] expression {AND | OR} [NOT] expression
表3-3 逻辑运算符可运算的数据类型
|
左操作数 |
右操作数 |
|
binary、varbinary |
int、smallint、tinyint |
|
int、smallint、tinyint |
int、smallint、tinyint、binary |
|
bit |
int、smallint、tinyint、binary |
在同一个表达式中,可能会包含多种运算符,这就涉及到运算符的优先级问题。运算符的优先级决定了表达式的计算和比较顺序。在SQL Server 2000中, 运算符的优先级从高到低如下所示:
n 括号:()
n 取反运算符:~
n 乘、除、求模运算符:*、/、%
n 加减运算符:+、-
n 异或运算符:^
n 与运算符:&
n 或运算符 |
n NOT连接
n AND连接
n OR连接
如果优先级相同,则按照从左到右的顺序进行运算。
数据类型表示数据所表示信息的类型。任何一种语言都定义了自己的数据类型,Microsoft SQL Server 2000提供了25种数据类型:Binary[(n)]、Varbinary[(n)]、Char[(n)]、Varchar[(n)]、Nchar[(n)]、Nvarchar[(n)]、Datetime、Smalldatetime、Decimal[(p[,s])]、Numeric[p(,s)]、Float[(n)]、Real、Int、Smallint、Tinyint、Money、Smallmoney、Bit、Cursor、Sysname、Timestamp、Uniqueidentifier、Text、Image和Ntext。
二进制数据类型包括Binary、Vmage。
Binary数据可以是固定长度的,也可以是可变长度的。
Binary[(n)]是n位固定长度的二制数据。n的取值范围是1到8000。存储空间的大小为n+4个字节。
Varbinary[(n)]是n为可变长度的二进制数据。n的取值范围是1到8000。存储空间的大小为n+4个字节。
字符数据是由字母、数字和符号组合而成的数据。例如,“publisher”、“9454-@co”都是合法的字符数据。
字符数据类型包括Char、Varchar和Text。
Char是固定长度字符串,最大为8KB。Varchar是可变长度字符数据,长度不超过8KB。Text可以存储超过8KB的字符数据。
日期和时间数据类型包括Datetime和Smalldatetime。前者存储的日期从1753年1月1日到1999年12月31日,每一个值要求8个字节;后者存储从1900年1月1日到2079年12月31日,每一个值要求4个字节。
设置日期格式的命令如下:
SET DATEFORMAT{format|@format_var}
其中,format|@format_var是日期的格式。有效参数包括MDY、DMY、YMD、YDM、MYD、DYM。默认格式为MDY。
Unicode数据类型包括Nchar、Nvarchar和Ntext。
在Microsoft SQL Server 2000中,Unicode数据以Nchar、Nvarchar 和 Ntext数据类型存放。当列的长度变化时,使用Nvarchar数据类型,最多可以存储4000个字符。当列的长度固定不变时,使用Nchar数据类型,最多也可存储4000个字符。如果需要存储的字符数多于4000,应使用Ntext数据类型存储。
数字数据类型包括正数、负数、小数和浮点数。
在Microsoft SQL Server 2000中,整数的存储类型是Int、SmallInt和TinyInt。Int的存储范围大于SmallInt的存储范围,SmallInt的存储范围大于TInyInt的存储范围。Int数据类型可以存储的范围是从-2 147 483 648到2 147 483 647,每个值要求2个字节的存储空间。TinyInt的存储范围从0到255,每个值要求1个字节存储空间。
精确小数对应的数据类型是Decimal和Numeric。
近似小数对应的数据类型是Float和Real。
货币数据类型表示货币数量,在Microsoft SQL Server 2000中,货币数据的数据类型是Money和Smallmoney。Money数据类型要求8个存储字节,Smallmoney数据类型要求4个存储字节。
在Microsoft SQL Server 2000中,特殊数据类型有三种:Timestamp、Bit和Uniqueidentifier。
Timestamp以二进制格式表示SQL Server活动的先后顺序。
Bit由1或者0组成。使用Bit数据类型可以表示真、假、ON或者OFF。
Uniqueidentifier以十六进制数字表示一个全局唯一的标识号。
在Microsoft SQL Server 2000中, 用户可以根据需要自定义数据类型。创建用户自定义数据类型可以使用Transact-SQL语句。使用系统存储过程sp-addtype创建用户自定义数据类型的语法形式如下:
sp-addtype{type},[,system_data_type][,‘null_type’]
其中,type是用户定义的数据类型名称。system_data_type是SQL Server的数据类型。null_type表明对空值如何处理。
例如,下面的例子创建了一个不允许为空的数据类型:
USE master
EXEC sp_addtype mmm ‘Varchar(10)’,‘NOT NULL’
下面的例子创建了一个允许为空的数据类型:
USE master
EXEC sp_addtype nnn datertime,‘NULL’
如果要删除用户定义的数据类型,可以使用sp_droptypeP{‘type’}命令。比如,如果要删除上面建立的nnn变量,可以使用如下程序:
USE master
EXEC sp_droptype‘nnn’
在数据库的日常维护和管理中,函数的使用非常频繁。使用函数可以帮助用户获得系统的有关信息、进行数学计算、查询、统计等。在SQL Server 2000中,常用的函数有以下几种:
n 字符串函数
n 日期时间函数
n 数学函数
n 转换函数
n 系统函数
n 集合函数
使用字符串函数可以实现对字符串的操作、查找、转换等功能。
字符串函数可以分为以下四大类:
基本字符串函数:UPPER、LOWER、SPACE、REPLICATE、STUFF、REVERSE、LTRIM、RTRIM。