SQL Server 2008数据库应用与开发教程(第二版)
● 非过程化语言。在T-SQL语句中,用户只需指出“做什么”,而不需要指出系统“如
何做”,语句具体的操作过程由系统自动完成。因此不同的数据库系统均可以使用相同的T-SQL语句作为数据输入与管理的接口。
● 以记录集合作为操作对象。所有T-SQL语句以集合作为输入,并返回集合作为输出。
这种集合特性允许一条T-SQL语句的输出作为另一条T-SQL语句的输入,所以T-SQL可以嵌套,这使其具有极大的灵活性和强大的功能,在很多情况下,一条T-SQL
语句就可以实现其他语言中需要大段程序才能实现的功能。
类似于人的思维习惯,容易理解和掌握。T-SQL与其他编程语言相比,要简单得多。
3. T-SQL的标识符必须遵循哪些原则? 答:在定义标识符时必须遵守以下规定: (1)标识符的首字符必须是下列字符之一。
统一码(Unicode)2.0标准中所定义的字母,包括拉丁字母a-z和A-Z,以及来自其他语言的字符。
下划线“_”、符号“@”或者数字符号“#”。
在SQL Server中,某些处于标识符开始位置的符号具有特殊意义。以“@”符号开始的标识符表示局部变量或参数;以一个数字符号“#”开始的标识符表示临时表或过程,如表“#gzb”就是一张临时表;以双数字符号“##”开始的标识符表示全局临时对象,如表“##gzb”则是全局临时表。
注意:某些Transact-SQL函数的名称以双at符号(@@)开始,为避免混淆这些函数,建议不要使用以@@开始的名称。
(2)标识符的后续字符可以是以下3种。 统一码(Unicode)2.0标准中所定义的字母。 来自拉丁字母或其他国家/地区脚本的十进制数字。 “@”符号、美元符号“$”、数字符号“#”或下划线“_”。 (3)标识符不允许是Transact-SQL的保留字。 (4)不允许嵌入空格或其他特殊字符。
例如要为明日科技公司创建一个工资管理系统,则可以将其数据库命名为“MR_GZGLXT”。名字除了要遵守命名规则以外,最好还能准确表达数据库的内容,本例中的数据库名称是以每个字的大写字母命名的,其中还使用了下划线“_”。
4. T-SQL的注释方式是什么?
答:注释也称注解,是程序代码中不执行的文本字符串。注释主要描述程序名称、作者名称、变量说明、代码更改日期、算法描述等。使用注释对代码进行说明,不仅能够使程序易读易懂,而且有助于日后对程序的管理与维护。 在T-SQL中,可以使用两种类型的注释符:
● 注释符“--”用于单行注释
使用双连字符 “--” 作为注释符时,从双连字符开始到行尾的内容都是注释内容。这些注
SQL Server 2008数据库应用与开发教程(第二版)
释内容既可以与要执行的代码处于同一行,也可以另起一行。双连字符“--”注释方式主要用于在一行中对代码进行解释和描述。
● 注释符“/* */”,用于注释多行文字
在正斜线星号“/*…*/”注释方式中,开始注释对“/*”和结束注释对“*/”之间的所有内容均视为注释。这些注释字符既可用于多行文字,也可以与执行的代码处在同一行,甚至还可以在可执行代码的内部。
5. 说明变量的分类及各类变量的特点。
答:在SQL中,我们常常使用临时表来存储临时结果,但当结果仅仅是一个数据或者是几个数据时,还要去建一个表,显得就比较麻烦,我们可以考虑使用变量,另外,当一个SQL语句中的某些元素经常变化时,比如选择条件,也可以使用变量。变量分为局部变量和全局变量。在SQL Server 2008系统中,变量的命名规则如下:
● 第一个字符必须是字母、数字、下画线或@符号。需要注意的是,符号“@”开头
的变量表示局部变量、符号“@@”开头的变量表示全局变量。
● 变量名不能是T-SQL语言的系统保留字(如IF、ELSE、CONTINUE等),包括大写
和小写形式。
变量名中不允许出现空格或其他特殊字符
6. 如何使用IF…ELSE和WHILE流程控制语句?
答:我们经常会遇到这种情况:一个逻辑表达式的结果要么为真,要么为假。根据不同的结果,对应于不同的操作。这时就需要使用IF?ELSE语句在程序中对于给定条件进行判断。 语法格式如下:
IF 条件表达式
{语句体1} {语句体2}] [ELSE
说明:
● 条件表达式的运算结果应该为TRUE(真)或FALSE(假),如果条件表达式中含有
SELECT语句,则必须用圆括号将SELECT语句括起来;
● 当条件表达式的值为TRUE时执行语句体1,然后执行IF语句之后的语句;如果条件
表达式的值为FALSE,则执行ELSE关键字后面的语句体2,然后执行IF语句之后的
语句;
可以在IF区域或者ELSE区域嵌套另一个IF语句,对于嵌套的层数没有限制。
WHILE语句是一种将同一段代码循环运行多次的方法,它可以根据一个条件表达式的结果,将代码从0次开始运行到指定次数,或者是持续运行直到遇见BREAK关键字退出循环。
SQL Server 2008数据库应用与开发教程(第二版)
WHILE语句的语法格式如下:
WHILE 条件表达式 循环体
语句的执行流程如图3-7所示。
条件表达式 N Y 循环体 退出循环,执行下一条语句
图3-7 WHILE语句的流程
说明:
● 条件表达式的运算结果为TRUE或FALSE:当条件表达式的值为TRUE时,执行循
环体中的语句,然后再次进行条件判断,重复上述操作,直至条件表达式的值为FALSE,退出循环体的执行。
● 循环体中可以继续使用WHILE语句,称之为循环的嵌套。
可以在循环体内设置BREAK和CONTINUE关键字,以便控制循环语句的执行。
7. 试述常用函数的分类及各函数的特点。
答:在SQL中常用函数分为:数学函数、字符串函数和日期时间函数,它们的特点如下:
数学函数可以执行对数、指数、三角函数、平方根等数学运算,并返回运算结果。
对输入的字符串进行各种操作的函数称为字符串函数。与数学函数一样,字符串函数也是经常使用的函数。
SQL Server 2008提供的日期时间函数不多,但非常实用。这些函数可以执行正确的DATETIME计算,并考虑闰年及其他历法的细节。在T-SQL中,可以将日期时间函数用在SELECT查询语句的选择列表或用于WHERE子句中。
第七章习题参考答案
1. 简述SELECT语句的基本语法。 SELECT基本语法格式为:
SQL Server 2008数据库应用与开发教程(第二版)
CREAT TABLE 表名 (
列的名称 数据类型 [NOT NULL|NULL] /*指定列名称、数据类型、是否为空*/ [COLLATE 排序规则名称] [DEFAULT 默认值] )
2. 简述SELECT语句中的FROM、WHERE、GROUP以及ORDER子句的作用。
在SELECT语句中:
1) FROM子句:用来指定数据来源的表; 2) WHERE子句:用来限定返回行的搜索条件; 3) GROUP BY子句:用来指定查询结果的分组条件; 4) ORDER BY子句:用来指定结果的排序方式。
3. 简述WHERE子句可以使用的搜索条件及其意义。 在WHERE子句中,可以使用的查询条件有以下几种情况:
1) 使用比较运算符:比较运算符来比较表达式值的大小,运算结果为TRUE或者
FALSE。
2) 使用逻辑运算符:使用逻辑运算符,连接WHERE子句中的多个查询条件。 3) 使用LIKE模式匹配:使用LIKE模式匹配运算符,用于指出一个字符串是否与指
定的字符串相匹配。
4) 使用BETWEEN和IN运算符来确定范围。
5) 使用NULL运算符判断一个表达式的值是否为空值。
4. 举例说明什么是内连接、外连接和交叉连接?
内连接是最常见的一种连接,也被称为普通连接或自然连接,它是系统默认形式,在实际使用中可以省略INNER关键字。如从student表和sc表中,查询所有不及格的学生的学号、学生姓名、所属院系、所选的课程号和成绩。 T-SQL语句为: SELECT student.sno,sname,sdept,cno,grade
FROM student,sc
WHERE student.sno=sc.sno and grade<60
/*指定列的排序规则*/ /*指定列的默认值*/ /*指定列的约束条件*/
[列的约束条件][,?n]
外连接是指连接关键字JOIN后面表中指定列连接在前一表中指定列的左边或者右边,如果两表中指定列没有匹配行,则返回空值。有左外连接、右外连接和全连接三种。如用左外连接查询student表和sc表中的学生的Sno、Cno、Sname和Grade。 左外连接T-SQL语句为:
SQL Server 2008数据库应用与开发教程(第二版)
SELECT student.sno,cno,sname,grade
FROM student LEFT JOIN sc ON sc.sno=student.sno
交叉连接即两个表的笛卡尔积,返回结果是由第一个表的每行与第二个表的所有行组合后形成的表,因此,数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。如交叉连接student和sc两表。 T-SQL语句为:
SELECT * FROM student SELECT * FROM sc
SELECT student.*,sc.* FROM student CROSS JOIN sc
5. INSERT语句的VALUES子句中必须指明哪些信息,必须满足哪些要求?
INSERT语句中的VALUES子句为列表中的各列指定值。如果省略列表,则VALUES子句需要给出插入表中每一列的值。
6. 用T-SQL语句创建数据库“销售管理”,并创建其中三张数据表“商品”,“部门”和“销售”。结构如下:
商品(商品号 char(6),商品名称 nchar(10),单价money)
部门(部门号 char(6),部门名称nchar(10),部门经理nchar(8),电话char(12)) 销售(部门号 char(6),商品号 char(6),数量int,金额money)
创建销售管理数据库:
CREATE DATABASE 销售 ON
(name='销售',
filename='e:\\database\\销售.mdf', size=10,
maxsize=50)
创建商品表:
USE 销售
CREATE TABLE 商品( 商品号 char(6) not null, 商品名称 nchar(10), 单价 money)
创建部门表:
USE 销售
CREATE TABLE 部门( 部门号 char(6) not null, 部门名称 nchar(10),