实验任务

  • 流程控制语句
    • 查询学号为200102的学生的各科成绩,如果这个学生没选课,就显示“此学生没选课”;如果没有这个学生,就显示“没有此学生”
    • 查询所有学生的考试等级,包括学生号,课程号和成绩等级(A、B、C、D、E)。([90,100]—A, [80,90)—B,[70,80)—C, [70,80)—C, [60,70)—D, [0,60)—E)
  • 自定以函数
    • 定义一个函数,求x学年y门课程的选修学生人数,然后,调用此函数。
    • 定义一个函数,查询某个班各个学生的平均成绩。然后,调用此函数。
  • 游标:声明一个游标,查询student表中所有男生的信息,并读取数据。要求:
    • 读取最后一条记录
    • 读取第一条记录
    • 读取第3条记录
    • 读取当前记录指针位置后第2条记录

实验过程

Step1:查询学号为200102的学生的各科成绩,如果这个学生没有选课,就显示“此学生没有选课”;如果没有这个学生,就显示“没有此学生”

IF EXISTS (SELECT * FROM stu_choose_lesson WHERE studentNum = '200102')
	SELECT * FROM stu_choose_lesson WHERE studentNum = '200102'
ELSE 
	IF EXISTS (SELECT * FROM student WHERE studentNum = '200102')
		PRINT '此学生没有选课'
	ELSE
		PRINT '没有此学生'

Step2:查询所有学生的考试等级,包括学生号,课程号和成绩等级(A、B、C、D、E)

SELECT studentNum, lessonNum, score_level = 
	CASE 
		WHEN score >= 90 THEN 'A'
		WHEN score >= 80 THEN 'B'
		WHEN score >= 70 THEN 'C'
		WHEN score >= 60 THEN 'D'
		WHEN score < 60  THEN 'E'
	END
FROM stu_choose_lesson

Step3:定义一个函数,求x学年y门课程的选修学生人数,然后,调用此函数

GO
CREATE FUNCTION chooseNum (@x date, @y varchar(8)) 
	RETURNS int AS BEGIN
	DECLARE @cnt int 
	SET @cnt = (SELECT COUNT(*) FROM lesson le, stu_choose_lesson sc
		WHERE sc.lessonNum= @y AND le.lessonNum = sc.lessonNum AND le.year = @x)
	RETURN @cnt
	END
GO

DECLARE @y date
DECLARE @x varchar(8)
SET @y = '2013'
SET @x = 1
SELECT dbo.chooseNum(@y, @x) AS 'y学年x门课被选次数'

Step4:定义一个函数,查询某个班各个学生的平均成绩。然后,调用此函数

GO 
CREATE FUNCTION stu_avg_score(@classNum tinyint)
	RETURNS table AS
	RETURN (SELECT st.studentNum, AVG(score) AS 平均成绩 FROM stu_choose_lesson sc, student st
		WHERE st.class = @classNum AND st.studentNum = sc.studentNum
		GROUP BY st.studentNum) 
GO

SELECT * FROM student

DECLARE @classNum  tinyint
SET @classNum = 1
SELECT * FROM dbo.stu_avg_score(@classNum)

Step5:声明一个游标,查询student表中所有男生的信息,并读取数据。

DECLARE diy_cursor CURSOR STATIC FOR
	SELECT * FROM student WHERE sex = '男'
OPEN diy_cursor

Step6:读取最后一条记录

FETCH LAST FROM diy_cursor 

Step7:读取第一条记录

FETCH FIRST FROM diy_cursor  

Step8:读取第三条记录

Step9:读取当前记录指针位置后两条记录

第二次读取游标的时候,结果为空,因为游标中仅有四条记录,游标再往后移动时会指向一个空的集合

实验七Over


立志成为一名攻城狮