《数据库基础与项目实训教程-基于SQLServer第6章.ppt》由会员分享,可在线阅读,更多相关《数据库基础与项目实训教程-基于SQLServer第6章.ppt(121页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第6章 Transcat-SQL语言数据库基础与项目实训教程 基于SQL Server知识导航知识导航数据库基础与项目实训教程 基于SQL Server学习目标理解理解:T-SQL语句基础Select语句的语法格式。掌握掌握:Select语句的使用Insert、Update、Delete等语句的使用数据库基础与项目实训教程 基于SQL ServerT-SQL语言6.1 Transcat-SQL语言基础 6.2 数据操纵语言 数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础 任务描述:任务描述:使用T-SQL语言编写应用程序可以完成所有的数据库管理工作。本任务将讲述T
2、-SQL的语言基础,为后续学习奠定基础。任务目标:任务目标:理解SQL Server 2000的系统函数;掌握变量、常量;掌握T-SQL语言的语法,并能熟练应用。数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础6.1.1 数据类型 在设计和创建表的时候,要确定每个字段的数据类型和长度。所谓数据类型就是以数据的表现方式和存储方式来划分的数据的种类 数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础一般从四个方面讨论数据类型。1)类别:如字符型、整数型、数值型等。2)存
3、储的长度:指的是存储数据所使用的字节数。3)数值的精度:指数值数据中所存储的十进制数据的总位数。4)数值的小数位数:指数值数据中小数点右边可以有的数字位的最大值 数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础1整数数据类型整数数据类型是最常用的数据类型之一,它主要用来存储数值。整型数据类型包括以下几种。1)Int(Integer):存储从-231到231-1之间的所有正负整数2)Smallint:存储从-215到215-1之间的所有正负整数3)Tinyint:存储从0到255之间的所有正整数4)Bigint:存储从-263到263-1之间的所有正负整数数据库基础与
4、项目实训教程 基于SQL Server6.1 T-SQL语言基础2浮点数据类型浮点数据类型用于存储十进制小数浮点数值的数据。浮点数据类型包括以下几种:1)Real:可精确到第7位小数,其范围从-3.40E-38到3.40E+38。2)Float:可精确到第15位小数,其范围从-1.79E-308 到1.79E+308。3)Decimal:可以提供小数所需要的实际存储空间,但也有一定的限制。可以用它来存储从-1038-1到1038-1之间的数值。4)Numeric:与Decimal数据类型功能上完全相同,区别在于Decimal不能用于Identify关键字的列。数据库基础与项目实训教程 基于SQ
5、L Server6.1 T-SQL语言基础3二进制数据类型二进制数据类型表示的是位数据流,包括Binary和Varbinary两种类型。1)Binary:用于存储二进制数据,其定义形式为Binary(n),n表示数据的长度,取值为1到8000。2)Varbinary:定义形式为Varbinary(n),它与Binary类型相似。数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础4逻辑数据类型 Bit占用1个字节的存储空间,其值为0或1,如果输入0或1以外的值将被视为1。Bit类型不能定义Null值。数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语
6、言基础5字符数据类型字符数据类型是使用最多的数据类型。它可以用来存储各种字母、数字符号、特殊符号。1)Char:定义形式为Char(n)。以Char类型存储的每个字符或符号占1个字节的存储空间。2)Nchar:定义形式为Nchar(n)。它与Char类型相似,不同的是,Nchar数据类型n的取值为1到4000。3)Varchar:定义形式为Varchar(n)。它与Char类型相似,n的取值为1到8000。4)Nvarchar:定义形式为Nvarchar(n)。它与Varchar类型相似。数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础6文本和图形数据类型这类数据类
7、型用于存储大量字符或二进制数据。1)Text:用于存储大量文本数据,容量理论上为1到231-1个字节。2)Ntext:与Text类型相似。3)Image:用于存储大量的二进制数据Binary Data,其理论容量为231-1个字节。数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础7日期和时间数据类型1)Datetime:用于存储日期和时间的结合体,可以存储从公元1753年1月1日0时起到公元9999年12月31日23时59分59秒之间的所有日期和时间。2)Smalldatetime:与Datetime数据类型相似,但其日期时间范围较小,为从1900年1月1日到207
8、9年6月6日,精度较低,只能精确到分钟,长度为4个字节。数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础8货币数据类型 货币数据类型用于存储货币值。在使用货币数据类型时应在数据前加上货币符号,系统才能辨识其为哪国的货币,如果不加货币符号则默认为“¥”。9特定数据类型SQL Server中包含了一些用于数据存储的特殊数据类型。1)Timestamp2)Uniqueidentifier10用户自定义数据类型Sysname数据类型是系统提供给用户的便于用户自定义数据类型。数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础6.1.2 变量T-SQL
9、 中可以使用两种变量:-局部变量(Local Variable)-全局变量(Global Variable)。数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础1局部变量 局部变量是用户可自定义的变量,它的作用范围仅在程序内部,在程序中通常用来储存从表中查询到的数据或当作程序执行过程中暂存变量使用。局部变量必须以开头,而且必须用Declare命令声明后才可使用,其说明形式如下:Declare 变量名 变量类型 ,变量名 变量类型 数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础给变量赋值,必须使用Select或Set命令来设定变量的值。其语
10、法 如下。Select 局部变量=变量值Set 局部变量=变量值【例6-3】声明一个长度为10个字符的变量ID并赋值。Declare ID char(10)Select ID=10010001数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础2全局变量 全局变量是SQL Server系统内部使用的变量,其作用范围并不局限于某一程序,而是任何程序均可随时调用。全局变量通常存储一些SQL Server的配置设定值和效能统计数据,用户可在程序中用全局变量来测试系统的设定值或T-SQL命令执行后的状态值。系统定义的全局变量以两个开头 数据库基础与项目实训教程 基于SQL Se
11、rver6.1 T-SQL语言基础6.1.3 运算符 1算术运算符 算术运算符用于数字列或变量间的算术运算,包括+(加)、(减)、(乘)、/(除)、%(取余)2比较运算符 比较运算符用来比较两个表达式之间的大小,包括大于()、小于(=)、小于等于(=)、不等于()。数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础3逻辑运算符 逻辑运算符用于对表达式或操作数进行比较或测试,其运算结果返回的是布尔类型的值,即True或False。True表示条件成立,False则表示条件不成立。可使用的逻辑运算符主要包括And(与)、Or(或)、Not(非)。逻辑运算符如表6-3所示。
12、数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础4位运算符 包括&(按位与)、|(按位或)、(按位非)、(按位异或)5连接运算符 连接运算符“+”用于连接两个或两个以上的字符、二进制串、列名或者串和列的混合体,将一个串加入到另一个串的末尾。其语法如下:+数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础【例6-6】查询分数最高的学生学号以及分数。Use RtvustuSelect 分数最高的学生学号是+S_ID+分数为+convert(varchar(10),Sco
13、re)From ResultsWhere score=(Select max(score)From Results)数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础6.1.4 批处理 批处理是包含一个或多个T-SQL语句的组,从应用程序一次性地发送到SQL Server执行。SQL Server将批处理语句编译成一个可执行单元,此单元称为执行计划。一个批处理语句以Go结束。数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础6.1.5 注释 注释通常用于记录程序的设计
14、者、评审者、评审日期、修改日期、对修改的描述,帮助人们更好地理解程序。注释的作用大致有两类:(1)序言性注释序言性注释,写在开头,对程序进行整体上的描述;(2)功能性注释功能性注释,写在程序内,主要对某一行或某几行进行注释。数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础SQL Server 2000中的注释分为行内注释和块注释两种。1 1行内注释行内注释-注释文本表示以“-”开始直到该行结束都是注释部分。2 2块注释块注释/*注释文本*/或/*注释文本*/表示从“/*”符号开始到遇到第一个“*/”符号结束之间的部分为注释。数据库基础与项目实训教程 基于SQL Se
15、rver6.1 T-SQL语言基础6.1.6 控制流程语句T-SQL 语言使用的流程控制命令与常见的程序设计语言类似,主要有以下几种。1 1IfElseIfElse其语法如下:If Else 条件表达式数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础【例6-9】下面的SQL语句是一个IfElse的例子。Declare x int,y int,z intSelect x=1,y=2,z=3If x y print x y-打印字符串x yElse if y z print y zElse print z y运行结果如图6-7所示 数据库基础与项目实训教程 基于SQL
16、Server6.1 T-SQL语言基础图6-7 T-SQL中的IFELSE语句 数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础2BeginEndBeginEnd用于将多个T-SQL语句组合为一个程序块(相当于复合语句),位于Begin和End之间的所有语句视为一个单元执行。当控制语句中必须执行两条以上T-SQL语句块时,需要用BeginEnd将它们组合起来。其语法格式如下:BeginEnd数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础【例6-10】下面的SQL语句是一个BeginEnd的例子。BeginDeclare myvar fl
17、oatSet myvar=456.256 Begin Print 变量myvar的值为:Print myvar EndEnd运行结果如图6-8所示。数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础图6-8 T-SQL中的BeginEnd语句数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础3Case Case表达式用来简化SQL表达式,它可以用在任何允许使用表达式的地方,并根据条件的不同返回不同的值。Case表达式不同于一个T-SQL语句,它不能够单独执行,而只能作为一个可以单独执行的语句的一部分来使用。数据库基础与项目实训教程 基于SQL
18、 Server6.1 T-SQL语言基础Case命令有两种格式。(1)简单Case表达式其语法格式如下:Case When Then When Then Else End数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础(2)搜索Case表达式其语法格式如下:Case When Then When Then Else End数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础4While While语句通过逻辑表达式来设置一个条件,当条件成立时,重复执行一个语句或语句块(重复执行的部分称为循环体),条件不成立时退出循环,继续执行后面的语句,其语
19、法格式如下:While Begin Continue BreakEnd数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础【例6-13】执行下面的SQL语句。Declare x int,y int,c intSelect x=1,y=1While x 3Begin Print x-打印变量x的值 While y 3 Begin Select c=100*x+y Print c-打印变量c的值 Select y=y+1 End Select x=x+1 Select y=1End运行结果如图6-10所示。数据库基础与项目实训教程 基于SQL Server6.1 T-SQL
20、语言基础图6-10 T-SQL中的While语句数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础5Waitfor Waitfor语句指定触发语句块、存储过程或事务执行的时间或时间间隔,其语法格式如下:Waitfor Delay|Time|Errorexit|Processexit|Mirrorexit数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础6GotoGoto语句是无条件转移语句,其语法格式如下。Goto 标识符数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础【例6-16】分行打印字符1、2、3、4、5。
21、Declare x intSelect x=1Label_1:Print xSelect x=x+1While x 6Goto label_1运行结果如图6-11所示。数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础图6-11 Goto语句的应用分行打印字符数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础7ReturnReturn语句用来实现无条件退出执行的批处理命令、存储过程或触发器,其语法格式如下:Return 整数值数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础6.1.7 函数1统计函数 统计函数是在数
22、据库操作中时常使用的函数,又称为基本函数或集函数,常用的统计函数如表6-4所示。这些函数通常用在Select子句中,作为结果数据集的字段返回的结果,其语法格式如下:Select 函数名(列名或*),函数名(列名)From 表名 数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础(1)Avg(列名)Avg()函数返回有关列值的算术平均值,只适用数值型的列。【例6-17】求学生的平均分数。Use RtvustuSelect avg(score)as 平均分数From Results运行结果如图6-12所示 数据库基础与项目实训教程 基于SQL Server6.1 T-SQ
23、L语言基础图6-12 Avg()函数的应用求平均分数数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础(2)Count(列名)Count()函数返回与选择表达式匹配的列中不为Null值的数据个数。【例6-18】统计学生信息表中学生的数目。Use RtvuStuSelect count(S_ID)as 学生数 From Student运行结果如图6-13所示 数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础图6-13 Count()函数的应用统计学生数 数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础(3)Max(
24、列名)Max()函数返回某一列的最大值,适用于数值型、字符型和日期型的列。对于列值为Null的列,Max()函数不将其列为比较的对象。【例6-20】求分数最高的学生分数。Use RtvuStuSelect Max(score)as 最高分From Results数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础(4)Min(列名)Min()函数返回某一列的最小值,适用于数值型、字符型和日期型的列。对于列值为Null的列,Min()函数不将其列为比较的对象【例6-21】求年龄最大的学生姓名。Use RtvuStuSelect snameFrom Student Wher
25、e birth=(Select min(brith)From Student)数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础(5)Sum(列名)Sum()函数用来返回某列值的总和,只适用于数值型的列,不包括Null值。【例6-22】求课时学分总和。Use RtvuStuSelect sum(credit)as 总学分From Course数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础2算术函数 算术函数可对数据类型为整型(Integer)、浮点型(Float)、实型(Real)、货币型(Money)和Smallmoney的列进行操作。
26、数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础【例6-23】在同一表达式中使用Sin()、Atan()、Rand()、Pi()、Sign()函数。Select sin(23.45),atan(1.234),rand(),pi(),sign(-2.34)运行结果如图6-15所示。数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础图6-15 算术函数的应用数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础3字符串函数 字符串函数对二进制数据字符串和表达式执行不同的运算。此类函数作用于Char、Varchar、Bina
27、ry和Varbinary数据类型以及可以隐式转换为Char或Varchar的数据类型,可以在Select语句的Select子句和Where子句以及表达式中使用。常用的字符串函数有以下几种:数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础(1)字符转换函数字符转换函数有以下几种:1)Ascii(字符表达式)。Ascii()函数返回字符表达式最左端字符的ASCII码值。2)Char(数字表达式)。Char()函数用于将ASCII码值转换为字符。如果没有输入0 255 之间的ASCII码值,Char函数会返回一个Null值。数据库基础与项目实训教程 基于SQL Serve
28、r6.1 T-SQL语言基础3)Lower(字符表达式)。Lower()函数把字符串全部转换为小写。4)Upper(字符表达式)。Upper()函数把字符串全部转换为大写。5)Str(数字表达式)。Str()函数把数值型数据转换为字符型数据,其用法如下。Str,长度 数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础(2)去空格函数去空格函数有如下两种:1)Ltrim(字符表达式)。Ltrim()函数把字符串前的空格去掉。2)Rtrim(字符表达式)。Rtrim()函数把字符串后的空格去掉。【例6-31】运行以下T-SQL语句。Select rtrim(abc )运行
29、结果只保留“abc”。数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础4取子串函数取子串函数主要有以下几种。(1)Left()Left()函数返回部分字符串,其用法如下:Left(,)参数说明如下:1)Left()函数返回的子串是从字符串最左边起到第n个字符的部分。2)若n为负值则返回Null值。数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础(2)Right()Right()函数返回部分字符串,其用法如下:Right(,)参数说明如下:1)Right()函数返回的子串是从字符串右边第n个字符起到最后一个字符的部分。2)若n为负值则返回N
30、ull值 数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础(3)Substring()Substring()函数返回部分字符串,其用法如下:Substring(,Length)参数说明如下:1)Substring()函数返回的子串是从字符串左边第Starting_ position个字符起,Length个字符的部分。2)其中表达式可以是字符串、二进制串或含字段名的表达式。3)Substring()函数不能用于Text和Image数据类型。数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础5字符串比较函数Charindex()函数返回字符串中
31、某个指定的子串出现的开始位置,其用法如下:Charindex()参数部分说明如下:1)其中Substring _expression是所要查找的字符表达式Expression,为字符串或列名表达式。2)如果没有发现子串则返回0值。3)此函数不能用于Text和Image 数据类型。数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础6字符串操作函数字符串操作函数主要有如下几种。(1)Reverse(字符表达式)Reverse()函数将指定的字符串的字符排列顺序颠倒。(2)Replace(字符表达式)Replace()函数返回被替换了指定子串的字符串,其用法如下:Repla
32、ce(,)(3)Space(数字表达式)Space()函数返回一个指定长度的空白字符串,其用法如下:Space()数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础7数据类型转换函数 在一般情况下SQL Server 会自动完成数据类型的转换 如果不能确定SQL Server是否能完成隐式转换或者使用了不能隐式转换的其他数据类型,就需要使用数据类型转换函数做显式转换了。此类函数有两个。(1)Cast()(2)Convert()数据库基础与项目实训教程 基于SQL Server6.1 T-SQL语言基础8日期函数 日期函数用来操作Datetime和Smalldateti
33、me类型的数据,执行算术运算,与其他函数一样,可以在Select语句的Select子句和Where子句以及表达式中使用日期函数数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言任务描述:任务描述:T-SQL语言的重点是数据操作语言,本任务将注重讲述Select语句的语法格式和应用,同时也将讲述Insert、Update、Delete等语句的使用。任务目标:任务目标:掌握Select语句的语法及应用;掌握Insert、Update、Delete等数据操纵语句。数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言6.2.1 Select语句 在任何一种T-SQ
34、L语言中,Select语句都是使用频率最高的查询语句。在SQL Server中,Select语句用来从数据库中检索满足特定条件的记录。一个Select语句主要包含以下几个部分:从哪个或哪些表或视图中提取数据;选取表中的哪些列;选择满足什么条件的数据;查询结果以什么顺序显示数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言Select语句的基本语法格式如下:Select 列名的列表Into 新表名From 表名与视图名列表Where 条件表达式Group by 列名的列表Having 条件表达式Order by 列名1asc|desc,列名2asc|desc,列名nasc|d
35、escComputer 集合函数by 列名数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言参数说明如下:1)Select子句用于指定查询的输出字段。2)Into子句用于将查询结果按照原有的结构保存到新表中。3)From子句用于指定要查询的数据来源于哪些表。4)Where子句给用于出查询条件。5)Group by子句用于按指定的列进行分组。6)Having子句用于指出分组的条件。7)Order by子句用于将查询结果按照指定的列排序。8)Computer by子句用于对by后面提供的列进行分组显示 数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言1基本
36、的Select语句Select语句的基本语法格式如下:Select 选取的列From 表的列表Where 查询条件数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言【例6-41】查询“RtvuStu”数据库中“Student”表中的全部信息。在查询分析器中输入以下语句:Use RtvuStuSelect*From Student运行结果如图6-19所示。数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言图6-19 Select语句的应用查询“Student”表中的全部信息 数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言【例6-42
37、】查询“Results”表,要求以学号、课程号、分数作为列名。在查询分析器中输入以下语句:Select S_ID as 学号,C_ID as 课程号,Score as 分数 From Results运行结果如图6-20所示。数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言图6-20 查询分析器中查询“Results”表中的信息数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言2条件查询Where子句确定查询的条件。(1)比较运算符(、=、=、!3【例6-45】在“Course”表中找出学分大于3或者小于5的课程。Select*From Course W
38、here credit 3 or credit=1985 or year(birth)1980 数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言3排序 查询结果的顺序是按它们在表中的顺序排列的,可以使用Order by子句对查询结果重新排序,方法是使用关键字Asc(升序)或Desc(降序)。Order by子句要写在Where子句后面,语法格式如下:Order by 列名 Ascl Desc数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言【例6-53】查询“Student”表中的所有数据,要求检索结果按照年龄大小降序排列,如果年龄相同,则按姓名降序排
39、列。Select*From Student order by birth,sname desc执行结果如图6-23所示。数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言图6-23 查询分析器执行查询排序语句数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言4聚合函数有时候需要对表中的数据做出统计,这时可以使用一些统计函数来返回数据,其语法格式如下:Select 标题=统计函数名(列名)From 表名数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言1)Avg(All|Distinct表达式):计算平均值函数,用于数值数据类型。2)M
40、in(表达式):查找所提供表达式中的最小值函数3)Max(表达式):查找所提供表达式中的最大值函数4)Sum(All|Distinct表达式):计算所有数据值的和函数,用于数值数据类型。5)Count(All|Distinct表达式):计算表达式值的数目统计函数。数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言【例6-54】在“Course”表中求出所有课程的总学分和平均学分。在查询分析器中输入如下语句:Use RtvuStuSelect 总学分=sum(credit),平均学分=avg(credit)From Course运行结果如图6-24所示。数据库基础与项目实训教
41、程 基于SQL Server6.2 数据操纵语言图6-24 查询分析器执行函数语句数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言5Group by子句 Group by子句在被定义的数据的基础上建立分组它产生每一组的总体信息。使用了Group by子句的选择列表中只能包含常量值、组合列或表达式,每个表达式为每组返回一个值。其语法格式如下:Group by 列名 Having 条件表达式 其中,“Having 条件表达式”选项是对生成的组进行筛选。数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言【例6-55】在“Student”表中求出每个系别的人数
42、。在查询分析器中输入以下语句:Use RtvuStuSelect depart as 系名,count(*)as 人数 From Student group by depart运行结果如图6-25所示。数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言图6-25 查询分析器里执行Count()函数 数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言【例6-56】求系里人数少于7人的系名和人数。Use RtvuStuSelect depart as 系名,count(*)as 人数 From Student group by departHaving co
43、unt(*)7数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言【例6-57】统计“RtvuStu”库中“Student”表中男、女生的人数。Use RtvuStuGoSelect 人数=count(*),sex as 性别From StudentGroup by sex运行结果如图6-26所示 数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言图6-26 查询分析器执行分组函数 数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言6Compute by子句 Compute by子句可以在结果集内生成控制中断和统计,得到更详细的记录或总
44、记录。它把数据分成较小的组,然后为每组建立详细记录结果数据集,也可为每组产生总记录(如Group by)。其语法格式如下:Compute Compute 集合函数集合函数 by by 列名列名 数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言【例6-58】将每个系学生数按系别进行统计,结果按照系别进行排序,并显示统计的明细。Use RtvuStuSelect*From Student order by depart compute count(s_id)by depart运行结果如图6-27所示。数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言图6-
45、27 查询分析器里执行集合Compute by子句数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言7子查询 子查询是指在Select语句的Where或Having子句中嵌套另一条Select语句。子查询是一个Select查询,它返回单个值且嵌套在Select、Insert、Update、Delete语句或其他子查询中。数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言创建子查询可用三种语法来实现。Where 表达式 comparison_oerator any|some(sqlstatement)Where 表达式 not In(sqlstatemen
46、t)Where not Exists(sqlstatement)各参数说明如下:1)Comparison_oerator指一个比较运算符。2)Sqlstatement指Select语句,遵从与其他Select语句相同的格式及规则,它必须括在括号内。数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言【例6-59】在学生信息表中,找出出生最早和出生最晚的学生记录,并按时间 排序。Use RtvustuSelect*From student where(Birth=(Select min(Birth)From Student)or(Birth=(Select max(Birth)
47、From Student)order by Birth运行结果如图6-28所示。数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言图6-28 查询分析器里执行子查询 数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言【例6-60】查询选修课程的信息。Select*From Course Where C_ID in(Select C_ID From Results Where Results.C_ID=Course.C_ID)数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言8使用Into子句创建表Into子句是创建表的又一种方法,它不
48、仅可以复制表结构,还可以把Select子句查询的数据插入到新表中,其语法格式如下:Select 选取的列Into 新表名From 表的列表Where 查询条件数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言【例6-61】创建一个新表“newStu”,它的结构和“Student”表相同,但该表不包含任何记录。Select*Into newStuFrom StudentWhere S_ID is null数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言9合并结果集合并查询是将两个或两个以上的查询结果合并,形成一个具有综合信息的查询结果。使用Union子句
49、可以把两个或两个以上的查询结果集合并为一个结果集,其语法格式如下:查询语句Union All查询语句数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言【例6-62】查询所有学生和教师的姓名和性别。(假设有一个Teacher表,具有Tname和Sex列)Select sname,sex From StudentUnionSelect tname,sexFrom Teacher数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言10数据查询综述【例6-63】查询语句举例。1)查询姓“陈”的男生的资料。Select*From Student Where left
50、(sname,2)=陈 and sex=男2)求学号位于前面3位的学生。Select top 3*From Student order by S_ID数据库基础与项目实训教程 基于SQL Server6.2 数据操纵语言3)生成一个相同结构的“Student2”表,同时复制表中的数据。Select*into Student2 From Student4)查找与陈一凡在同一个系别的学生学号、姓名、性别和系别。Select S_ID,Sname,sex,departFrom StudentWhere Depart=(Select depart From Student Where sname=陈一