《数据库系统概论》实验报告书 安徽工业大学计算机科学与技术学院
[ 实验要求 ]
对数据库表进行各种查询操作。 [ 实验方法 ]
① 将实验需求用SQL语句表示; ② 执行SQL语句;
③ 查看执行结果,如果结果不正确,进行修改,直到正确为止。
[ 实验总结 ]
为方便验证某些语句的正确性,在Student表中插入一个有同龄,为选课的记录: insert into Student values('97007','钱龙','MA','02',19,'女'); ① SQL语句以及执行结果;
例3-1: (选择表中的若干列) 求全体学生的学号、姓名、性别和年龄。 select SNO,SNAME,SSEX,SAGE from Student;
例3-2: (不选择重复行) 求选修了课程的学生学号。 select distinct(SNO) from Score;
例3-3: (选择表中的所有列) 求全体学生的详细信息。 select * from Student;
15/19
《数据库系统概论》实验报告书 安徽工业大学计算机科学与技术学院
例3-4: (使用表达式) 求全体学生的学号、姓名和出生年份。
select SNO,SNAME,to_char(sysdate,'yyyy')-SAGE as BIRTH from Student;
例3-5: (使用列的别名) 求学生的学号和出生年份,显示时使用别名“学号”和“出生年份”。 select SNO as 学号,to_char(sysdate,'yyyy')-SAGE as 出生年份 from Student;
例3-6: (比较大小条件) 求年龄大于19岁的学生的姓名和年龄。 select SNAME,SAGE from Student where SAGE > 19;
例3-7: (比较大小条件) 求计算机系或信息系年龄大于18岁的学生的姓名、系和年龄。 select SNAME,SDEPT,SAGE from Student where SDEPT='CS' or SDEPT='MA' and SAGE > 18;
16/19
《数据库系统概论》实验报告书 安徽工业大学计算机科学与技术学院
例3-8: (确定范围条件) 求年龄在19岁与22岁(含20岁和22岁)之间的学生的学号和年龄。 select SNO,SAGE from Student where SAGE between 20 and 22;
例3-9: (确定范围条件) 求年龄不在19岁与22岁之间的学生的学号和年龄。 select SNO,SAGE from Student where SAGE not between 19 and 22;
例3-10:(确定集合条件) 求在下列各系的学生信息:数学系、计算机系。 select * from Student where SDEPT in ('CS','MA');
例3-11:(确定集合条件) 求不是数学系、计算机系的学生信息。 select * from Student where SDEPT not in('MA','CS');
例3-12:(匹配查询) 求姓名是以“李”打头的学生。 select * from Student where SNAME like '李%';
例3-13:(匹配查询) 求姓名中含有“志”的学生。 select * from Student where SNAME like '%志%';
17/19
《数据库系统概论》实验报告书 安徽工业大学计算机科学与技术学院
例3-14:(匹配查询) 求姓名长度至少是三个汉字且倒数第三个汉字必须是“马”的学生。 select * from Student where SNAME like '%马____';
例3-15:(匹配查询) 求选修课程001或003,成绩在80至90之间,学号为96xxx的学生的学号、课程号和成绩。
select SNO,CNO,SCORE from Score where CNO in('001','003') and SCORE between 80 and 90 and SNO like '96%';
例3-16:(匹配查询) 求课程名中包含 ’_’ 字符的课程号、课程名和学时数。 select * from Course where CNAME like '%\\_%' escape'\\';
例3-17:(涉及空值查询) 求缺少学习成绩的学生的学号和课程号。 select SNO,CNO from Score where SCORE is null;
例3-18:(控制行的显示顺序) 求选修003课程或004课程的学生的学号、课程号和分数,要求按课程号升序、分数降序的顺序显示结果。
select * from Score where CNO in('003','004') order by CNO asc,SCORE desc;
例3-19:(组函数) 求学生总人数。 select count(SNO) from Student;
例3-20:(组函数) 求选修了课程的学生人数。 select count(distinct SNO) from Score;
18/19
《数据库系统概论》实验报告书 安徽工业大学计算机科学与技术学院
例3-21:(组函数) 求计算机系学生的平均年龄。
select round(avg(SAGE),1) \平均年龄\
例3-22:(组函数) 求选修了课程001的最高、最低与平均成绩。
select max(SCORE) as \最高分\\最低分\\平均成绩\from Score where CNO = '001';
例3-23:(分组查询) 求各门课程的平均成绩与总成绩。
select CNO,avg(SCORE),sum(SCORE) from Score group by CNO;
例3-24:(分组查询) 求各系、各班级的人数和平均年龄。
select SDEPT,SCLASS,count(SNO) \人数\平均年龄\SDEPT,SCLASS;
例3-25:(分组查询) 输入以下查询语句并执行,观察出现的其结果并分析其原因。 SELECT SNAME,SDEPT,COUNT(*)FROM STUDENT WHERE SDEPT=’CS’ GROUP BY SDEPT;
有中文字符,改掉后执行:
原因是SNAME不应该被选择,SNAME的之不唯一,参与聚合函数运算时会发生冲突。
例3-26:(分组查询) 分析以下语句为什么会出现错误。并给出正确的查询语句。 SELECT SAGE FROM STUDENT GROUP BY SNO;
19/19