当前位置:文档之家› 实验三:数据查询实验

实验三:数据查询实验

实验三:数据查询实验一、实验目的了解在企业管理器或查询分析器中执行数据查询的方法;掌握SQL Server Query Analyzer中简单查询、连接查询、嵌套查询操作方法。

二、实验内容1、使用企业管理器进行查询(验证性,了解部分)(1)查询数据表的全部数据在企业管理器中,选择需要查询数据的表,用鼠标右键单击该表,从弹出的快捷菜单中选择“打开表”命令,这时将显示该表的全部数据。

(2)使用SELECT语句查询数据表的数据在企业管理器中,选择需要查询数据的表,用鼠标右键单击该表,从弹出的快捷菜单中选择“打开表”命令,在打开返回表内容的子窗口中,单击工具栏按钮“显示/隐藏SQL窗格”,把子窗口分为上下两部分,上面部分能输入不同的SQL命令。

执行时单击工具栏按钮“运行”即可。

(3)学习和使用QBE查询在企业管理器中,选择需要查询数据的表,用鼠标右键单击该表,从弹出的快捷菜单中选择“打开表”命令,在打开返回表内容的子窗口中,单击工具栏按钮“显示/隐藏条件窗格”,把子窗口分为上下两部分,上面部分能选择QBE查询条件,执行时单击工具栏按钮“运行”即可。

若单击工具栏按钮“显示/隐藏SQL窗格”,则在SQL窗格中会显示自动生成的对应SQL语句。

2、使用查询分析器进行查询(验证性)(1)查询Student表中所有学生的学号、姓名和性别。

SELECT Sno, Sname, SsexFROM Student(2)可以用“*”来选取数据表的全部列例如:查询Student表中所有学生的基本情况。

SELECT *FROM Student(3)在查询结果中增加计算列,还可修改数据列的显示名称。

例如:查询Student表中所有学生的学号、姓名、性别和出生年份。

SELECT Sno 学号, Sname 姓名, Ssex 性别, Year(GetDate()) - Sage 出生年份FROM Student(4)使用WHERE子句,可以选择满足条件的部分记录例如:查询成绩在85~90分之间的学生情况。

SELECT Sno, Cno, GradeFROM SCWHERE Grade >= 85 AND Grade <= 90(5)使用DISTINCT关键字,可以消除重复记录例如:查询有成绩的学生的学号。

SELECT DISTINCT SnoFROM SC(6)使用IN关键字,选择不连续条件的记录例如:查询学生成绩为80或85的学生的学号。

SELECT *FROM SCWHERE Grade IN (80, 85)(7)使用谓词LIKE和通配符“%”或“_”,实现模糊查询例如:查询姓“张”的学生的基本情况。

SELECT *FROM StudentWHERE Sname LIKE '张%'注意:“%”代表0个或多个字符,“_”代表一个字符。

有的书上说,一个汉字占两个字符,但这里一个汉字只占一个字符位置,这与系统的设置有关。

(8)使用ORDER BY子句,对查询结果进行排序例如:查询所有学生的2号课的成绩,并按成绩由高向低排序。

SELECT *FROM SCWHERE Cno =’ 2’ORDER BY Grade DESC(9)使用TOP关键字,选择查询结果的前几条记录例如:查询2号课成绩最高的学生记录。

SELECT TOP 1 *FROM SCWHERE Cno = '2'ORDER BY Grade DESC注意:如果2号课成绩存在并列最高,则使用下面的SQL语句。

SELECT TOP 1 WITH TIES *FROM SCWHERE Cno = '2'ORDER BY Grade DESC(10)用WHERE子句指定连接条件例如:查询所有有2号课程成绩的学生的学号、姓名和成绩。

SELECT Student.Sno, Sname, GradeFROM Student, SCWHERE Student.Sno = SC.Sno AND Cno = '2'(11)将查询结果存储到表中例如:将总分在200分以上的学生的情况(学号、姓名、性别、总成绩)存储到数据表GradeList中,假设数据表GradeList不存在。

SELECT A.Sno, Sname, Ssex, SUM(Grade) AS sumGradeINTO GradeListFROM Student A, SCWHERE A.Sno = SC.SnoGROUP BY A.Sno, Sname, SsexHA VING (SUM(SC.Grade) >= 200)该语句执行成功后,在企业管理器中可以看到已经创建的数据表GradeList,并将查询结果是存储在该表中了。

(12)将查询结果保存到变量中例如:查询学号为200215121的学生1号课的成绩,将其保存到变量Grade中。

DECLARE @Grade INT --定义变量SELECT @Grade = Grade --给变量赋值FROM SCWHERE Sno = '200215121'PRINT @Grade --显示变量的值注意:要将查询结果保存到变量中,只能将查询结果集中第一条记录的值赋给变量。

3、分析设计部分在学生选课库中实现下列数据查询操作,并写出相应的SQL脚本。

(1)求计算机系学生的学号和姓名(2)求选修3号课程的学生学号和成绩,结果按成绩降序排列,如成绩同按学号升序排列(3)求选修课程2成绩在80-90之间的学生学号和成绩,并将成绩乘以0.8输出(4)求数学或计算机系姓’张’的学生的信息(5)求缺少了成绩的学生的学号和课程号(6)查询各门课程及相应的选课人数。

(7)查询总成绩在200分以上的学生的学号、总成绩和平均成绩(8)在FROM子句中用INNER JOIN连接符指定连接条件查询所有有2号课程成绩的学生的学号、姓名和成绩。

(9)查询学生中年龄相同的学生情况(使用自连接查询)。

(10)查询所有学生的总成绩(包括没有成绩的学生)、学号和姓名(外部连接查询)。

(11)查询某课程成绩在90分以上的学生的学号和姓名(使用谓词IN连接子查询)。

(12)查询有课程成绩的学生的学号和姓名(使用谓词EXISTS连接子查询)。

(13)求没有选修2号课程的学生姓名;(14)求选修了1号课程的学生中,成绩高于张三选修1号课程的学生学号和成绩;(15)列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩。

三、实验学时2学时四、实验设备与环境Windows 2003平台+ SQL Server 2008系统--(1)求计算机系学生的学号和姓名select Sno,Snamefrom studentwhere Sdept='CS';--(2)求选修3号课程的学生学号和成绩,结果按成绩降序排列,如成绩同按学号升序排列select Sno,Gradefrom SCwhere Cno='3'order by Grade desc,Sno ASC;--(3)求选修课程2成绩在80—90之间的学生学号和成绩,并将成绩乘以0.8输出select Sno,Grade*0.8 Gradefrom SCwhere Cno='2' and Grade between 80 and 90;--(4)求数学或计算机系姓“张”的学生信息select *from studentwhere Sname like '张%' and Sdept in('MA','CS') ;--(5)求缺少了成绩的学生的学号和课程号select Sno ,Cnofrom SCwhere Grade is null;--(6)查询各门课程及相应的选课人数select o,ame,count(Sc.Sno) 选课人数from Courseleft join SC on o=ogroup by o ,ame;--(7)查询总成绩在200分以上的学生的学号、总成绩和平均成绩select Sno,SUM(Grade)总成绩,A VG(Grade) 平均成绩from SCgroup by Snohaving SUM(Grade)>200;--(8)在form子句中用inner join连接符指定连接条件查询所有有2号课程成绩的学生的学号、姓名和成绩select student.Sno,student.Sname,Gradefrom student inner join SC on student.Sno=SC.Snowhere o='2'--(9)查询学生中年龄相同的学生情况(使用自连接查询)select distinct a.Sno,a.Sname,a.Sagefrom student as a,student as bwhere a.Sage=b.Sage and a.Sno<>b.Sno--(10)查询所有学生的总成绩(包括没有成绩的学生)、学号和姓名(外部连接查询)select Student.Sno,Student.Sname,SUM(Grade)总成绩from Student left join SC on Student.Sno=SC.Snogroup by Student.Sno,Student.Sname--(11)查询某课程成绩在90分以上的学生的学号和姓名(使用谓词IN 连接子查询)select student.Sno,student.Snamefrom Student,SCwhere Student.Sno=SC.Sno and Grade IN(select Gradefrom SCwhere Grade>=90)--(12)查询有课程成绩的学生的学号和姓名(使用谓词EXISTS连接子查询)select student.Sno,student.Snamefrom Studentwhere exists(select *from SCwhere SC.Sno=Student.Sno and Grade is not null)--(13)求没有选修2号课程的学生姓名select Snamefrom studentwhere not exists(select *from SCwhere Sno=student.Sno and Cno='2')--(14)求选修了1号课程的学生中,成绩高于张三选修1号课程的学生学号和成绩select Sno,Gradefrom Scwhere Cno=1and Grade>( select Gradefrom Scwhere Cno=1and Sno=( select Snofrom studentwhere Sname='张三'))--(15).列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩select SC1.Sno,'1'=SC1.Grade,'2'=SC2.Gradefrom SC SC1,SC SC2where o='1'and o='2'and SC1.Sno=SC2.Snoand SC1.Grade>SC2.Grade。

相关主题