《【教学课件】第3章关系数据库标准语言SQL.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第3章关系数据库标准语言SQL.ppt(116页珍藏版)》请在三一办公上搜索。
1、第3章 关系数据库标准语言SQL,3.1.1 语言的发展及标准化,在70年代初,首先提出了关系模型。70年代中期,IBM公司在研制 SYSTEM R关系数据库管理系统中研制了SQL语言,最早的SQL语言(叫SEQUEL2)是在1976 年 11 月的IBM Journal of R&D上公布的。1979年ORACLE公司首先提供商用的SQL,IBM公司在DB2 和SQL/DS数据库系统中也实现了SQL。1986年10月,美国ANSI采用SQL作为关系数据库管理系统的标准语言(ANSI X3.135-1986),后为国际标准化组织(ISO)采纳为国际标准。,3.1 SQL语言的基本概念与特点,1
2、989年,美国ANSI采纳在ANSI X3.135-1989报告中定义的关系数据库管理系统的SQL标准语言,称为ANSI SQL 89。1992年,ISO又推出了SQL92标准,也称为SQL2。目前SQL99(也称为SQL3)在起草中,增加了面向对象的功能。结构化查询语言SQL(Structured Query Language)是一种介于关系代数与关系演算之间的语言,其功能包括查询、操纵、定义和控制四个方面,是一个通用的、功能极强的关系数据库语言。目前已成为关系数据库的标准语言,广泛应用于各种数据库。,一、关系数据库三级模式结构,3.1.2 SQL语言的基本概念,基本表是本身独立存在的表,在
3、SQL中一个关系就对应一个表。一些基本表对应一个存储文件,一个表可以有若干索引,索引也存放在存储文件中。视图是从基本表或其他视图中导出的表,它本身不独立存储在数据库中,也就是说数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。存储文件的物理结构及存储方式等组成了关系数据库的内模式。存储文件的物理结构及存储方式等不同数据库管理系统往往是不同的,一般也是不公开的。,外模式对应于视图(View)和部分基本表(Base Table);模式对应于基本表;内模式对应于存储文件。,视图和基本表是SQL语言的主要操作对象,用户可以用SQL语言对视图和基本表
4、进行各种操作。在用户眼中,视图和基本表都是关系表,而存储文件对用户是透明的。,3.1.3 SQL语言的主要特点,1、综合统一,SQL集数据定义语言DDL、数据操纵语言DML、数据控制语言DCL的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动,包括:定义关系模式,插入数据,建立数据库;对数据库中的数据进行查询和更新;数据库重构和维护;数据库安全性、完整性控制。,SQL集数据查询、数据操纵、数据定义 和数据控制功能于一体,主要特点包括:,2、高度非过程化,非关系数据模型的数据操纵语言是“面向过程”的,用“过程化”语言完成某项请求,必须指定存储路径。SQL进行数据操作,只要提出“做
5、什么”,而无须指明“怎么做”,因此无需了解存储路径。存储路径的选择以及SQL的操作过程由系统自动完成。这样可以减轻用户的负担,也提高了数据独立性。,3、面向集合的操作方式,非关系数据模型得采用提面向记录的操作方式,操作对象是一条记录。SQL采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。,SQL既是独立的语言,又是嵌入式语言。作为独立的语言,它能够独立地用于联机交互的使用方式,用户可以在终端键盘上直接键入SQL命令对数据库进行操作;作为嵌入式语言,SQL语句能够嵌入到高级语言(如C、C+、Java)程序中,供程序员设计程序时使用。
6、而在两种不同的使用方式下,SQL的语法结构基本上是一致的。,4、以同一种语法结构提供多种使用方式,5、语言简洁,易学易用,SQL功能极强,完成核心功能只用了9个动词,接近英语口语,所以容易学习,易于使用。,数据查询数据定义数据操纵数据控制,SELECTCREATE DROP ALTERINSERT UPDATE DELETEGRANT REVOKE,32 数据定义,所谓数据类型就是以数据的表现方式和存储方式来划分的数据的种类。在SQL Server 中每个变量、参数、表达式等都有数据类型。,3.3.1 字段数据类型,整数数据类型,1.INT(INTEGER)说明:(1)取值范围:-2 31(-
7、2 147483648)2 31-1(2147 483647)之间的所有正负整数。(2)存储大小:4个字节,其中1位表示整数值的正负号,其它31 位表示整数值的长度和大小。例:declare a int-定义一个整型局部变量a select a=-12345-为该局部变量赋值为-12345 select a-在屏幕上输出该局部变量的值 go-整个程序段结束,2.SMALLINT说明:(1)取值范围:-2 15(-32768)2 15-1(32767)之间的所有正负整数。(2)存储大小:2个字节,其中1位表示整数的正负号,其它15位表示整数值的长度和大小,3.TINYINT说明:(1)取值范围:
8、0 255 之间的所有正整数。(2)存储大小:1 个字节例:declare b tinyint set b=12345 select b go结果:出错,4.BIGINT 说明:(1)取值范围:-263(-9223372036854775807)263-1(9223372036854775807)之间的所有正负整数。(2)存储大小:每个BIGINT 类型的数据占用8个字节的存储空间。,浮点数据类型,(一)近似数值类型:指在其范围内不是所有的数都能精确表示 REAL 数据类型:REAL数据类型以指数形式表示时可精确到第7 位小数,(1)取值范围:从-3.40E-38 到3.40E+38。(2)存
9、储大小:占用4 个字节的存储空间。(3)若以小数点表示,则可精确到小数点后第(8-整数位)位;(4)当整数位达到8位时,系统自动以指数形式表示,2.FLOAT:说明:(1)取值范围:可精确到第15 位小数,其范围为从-1.79E-308 到1.79E+308。(2)存储大小:占用8 个字节的存储空间。(3)当整数位数达到17位时,系统自动以指数形式表示。,(二)精确小数:,1.DECIMAL说明:(1)取值范围:存储从-1038-1到1038-1的固定精度和范围的数值型数据;(2)存储大小:217个字节不等;(3)可用格式:DECIMAL(p,s),P指范围是小数点左右所能存储的数字的总位数,
10、不包括小数点;S是精度是小数点右边存储的数字的位数,缺省为0。例如:decimal(15,5),表示共有15 位数,其中整数10 位,小数5位。,DECIMAL数据占用的字节数取决于P中的整数位数P中的整数位数 字节数介于 19位占5个字节 1019位占9个字节 2028位占13个字节 2938位占17个字节,2.NUMERIC NUMERIC数据类型与DECIMAL数据类型完全相同。,二进制数据类型,1.BINARY:固定长度的二进制数据类型。(1)格式:BINARY(n),n 表示数据的长度,取值为1 到8000,必须指定BINARY 类型数据的大小。(2)存储大小:占用n+4 个字节的存
11、储空间。注:输入数据时必须在数据前加上字符“0X”作为二进制标识,且数据输入时为十六进制数字,若输入的数据过长将会截掉其超出部分,若输入的数据位数为奇数,则会在符号“0X”后添加一个0。,例:declare a binary(5)set a=0 xabc select a,-定义局部变量a为二进制数据,长度为5-为a赋值为0 xabc-值为0 x0abc000000,2.VARBINARY:可变长度的二进制数据类型(1)格式:VARBINARY(n)。n 的取值也为1 到8000,(2)存储大小:实际数值长度+4个字节,逻辑数据类型 BIT,(1)存储大小:占用1 个字节的存储空间;(2)取值
12、范围:0 或1,如果输入0 或1以外的值,将被视为1(3)说明:BIT 类型不能定义为NULL 值(所谓NULL 值是指空值或无意义的值)。例:declare a bit-定义局部变量a为BIT型 set a=2-为a赋值为2 select a-输出结果为1,字符数据类型,1.CHAR:固定长度的非UNICODE字符(1)定义形式:CHAR(n);(2)存储大小:字符串中每个字符和符号占一个字节的存储空间,汉字占2个字节的空间n 表示所有字符占的总存储空间,n 的取值为1 8000,即可容纳8000 个ANSI 字符。(3)说明:省略N系统默认值为1,若输入数据的字符数小于n,则系统自动在其后
13、添加空格来填满设定好的空间。若输入的数据过长,将会截掉其超出部分。,例1:declare a char set a=123 select a 输出结果为:1,例2:declare a char(5)set a=123 select a 输出结果为:123空格空格,例3:declare a char(2)set a=1中国 select a select datalength(a)-返回a所占用的字节长度 输出结果:1-输出字符1未输出中字的左半部分 2-变量长度为2个字节例4:若将长度改为3、4、7,该题输出结果和长度是什么?,2.VARCHAR:可变长度的非Unicode字符(1)定义形式:
14、VARCHAR(n),n 的取值为1 到8000(2)存储大小:实际数值长度,若输入数据的字符数小于n,则系统不会在其后添加空格来填充空间。,例:declare a varchar(2)set a=1中国 select a select datalength(a)-返回a所占用的字节长度 输出结果:1-输出字符1未输出中字的左半部分 1-变量长度为屏幕显示的实际字节,1个字节考虑:若长度改为3、4、7,则输出结果和长度是什么?,.NCHAR:固定长度的UNICODE字符(1)定义形式:NCHAR(n)。(2)存储大小:字符串中每个字符、符号和汉字均占两个字节的存储空间,n表示总存储空间,取值为
15、14000。(3)说明:(字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱)Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。,例:declare a Nchar(2)set a=1中国 select a select datalength(a)-返回a所占用的字节长度 输出结果:1中-输出字符1和中字 4-变量长度为2个字节考虑:若将长度改为3、4、7,该题输出结果和长度是什么?,.NVARCHAR:可变长度的UNICODE字符(1)定义形式:NVARCHAR(
16、n)。它与VARCHAR 类型相似。不同的是,NVARCHAR数据类型采用UNICODE 标准字符集(Character Set),n 的取值为1 到4000。(2)存储大小:实际数值长度,超出N的部分截去,不足N的部分不补空格。,例:declare a Nvarchar(2)set a=1中国 select a select datalength(a)-返回a所占用的字节长度 输出结果:1中-输出字符1和中字 4-变量长度为2个字节考虑:若将长度改为3、4、7,该题输出结果和长度是什么?,文本和图形数据类型,1、TEXT:用于存储大量文本数据(1)容量:理论上为1231 1(21474836
17、47)个字节,实际应用时需要视硬盘的存储空间而定。(2)说明:SQL SERVER存储此类数据时,将TEXT 和IMAGE 类型的数据直接存放到表的数据行中,而不是存放到不同的数据页中。这就减少了用于存储TEXT 和IMAGE 类型的空间,并相应减少了磁盘处理这类数据的I/O 数量。,2、NTEXT NTEXT数据类型与TEXT类型相似,不同的是NTEXT 类型采用UNICODE 标准字符集(Character Set),因此其理论容量为230-1(1,073,741,823)个字节。,3、IMAGE IMAGE数据类型用于存储大量的二进制数据Binary Data。其理论容量为2 31-1(
18、2,147,483,647)个字节。通常用来存储图形等OLE(Object Linking and Embedding,对象连接和嵌入)对象,该类型不指定长度,可用来输入任何二进制数据。在输入数据时必须在数据前加上字符“0X”作为二进制标识,日期和时间数据类型,1.DATETIME(1)日期范围:从 1753 年 1 月 1 日至 9999 年 12 月 31 日的日期;(2)存储大小:每个数值要求 8 个字节的存储空间。(3)说明:如果省略了日期部分,则系统将1900 年1 月1 日作为日期缺省值。,例:declare a datetime-定义类型 set a=1989-2-23-为变量a
19、赋值 select a select datalength(a)go输出结果:1989-02-23 00:00:00.0008-长度为8个字节,2.SMALLDATETIME(1)日期范围:从1900年1月1日到2079年6月6日的日期和时间数据,精确到分钟;(2)存储大小:使用4 个字节存储数据。(3)日期输入格式:允许用斜杠(/)、连接符(-)和小数点(.)作为用数字表示的年、月、日之间的分隔符。如:YMD:2000/6/22 2000-6-22 2000.6.22 MDY:3/5/2000 3-5-2000 3.5.2000 DMY:,(2)时间输入格式:顺序为“小时、分钟、秒、毫秒”,
20、中间用冒号“:”隔开,秒和毫秒之间可用小数点“.”隔开,隔开后的第一位数字代表十分之一秒,第二位数字代表百分之一秒,第三位数字代表千分之一秒。Am表示午前12小时、PM表示午后12小时,默认情况为AM。AM 与PM 均不区分大小写。如:3:5:7.2pm-下午3 时5 分7 秒200 毫秒10:23:5.123Am-上午10 时23 分5 秒123 毫秒,例:declare a smalldatetime-定义数据类型 set a=11:30 pM-输出下午时间 select a-输出a go输出结果:1900-01-01 23:30:00,货币数据类型,货币数据类型用于存储货币值。在使用货币
21、数据类型时,应在数据前加上货币符号,系统才能辨识其为哪国的货币,如果不加货币符号,则默认为“¥”,1 MONEY(1)精确值:货币单位的万分之一,即4 位小数(2)取值范围:-2 63(-922337203685477.5808 2 63-1(+922337203685477.5807)。(3)存储大上:使用8个字节存储。,2.SMALLMONEY 类似于MONEY 类型,存储的货币值范围较小.(1)取值:从-214,748.3648到+214,748.3647,(2)存储空间:4 个字节,特定数据类型,1 TIMESTAMP 提供数据库范围内的惟一值,此类型相当于BINARY8或VARBIN
22、ARY(8),但当它所定义的列在更新或插入数据行时,此列的值会被自动更新,一个计数值将自动地添加到此TIMESTAMP数据列中。每个数据库表中只能有一个TIMESTAMP数据列。如果建立一个名为“TIMESTAMP”的列,则该列的类型将被自动设为TIMESTAMP数据类型,UNIQUEIDENTIFIER 存储一个16 位的二进制数字。此数字称为(GUIDGlobally Unique Identifier,即全球惟一鉴别号)。此数字由SQLServer 的NEWID函数产生的全球惟一的编码,在全球各地的计算机经由此函数产生的数字不会相同,7.11 局部变量与全局变量,局部变量 局部变量是用户
23、定义的变量,作用范围仅在程序内部。在程序中通常用来储存从表中查询到的数据,或当作程序执行过程中暂存变量使用。,而且必须先用DECLARE命令说明后才可使用。1.格式:DECLARE 变量名 变量类型,变量名 变量类型,2.说明:(1)局部变量必须以“”开头,遵循命名规范,且不能使用保留字,不能和全局变量同名;(2)变量类型可以是系统数据类型,也可以是用户自定义的数据类型;(3)未赋值前,变量值为null。,3.给变量赋值格式:必须使用SELECT或SET命令来设定变量的值,其语法如下:格式1:SELECT 局部变量1=变量值1,局部变量2=变量值2/*可为多个变量赋值,中间用逗号隔开*/格式2
24、:SET 局部变量=变量值/*一次只能为一个变量赋值*/,4.赋值的注意事项:(1)若赋值长度超出声明长度则自动截去超出长度;(2)可以用select语句将从表中查询出的结果给局部变量赋值;(3)若变量值和局部变量类型不匹配,则系统隐式的将被赋值转化为局部变量的类型,5.变量的显示:select 局部变量名 例:声明一个长度为10 个字符的变量“id”,赋值并将值显示在屏幕上。declare id char(10)select id=10010001 select id go结果为10010001空格空格,全局变量,全局变量是SQL Server系统内部使用的变量,其作用范围并不局限于某一程序
25、,而是任何程序均可随时调用全局变量。用户只能调用全局变量,而不能定义和赋值给全局变量。全局变量通常存储一些SQL Server的配置设定值和统计数据。用户可在程序中用全局变量来测试系统的设定值或Transact-SQL命令执行后的状态值。如,rowcount 功能是存储前一条命令影响到的记录总数。,局部变量和全局变量的区别,1.局部变量名以开头,而全局变量名以开头;2.局部变量是由用户定义的,而全局变量是由系统定义的3.局部变量作用范围为某一程序,而全局变量作用范围为所有程序。,35运算符及优先级,1.算术运算符包括:+(加)、(减)、*(乘)、/(除)、%(取余):返回两个整数除法的余数,例
26、如:12%5=22.比较运算符 包括:(大于)、=(大于等于)、(不等于)、!=(不等于)、!(不大于)!、!不是ANSI标准的运算符,结果为布尔型,3.逻辑运算符包括:AND(与)、OR(或)、NOT(非)结果为布尔型4.一元运算符:包括:+(正):返回表达式的正值;-(负):返回表达式的负值;(按位NOT):将给定的整型数值转换为二进制形式,然后按位进行逻辑非运算。,5.赋值运算符:=(等号),用于为字段或变量赋值。例如:定义一个int变量xyz,并为其赋值为123。declare xyz int set xyz=1236.连接运算符:使用加号(+)将两个字符串连接成一个字符串,加号作为字
27、符串连接符。例如,abc+123结果为abc123,7.优先顺序 计算时,从左向右计算,先计算优先级高的运算,再计算优先级低的运算。下面列出了运算符的顺序。+(正)、-(负)、(按位取反)*(乘)、/(除)、%(求余)+(加)、+(字符串连接)、-(减)比较运算符:=,=,!=,!,!位运算:(位异或)、&(位与)、|(位或)NOT AND ALL、ANY、BETWEEN、IN、LIKE、OR、SOME=(赋值)同一级别中的运算符优先级相同,函数,数学函数 abs(x):求绝对值;select abs(-3)值为3sqrt(x):求平方根;select sqrt(4)值为2.0rand(0):
28、返回01之间的随机float值;floor(X):返回小于或等于X值的最大整数;例:select floor(78.5),floor(123),floor(-78.5),ceiling(X):返回大于或等于X值的最小整数;例:ceiling(78.5),ceiling(123),ceiling(-78.5)round(x,length):四舍五入函数,length为正,则对X小数位数四舍五入,length为负,则对X从小数点左边length位起四舍五入,若length既为负数且其绝对值大于X整数部分数字个数,则函数值为0。例:ROUND(63.567,1)ROUND(63.567,0)ROUN
29、D(63.567,-1)ROUND(63.567,-2)ROUND(63.567,-3)ROUND(63.567,-4),Sign(X):求符号函数,X0则sign(x)=1;X=0 则sign(X)=0;X0 则sign(X)=-1 例:sign(-34)Power(X,y):求表达式的y次方,例:power(3,2)例1:计算3的4次方及16的平方根 例:select round(76.512565,3),round(23.3234357,3),round(78.74236,-2),round(34.213456,-2),例:Selectceiling(343),floor(879),ce
30、iling(96.98),floor(33.5),ceiling(-55.8),floor(-55.2),字符串函数,ASCII(串):返回字符表达式最左端字符的ASCII 码值,例:ASCII(abc)=97CHAR(ASCII码):用于将ASCII 码转换为字符,如果没有输入0 255 之间的ASCII 码值,返回值为NULL。例:char(97)=a,STR(X,length,):把数值型数据转换为字符型数据,说明:(1)length 和decimal 必须是非负值,length 指定返回的字符串的长度,decimal 指定返回的小数位数。(2)如果没有指定长度,缺省的length 值为
31、10,decimal 缺省值为0。(3)小数位数大于decimal 值时,将其下一位四舍五入;(4)指定长度应大于或等于符号位+整数位+小数点位+小数位,如果小数点前的位数超过了指定的长度,则返回指定长度的“*”,例:select str(123.45,6,1),str(123.45,2,2),str(floor(123.45),8,3),str(123.45,4,0)结果:,Lower(串):把字符串全部转换为小写,例:select lower(SmallFish),lower(SMALLFISH)Upper(串):把字符串全部转换为大写,例:select upper(SmallFish),
32、upper(SMALLFISH)LTrim(串),RTrim(串):去掉引导空格或者尾空格;例:select MICROSOFT+rtrim(sql_server)+2000 select MICROSOFT+Ltrim(sql_server)+2000,space(个数):返回指定个数的空格。replicate(串,次数):将串重复指定次数 例:replicate(中国,2)返回值中国中国Left(串,个数):返回已知串从左边开始指定个数的字符。例:select left(我的祖国abc,4)select replicate(left(abc,2),4),Right(串,个数):返回已知串从
33、右边开始指定个数的字符。例:select right(我的祖国abc,4)结果为:国abcDataLength(串):返回串的字节数长度,计算串尾空格。可以用它检查varchar,text等的动态长度。例:select datalength(我的祖国abc)返回值为12,SubString(串,开始位置,长度):返回从字符串左边开始位置起数量为长度的字符串。其中表达式可以是字符串或二进制串或含字段名或字符型变量的表达式。SUBSTRING()函数不能用于TEXT 和IMAGE 数据类型 select substring(我的祖国abc,5,2)结果为:abLen(串):返回表达式的长度。注意它
34、返回的是字符数,而不是字节数。不计算串尾空格。,Select len(Windows2000),Replace(串1,串2,串3):用串3替换串1中出现的所有串2字符,例:replace(理工大学,理工,长春理工)返回值为长春理工大学Stuff(串1,开始位置,长度,串2):删除串1指定位置开始指定长度的字符串,并在指定位置插入串2.select stuff(我的祖国abc,5,2,小花)结果是:我的祖国小花c,思考:将REPLACE函数示例用STUFF函数表示 将STUFF函数示例用REPLACE函数表示。,reverse(串):将指定的字符串的字符排列顺序颠倒,例:select rever
35、se(123)返回值为321charindex(串1,串2,开始位置):返回串1在串2的开始位置,可从所给出的开始位置进行查找。例:charindex(ef,abcdeef)返回值为6,串可以是字符串常量、字符串变量、值为字符的函数、字符型表达式例 1:select lower(abc)+space(5)+rtrim(ltrim(你好!)例 2:求出数据库在大型数据库技术中的位置 例 3:计算ASCII(Alklk),例 4:计算字符串SQL Server数据库管理系统的长度:例 5:查找字符串wo在MY wonderful中的开始位置:例 6:select stuff(He rld,3,1,
36、llo wo),转换函数,1.功能:用于将某种数据类型的表达式显式转换为另一种数据类型的函数。1.CAST():CAST(表达式 AS 数据类型(长度)例:select 今天是:+Cast(GetDate()as char(10)2.CONVERT():CONVERT(转换后的目标数据类型(length),表达式,style)select 今天是:+convert(char(10),getdate(),2.提醒:,1)、data_type为SQL Server系统定义的数据类型。2)、Length用于指定数据的长度,缺省值为30。3)、style为将日期型数据和小数转换为字符型数据时的格式样式
37、。,日期时间函数,1).DATEADD函数格式:DATEADD(datepart,n,date)2).功能:在date指定日期时间的datepart部分加上n,得到一个新的日期时间值。3).返回值数据类型:datetime,如果参数date为smalldatetime,则返回值为smalldatetime类型。,例如:dateadd(yy,2,1993-3-4)-结果为1995-03-04 00:00:00.000dateadd(m,2,1993-3-4)-结果为1993-05-04 00:00:00.000dateadd(d,2,1993-3-4)-结果为1993-03-06 00:00:0
38、0.000,2.DATENAME函数,1).格式:DATENAME(datepart,date)2).功能:返回日期date中由datepart指定的日期部分的字符串。3).返回值数据类型:nvarchar例如:datename(yy,1993-3-4)-结果为1993 datename(mm,1993-3-4)-结果为03 datename(dd,1993-3-4)-结果为4,3.DATEPART函数,1).格式:DATEPART(datepart,date)2).功能:与DATENAME类似,只是返回值为整数。3).返回值数据类型:int 例如:datepart(yy,1993-3-4)-
39、结果为1993 datepart(m,1993-3-4)-结果为3 datepart(d,1993-3-4)-结果为4,4.DATEDIFF函数,1).格式:DATEDIFF(datepart,date1,date2)2).功能:返回两个日期间的差值并转换为指定日期元素的形式。3).返回值数据类型:整型 例:Select datediff(yy,1989.03.03,2003.04.05)-值为14Select datediff(mm,1989.03.03,2003.04.05)-值为170,日期元素及其取值范围,5.GETDATE函数,1).格式:GETDATE()2).功能:按SQL Se
40、rver 2000内部标准格式返回系统日期和时间。3).返回值数据类型:datetime例如:getdate()-结果为2004-03-13 21:51:32.390,6.YEAR函数,1).格式:YEAR(date)2).功能:返回指定日期date中年的整数。3).返回值数据类型:int 例如:year(2004-3-5)-结果为2004,7.MONTH函数,1)格式:MONTH(date)2)功能:返回指定日期date中月份的整数。3)返回值数据类型:int 例如:month(2004-3-5)-结果为3,8.DAY函数,1)格式:DAY(date)2)功能:返回指定日期date中天的整数
41、。3)返回值数据类型:int 例如:day(2004-3-5)-结果为5注:date参数可以为日期格式的字符串常量、变量、datetime和smalldatetime类型的列值或GETDATE函数的返回值,例1:求服务器当前的系统日期与时间.例2:求出系统当前的月份和月份名字.例3:Mary的生日为1979/12/23日,请用日期函数计算Mary现在的年龄.,集合函数,也称为统计函数,它对一组值进行计算并返回一个数值,经常与SELECT语句的子句一起使用。1 Sum(all|distinct expression):计算一组数据的和2 Min(all|distinct expression):
42、给出一组数据中的最小值 3 Max(all|distinct expression):给出一组数据中的最大值,4 Count(all|distinct expression|*):计算总行数,*返回总行数,包括含有空值的行,不能与DISTINCT一起使用5 Avg(all|distinct expression):计算一组的平均值 注:ALL:默认选项,指计算除开NULL值外所有的值;DICTINCT:去掉重复值*计算包含有空值的所有的行,例:设学生选课表course中choosenum列有一空值,计算该表的总行数,分别用*和all计算。select*from coursegoselect c
43、ount(*)from course-包含空值行数据 goselect count(all choosenum)from course-不包含空值行数据 go,例:计算teacher表的总行数 select count(*)from teacher例:计算studentgrade表中chinese列的总成绩:select sum(Chinese)from studentgrade 例:select count(all birth)from student,简单的select语句,1.格式:select from where 2.说明:(1)列名表可以是星号、表达式、列表、变量等;(2)from
44、指定这些数据来自哪些表或视图;(3)where指定了用户想看哪些行。例:select*from 职工 where 性别=男/*查询职工表中性别为男的所有行(记录)*/,批处理和流程控制语言,批1批定义:批是包含一个或多个SQL语句的语句集,这些语句被一次性地发送到SQL Server中执用。2批结束符:GO 该命令用来通知SQL一批语句的结束,流程控制语句,PRINT(1)语法如下:PRINT any ASCII text|local_variable|FUNCTION|string_expression(2)说明:A.PRINT 命令向客户端返回用户信息,即显示一个字符串(最长为255个字符
45、)、局部变量或全局变量。B.如果变量值不是字符串的话,必须先用数据类型转换函数CONVERT(),将其转换为字符串。其中,string_expression 是可返回一个字符串的表达式。表达式的长度可以超过8000 个字符,但超过8000 的字符将不会显示。,例declare x char(10),y char(10)-定义两个字符型变量select x=SQL,y=Server-为变量赋值print 科技-从屏幕上输出科技字符串print x+y-将两个字符串连接后从屏幕上输出,2 IFELSE,(1)语法如下:IF ELSE(2)说明:其中值必须是逻辑值“真”或“假”,ELSE子句可省的,
46、最简单的IF语句没有ELSE子句部分。IFELSE用来判断当某一条件成立时执行某段程序,条件不成立时执行另一段程序。如果不使用程序块,IF或ELSE只能执行一条命令。IFELSE可以进行嵌套。,例:declarex int,y int,z int-定义三个整型变量select x=1,y=2,z=3-给三个变量赋值if xy-判断x是不是大于y print xy-为真则打印字符串xyelse if yz-若小于 y则判断y是不是大于zprint yz-为真则打印字符串yzelse printzy-为假则打印字符串zy,例1:求一个数是奇数还是偶数;例2:求x,y,z三数的最大数;,declar
47、e x intselect x=3if x%2=1 print convert(char(1),x)+是奇数else print convert(char(1),x)+是偶数,declare x int,y int,z int,max intselect x=1,y=2,z=3 if xy select max=xelse select max=yif maxz select max=z print max,例3:判断商品表goods中商品编号supplier_id为S001的商品的平均单价unit_price是否大于9000。,If(select avg(unit_price)from go
48、ods where supplier_id=S001)9000 Select S001的商品平均单价大于9000Else select S001的商品平均单价比9000小,3.BEGIN,(1)格式:BEGIN END(2)说明:BEGINEND用来设定一个程序块,将在BEGINEND内的所有程序视为一个单元执行。,例:用Exists确定student表中是否存在“李晓东”,Declare name varchar(20),msg varchar(200)|select name=李晓东if exists(select*from student where 姓名name)begin selec
49、t msg=有人名为+name select msg endelse begin select msg=没有人名为+name select msg end,4.CASE,(1)格式:CASE WHEN THEN WHEN THEN ELSE END(2)说明:根据运算式的值的不同,取相应的结果值,例1:根据+、-、*、/符号分别求值 declare x char,y int Set x=*Select y=Case x when+then 10+5 when-then 10-5 when*then 10*5 when/then 10/5endprint ygo,-定义两个变量,X存储运算符,Y
50、存储值-分别为X和Y赋初值-设置根据运算符不同,采取不同程序分支输出结果为:50,例2.求:y=,X+10,X,X-10,X0,X=0,X0,declare x int,y intselect x=20select y=case when x0 then x-10endselect y,5.while循环结构,(1)语法如下:WHILE BEGIN BREAK CONTINUE 命令行或程序块 END,(2)说明:条件成立时重复执行命令行或程序块。CONTINUE命令使程序跳过CONTINUE 命令之后的语句,直接回到WHILE 循环的第一行。BREAK 命令让程序完全跳出循环,结束WHILE