数据库实验三四.docx
《数据库实验三四.docx》由会员分享,可在线阅读,更多相关《数据库实验三四.docx(12页珍藏版)》请在冰豆网上搜索。
![数据库实验三四.docx](https://file1.bdocx.com/fileroot1/2023-2/3/8e4a0ba7-7a7f-4133-a61b-9e19b73a8890/8e4a0ba7-7a7f-4133-a61b-9e19b73a88901.gif)
数据库实验三四
实验三、四SQL语言应用
一、实验目的:
熟练掌握基本表的定义、删除与修改,为后继学习作准备。
二、实验属性(验证性)
1、了解并掌握SQL查询分析器及企业管理器的使用;
2、掌握基本表的定义、删除与修改。
三、实验要求(预习、实验前、实验中、实验后等要求)
1.预习教材第三章,熟悉SQL语句。
2.熟悉.net、Java、PowerBuilder和Delphi开发环境。
3.能够熟练掌握.net、Java、PowerBuilder和Delphi环境下的数据库的编程。
4.掌握单表查询语句的一般格式。
;
5.掌握单表无条件、有条件查询及查询结果排序与分组。
6.掌握多表连接、嵌套和集合查询语句的一般格式及各种使用方法。
四、实验原理
SQL语言应用。
五、实验步骤:
(1) 启动Oracle的SQLDeveloper或者SQLPlus,或者SQLServer查询分析器;
(2) 对于Oracle11g的SQLPlus需要进行登录,对于Oracle11g的SQLDeveloper需要进行建立连接。
A、单表查询
1无条件查询
例2.1查询全体学生的详细记录。
Select*fromturing1.student;
例2.2查询全体学生的姓名(Sname)、学号(Sno)、所在系(Sdept)。
selectSname,Sno,Sdept
fromturing1.student;
例2.3查询全体学生的姓名(Sname)、出生年份及学号(Sno)。
例2.4查询全体学生的姓名、出生年份和学号,要求用小写字母表示学号中的字母。
例2.5查询选修了课程的学生学号。
selectsnofromturing1.sc;
2条件查询
例2.6查询数学系全体学生的学号(Sno)和姓名(Sname)。
例2.7查询所有年龄在18~22岁(包括18岁和22岁)之间的学生姓名(Sname)及年龄(Sage)。
selectsno,sage
fromturing1.student
wheresagebetween18and22;
例2.9查询年龄不在18-22岁之间的学生姓名(Sname)及年龄(Sage)。
例2.10查询自动化系、数学和计算机系学生的学号(Sno)、姓名(Sname)和性别(Ssex)。
例2.11查询既不是信息系、数学系、也不是计算机系的学生的姓名(Sname)和性别(Ssex)。
selectsname,ssex
fromturing1.student
wheresdeptnotin('电气学院','数理学院','计科系');
例2.12查询所有姓刘的学生的姓名(Sname)、学号(Sno)和性别(Ssex)。
例2.13查询姓“刘”且全名为4个汉字的学生的姓名(Sname)和所在系(Sdept)。
selectsname,sdept
fromturing1.student
wheresnamelike'刘______';
例2.14查询所有不姓刘的学生姓名(Sname)和年龄(Sage)。
例2.15查询课程名为“DB_设计”的课程号(Cno)和学分(Ccredit)。
selectcno,ccredit
fromturing1.course
wherecnamelike'数据库原理及应用';
例2.16查询以"DB_"开头,且倒数第2个汉字字符为“设”的课程的详细情况。
select*
fromturing1.course
wherecnamelike'DB\_%设_'escape'\';
例2.17假设某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。
试查询缺少成绩的学生的学号(Sno)和相应的课程号(Cno)。
例2.18查询所有有成绩的学生学号(Sno)和课程号(Cno)。
其命令为:
selectsno,cnofromsc
wheregradeisnotnull;
3查询结果排序
例2.19查询选修了*******号课程的学生的学号(Sno)和成绩(Grade),并按成绩降序排列。
selectsno,grade
fromturing1.sc
wherecno='0811024'
orderbygradedesc;
例2.20查询全体学生情况,查询结果按所在系的系名(Sdpet)升序排列,同一系中的学生按年龄(Sage)降序排列。
E、综合应用
例1、查询每个同学应该选修的课程门数及学分数。
例2、查询平均成绩大于学号'************'学生平均成绩的所有学生的姓名。
例4、查询每一位同学的平均成绩及选修课程的门数。
例5、查询李大鹏同学所属系的每一位同学的平均成绩及选修课程的门数。
例6、查询平均成绩大于60分的所有学生的平均成绩,要求打印出学生的“学号”、“姓名”和“平均成绩”,并按平均成绩降序排列。
例7、查询李大鹏同学所学课程门数及平均成绩(该题为例8做准备)。
例8、查询平均成绩大于李大鹏同学平均成绩的所有学生的学号、姓名和平均成绩。
例9、查询选修课程门数和平均成绩都大于李大鹏同学所选课程门数和平均成绩的所有的学生姓名。
例10、查询数据结构课程的成绩大于全班平均成绩的学生姓名。
例11、查询数据结构课程的成绩大于全班平均成绩的学生姓名、本人的数据结构成绩及全班的平均成绩。
例12、查询所有选修课程的成绩大于全班平均成绩的学生姓名、课程名、本课程成绩。
selectdistinctsname,grade,cname
fromturing.student,turing.course,turing.sc,(
selectavg(grade)asag
fromturing.sc,turing.course
whereo=o
groupbycname)temp
where(student.sno=sc.sno)
ando=o
and(grade>temp.ag)
orderbysname;
例13、查询计科系年龄最大的学生姓名。
例14、查询选修了计算机网络课程的学生姓名及该课程的成绩,要求分别使用外连接、左外连接、右外连接、内连接、嵌套查询、复合条件查询实现。
例15、查询选修了计算机网络课程这些学生的选课门数及平均成绩。
例16、查询选修了计算机网络课程且成绩高于该课程平均成绩的学生姓名及成绩。
例17、查询选修了计算机网络课程且成绩高于该课程平均成绩的学生姓名、计算机网络课程成绩、计算机网络课程平均成绩。
selectdistinctsname,grade,temp.ag
fromturing.student,turing.sc,turing.course,
(selectavg(grade)asag
fromturing.sc,turing.course
whereo=o
andcname='计算机网络'
groupbycname)temp
wherestudent.sno=sc.sno
ando=o
andcname='计算机网络'
and(grade>temp.ag)
orderbygrade,sname;
例18、查询没有选修了计算机网络课程的学生的学号及姓名。
例19、查询选修了全部课程的学生的学号及姓名。