第七课T-SQL语言基础课前导读基础知识重点知识基础知识SQL语言概述。
重点知识数据类型、常量、运算符和常用函数,读者应结合上机实战熟练相关操作。
课堂讲解在SQL Server 2000中,企业管理器是一个功能强大、操作方便的图形化管理工具,几乎所有的操作都可以在其中完成,但它仍不能完全取代SQL语句。
无论是SQL Server 2000,还是在其他的数据库中,SQL都扮演了重要的角色,要成为一名突出的数据库开发人员,首先就应该掌握SQL语言。
本课将介绍SQL语言的基本概况、数据类型、常量、运算符和常用函数等内容。
SQL语言概述数据类型常量运算符常用函数SQL语言概述SQL是Structured Query Language(结构化查询语言)的缩写,是关系数据库使用的标准数据库查询语言。
SQL在20世纪70年代由IBM开发出来,随着关系数据库管理系统的不断推出,SQL语言被广泛应用。
由于关系数据库供应商都根据需要定义了自己的SQL语法规则,例如,Microsoft使用的SQL为Transact-SQL(简称T-SQL),Oracle使用的SQL为SQL-Plus。
为了统一各种数据库产品中SQL语法,ANSI(American National Standard Institute,美国国家标准局)制定了SQL语言标准。
最早的ANSI标准于1986年完成,它也被叫做SQL-86,目前新的SQL标准是1992年制定的SQL-92。
很显然,各个数据库供应商不可能抛弃自己的专长来适应ANSI标准,所以业界使用的SQL语言基本上是以SQL-92为基础,在加上各供应商自己的特有语法。
所以,SQL语言标准有“业界标准”和“ANSI标准”之分。
SQL语言具有“非过程性”的特点,使用SQL编写的程序不能独立运行,必须在特定的数据库管理系统中使用,这与“过程性”的高级程序设计语言,如VB、VC等不同。
SQL语言中的语言可从功能上分为3类:数据定义语言DDL(Data Definition Language)、数据处理语言DML(Data Manipulation Language)和数据控制语言DCL(Data Control Language)。
数据定义语言:用于定义或修改数据库、数据表等对象的SQL语句称为数据定义语言。
例如,SQL Server中定义数据库使用的Create Database语句,定义数据表使用的Create Table语句,都是数据定义语言。
数据处理语言:用于完成数据处理的SQL语句称为数据处理语言。
例如,完成数据查询的Select 语句,完成添加数据的Insert语句,完成数据修改的Update语句,都是数据处理语言。
数据控制语言:用于数据库权限设置的语句称为数据控制语言。
例如,授权语句Grant、取消权限语句Revoke等都是数据控制语言。
SQL Server 2000中使用的SQL就是Microsoft的T-SQL,所以在本课中主要介绍T-SQL 的语法基础,包括数据类型、常量、运算符和常用函数等内容。
关于T-SQL的各种语句,将在本书后继课程中介绍使用到的部分常用语句。
数据类型当在定义数据表的字段或在程序中使用变量时,都会使用到数据类型,数据类型决定了一个数据如何存储以及可以执行的操作。
T-SQL中的数据类型可分为系统数据类型和用户自定义数据类型,下面介绍T-SQL的系统数据类型。
数据类型整数精确小数货币数据近似数字日期时间数据pubs数据库字符串Unicode字符串二进制数据其他数据类型整数整数数据类型用于定义存储整数(如1234,-456等)的字段和变量,包括bigint、int、smallint、tinyint、bit5种类型,如表7-1所示。
精确小数精确小数是指精度和小数点位置固定的数,如12.345,-100.05,精确小数类型包括decimal 和numeric,如表7-2所示。
货币数据货币数据是指以货币符号$开头的数据,如$12.345,$100.05。
货币数据类型包括money 和smallmoney,其精度都精确到小数点后4位,如表7-3所示。
近似数字近似数字指小数点位置不固定的数据,如1.23E+13,近似数字类型有Float和Real两种,如表7-4所示。
日期时间数据日期时间数据是指表示日期和时间的数据,如'2004-04-01 21:23:15'。
日期时间数据类型有datetime和smalldatetime,如表7-5所示。
字符串字符串是指文本数据,如'数据类型','abc'。
在SQL Server 2000中,使用双引号或单引号括起来的数据都为字符串。
字符串数据类型包括char、varchar和text,如表7-6所示。
Unicode字符串Unicode是双字节字符编码标准。
Unicode字符串中的字符使用两个字节存储,而普通字符采用一个字节存储。
Unicode字符串类型包括nchar、nvarchar和ntext,如表7-7所示。
二进制数据二进制数据是指Word文档、Excel电子表格以及bmp、gif和jpeg等图像文件。
二进制数据包括binary、varbinary和image,如表7-8所示。
其他数据类型其他数据类型指一些具有特殊作用的数据类型,如表7-9所示。
常量常量是指使用字符或数字表示出来的字符串、数值或日期等数据,表示一个特定数据值的符号。
根据数据类型,可将常量分为各种不同类型。
字符串常量Unicode字符串二进制常量bit常量datetime常量整型常量decimal常量float和real常量货币常量uniqueidentifier常量字符串常量字符串常量是指使用单引号作为定界符,由字母(a~z、A~Z和汉字等)、数字(0~9)以及特殊字符(如感叹号!、at符@和数字号#)等组成的字符序列,不包含任何字符的字符串,称为空字符串,表示为''。
在字符串中,可使用两个单引号来插入一个单引号。
下面是字符串的示例:'abcdef''123''数据类型''abc''def'Unicode字符串Unicode字符串的格式与普通字符串相似,但需在字符串前面加一个N进行区别,N前缀必须大写。
下面是Unicode字符串的示例。
N'abcdef'N'123'N'数据类型'二进制常量二进制常量是指使用0x作前辍的十六进制数字字符串,如下所示。
0x1230xABC单独的0x视为一个空二进制常量。
bit常量bit常量使用数字0或1表示,并且不使用引号。
如果使用一个大于1的数字,它将被转换为1。
datetime常量datetime常量是用单引号括起来的日期和时间数据,如下所示。
'2004-3-12''1 may,2003''2004年3月12日''04/03/12 12:00:00'整型常量整型常量是指不带小数点的整数,例如,123,+123,-100。
decimal常量decimal常量是指带小数点的数,例如,123.56,+45.67,-10.005。
float和real常量float和real常量是指使用科学记数法表示的数例如,1.2E5,+0.45e-9,+5.7E12。
货币常量货币常量是指以$符号开头的数字,如下所示。
$12,$542023.14。
uniqueidentifier常量uniqueidentifier常量是指表示全局惟一标识符(GUID)值的字符串,可以使用字符或二进制字符串格式指定,如下所示。
'6F9619FF-8B86-D011-B42D-00C04FC964FF'0xff19966f868b11d0b42d00c04fc964ff运算符T-SQL的运算符可分为算术运算符、赋值运算符、位运算符、比较运算符、逻辑运算符、字符串连接符和一元运算符,下面分别进行介绍。
算术运算符赋值运算符位运算符比较运算符逻辑运算符字符串连接符运算符的优先顺序算术运算符算术运算符用于完成两个表达式的数学运算,表7-10列出了各个算数运算符。
赋值运算符赋值运算符只有一个,即=(等号),用于为字段或变量赋值。
例如,下面的语句先定义一个int变量@xyz,然后将其值赋为123。
declare @xyz intset @xyz=123位运算符位运算符用于在两个数之间执行位操作,T-SQL的位运算符如表7-11所示。
位运算符的操作数可以是整型或二进制数据类型(binary和varbinary,但不包括image 数据类型)的任何数据,并且,两个操作数不能同时是二进制数据。
表7-12列出了位运算支持的操作数数据类型。
比较运算符比较运算符用于测试两个表达式是否相等,除了text、ntext或image数据类型的表达式外,比较运算符还可用于其他所有类型的表达式。
如表7-13所示列出了比较运算符及其含义。
比较运算的结果为布尔数据类型,它有3种值:TRUE、FALSE和UNKNOWN 当SET ANSI_NULLS为ON时,带有一个或两个NULL表达式的比较运算结果为UNKNOWN。
当SET ANSI_NULLS为OFF时,上述规则同样适用,但两个NULL表达式相等比较运算结果为TRUE。
布尔数据类型比较特殊,不能用于定义变量或表中字段的数据类型,也不能在结果集中返回布尔数据类型。
布尔表达式通常用在WHERE子句或流控制语言语句(如IF和WHILE)中表示条件,如下所示。
use northwind --指定查询使用的数据库declare @x int --声明一个变量@xset @x=100IF (@x <> 0) --根据条件执行查询SELECT *FROM ProductsWHERE ProductID < @x --查询Products表中ProductID小于100的记录逻辑运算符逻辑运算符用于对某个条件进行测试,和比较运算符一样,逻辑运算的运算结果为布尔数据(TRUE或FALSE)。
如表7-14所示列出了逻辑运算符及其含义。
字符串连接符字符串连接运算是指使用加号(+)将两个字符串连接成一个字符串,加号作为字符串连接符。
例如,'abc' +'123'结果为'abc123'。
运算符的优先顺序如果一个表达式中使用了多种运算符,则运算符的优先顺序决定计算的先后次序。
计算时,从左向右计算,先计算优先级高的运算,再计算优先级低的运算。