数据库实验二.docx
《数据库实验二.docx》由会员分享,可在线阅读,更多相关《数据库实验二.docx(22页珍藏版)》请在冰豆网上搜索。
数据库实验二
任课教师:
《数据库原理及应用》
实
验
报
告
学号:
姓名:
班级:
实验二数据库的简单查询和高级查询
一、实验目的:
本实验的目的是使学生掌握SQLServer查询分析器的使用方法,加深对SQL和SQL语言的查询语句的理解。
熟练掌握简单表的数据查询、数据排序和数据连接查询的操作方法,加深SQL语言的嵌套查询语句的理解,熟练掌握数据查询中的分组、统计、计算和集合的操作方法。
二、实验内容
(一)简单查询操作。
该实验包括投影、选择条件表达,数据排序,使用临时表等。
具体完成以下题目,将它们转换为SQL语句表示,在学生选课数据库中实现其数据查询操作。
1.求数学系学生的学号和姓名
2.求选修了课程的学生学号
3.求选修课程号为‘1’的学生号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同按学号的升序排列。
4.求选修课程号为‘1’且成绩在80~90之间的学生学号和成绩,并将成绩乘以输出。
5.求数学系或计算机系姓张的学生的信息。
6.求缺少了成绩的学生的学号和课程号
(二)连接查询操作。
该实验包括等值连接、自然连接、求笛卡儿积、一般连接、外连接、内连接、左连接、右连接和自连接等。
1.查询每个学生的情况以及他所选修的课程
2.求学生的学号、姓名、选修的课程及成绩
3.求选修课程号为‘1’且成绩在90以上的学生学号、姓名和成绩
4.查询每一门课程的间接先行课(即先行课的先行课)
(三)嵌套查询操作:
在SQLServer查询分析器中使用IN、比较符、ANY或ALL和EXISTS操作符进行嵌套查询操作。
具体完成以下各题。
将它们用SQL语句表示,在学生选课中实现其数据嵌套查询操作。
1.求选修了高等数学的学号和姓名
2.求‘1’课程的成绩高于刘晨的学生学号和成绩
3.求其他系中比计算机系某一学生年龄小的学生(即年龄小于计算机系年龄最大者的学生)
4.求其他系中比计算机系学生年龄都小的学生
5.求选修了‘2’课程的学生姓名
6.求没有选修‘2’课程的学生姓名
7.查询选修了全部课程的学生姓名
8.求至少选修了学号为“95002”的学生所选修全部课程的学生学号和姓名
(四)集合查询和统计查询:
1)分组查询实验。
该实验包括分组条件表达、选择组条件表达的方法。
2)使用函数查询的实验。
该实验包括统计函数和分组统计函数的使用方法。
3)集合查询实验。
该实验并操作UNION、交操作INTERSECT和差操作MINUS的实现方法。
具体完成以下例题,将它们用SQL语句表示,在学生选课中实现其数据查询操作。
1.求学生的总人数
2.求选修了课程的学生人数
3.求课程和选修了该课程的学生人数
4.求选修超过3门课的学生学号
5.查询计算机科学系的学生及年龄不大于19岁的学生
6.查询计算机科学系的学生与年龄不大于19岁的学生的交集
7.查询计算机科学系的学生与年龄不大于19岁的学生的差集
8.查询选修课程‘1’的学生集合与选修课程‘2’的学生集合的交集
9.查询选修课程‘1’的学生集合与选修课程‘2’的学生集合的差集
三、实验方法
将查询需求用SQL语言表示;在SQLServer查询分析器的输入区中输入SQL查询语句;设置查询分析器的结果区为StandardExecute(标准执行)或ExecutetoGrid(网格执行)方式;发布执行命令,并在结果区中查看查询结果;如果结果不正确,要进行修改,直到正确为止。
所使用的学生管理库中的三张表为:
(1)STUDENT(学生信息表)
SNO(学号)
SNAME(姓名)
SEX(性别)
SAGE(年龄)
SDEPT(所在系)
95001
李勇
男
20
CS
95002
刘晨
女
19
IS
95003
王名
女
18
MA
95004
张立
男
19
IS
95005
李明
男
22
CS
95006
张小梅
女
23
IS
95007
封晓文
女
20
MA
(2)COURSE(课程表)
CNO(课程号)
CNAME(课程名)
CPNO(先行课)
CCREDIT(学分)
1
数据库
5
4
2
数学
2
3
信息系统
1
4
4
操作系统
6
3
5
数据结构
7
4
6
数据处理
2
7
PASCAL语言
6
4
(3)SC(选修表)
SNO(学号)
CNO(课程号)
Grade(成绩)
95001
1
92
95001
2
85
95001
3
88
95002
2
90
95002
3
80
95003
1
78
95003
2
80
95004
1
90
95004
4
60
95005
1
80
95005
3
89
95006
3
80
95007
4
65
四、实验结果与分析(SQL代码及查询结果截图)
源代码:
SELECTSNO,SNAME
FROMSTUDENT
WHERESDEPT='MA';
SELECTDISTINCTSNO
FROMSC;
SELECTSNO,Grade
FROMSC
WHERECNO='1'
ORDERBYGradeDESC,SNO;
SELECTSNO,Grade*
FROMSC
WHERECNO='1'ANDGradeBETWEEN80AND90
SELECT*
FROMSTUDENT
WHERESDEPTIN('CS','MA')ANDSNAMELIKE'张%';
SELECTSNO,CNO
FROMSC
WHEREGradeISNULL;
SELECTSTUDENT.*,SC.*
FROMSTUDENT,SC
WHERE=;
SELECT,SNAME,,Grade
FROMSTUDENT,SC
WHERE=;
SELECT,SNAME,Grade
FROMSTUDENT,SC
WHERE=AND
='1'AND>90;
SELECT,
FROMCOURSEFIRST,COURSESECOND
WHERE=;
SELECT,SNAME
FROMSTUDENT,SC,COURSE
WHERE=AND
=AND
='数学';
SELECTSNAME,SAGE
FROMSTUDENT
WHERESAGEFROMSTUDENT
WHERESDEPT='CS')
ANDSDEPT<>'CS';
SELECTSNAME,SAGE
FROMSTUDENT
WHERESAGEFROMSTUDENT
WHERESDEPT='CS')
ANDSDEPT<>'CS';
SELECTSNAME
FROMSTUDENT
WHEREEXISTS
(SELECT*
FROMSC
WHERESNO=ANDCNO=2);
SELECTSNAME
FROMSTUDENT
WHERENOTEXISTS
(SELECT*
FROMSC
WHERESNO=ANDCNO=2);
SELECTSNAME
FROMSTUDENT
WHERENOTEXISTS
(SELECT*
FROMCOURSE
WHERENOTEXISTS
(SELECT*
FROMSC
WHERESNO=
ANDCNO=);
截图: