当前位置:首页 > 00山东科技大学数据库课后习题答案+习题
第五章 SQL Server 2005数据查询
一单元 习题参考答案
1.说明SELECT语句的基本语法结构。 答:
SELECT语句的基本语法格式为: SELECT [ALL|DISTINCT] select_list [ INTO new_table_name ] FROM table_source [ WHERE search_condition ] [ GROUP BY group_by_expression ] [ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]
上面格式中[ ]内的部分为可选项且大写内容为关键字,下面对各种参数进行详细说明。 其中:
? [ALL|DISTINCT] 指明查询结果集的内容。使用关键字ALL,则查询结果集是表的
全部记录;使用关键字DISTINCT,查询结果是不包含重复行的记录集。默认为ALL关键字。
? select_list 指明要查询的字段列表。列表可以包括若干个列名或表达式,列名或表
达式之间用逗号隔开,用来指示应该返回哪些数据。表达式可以是列名、函数或常数的列表。如果用“*”代替字段列表,则将返回指定数据表中的全部数据信息。 new_table_name为新表? INTO new_table_name 指定用查询的结果创建成一个新表。
名称。
? FROM table_source 指定所查询的表或视图的名称。 ? WHERE search_condition 指明查询所要满足的条件。
? GROUP BY group_by_expression 根据指定列中的值对结果集进行分组。 WHERE或GROUP BY子句创建的中间结? HAVING search_condition 对用FROM、
果集进行行的筛选。它通常与GROUP BY子句一起使用。
[ ORDER BY order_expression [ ASC | DESC ] ] 对查询结果集中的行重新排序。ASC 和DESC关键字分别用于指定按升序或降序排序。如果省略ASC或DESC,则系统默认为升序ASC排列。
2.使用SELECT语句时,在选择列表中更改列标题有哪三种格式? 答:
更改列标题的3种方法如下: ? 列标题=列名 ? 列名 列标题 ? 列名 AS 列标题
3.什么是基本连接?如何使用基本连接?
答:
所谓基本连接是指通过SELECT语句的FROM子句和WHERE子句实现的最简单的连接,其连接方式为,在FROM子句后面,将不同的表用逗号隔开。如果通过FROM子句建立连接,查询结果集将是由连接表生成的一个笛卡尔乘积表,即由连接中的一个基表的每一行与另一基表的每一行连接在一起所生成的表,该表的行数是两个连接基表行数的乘积。 4.列举实例介绍左外连接、右外连接以及全连接的异同。 答:略
5.列举实例介绍如何使用嵌套子查询。 答:略
6.根据数据库Stud里的七个表:学生基本信息表(Student)、教师基本信息表(Teacher)、学院表(Colleage)、系部表(Department)、班级表(Class)、课程信息表(Course)、成绩表(Result),使用SQL语句,完成下列操作。
(1)在学生基本信息表中查询学生的学号、姓名、性别和地址等信息。 在查询编辑器中运行如下命令:
USE Stud
SELECT StuID,StuName,Stusex,StuAddr FROM Student (2)从学生基本信息表中查询学生来自哪几个地区。 在查询编辑器中运行如下命令:
USE Stud
SELECT DISTINCT StuAddr FROM Student (3)从学生基本信息表中只显示5%的信息。 在查询编辑器中运行如下命令:
USE Stud
SELECT TOP 5 PERCENT * FROM Student
(4)从相关表中查询每一位学生的学号、姓名、课程名称、成绩。
从各表数据可知,“学号”存在于“学生基本信息表”和“成绩表”,“姓名”存在于“学生基本信息表”,“课程名称”存在于“课程信息表”,“成绩”存在于“成绩表”,要实现本例查询,则需要对“学生基本信息表”、“课程信息表”、“成绩表”进行多表检索,也可以来自不同的数据库。在查询编辑器中运行如下命令:
USE Stud
SELECT Student.,StuName,Course.Couname,Result.result FROM Student,Course,Result
WHERE Student.StuID= Result.StuID AND Course.CouID=Result.CouID (5)在课程信息表中查找“C程序设计”课程的任课老师的编号。 在查询编辑器中运行如下命令:
USE Stud
SELECT TeaID FROM Course WHERE CouName='C程序设计' (6)查询1987年1月1日以后出生的女生基本信息。 在查询编辑器中运行如下命令:
USE Stud
SELECT * FROM Student
WHERE StuBir>'1987-01-01' AND 性别='女' (7)查询每位同学的课程门数、总成绩、平均成绩。
查询每位学生的课程成绩情况,实际上就是按照“学号”列分类统计,可使用GROUP BY 学号子句,统计课程门数、总成绩、平均成绩分别可以使用聚合函数COUNT(CouID)、SUM(result)、AVG(result)。 在查询编辑器中运行如下命令:
USE Stud
SELECT StuID,COUNT(CouID) AS 课程门数,SUM(result) AS 总成绩, AVG(result) AS 平均成绩 FROM Result GROUP BY StuID
(8)显示平均成绩大于等于80分以上的学生情况。
此例的限定条件是AVG(result)>=80,只能使用HAVING子句,如果使用WHERE子句限定条件,则系统会显示错误信息。在查询编辑器中运行如下命令:
USE Stud
SELECT StuID,AVG(result) AS 平均成绩 FROM Result GROUP BY StuID HAVING AVG(result)>=80
(9)按学号显示学生成绩,并计算每人的平均成绩和总成绩。
此例要求按人对课程及成绩进行分组显示,并计算每人的平均成绩、总成绩。则显示成绩应按学号分类,分组计算平均成绩、总成绩的语句为COMPUTE AVG(result),SUM(result) BY StuID,使用COMPUTE BY子句首先要用ORDER BY子句对要分组的学号列排序,即ORDER BY StuID。
在查询编辑器中运行如下命令:
USE Stud
SELECT * FROM Result ORDER BY StuID
COMPUTE AVG(result),SUM(result) BY StuID
(10)从系部表中检索系部名称,从班级表中检索班级名称。
从系部表中检索系部名称的SELECT语句为:SELECT DepName FROM Department,从班级表中检索班级名称的SELECT语句为:SELECT ClaName FROM Class,合并这两个查询结果,需要使用UNION运算符。 在查询编辑器中运行如下命令:
USE Stud
SELECT DepName FROM Department UNION
SELECT ClaName FROM Class (11)查询不及格学生成绩信息。
查询不及格学生成绩信息,也就是查询0—59之间的学生成绩,可用BETWEEN关键字表示为:WHERE result BETWEEN 0 AND 59。 在查询编辑器中运行如下命令:
USE Stud
SELECT * FROM Result
WHERE result BETWEEN 0 AND 59
(12)查询课程编号为11001、12001、12006、12011的课程编号、课程名称、任课教师和学时数。
课程编号为11001、12001、12006、12011可以写成:
WHERE CouID IN('11001','12001','12006','12011'),也可写成WHERE CouID=?11001? ORCouID=?12001? OR CouID=?12006? OR CouID=?12011? 。显然,使用IN关键字进行查询比使用3个OR运算符进行查询更为简单,而且易于理解和阅读。 在查询编辑器中运行如下命令:
USE Stud
SELECT CouID,CouName,TeaID,Couper FROM Course WHERE CouID IN('11001','12001','12006','12011') (13)查询所有姓“刘”的学生基本信息。
匹配所有姓刘的学生可以表示为:姓名 LIKE ?刘%?。在查询编辑器中运行如下命令:
USE Stud
SELECT * FROM Student WHERE 姓名 LIKE '刘%'
(14)查询包含“设计”两字的课程信息。
匹配“设计”两字的课程名称可以表示为:CouName LIKE ?%设计%?。 在查询编辑器中运行如下命令:
USE Stud
SELECT * FROM Course
WHERE CouName LIKE '%设计%'
(15)查询课程信息表中未确定教师的课程信息。
课程信息表中教师未定的表达式可以表示为:WHERE TeaID IS NULL。 在查询编辑器中运行如下命令:
USE Stud
SELECT * FROM Course WHERE TeaID IS NULL
(16)统计成绩表中各门课程的学生人数、总成绩、平均成绩。
统计成绩表中各门课程信息,需要将学生成绩按课程编号分组GROUP BY CouID,统计学生人数、总成绩、平均成绩分别需要使用聚合函数COUNT(StuID)、SUM(result)、AVG(result)。因为新生成的学生人数、总成绩、平均成绩三列没有列名,所以可使用AS子句实现。 在查询编辑器中运行如下命令:
USE Stud
共分享92篇相关文档