数据库原理与应用——SQLServer2005教案邹竞授课日期年月日第6周授课形式讲课授课时数4章节名称第06章SQL与T-SQL简介教学目的与要求①掌握SQLServer中的常用数据类型(数值型、字符串型、日期时间类型、货币类型、大二进制类型)②掌握SQLServer中的常用的聚合函数、数学函数、字符串函数、类型转换函数、日期时间函数和系统函数③了解数据字典表SYSOBJECTS和SYSLOGINS教学重点数据类型教学难点无教学方法和手段讲授法结合课堂实例分析讨论教学过程与组织导入新课本周开始我们学习专用于关系数据库的结构化查询语言——SQL。讲授新课第06章SQL与T-SQL简介第01节SQL概述6.1.1什么叫SQL和T-SQLSQL(StructuredQueryLanguage)语言,又称作结构化查询语言。它是一种用户操作关系数据库的通用语言。标准SQL语言提供支持,各大型DBMS厂商对标准SQL做了扩充,如微软的Transaction-SQL,甲骨文的PL/SQL。Transact-SQL(T-SQL)是ANSI标准SQL数据库查询语言的一个强大的实现,是Microsoft公司在关系型数据库管理系统SQLServer中对SQL的扩展,具有SQL的主要特点,同时增加了变量、运算符、函数、流程控制和注释等语言元素。6.1.2SQL语言的特点1.功能集成化和一体化2.高度非过程化,是基于任务的语言。3.简洁和高效,接近自然语言,简洁易学4.以多种方式使用6.1.3SQL的功能SQL按其功能大体可分为四大部分:数据定义、数据控制、数据查询和数据操作四大功能,如表所示。当然,除去表中的这些功能外,还有其他功能。SQL功能命令动词数据定义CREATE,DROP,ALTER数据查询SELECT数据操作INSERT,UPDATE,DELETE数据控制GRANT,REVOKE第02节T-SQL的数据类型数据类型是指列、参数、表达式和局部变量的数据特征,它决定数据的存储格式,代表不同的信数据库原理与应用——SQLServer2005教案邹竞息类型。在SQLServer中,数据类型名称的大写和小写形式等效。在SQLServer中,以下对象可以具有数据类型:表和视图中的列;存储过程中的参数;变量;返回一个或多个特定数据类型数据值的T-SQL函数;具有一个返回代码的存储过程(返回代码总是具有integer数据类型)。SQLServer中的数据类型归纳为表所示。在SQLServer中,varchar(max)、nvarchar(max)、varbinary(max)以及text、ntext、image、xml数据类型常用于存储大值或大型数据,具有存储特征,因此有时称它们为大值数据类型或大型对象数据类型。数字类数据类型精确数字整数bigint,int,smallint,tinyint,bit小数decimal,numeric货币money,smallmoney近似数字(浮点数)float,real日期/时间数据类型datetime,smalldatetime字符串类数据类型非Unicode字符串char,varchar,textUnicode字符串nchar,nvarchar,ntext二进制字符串binary,varbinary,image其他数据类型cursor,sql_variant,table,timestamp,uniqueidentifier,xml6.2.1数值型数值型数据又分为精确型数据类型和近似型数据类型。精确型数值指在计算机中能够精确存储的数据,比如在一定范围内的整型数、在一定精度内的定点小数等都是精确型数。数据类型数值表达范围存储长度bigint-263~263-18字节int-231~231-14字节smallint-215~215-12字节tinyint0~2551字节bit0或11decimal(p,q)-1038+1~1038–1精度1~9内5字节,10~19内9字节numeric(p,q)-1038+1~1038–1精度20~28内13字节,29~38内17字节说明:(a)int数据类型是SQLServer中的主要整数数据类型。bigint数据类型用于整数值可能超过int数据类型支持范围的情况。(b)在数据类型优先次序表中,bigint介于smallmoney和int之间;仅当参数表达式为bigint类型时,函数才返回bigint;SQLServer不自动将其他整数数据类型提升为bigint。(c)bit主要用于表的列。如果列的大小为8bit或更少,则这些列作为1个字节存储;如果为9到16bit,则这些列作为2个字节存储,以此类推。字符串值TRUE和FALSE可以转换为以下bit值:TRUE转换为1,FALSE转换为0。(d)使用“+”、“-”、“*”、“/”或“%”等算术运算符将int、smallint、tinyint或bigint常量值隐式或显式转换为float、real、decimal或numeric数据类型时。(e)decimal和numeric数据类型的存储长度基于精度而变化。(f)decimal的同义词为dec和dec(p,s)。numeric功能等价于decimal,但二者有区别:在表中,只有numeric型数据的列可带identity关键字。数据库原理与应用——SQLServer2005教案邹竞6.2.2近似型近似型用于表示浮点型数据的近似值。由于受机器字长的限制,当浮点数的有效数值位数超过机器字长的有效位数时,一个浮点数不能精确表示出来,就只能截取高位的有效数位,用其近似值来表示。数据类型n值数值表达范围精度(十进制)存储长度real–3.40E+38~3.40E+387位数4字节float[(n)]1~24–1.79E+308~1.79E+3087位数4字节25~53–2.23E+308~2.23E+30815位数8字节说明:(a)用float(n)来表明变量和表列时可指定用来存储按科学计数法记录的数据尾数的bit数。例如float(53)表示用8个字节存储数据,其中53个bit存储尾数,此时数据精度可达15位。(b)SQLServer将把n视为下列两个可能值之一:如果1≤n≤24,则将n视为24;如果25≤n≤53,则将n视为53。(c)从1到53之间的所有n值均符合SQL-92标准。doubleprecision的同义词为float(53)。real的同义词为float(24)。(e)浮点数是近似值,并非数据类型范围内的所有值都能精确地表示。(f)浮点数能存储数值范围很大的数据,但容易发生舍入误差。6.2.3字符串型字符串型数据由汉字、英文字母、数字和约定的其他符号组成。字符的编码方式一般有两种:普通字符编码和统一字符编码。普通字符编码是指不同国家或地区所采用的编码。其编码方式和码长各不相同。统一字符编码是指将世界上所有的字符集成进行统一编码,所有字符均为2字节。现在,多数系统都采用普通字符编码。除非某些系统有特殊需要,系统中要求存储、处理、传输、转换多种文字,不得不采用统一编码。SQLServer提供了char、varchar和text三种固定长度或可变长度的非Unicode字符数据类型,如表所示。数据类型存储长度char[(n)]n个字节(固定存储长度)varchar[(n|max)]输入数据实际长度+2字节(可变存储长度)text最大231-1即2147483647个字符(可变存储长度)其中的n(1≤n≤8000)是定义为char或varchar的变量或表列所能存储的最大字符个数;max则表示最大存储大小是231-1个字节。说明:(a)n的默认值在数据定义或变量声明时默认为1,CAST和CONVERT函数中默认为30。(b)char数据类型使用给定的固定长度来存储字符,最长可容纳8000个字符,每个字符占一个字节存储空间。如果实际数据的字符长度短于给定,则多余字节填充空格;如果实际数据的字符长度超过给定的最大长度,则超过的字符被截断。(c)varchar数据类型用来存储最长8000字符的变长字符。其使用类似char类型,但varchar数据的存储空间随存储在列中的每个数据的字符数的不同而变化。例如,定义列为varchar(20),则存储在该列的数据最多20个字节,但数据没有达到20个字节时不在多余字节上填充空格。(d)使用双字节字符时,存储长度仍为n个字节。根据字符串的不同,n个字节的存储长度所能存储的字符个数可能小于n。数据库原理与应用——SQLServer2005教案邹竞(e)当存储在列中的数据的值大小经常变化时,使用varchar数据类型可有效节省空间。如果列中数据的大小一致,应使用char。(f)如果站点支持多语言,应考虑使用Unicodenchar或nvarchar数据类型。(g)显示在变量声明中使用char和varchar数据类型时,这些数据类型的默认值n为1。DECLARE@myVariableASvarcharDECLARE@myNextVariableAScharSET@myVariable='abc'SET@myNextVariable='abc'SELECT@myVariable,@myNextVariable,DATALENGTH(@myVariable),DATALENGTH(@myNextVariable);GO返回结果:aa11(h)显示在CAST和CONVERT函数中使用char或varchar数据类型时,n的默认值为30。DECLARE@myVariableASvarchar(40)SET@myVariable='Thisstringislongerthanthirtycharacters'SELECTCAST(@myVariableASvarchar)--返回ThisstringislongerthanthiSELECTDATALENGTH(CAST(@myVariableASvarchar))AS'VarcharDefaultLength';--返回30SELECTCONVERT(char,@myVariable)SELECTDATALENGTH(CONVERT(char,@myVariable))AS'VarcharDefaultLength';--返回ThisstringislongerthanthiSQLServer提供了nchar、nvarchar和ntext三种固定长度或可变长度的使用UNICODEUCS-2字符集的Unicode字符数据类型,如表所示。数据类型存储长度nchar[(n)]n*2个字节(固定存储长度)nvarchar[(n|max)]输入数据实际长度*2+2字节(可变存储长度)ntext所输入字符个数的两倍(以字节为单位),最大为230-1即1073741823个字符(可变存储长度)其中n(1≤n≤4000)是定义为nchar或nvarchar的变量或表列所能存储的最大字符个数;max则表示最大存储大小是231-1个字节。6.2.4日期时间型SQLServer的日期时间数据类型是将日期和时间合起来存储。数据类型数值表达范围精度存储长度datetime1753年1月1日~9999年12月31日3.33毫秒8字节smalldatetime1900年1月1日~2079年6月6日1分钟4字节在SQLServer中,日期时间类型数据的输入,有3种输入格式:•英文数字格式,如:Aug152008•数字分隔格式,如:2008-08-15或2008/08/15•纯数字格式,如:20080815当输入时间部分时,有12小时制和24小时制两种格式,建议采用24小时制:•采用12小时制,要声明上午(AM)或下午(PM),分、秒之间用冒号(:)隔开,如:2006-10-01数据库原理与应用——SQLServer2005教案邹竞9:45:30PM•采用24小时制,如:2006-10-0121:45:30说明:(a)Datetim