1、4.1 SQL概述概述4.1.1 SQL语言的发展语言的发展uSQL是是Structured Query Language的缩写,译为的缩写,译为“结构化查询语言结构化查询语言”,它是,它是关系数据库的标准语言。关系数据库的标准语言。u按功能划分,按功能划分,SQL语言可以语言可以分为分为4类类:数据查询语言(数据查询语言(Data Query Language,DQL)数据定义语言(数据定义语言(Data Definition Language,DDL)数据操纵语言(数据操纵语言(Data Manipulation Language,DML)数据控制语言(数据控制语言(Data Contro
2、l Language,DCL)2023-11-131第第4章章 数据库查询语言数据库查询语言SQLuSQL语言的发展语言的发展 1974年由年由Boyce和和Chamberlin最初提出,最初提出,1979年被年被IBM公司在其关系数据库系统公司在其关系数据库系统System R上首先予以实现。上首先予以实现。1986年年10月,美国国家标准化学会月,美国国家标准化学会(American National Standards Institute,ANSI)公布了第一个公布了第一个SQL标准,称为标准,称为SQL-86。1987年年6月,国际标准化组织(月,国际标准化组织(ISO,Interna
3、tional Standards Organization)也接)也接纳了这一标准,并对其作进一步的完善。完善工作于纳了这一标准,并对其作进一步的完善。完善工作于1989年年4月完成,结果形成月完成,结果形成了所谓的了所谓的SQL-89标准。标准。在在SQL-89标准的基础上,标准的基础上,ISO和和ANSI联手对联手对SQL进行研究和完善,于进行研究和完善,于1992年年8月月又推出了新的又推出了新的SQL标准标准SQL-92(SQL2),),1999年推出年推出SQL-99(SQL3),),2003年进一步被扩充为年进一步被扩充为SQL-2003,使其兼容,使其兼容XML语言。语言。202
4、3-11-1324.1 SQL概述概述uSQL语言的发展语言的发展 如今,几乎所有的数据库产品厂商都推出了各自的支持如今,几乎所有的数据库产品厂商都推出了各自的支持SQL语言的关系数据语言的关系数据库软件产品,如库软件产品,如DB2、Oracle、SQL Server等,或者提供了支持等,或者提供了支持SQL语言的语言的接口。接口。除了除了SQL以外,还有其他类似的一些数据库语言,如以外,还有其他类似的一些数据库语言,如QBE、Quel、Datalog等,但这些语言仅限于少数专业的数据库研究人员使用,并不是主流语言。等,但这些语言仅限于少数专业的数据库研究人员使用,并不是主流语言。事实上,事实
5、上,SQL是迄今为止最受欢迎的关系数据库语言之一,目前还没有出现是迄今为止最受欢迎的关系数据库语言之一,目前还没有出现能够与之相媲美的同类语言。能够与之相媲美的同类语言。2023-11-1334.1 SQL概述概述4.1.2 SQL语言的特点语言的特点uSQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体语言集数据查询、数据操纵、数据定义和数据控制功能于一体,是一种通用的、功,是一种通用的、功能强大而又简单易学的关系数据库语言。能强大而又简单易学的关系数据库语言。u特点:特点:(1)高度非过程化语言)高度非过程化语言 非关系数据模型的数据操纵语言都是面向过程的语言,在使用时必须指定存储
6、路径。非关系数据模型的数据操纵语言都是面向过程的语言,在使用时必须指定存储路径。SQL是一种高度非过程化的语言,它一次执行一条命令,对数据提供自动导航。是一种高度非过程化的语言,它一次执行一条命令,对数据提供自动导航。SQL不要不要求用户指定对数据的存放方法,只要求用户提出要求用户指定对数据的存放方法,只要求用户提出要“干什么干什么”,至于,至于“怎么干怎么干”,用户就,用户就不用管了,而由系统自动完成。不用管了,而由系统自动完成。(2)统一的数据库操作语言)统一的数据库操作语言 SQL语言风格统一,用于创建数据库、定义关系模式、完成数据的查询、修改、删除语言风格统一,用于创建数据库、定义关系
7、模式、完成数据的查询、修改、删除、控制等操作。为数据库应用系统的开发提供了良好的环境。在数据库投入运行以后,可、控制等操作。为数据库应用系统的开发提供了良好的环境。在数据库投入运行以后,可以使用以使用SQL语言实现数据库重构,在一定程度上满足用户不断发展的需求,同时不影响数语言实现数据库重构,在一定程度上满足用户不断发展的需求,同时不影响数据库的正常运行,使数据库系统具有良好的可扩展性。据库的正常运行,使数据库系统具有良好的可扩展性。2023-11-1344.1 SQL概述概述(3)关系数据库的标准语言)关系数据库的标准语言 SQL成为国际标准以后,由于绝大多数的数据库厂商都支持成为国际标准以
8、后,由于绝大多数的数据库厂商都支持SQL,所以,所以SQL可以用可以用于各类数据库管理系统,从而使它成为关系数据库的标准语言。所有用于各类数据库管理系统,从而使它成为关系数据库的标准语言。所有用SQL编写的程编写的程序都是可以在不同的系统中移植,同时也结束了数据库查询语言序都是可以在不同的系统中移植,同时也结束了数据库查询语言“各自为政的分割局各自为政的分割局面面”。(4)面向集合的数据操纵语言)面向集合的数据操纵语言 非关系数据模型的数据操纵语言一般是面向记录进行操作的,即每一次操作都是针非关系数据模型的数据操纵语言一般是面向记录进行操作的,即每一次操作都是针对一条记录进行的。如果要对多条记
9、录操作,则必须循环进行。而对一条记录进行的。如果要对多条记录操作,则必须循环进行。而SQL则面向集合的则面向集合的方式进行操作,即每一次操作是针对所有满足条件的元组组成的集合进行,操作所产方式进行操作,即每一次操作是针对所有满足条件的元组组成的集合进行,操作所产生的结果也是元组的集合生的结果也是元组的集合。2023-11-1354.1 SQL概述概述(5)可嵌入式的数据库语言)可嵌入式的数据库语言 SQL语言不但可以在交互方式下以命令的形式执行,还可以嵌入到其他的高级语言语言不但可以在交互方式下以命令的形式执行,还可以嵌入到其他的高级语言中。在交互方式下,用户可以在终端键盘上直接键入中。在交互
10、方式下,用户可以在终端键盘上直接键入SQL命令对数据库进行操作;作命令对数据库进行操作;作为可嵌入式的数据库语言,为可嵌入式的数据库语言,SQL语言可嵌入到像语言可嵌入到像C、COBOL、FORTRAN、VB、PowerBuilder、Delphi等这种高级语言中,通过程序调用来实现对数据库的操作。不管等这种高级语言中,通过程序调用来实现对数据库的操作。不管是在交互方式下还是在嵌入方式下,是在交互方式下还是在嵌入方式下,SQL语言的语法结构基本上都一样,这使得对数语言的语法结构基本上都一样,这使得对数据库的操作变得更为灵活和方便。据库的操作变得更为灵活和方便。(6)简单易学)简单易学 SQL语
11、言的语法结构比较简单,调用格式非常简洁。所使用命令的核心关键字才包语言的语法结构比较简单,调用格式非常简洁。所使用命令的核心关键字才包括括9个:个:CREATE、ALTER、DROP、GRANT、REVOKE、SELECT、INSERT、UPDATE、DELETE 。而且其语法接近英语口语,方便理解和记忆。而且其语法接近英语口语,方便理解和记忆。2023-11-1364.1 SQL概述概述4.1.3 SQL的基本功能的基本功能u 四大功能介绍:四大功能介绍:(1)数据查询功能)数据查询功能 通过通过SELECT语句语句完成。完成。SELECT语句的功能非常强大,表达形式非常丰富,可以语句的功能
12、非常强大,表达形式非常丰富,可以完成很多复杂的查询任务。完成很多复杂的查询任务。SQL语言的最初设计就是用于数据查询,这也是它之所语言的最初设计就是用于数据查询,这也是它之所以称为以称为“结构查询语言(结构查询语言(Structured Query Language)”的主要原因。的主要原因。(2)数据操纵功能)数据操纵功能 通过通过INSERT、UPDATE、DELETE 语句语句完成。完成。INSERT、UPDATE、DELETE 语句分别用于实现数据插入、数据更新和数据删除功能。语句分别用于实现数据插入、数据更新和数据删除功能。(3)数据定义功能)数据定义功能 通过通过CREATE、AL
13、TER、DROP语句语句来完成。来完成。CREATE、ALTER、DROP语句分语句分别用于定义、修改和删除数据库和数据库对象,这些数据库对象包括数据表、视图别用于定义、修改和删除数据库和数据库对象,这些数据库对象包括数据表、视图等。等。2023-11-1374.1 SQL概述概述(4)数据控制功能)数据控制功能 通过通过GRANT、REVOKE语句语句来完成。数据控制主要是指事务管理、数据保护(包来完成。数据控制主要是指事务管理、数据保护(包括数据库的恢复、并发控制等)以及数据库的安全性和完整性控制。括数据库的恢复、并发控制等)以及数据库的安全性和完整性控制。四种功能与四种功能与SQL语句的
14、对应关系如语句的对应关系如表表4.1所示所示:2023-11-138表表4.1 SQL功能与功能与SQL语句的对应关系语句的对应关系SQL功能功能SQL语句语句数据查询(数据查询(DQL)SELECT数据操纵(数据操纵(DML)INSERT、UPDATE、DELETE 数据定义(数据定义(DDL)CREATE、ALTER、DROP数据控制(数据控制(DCL)GRANT、REVOKE4.1 SQL概述概述第第4章章 数据库查询语言数据库查询语言SQL 4.1 4.1 SQLSQL概述概述 4.2 4.2 SQLSQL语言的数据类型语言的数据类型 4.3 4.3 SQLSQL的数据定义功能的数据定
15、义功能 4.4 4.4 SQLSQL的数据查询功能的数据查询功能 4 4.5.5 SQLSQL的数据操纵功能的数据操纵功能2023-11-1394.2 SQL语言的数据类型语言的数据类型4.2.1 字符串型字符串型uSQL Server 2014中,字符串型数据可以由汉字、英文字母、数字等符号组成。中,字符串型数据可以由汉字、英文字母、数字等符号组成。根据编码方式的不同,字符串型又分为根据编码方式的不同,字符串型又分为Unicode字符串型和非字符串型和非Unicode字符串型。字符串型。Unicode字符串型数据字符串型数据是指对所有字符均采用双字(是指对所有字符均采用双字(16bit)节统
16、一编码的一类)节统一编码的一类数据;数据;非非Unicode字符串型数据字符串型数据则是指对不同国家或地区采用不同编码长度的一类数则是指对不同国家或地区采用不同编码长度的一类数据,例如英文字母使用一个字节(据,例如英文字母使用一个字节(8bit)进行编码,汉字则使用两个字节()进行编码,汉字则使用两个字节(16bit)进行编码。)进行编码。2023-11-1310第第4章章 数据库数据库查询语言查询语言SQL u SQL Server 2014主要支持的字符串型数据类型如主要支持的字符串型数据类型如表表4.2所示。所示。2023-11-1311表表4.2 字符串型数据类型字符串型数据类型数据类
17、型数据类型说明说明char(n)固定长度的非固定长度的非Unicode字符串类型,字符串类型,n用于设置字符串的最大长度,用于设置字符串的最大长度,取值范围为取值范围为18000varchar(n)可变长度的非可变长度的非Unicode字符串类型,字符串类型,n用于设置字符串的最大长度,用于设置字符串的最大长度,取值范围为取值范围为18000text可变长度的非可变长度的非Unicode文本数据类型,可存储最大容量为文本数据类型,可存储最大容量为231-1(2,147,483,647)字节的文本数据)字节的文本数据nchar(n)固定长度的固定长度的Unicode字符串类型,字符串类型,n用于
18、设置字符串的最大长度,用于设置字符串的最大长度,取值范围为取值范围为14000,占用,占用2n字节的存储空间字节的存储空间nvarchar(n)可变长度的可变长度的Unicode字符串类型,字符串类型,n用于设置字符串的最大长度,用于设置字符串的最大长度,取值范围为取值范围为18000ntext可变长度的可变长度的Unicode文本数据类型,可存储最大容量为文本数据类型,可存储最大容量为231-1(2,147,483,647)字节的文本数据)字节的文本数据4.2 SQL语言的数据类型语言的数据类型4.2.2 数值型数值型u 按照不同的精确程度,将数值型数据类型分为两种,一种是精确型,另一种是近
19、似按照不同的精确程度,将数值型数据类型分为两种,一种是精确型,另一种是近似型。型。精确型数据是指在计算机中可以精确存储的数据。精确型数据是指在计算机中可以精确存储的数据。这种数据类型包括各种整型数这种数据类型包括各种整型数据类型、定点型数据类型等,据类型、定点型数据类型等,表表4.3列出了列出了SQL Server 2017支持支持的精确型数据类型的精确型数据类型。2023-11-13124.2 SQL语言的数据类型语言的数据类型2023-11-1313表表4.3 精确型数据类型精确型数据类型数据类型数据类型说明说明bit表示位整型,占表示位整型,占1个字节,存储个字节,存储0或或1,也可以取
20、值,也可以取值nulltinyint表示小整型,占表示小整型,占1个字节,可存储个字节,可存储0到到255之间的整数之间的整数smallint表示短整型,占表示短整型,占2个字节,可存储从个字节,可存储从-215(-32,768)到到215-1(32,767)之间之间的整数的整数int(或(或integer)整型数据类型,占整型数据类型,占4个字节,可存储从个字节,可存储从-231(-2,147,483,648)到到231-1(2,147,483,647)之间的整数之间的整数bigint表示大整型,占表示大整型,占8个字节,可存储从个字节,可存储从-263(-9,223,372,036,854
21、,775,808)到到263-1(9,223,372,036,854,775,807)之间的整数之间的整数numeric(m,n)定点型数据类型。可表示从定点型数据类型。可表示从-1038+1到到1038-1之间的有固定精度和小数之间的有固定精度和小数位的数值数据,其中位的数值数据,其中m用于设定总的有效位数(小数点两边的十进制用于设定总的有效位数(小数点两边的十进制位数之和),位数之和),n则用于设定小数点右边的十进制位数之和,即表示精则用于设定小数点右边的十进制位数之和,即表示精确到第确到第n位。位。n默认值为默认值为0,且,且0nm,最多占,最多占17字节。字节。decimal(m,n)
22、decimal(m,n)的功能同的功能同numeric(m,n)4.2 SQL语言的数据类型语言的数据类型 近似型主要是指浮点型近似型主要是指浮点型float和和real。这种类型的数据在内存中不一定能够精确表。这种类型的数据在内存中不一定能够精确表示,可能会存在一些微小的误差。示,可能会存在一些微小的误差。2023-11-1314表表4.4 近似型数据类型(近似型数据类型(float和和real)数据类型数据类型说明说明real占占4个字节,可精确到小数点后个字节,可精确到小数点后7位数,可存储从位数,可存储从-3.40E+38到到3.40E+38的的浮点精度数值浮点精度数值float占占8
23、个字节,近似数值类型,可存储从个字节,近似数值类型,可存储从-1.79E+308到到1.79E+308的浮的浮点精度数值点精度数值4.2 SQL语言的数据类型语言的数据类型4.2.3 日期时间型日期时间型u 日期时间型,包括两种:日期时间型,包括两种:datetime和和smalldatetiime。日期时间型既可以用于。日期时间型既可以用于存储时间型数据,也可以用于存储日期型数据。存储时间型数据,也可以用于存储日期型数据。u 自从自从SQL Server 2012开始,新增了开始,新增了4种与日期时间相关的新数据类型:种与日期时间相关的新数据类型:datetime2、dateoffset、d
24、ate和和time。2023-11-13154.2 SQL语言的数据类型语言的数据类型2023-11-1316表表4.5 日期时间型数据类型(日期时间型数据类型(float和和real)数据类型数据类型说明说明date占占3字节,只存储日期(无时间部分),可存储从字节,只存储日期(无时间部分),可存储从1年年1月月1日到日到9999年年12月月31日的日期数据日的日期数据time(n)占占3至至5字节,只存储时间,字节,只存储时间,n取值在取值在07之间,存储格式为之间,存储格式为“HH:MM:SS.NNNNNNN”,其中,其中HH,MM,SS分别表示小时、分和秒,分别表示小时、分和秒,N表示
25、秒的小数位,取值范围从表示秒的小数位,取值范围从00:00:00.0000000到到23:59:59.9999999,精确到,精确到100纳秒纳秒smalldatetime占占4个字节,可存储从个字节,可存储从1900年年1月月1日到日到2079年年6月月6日的日期和时间数据,日的日期和时间数据,精确到分钟精确到分钟datetime占占8个字节,可存储从个字节,可存储从1753年年1月月1日到日到9999年年12月月31日的日期和时间数据,精日的日期和时间数据,精确到千分之三秒(即确到千分之三秒(即3.33毫秒)毫秒)datetime2(n)占占6至至8字节,可存储从字节,可存储从1年年01月
26、月01日日00时时00分分00.0000000秒到秒到9999年年12月月31日日23时时59分分59.9999999秒的日期和时间数据,秒的日期和时间数据,n取值在取值在07之间的数,指定秒的之间的数,指定秒的小数位,精确到小数位,精确到100钠秒钠秒datetimeoffset(n)占占8至至10字节,可存储从字节,可存储从1年年01月月01日日00时时00分分00.0000000秒到秒到9999年年12月月31日日23时时59分分59.9999999秒的日期和时间数据,秒的日期和时间数据,n取值在取值在07之间的数,指定秒之间的数,指定秒的小数位,精确到的小数位,精确到100钠秒。该类型
27、带有时区偏移量,时区偏移量最大为钠秒。该类型带有时区偏移量,时区偏移量最大为+/-14小时,包含了小时,包含了UTC偏移量,因此可以合理化不同时区捕捉的时间偏移量,因此可以合理化不同时区捕捉的时间4.2 SQL语言的数据类型语言的数据类型4.2.4 货币型货币型u 货币型是用来存储货币值数据,它固定精确到小数点后四位,相当于货币型是用来存储货币值数据,它固定精确到小数点后四位,相当于numeric(m,n)类型的特例(类型的特例(n=4)。)。SQL Server支持两种货币型。支持两种货币型。2023-11-1317表表4.6 货币型数据类型货币型数据类型数据类型数据类型说明说明smallm
28、oney占占4个字节,可存储从个字节,可存储从-214,748.3648到到+214,748.3647之间的货币之间的货币数据值,精确到货币单位的千分之十数据值,精确到货币单位的千分之十money占占8个字节,可存储从个字节,可存储从-263(-922,337,203,685,477.5808)到到263-1(+922,337,203,685,477.5807)之间的货币数据值,之间的货币数据值,精确到货币单位的千分之十精确到货币单位的千分之十4.2 SQL语言的数据类型语言的数据类型4.2.5 二进制型二进制型u 二进制型数据类型包括三种:二进制型数据类型包括三种:binary(n)、var
29、binary(n)和和image。其作用和含义。其作用和含义说明如说明如表表4.7所示。所示。2023-11-1318表表4.7 二进制型数据类型二进制型数据类型数据类型数据类型说明说明binary(n)表示固定长度的二进制数据类型,其中表示固定长度的二进制数据类型,其中n用于设置最大长度,取值范用于设置最大长度,取值范围为围为18000字节字节varbinary(n)表示可变长度的二进制数据类型,其中表示可变长度的二进制数据类型,其中n用于设置最大长度,取值范用于设置最大长度,取值范围为围为18000字节字节image表示更大容量、可变长度的二进制数据类型,最多可以存储表示更大容量、可变长度
30、的二进制数据类型,最多可以存储231-1(2,147,483,647)字节,约为)字节,约为2GB。它既可存储文本格式,也可以存。它既可存储文本格式,也可以存储储GIF格式等多种格式类型的文件。格式等多种格式类型的文件。4.2 SQL语言的数据类型语言的数据类型4.2.6 其他数据类型其他数据类型u SQL Server 2017还还支持以下的数据类型:支持以下的数据类型:sql_variant:一种通用数据类型,存储除了:一种通用数据类型,存储除了text、ntext、image、timestamp和它和它自身以外的其他类型的数据,其最大存储量为自身以外的其他类型的数据,其最大存储量为800
31、0字节。字节。timestamp:时间戳类型,每次更新时会自动更新该类型的数据。作用跟邮局的:时间戳类型,每次更新时会自动更新该类型的数据。作用跟邮局的邮戳类似,通常用于证明某一项活动(操作)是在某一时刻完成的。邮戳类似,通常用于证明某一项活动(操作)是在某一时刻完成的。uniqueidentitier:全局唯一标识符(:全局唯一标识符(GUID),其值可以从),其值可以从Newsequentialid()函数函数获得,这个函数返回的值对所有计算机来说是唯一的。获得,这个函数返回的值对所有计算机来说是唯一的。xml:作为一种存储格式,:作为一种存储格式,xml类型具有类型具有SQL Serve
32、r中其他类型的所有功能,还中其他类型的所有功能,还可以添加子树、删除子树和更新标量值等,最多存储可以添加子树、删除子树和更新标量值等,最多存储2GB数据。数据。table:表类型,用于返回表值函数的结果集,其大小取决于表中的列数和行数。:表类型,用于返回表值函数的结果集,其大小取决于表中的列数和行数。hierarchyid:层次类型,包含对层次结构中位置的引用,占用空间为:层次类型,包含对层次结构中位置的引用,占用空间为1至至892字节字节2字节的额外开销。字节的额外开销。cursor:游标类型,包含对游标的引用,只能用作变量或存储过程参数,不能用:游标类型,包含对游标的引用,只能用作变量或存
33、储过程参数,不能用于于Create Table语句中。语句中。2023-11-13194.2 SQL语言的数据类型语言的数据类型4.2.7 自定义数据类型自定义数据类型u 根据实际需要,用户可利用已有的标准数据类型来定义自己的数据类型,这种类型根据实际需要,用户可利用已有的标准数据类型来定义自己的数据类型,这种类型称为自定义数据类型。自定义数据类型可由称为自定义数据类型。自定义数据类型可由CREATE TYPE语句语句来定义。来定义。【例子例子】用户可以用下列语句创建表示地址的数据类型用户可以用下列语句创建表示地址的数据类型address:CREATE TYPE address FROM va
34、rchar(350)NOT NULL;执行上述语句后,就生成了名为执行上述语句后,就生成了名为address的数据类型,同时增加了约束条件的数据类型,同时增加了约束条件NOT NULL。就可以用。就可以用address去定义字段和变量。该数据类型就是与去定义字段和变量。该数据类型就是与varchar(350)同等,只不过它增加了一个非空约束条件。同等,只不过它增加了一个非空约束条件。不再需要数据类型不再需要数据类型address,可以用下列语句将之删除:,可以用下列语句将之删除:DROP TYPE address;但在删除之前,先删除所有引用该数据类型的数据库对象。但在删除之前,先删除所有引用
35、该数据类型的数据库对象。2023-11-13204.2 SQL语言的数据类型语言的数据类型第第4章章 数据库查询语言数据库查询语言SQL 4.1 4.1 SQLSQL概述概述 4.2 4.2 SQLSQL语言的数据类型语言的数据类型 4.3 4.3 SQLSQL的数据定义功能的数据定义功能 4.4 4.4 SQLSQL的数据查询功能的数据查询功能 4.5 4.5 SQLSQL的数据操纵功能的数据操纵功能2023-11-13214.3 SQL的数据定义功能的数据定义功能u数据定义数据定义:指对数据库对象的定义、删除和修改操作。指对数据库对象的定义、删除和修改操作。u数据库对象主要包括数据表、视图
36、、索引等。数据库对象主要包括数据表、视图、索引等。u数据定义功能通过数据定义功能通过CREATE、ALTER、DROP语句来完成。语句来完成。u按照操作对象分类来介绍数据定义的按照操作对象分类来介绍数据定义的SQL语法。语法。4.3.1 数据表的创建和删除数据表的创建和删除 数据表是关系模式在关系数据库中的实例化,是数据库中唯一用于存储数据的数据库数据表是关系模式在关系数据库中的实例化,是数据库中唯一用于存储数据的数据库对象,它是整个数据库系统的基础。对象,它是整个数据库系统的基础。创建数据表是数据库建立的重要组成部分,由创建数据表是数据库建立的重要组成部分,由SQL语言中的语言中的CREAT
37、E TABLE语句语句来完成,其语法格式如下:来完成,其语法格式如下:CREATE TABLE schema_name.table_name(column1_name data_type integrality_condition_on_column ,column2_namedata_type integrality_condition_on_column,integrality_condition_on_TABLE);2023-11-1322第第4章章 数据库查询语言数据库查询语言SQLu所涉及参数说明如下:所涉及参数说明如下:tanble_name为所定义的数据表的名称,即表名。在一个数
38、据库中表名必须为所定义的数据表的名称,即表名。在一个数据库中表名必须唯一,而且表名应该能够概括该数据表保存数据所蕴涵的主题。唯一,而且表名应该能够概括该数据表保存数据所蕴涵的主题。schema_name为表所属的架构的名称。自为表所属的架构的名称。自SQL Server 2008开始,每数据库开始,每数据库对象都属于某一个架构,如果在定义时不指定架构,则使用默认架构对象都属于某一个架构,如果在定义时不指定架构,则使用默认架构dbo。关于架构的作用和意义将在第关于架构的作用和意义将在第12章中介绍。章中介绍。column1_name、column2_name表示字段名,或者称字段名。在一个表中,
39、表示字段名,或者称字段名。在一个表中,字段名也必须唯一,最好能够概括该字段的含义。字段名也必须唯一,最好能够概括该字段的含义。data_type表示数据类型。根据需要,它可以设置为上节介绍的数据类型中某表示数据类型。根据需要,它可以设置为上节介绍的数据类型中某一种。一种。2023-11-13234.3 SQL的数据定义功能的数据定义功能 integrality_condition_on_column表示字段级的完整性约束条件。这些约束条件只对表示字段级的完整性约束条件。这些约束条件只对相应的字段起作用,其取值如下:相应的字段起作用,其取值如下:NOT NULL:选取该条件时,字段值不能为空。:
40、选取该条件时,字段值不能为空。DEFAULT:设定字段的默认值,设置格式为:设定字段的默认值,设置格式为:DEFAULT constant,其中,其中constant表示常量。表示常量。UNIQUE:选取该条件时,字段值不能重复。:选取该条件时,字段值不能重复。CHECK:用于设置字段的取值范围,格式为:用于设置字段的取值范围,格式为:CHECK(expression),其中,其中expression为约束表达式。为约束表达式。PRIMARY KEY:选取该条件时,相应字段被设置为主码(主键)。:选取该条件时,相应字段被设置为主码(主键)。FOREIGN KEY:选取该条件时,相应字段被设置为
41、外码(外键)。外码的设置:选取该条件时,相应字段被设置为外码(外键)。外码的设置涉及到两个表,其格式如下:涉及到两个表,其格式如下:FOREIGN KEY column_name REFERENCES foreign_table_name(foreign_column_name)2023-11-13244.3 SQL的数据定义功能的数据定义功能 integrality_condition_on_TABLE表示表级的完整性约束条件。表示表级的完整性约束条件。与与integrality_condition_on_column不同的是,不同的是,integrality_condition_on_co
42、lumn仅仅作用于其对应的字段,而不能设置为同时作用于多个字段;仅仅作用于其对应的字段,而不能设置为同时作用于多个字段;integrality_condition_on_TABLE则可以作用多个字段或整个数据表。则可以作用多个字段或整个数据表。上述的约束条件中,除了上述的约束条件中,除了NOT NULL和和DEFAULT以外,其他的约束条件都可以外,其他的约束条件都可以在以在integrality_condition_on_TABLE中定义,使它们同时作用多个字段。中定义,使它们同时作用多个字段。凡凡是涉及到多个字段的约束条件都必须在是涉及到多个字段的约束条件都必须在integrality_c
43、ondition_on_TABLE中定中定义。义。注意:注意:由两个字段组成的主码必须利用由两个字段组成的主码必须利用PRIMARY KEY在在 integrality_condition_on_TABLE中定义。中定义。SQL语言对大小写不敏感。语言对大小写不敏感。2023-11-13254.3 SQL的数据定义功能的数据定义功能【例例4.1】表表4.8给出了学生信息表(给出了学生信息表(student)的基本结构。表中列出了所有的字)的基本结构。表中列出了所有的字段名及其数据类型和约束条件。段名及其数据类型和约束条件。2023-11-1326表表4.8 学生信息表(学生信息表(studen
44、t)的结构)的结构字段名字段名数据类型数据类型大小大小小数位小数位约束条件约束条件说说 明明s_no字符串型字符串型8 非空,主键非空,主键学号学号s_name字符串型字符串型8 非空非空姓名姓名s_sex字符串型字符串型2 取值为取值为“男男”或或“女女”性别性别s_birthday 日期时间型日期时间型 取值在取值在1970年年1月月1日到日到2000年年1月月1日之间日之间年龄年龄s_speciality 专业专业50 默认值为默认值为“计算机软件计算机软件与理论与理论”专业专业s_avgrade浮点型浮点型31取值在取值在0到到100之间之间平均成绩平均成绩s_dept字符串型字符串型
45、50 默认值为默认值为“计算机科学系计算机科学系”所在的系所在的系4.3 SQL的数据定义功能的数据定义功能u根据上述介绍的内容,我们不难构造出下列的根据上述介绍的内容,我们不难构造出下列的CREATE TABLE语句,用于语句,用于创建本例设定的学生信息表创建本例设定的学生信息表student:CREATE TABLE student(s_no char(8)PRIMARY KEY,s_name char(8)NOT NULL,s_sex char(2)CHECK(s_sex=男男 OR s_sex=女女),s_birthday smalldatetimeCHECK(s_birthday=1
46、970-1-1 AND s_birthday=0 AND s_avgrade=0 AND s_avgrade=1970-1-1 AND s_birthday=1970-1-1 AND s_birthday=0 AND s_avgrade=0 and s_n=80 AND s_avgrade=2;(3)如果进一步要求在平均成绩及格()如果进一步要求在平均成绩及格(s_avgrade=60)的学生中完成这种分组查询,即)的学生中完成这种分组查询,即对于平均成绩及格的学生,如果要查询他们人数大于或等于对于平均成绩及格的学生,如果要查询他们人数大于或等于2的系的学生数量分布情况,则的系的学生数量分布情
47、况,则可以先用可以先用WHERE子句来选择及格的学生,然后用子句来选择及格的学生,然后用HAVING短语来实现分组查询:短语来实现分组查询:SELECT s_dept 系别系别,count(*)人数人数FROM studentWHERE s_avgrade=60GROUP BY s_deptHAVING count(*)=2 2023-11-1361执行结果如下:执行结果如下:系别系别 人数人数-计算机系计算机系 3智能技术系智能技术系 24.4 SQL的数据查询功能的数据查询功能u注意注意:WHERE子句应该在子句应该在GROUP和和HAVING之前出现。之前出现。u注意注意:WHERE子句
48、和子句和HAVING短语的作用都一样,都是用于指定查询条件。短语的作用都一样,都是用于指定查询条件。它们是有区别的:它们是有区别的:HAVING短语是用于对组设定条件,而不是具体的某一条记录,从而使得短语是用于对组设定条件,而不是具体的某一条记录,从而使得SELECT语句可语句可以实现对组进行筛选;以实现对组进行筛选;WHERE子句是对每一条记录设定条件的,而不是一个记录组。子句是对每一条记录设定条件的,而不是一个记录组。2023-11-13624.4 SQL的数据查询功能的数据查询功能4.4.7 带带LIKE的匹配查询和带的匹配查询和带IS的空值查询的空值查询1.带带LIKE的匹配查询的匹配
49、查询u模糊查询在大多情况下都是由模糊查询在大多情况下都是由谓词谓词LIKE来实现。其一般语法格式为:来实现。其一般语法格式为:SELECT column_expressionFROM table_name WHERE column_name NOT LIKE character_string;column_name的类型必须是字符串类型,的类型必须是字符串类型,character_string表示字符串常数。该语句的含义表示字符串常数。该语句的含义是查找字段是查找字段column_name的字段值与给定字符串的字段值与给定字符串character_string相匹配的记录。相匹配的记录。u字符
50、串字符串character_string可以是一个字符串常量,也可以是包含通配符可以是一个字符串常量,也可以是包含通配符“_”和和“%”的字符串。是否相匹配要根据下列原则来确定:的字符串。是否相匹配要根据下列原则来确定:“_”(下划线)(下划线):它可以与任意的单字符相匹配。它可以与任意的单字符相匹配。“%”(百分号)(百分号):它可以与任意长度字符串(包括空值)相匹配。它可以与任意长度字符串(包括空值)相匹配。除了字符除了字符“_”和和“%”外,所有其它的字符都只能匹配自己。外,所有其它的字符都只能匹配自己。2023-11-13634.4 SQL的数据查询功能的数据查询功能【例【例4.12】