第 9章 T-SQL基础

更新时间:2023-10-02 06:23:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第第91章章 T-SQL基础 网站与网页概述

1

9章

T-SQL基础

CHAPTER 09

练习题9参考答案

1.从功能上划分,SQL分为哪4类? 答SQL语句通常分成以下4类: ? ? ? ?

数据查询语言 数据操作语言 数据定义语言 数据控制语言

2.NULL代表什么含义?将其与其他值进行比较会产生什么结果?如果数值型列中存在NULL,会产生什么结果?

答在数据库中,NULL是一个特殊值,表示数值未知。NULL不同于空字符或数字0,也不同于零长度字符串。比较两个空值或将空值与任何其他数值相比均返回未知,这是因为每个空值均为未知。空值通常表示未知、不可用或以后添加数据。如果某个列上的空值属性为NULL,表示接受空值;空值属性为NOT NULL,表示拒绝空值。如果数值型列中存在NULL,则在进行数据统计时就会产生不正确的结果。

3.使用T-SQL语句向表中插入数据应注意什么?

答在使用T-SQL语句向表中插入数据时要注意以下几点:

? 当向表中所有列都插入新数据时,可以省略列表名,但是必须保证VALUES后的

各数据项位置同表定义时的顺序一致。

? 要保证表定义时的非空列必须有值,即使这个非空列没有出现在插入语句中,也必

须如此。

? 插入字符型和日期型值时,要加入单引号。

? 没有列出的数据类型应该具有以下属性之一:identity属性、timestamp数据类型、

具有NULL属性或者有一个默认值。对于具有identity属性的列,其值由系统给出,用户不必往表中插入数据。 4.LIKE匹配字符有哪几种?如果要检索的字符中包含匹配字符,该如何处理? 答在SQL Server 2005中,共提供了4个通配符。 %:代表任意多个字符。

第第91章章 T-SQL基础 网站与网页概述

2

_(下划线):代表一个任意字符。 []:代表方括号内的任意一个字符。

[^]:表示任意一个在方括号内没有的字符。

如果要检索的字符中包含匹配字符,可使用上述通配符。例如,以下语句查询student表中所有姓王的学生记录:

USE school

SELECT * FROM student WHERE sname LIKE '王%'

其执行结果如下:

sno sname ssex sbirthday sclass ----- -------- ---- ----------------------- ---------- 107 王丽女 1976-01-23 00:00:00.000 95033 109 王芳女 1975-02-10 00:00:00.000 95031

5.在SELECT语句中DISTINCT、ORDER BY、GROUP BY和HAVING子句的功能各是什么?

答各子句的功能如下。

DISTINCT:查询唯一结果。

ORDER BY:使查询结果有序显示。 GROUP BY:对查询结果进行分组。 HAVING:筛选分组结果。 6.在一个SELECT语句中,当WHERE子句、GROUP BY子句和HAVING子句同时出现在一个查询中时,SQL的执行顺序如何?

答其执行顺序如下: (1)执行WHERE子句,从表中选取行。 (2)由GROUP BY对选取的行进行分组。 (3)执行聚合函数。

(4)执行HAVING子句选取满足条件的分组。

7.什么是局部变量?什么是全局变量?如何标识它们?

答局部变量是在一个批处理中被声明、定义、赋值和引用的变量,批处理结束后,该变量也就消失了。全局变量是用来记录SQL Server服务器活动状态的变量,它预先被定义,用户只可以使用,不可以重新定义和赋值。

局部变量是用户定义的变量,用DECLARE语句声明,在声明时它被初始化为NULL,用户可用SET语句为其赋值,局部变量的使用范围是定义它的批处理、存储过程和触发器。它必须以@开始,遵循SQL Server的标识符和对象的命名规范,而且名称不能使用保留字。

全局变量是SQL Server系统所提供并赋值的变量。用户不能建立全局变量,也不能使用SET语句去修改全局变量的值。全局变量的名称以@@开头。大多数全局变量的值是报告本次SQL Server启动后发生的系统活动。

8.什么是批处理?使用批处理有何限制?

答批处理是指一个SQL语句集,这些语句一起提交并作为一个组来执行。批处理结束的符号是GO。由于批处理中的多个语句是一起提交给SQL Server的,所以可以节省系统开销。

使用批处理时有很多限制。

(1)并不是所有的SQL语句都可以和其他语句在一起组合成批处理。下述语句就不能组合在同一个批处理中:

第第91章章 T-SQL基础 网站与网页概述

3

CREATE PROCEDURE CREATE RULE CREATE DEFAULT CREATE TRIGGER CREATE VIEW

(2)不能在同一个批处理中既绑定又使用规则和缺省。 (3)不能在同一个批处理中既定义又使用CHECK约束。 (4)在同一个批处理中不能既删除对象又重建它。 (5)用SET语句改变的选项在批处理结束时生效。

(6)在同一个批处理中不能改变一个表再立即引用其新列。

9.在默认情况下,SQL脚本文件的后缀是什么?SQL脚本执行的结果有哪几种形式? 答SQL脚本文件的默认后缀是.sql。SQL脚本执行的结果有三种形式:文本显示形式、表格显示形式及文件保存形式。

10.编写一个程序,输出所有学生的学号和平均分,并以平均分递增排序。 解:对应的程序如下:

USE school GO

SELECT sno AS '学号',AVG(degree) AS '平均分' FROM score GROUP BY sno

ORDER BY AVG(degree) GO

程序执行结果如下:

11.编写一个程序,判断school数据库中是否存在student表。 解:对应的程序如下:

USE school GO

IF EXISTS(SELECT * FROM sysobjects WHERE name='student' AND type='U') PRINT '存在student表' ELSE

PRINT '不存在student表' GO

12.编写一个程序,查询所有同学参加考试的课程的信息。 解:对应的程序如下:

USE school GO

SELECT * FROM course WHERE EXISTS

(SELECT cno FROM score WHERE course.cno=score.cno AND degree IS NOT NULL) GO

程序执行结果如下:

第第91章章 T-SQL基础 网站与网页概述

4

13.编写一个程序,查询所有成绩高于该课程平均分的记录,且按课程号有序排列。 解:对应的程序如下:

USE school GO

SELECT *

FROM score a

WHERE degree > (SELECT AVG(degree) FROM score b WHERE a.cno=b.cno) ORDER BY cno GO

程序执行结果如下:

14.创建一个自定义函数maxscore,用于计算给定课程号的最高分,并用相关数据进行测试。

解:对应的程序如下:

USE school GO

CREATE FUNCTION maxscore(@no char(5)) --建立函数maxscore RETURNS @st TABLE --返回表@st。下面定义其表结构 (

sno char(5), cno char (5), maxs float ) AS

BEGIN

INSERT @st(sno,cno,maxs) --向@st中插入满足条件的记录 SELECT sno,cno,degree FROM score

WHERE cno=@no AND degree=(SELECT MAX(degree) FROM score WHERE cno=@no) RETURN END GO

SELECT * FROM maxscore('3-105') GO

程序执行结果如下:

上机实验题4参考答案

在上机实验题3建立的factory数据库上,完成如下各题的程序,要求以文本格式显示结果。 (1)显示所有职工的年龄,并按职工号递增排序。 (2)求出各部门的党员人数。

第第91章章 T-SQL基础 网站与网页概述

5

(3)显示所有职工的姓名和2004年1月份的工资。 (4)显示所有职工的职工号、姓名和平均工资。 (5)显示所有职工的职工号、姓名、部门名和2004年2月份的工资,并按部门名的顺序排列。 (6)显示各部门名和该部门的所有职工平均工资。

(7)显示所有平均工资高于1200的部门名和对应的平均工资。

(8)显示所有职工的职工号、姓名和部门类型,其中财务部和人事部属于管理部门,市场部属于市场部门。

(9)若存在职工号为10的职工,则显示其工作部门名称,否则显示相应提示信息。 (10)求出男女职工的平均工资,若男职工平均工资高出女职工平均工资50%,则显示“男职工比女职工的工资高多了”的信息;若男职工平均工资与女职工平均工资比率在1.5~0.8之间,则显示“男职工跟女职工的工资差不多”的信息;否则显示“女职工比男职工的工资高多了”的信息。

操作过程

(1)对应的程序如下:

USE factory GO

SELECT 姓名,YEAR(GETDATE())-YEAR(出生日期) AS '年龄' FROM worker ORDER BY 职工号 GO

执行结果如下:

姓名年龄

---------- ----------- 孙华 56 陈涛 50 刘欣 56 李涵 43 王小燕 44 李艺 45 魏君 38 孙天奇 43 陈明 63 李华 52 余慧 28 欧阳少兵 37 程西 28 张旗 28 刘夫文 66

(2)对应的程序如下:

USE factory GO

SELECT depart.部门名,COUNT(*) AS '党员人数' FROM worker,depart

WHERE worker.党员否='是' AND worker.部门号=depart.部门号 GROUP BY depart.部门名 GO

执行结果如下:

部门名党员人数

---------------- ----------- 财务部 2 人事部 1 市场部 2

本文来源:https://www.bwwdw.com/article/845d.html

Top