8Transact-SQL语法基础8-1Transact-SQL表达式8-2Transact-SQL数据类型8-3Transact-SQL函数8-4QueryAnalyzer工具程序8-5Transact-SQL语句8-6数据处理语法(DML)ASP与SQL网站数据库程序设计208在正式介绍Transact-SQL语句的语法之前,笔者先利用较短的篇幅,简单介绍有关Transact-SQL表达式、数据类型以及函数等。并且希望让从未接触过SQL语句设计的读者,可以有一些Transact-SQL的运行概念;同时也可以让已经使用过Transact-SQL语句设计的读者,作为相关查询的数据来源。8-1Transact-SQL表达式表达式是用来在“列与列之间”或者“在变量之间”进行比较以及数学运算的符号。在MS-SQLServer中,表达式共具有“数学表达式”、“字符串表达式”、“比较式”以及“逻辑表达式”等四种表达式的类型;下面就对这些表达式类型进行详细的说明。8-1-1数学表达式数学表达式可以用在各种数字类型变量的运算。这些数字类型变量的数据类型共有:INT,SMALLINT,TINYINT,FLOAT,REAL,MONEY或者SMALLMONEY。而数学表达式的符号共有:加(+)、减(-)、乘(*)、除(/)和求余数(%)。其具体说明如表8-1所示。表8-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数据类型。第8章Transact-SQL语法基础2098-1-2字符串表达式字符串是由字符、符号以及数字所组成,并且字符串表达式是使用于字符串运算与操作的一种运算方式。在SQLServer的字符串表达式中,字符串是可以使用数学表达式的“+”,达到字符串的相加、结合的目的。在SQLServer的数据类型中,可以适用于字符串加法的数据类型计有:“Char”、“VarChar”、“Nvarchar”、“Text”,以及可以转换为“Char”或是“VarChar”数据类型的数据类型。例如:“ASP”、“&”以及“SQL2000”三个字符串相加的表达式如下所示:Interval=“ASP”+“&”+“SQL2000”这三个字符串、字符相加之后的结果“Interval”,其内容则为“ASP&SQL2000”。8-1-3比较表达式比较表达式是用来对两个表达式进行比较。在MS-SQLServer中,可以使用的比较表达式符号如表8-2所示。表8-2较表达式符号表达式符号功能=等于大于小于=大于或者等于=小于或者等于或!=不等于!不大于!不小于()优先级控制符此外,比较表达式的执行优先级如同数学表达式一样,可以使用“()”来设置运算的优先级。ASP与SQL网站数据库程序设计2108-1-4逻辑表达式在Transact-SQL的逻辑表达式中,共具有“AND”、“OR”以及“NOT”三种逻辑表达式。以下是这三种逻辑表达式的功能说明:“AND”表达式:当所有的条件式在运算之后,只有全部的返回值都是“真”的情况下,其逻辑运算值才会返回“真”;反之,如果有一个返回值是“假”时,其逻辑运算值即为“假”。“OR”表达式:只要有一个条件式的返回值是“真”,其逻辑运算值即返回“真”。“NOT”表达式:逻辑表达式“反向”。即逻辑运算值为“真”时,其返回值即为“假”。同时在优先级方面,其优先级为“NOT”、“AND”、“OR”。并且逻辑表达式可以使用的数据类型如表8-3所示。表8-3逻辑表达式可以使用的数据类型左操作数右操作数binary,varbinaryint,smallint,tinyintint,smallint,tinyintint,smallint,tinyint,binarybitint,smallint,tinyint,binary8-1-5表达式的优先级通常在一个Transact-SQL的表达式中,可能会包含许多不同类型的表达式。Transact-SQL在执行的过程中,根据下列的原则定义表达式的先后执行顺序:括号:“()”反向表达式:“~”乘、除、取余数表达式:“*”、“/”、“%”加减表达式:“+”、“-”XOR表达式:“^”AND表达式:“&”OR表达式:“|”NOT连接AND连接第8章Transact-SQL语法基础211OR连接如果具有相同的优先级时,则按照“由左而右”的规则进行运算。8-2Transact-SQL数据类型数据类型是“信息”类型的表现方式;对于每一种程序设计语言来说,它们都各自具有对“信息”类型的不同定义方式。在MS-SQLServer中共提供了25种不同的数据类型,以下是这些数据类型的分类与说明。表8-4数据类型的分类与说明类型数据类型说明二进制数据类型其数据内容是由“二进制”表示方式所组成的Binary[(n)]可以是固定长度,也可以是变化长度。Binary[(n)]是n位数固定长度的二进制数据。n的范围是从1到8000,所使用的存储空间大小为n+4个字节Varbinary[(n)]n为变动长度的二进制数据。n的范围是1到8000,所使用的存储空间大小为n+4个字节Image用于存储影像文件数据用。字符数据类型字符数据是由字符、数字以及符号所组合而成的数据Char[(n)]固定长度字符串,最大为8192字符VarChar[(n)]变动长度字符数据,长度不超过8192字符Text可以存储超过8192字符的数据日期和时间数据类型数据内容是以“日期格式”或者是“时间格式”的方式所存储的数据类型DateTime存储的日期从1753年1月1日到9999年12月31日,每一个数值要求8个字节的存储空间ASP与SQL网站数据库程序设计212续表类型数据类型说明Smalldatetime存储的日期从1900年1月1日到2079年12月31日,每一个数值要求4个字节的存储空间Unicode数据类型用以存储Unicode字符的数据类型Nchar行的长度固定不变,最多可以存储4000个字符Nvarchar可变动行的长度,最多可以存储4000个字符Ntext可以存储超过4000个字符数值数据类型数值数据类型包括正数、负数、小数和浮点数Int数值存储的范围从–2,147,483,648到2,147,483,647,每个数值要求4个字节的存储空间SmallInt存储的范围是–32,768到32,767,每个数值要求2个字节的存储空间TinyInt存储范围从0到255,每个数值要求1个字节存储空间Decimal,Numeric精确小数,数值范围从–1038–1到1038–1Float浮点数值,数值范围从–1.79E+308到1.79E+308Real双精度浮点数值,数值范围从–3.40E+38到3.40E+38,要求的存储空间为4个字节货币数据类型用以表示货币数量的数据类型Money要求8个字节的存储空间Smallmoney要求4个字节的存储空间特殊数据类型第8章Transact-SQL语法基础213续表类型数据类型说明TimeStamp以二进制的格式,表示SQLServer活动的先后顺序Bit以“0”或是“1”所组成的数据类型,使用Bit的数据类型可以表示“真”、“假”、“ON”或者是“OFF”Uniqueidentifier以十六进制的方式,表示一个全域唯一的识别码8-3Transact-SQL函数在数据库的“日常维护”、“管理”、“数据查询”等方面,函数可以说使用得非常频繁。通过Transact-SQL函数的使用,可以在“系统的相关信息”、“数学运算”、“查询”以及“统计”等方面,提供非常大的帮助。在MS-SQLServer中,常用的函数有:“字符串函数”、“日期时间函数”、“数学函数”、“转换函数”、“系统函数”以及“聚合函数”等。以下是这些函数的列示与说明。1.字符串函数表8-5字符串函数函数名称参数功能+exprexpr字符串加法ASCIIchar_expr返回ASCII的数值CHARinterger_expr返回ASCII的字符CHARINDEX“pattern”,expr取得Pattern的起始位置DIFFERENCEchar_expr1,char_expr2字符串比较LTRIMchar_expr删除字符串左方的空格LOWERchar_expr将字符串的内容全部转换成小写字母ASP与SQL网站数据库程序设计214续表函数名称参数功能PATINDEX“%pattern”,expr取得Pattern的起始位置,其中,“%”为MS-SQLServer专用的“万用字符”REPLICATEchar_expr,integer_expr根据指定的数值,产生重复的字符串内容RIGHTchar_expr,interger_expr返回字符串右边指定的字符内容REVERSEchar_expr反向表达式RTRIMchar_expr去除字符串右边的空格SOUNDEXchar_expr返回一个四位程序代码,用以比较两个字符串的相似性SPACEinterger_expr产生指定数量的空格STUFFchar_expr1,start,length,char_expr2在char_expr字符串中,从start开始,长度为length的字符串,以char_expr2取代SUBSTRINGexpr,start,length返回expr字符串中,从start开始,长度为length的字符串STRfloat[,length[,decimal]]将数值转换为字符串的函数。Length为总长度,decimal是小数点之后的长度UPPERchar_expr将字符串中全部的字符转换为大写字母2.日期与时间函数表8-6日期与时间函数函数名称参数功能GETDATE()返回系统目前的日期与时间DATEDIFF(datepart,date1,date2)以datepart指定的方式,返回date2与date1两个日期之间的值第8章Transact-SQL语法基础215续表函数名称参数功能DATEADD(datepart,number,date)以datepart指定的方式,返回date,加上number之后的日期DATEPART(datepart,date)返回日期date中,datepart指定部分所对应的整数值DATENAME(datepart,date)返回日期date中,datepart指定部分所对应的字符串名称以下所列的是在日期与时间函数中,与datepart相关“字段名称”、“缩写”以及“数值范围”的列表。表8-7日期与时间函数相关列表字段名称缩写数值范围YearYy1753~9999QuarterQq1~4MonthMm1~12DayofyearDy1~366DayDd1~31WeekWk0~51WeekdayDw1~7HourHh0~23MinuteMi0~59SecondSs0~59MillisecondMs0~9993.数学函数表8-8数学函数函数名称参数功能说明ABSNumeric_expr返回Numeric_expr的绝对值ASIN、ACOS、ATANFloat_expr返回Float_expr浮点数值的反正弦、反余弦、反正切ASP与SQL网站数据库程序设计216续表函数名称参数功能说明SIN、COS、TANFloat_expr返回Float_expr的正弦、余弦、正切CE