数据库原理及应用 | 您所在的位置:网站首页 › 键盘操作的基本指法有哪些图片 › 数据库原理及应用 |
实验二 数据库的基本查询和高级查询
一、实验目的:
掌握SQL程序设计基本规范,熟练运用SQL语言实现数据基本查询,包括单表查询、分组统计查询和连接查询。掌握SQL嵌套查询和集合查询等各种高级查询的设计方法等,加深SQL语言的嵌套查询语句的理解,熟练掌握数据查询中的分组、统计、计算和集合的操作方法。
二、实验要求:
针对实验一设计的“学生课程”数据库设计各种单表查询SQL语句、分组统计查询语句;设计单个表针对自身的连接查询,设计多个表的连接查询。理解和掌握SQL查询语句各个子句的特点和作用,按照SQL程序设计规范写出具体的SQL查询语句,并调试通过。正确分析用户查询要求,设计各种嵌套查询和集合查询。SQL程序设计规范包含SQL关键字大写、表名、属性名、存储过程名等标示符大小写混合、SQL程序书写缩进排列等编程规范。
三、实验重点和难点:
实验重点:
1)分组统计查询、单表自身连接查询、多表连接查询、嵌套查询。 实验难点: 区分元组过滤条件和分组过滤条件;确定连接属性,正确设计连接条件。相关子查询、多层EXIST嵌套查询。 四、实验内容:(P87-P113) (一)简单查询操作该实验包括投影、选择条件表达,数据排序,使用临时表等。 具体完成以下题目,将它们转换为SQL语句表示,在学生课程数据库中实现其数据查询操作。 例:(1)查询描述:查询所有学生的姓名与学号 SQL语句:select sno,sname from student 查询结果:截图或文本 题目: 1.求数学系学生的学号和姓名。 select Sno,Sname from student where Sdept='MA'; 2.求选修了课程的学生学号。 select distinct Sno from sc;(可将重复的合并成一行) 或者 select Sno from sc;
3.求选修课程号为‘1’的学生号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同按学号的升序排列。 select Sno,Grade from sc where Cno='1' order by Grade desc,Sno; 4.求选修课程号为‘1’且成绩在80~90之间的学生学号和成绩,并将成绩乘以0.8输出。 select Sno,Grade*0.8 from sc where Cno='1'and Grade between 80 and 90; 5.求数学系或计算机系姓“张”的学生的信息。 select * from student where Sdept in('MA','CS') and Sname like '张%'; 查询计算机科学系;
select * from student where Sdept in('MA','IS') and Sname like '张%'; 查询信息系; 6.求缺少了成绩的学生的学号和课程号。 select Sno,Cno from sc where grade is null; (二)连接查询操作。 该实验包括等值连接、自然连接、求笛卡儿积、一般连接、外连接、内连接、左连接、右连接和自连接等。 题目: 1.查询每个学生的情况以及他所选修的课程。 select student.*,Cname from student,sc,course where student.Sno=sc.Sno and sc.Cno=course.Cno;
2.求学生的学号、姓名、选修的课程及成绩。 select student.Sno,Sname,Cname,Grade from student,sc,course where student.Sno=sc.Sno and sc.Cno=course.Cno; 3.求选修课程号为‘1’且成绩在90以上的学生学号、姓名和成绩。 select student.Sno,Sname,Grade from student,sc where student.Sno=sc.Sno and sc.Cno='1' and sc.Grade>90; 4.查询每一门课程的间接先行课(即先行课的先行课)。 select first.Cno,second.Cpno from course first,course second where first.Cpno=second.Cno; (三)嵌套查询操作: 该实验包括在SQL Server查询分析器中使用IN、比较符、ANY或ALL和EXISTS操作符进行嵌套查询操作。具体完成以下各题。将它们用SQL语句表示,在学生选课中实现其数据嵌套查询操作。 题目: 1.求选修了高等数学的学号和姓名。 select Sno,Sname from student where Sno in (select Sno from sc where Cno in (select Cno from course where Cname='数学' ) ); 或者 select student.Sno,Sname from student,sc,course where student.Sno=sc.Sno and sc.Cno=course.Cno and Cname='数学'; 2.求‘2’课程的成绩高于刘晨的学生学号和成绩。 select Sno,Grade from sc where Grade> (select Grade from sc where Sno= (select Sno from student where Sname='刘晨') and Cno='2' ) and Cno='2';
3.求其他系中比计算机系某一学生年龄小的学生(即年龄小于计算机系年龄最大者的学生)。 select * from student where Sage=确认结果是否正确) 5.查询计算机科学系的学生及年龄不大于19岁的学生。 select * from student where Sdept='CS' union select * from student where Sage |
CopyRight 2018-2019 实验室设备网 版权所有 |