数据库实验2
第1关:查询所有列
实验要求
查询课程表的全部信息。
course(课程表)
cno(课程号) | cname(课程名) | credit(学分) | hours(学时) | examination(考核方式) |
---|---|---|---|---|
G001 | 线性代数 | 3 | 48 | 考试 |
R003 | 数据结构 | 3 | 48 | 考试 |
R009 | 离散数学 | 3 | 48 | 考试 |
S023 | 嵌入式系统与编程实验 | 1 | 32 | 考察 |
G012 | 大学物理 | 4 | 64 | 考察 |
代码
---------- BEGIN ----------
SELECT * FROM course;
---------- END ----------
第2关:查询选定列
实验要求
查询各位教师的工号、姓名和性别。
teacher(教师表)
tno(工号) | tname(姓名) | sex(性别) | title(职称) | birthday(出生日期) |
---|---|---|---|---|
0014 | 李欣 | 男 | 教授 | 1969/7/25 |
0078 | 张云 | 女 | 副教授 | 1975/11/25 |
0118 | 王立 | 男 | 高级工程师 | 1985/4/28 |
0193 | 赵玲 | 女 | 讲师 | 1992/9/26 |
0213 | 杨梅 | 女 | 副教授 | 1986/6/7 |
0030 | 覃刚 | 男 | 副教授 | 1980/2/15 |
代码
---------- BEGIN ----------
SELECT tno,tname,sex FROM teacher;
---------- END ----------
第3关:去重查询
通过班级表查询数据库中有哪些学院。
class(班级表)
gno(班级号) | gname(班级名) | grade(年级) | dept(学院) | gnum(班级人数) |
---|---|---|---|---|
0211801 | 软件18级1班 | 18级 | 软件 | 37 |
0211903 | 软件19级3班 | 19级 | 软件 | 38 |
0131901 | 机械19级1班 | 19级 | 机械 | 37 |
代码
---------- BEGIN ----------
SELECT DISTINCT dept FROM class;
---------- END ----------
第4关:比较大小
实验要求
查询职称为副教授的教师的工号和姓名。
teacher(教师表)
tno(工号) | tname(姓名) | sex(性别) | title(职称) | birthday(出生日期) |
---|---|---|---|---|
0014 | 李欣 | 男 | 教授 | 1969/7/25 |
0078 | 张云 | 女 | 副教授 | 1975/11/25 |
0118 | 王立 | 男 | 高级工程师 | 1985/4/28 |
0193 | 赵玲 | 女 | 讲师 | 1992/9/26 |
0213 | 杨梅 | 女 | 副教授 | 1986/6/7 |
0030 | 覃刚 | 男 | 副教授 | 1980/2/15 |
代码
---------- BEGIN ----------
SELECT tno,tname FROM teacher WHERE title = '副教授';
---------- END ----------
第5关:多重条件
实验要求
查询1980年1月1日之后出生的女教师信息。
teacher(教师表)
tno(工号) | tname(姓名) | sex(性别) | title(职称) | birthday(出生日期) |
---|---|---|---|---|
0014 | 李欣 | 男 | 教授 | 1969/7/25 |
0078 | 张云 | 女 | 副教授 | 1975/11/25 |
0118 | 王立 | 男 | 高级工程师 | 1985/4/28 |
0193 | 赵玲 | 女 | 讲师 | 1992/9/26 |
0213 | 杨梅 | 女 | 副教授 | 1986/6/7 |
0030 | 覃刚 | 男 | 副教授 | 1980/2/15 |
代码
---------- BEGIN ----------
SELECT * FROM teacher WHERE birthday >= 1980-01-01 AND sex = '女';
---------- END ----------
第6关:确定范围
实验要求
查询 1970年 - 1980年 之间出生的教师信息。
teacher(教师表)
tno(工号) | tname(姓名) | sex(性别) | title(职称) | birthday(出生日期) |
---|---|---|---|---|
0014 | 李欣 | 男 | 教授 | 1969/7/25 |
0078 | 张云 | 女 | 副教授 | 1975/11/25 |
0118 | 王立 | 男 | 高级工程师 | 1985/4/28 |
0193 | 赵玲 | 女 | 讲师 | 1992/9/26 |
0213 | 杨梅 | 女 | 副教授 | 1986/6/7 |
0030 | 覃刚 | 男 | 副教授 | 1980/2/15 |
代码
---------- BEGIN ----------
SELECT * FROM teacher WHERE EXTRACT(YEAR FROM birthday) BETWEEN 1970 AND 1980;
---------- END ----------
第7关:确定集合
实验要求
查询17级和19级的班级信息。
class(班级表)
gno(班级号) | gname(班级名) | grade(年级) | dept(学院) | gnum(班级人数) |
---|---|---|---|---|
0211801 | 软件18级1班 | 18级 | 软件 | 37 |
0211903 | 软件19级3班 | 19级 | 软件 | 38 |
0131901 | 机械19级1班 | 19级 | 机械 | 37 |
代码
---------- BEGIN ----------
SELECT * FROM class WHERE grade IN('17级','19级');
---------- END ----------
第8关:模糊查询
实验要求
查询姓杨的老师的工号、姓名和职称。
teacher(教师表)
tno(工号) | tname(姓名) | sex(性别) | title(职称) | birthday(出生日期) |
---|---|---|---|---|
0014 | 李欣 | 男 | 教授 | 1969/7/25 |
0078 | 张云 | 女 | 副教授 | 1975/11/25 |
0118 | 王立 | 男 | 高级工程师 | 1985/4/28 |
0193 | 赵玲 | 女 | 讲师 | 1992/9/26 |
0213 | 杨梅 | 女 | 副教授 | 1986/6/7 |
0030 | 覃刚 | 男 | 副教授 | 1980/2/15 |
代码
---------- BEGIN ----------
SELECT tno,tname,title FROM teacher WHERE tname LIKE '杨%'
---------- END ----------
第9关:求和、最大最小值
实验要求
- 查询全校课程最高的学分数。
- 查询软件学院学生的总数。
course(课程表)
cno(课程号) | cname(课程名) | credit(学分) | hours(学时) | examination(考核方式) |
---|---|---|---|---|
G001 | 线性代数 | 3 | 48 | 考试 |
R003 | 数据结构 | 3 | 48 | 考试 |
R009 | 离散数学 | 3 | 48 | 考试 |
S023 | 嵌入式系统与编程实验 | 1 | 32 | 考察 |
G012 | 大学物理 | 4 | 64 | 考察 |
class(班级表)
gno(班级号) | gname(班级名) | grade(年级) | dept(学院) | gnum(班级人数) |
---|---|---|---|---|
0211801 | 软件18级1班 | 18级 | 软件 | 37 |
0211903 | 软件19级3班 | 19级 | 软件 | 38 |
0131901 | 机械19级1班 | 19级 | 机械 | 37 |
代码
---------- BEGIN ----------
SELECT MAX(credit) FROM course;
SELECT SUM(gnum) FROM class WHERE dept = '软件';
---------- END ----------
第10关:计数
实验要求
统计软件学院的班级数量。
class(班级表)
gno(班级号) | gname(班级名) | grade(年级) | dept(学院) | gnum(班级人数) |
---|---|---|---|---|
0211801 | 软件18级1班 | 18级 | 软件 | 37 |
0211903 | 软件19级3班 | 19级 | 软件 | 38 |
0131901 | 机械19级1班 | 19级 | 机械 | 37 |
代码
---------- BEGIN ----------
SELECT COUNT(gname) FROM class WHERE dept = '软件';
---------- END ----------
第11关:Group by 子句使用
实验要求
查询每个教师的工号及其任课的班级数。
teaching(教师授课表)
cno(课程号) | tno(工号) | gno(班级号) | term(开课学期) | classroom(教室) |
---|---|---|---|---|
G001 | 0078 | 0211903 | 1 | A101 |
G001 | 0078 | 0131901 | 1 | A101 |
R003 | 0118 | 0211801 | 2 | S001 |
R009 | 0213 | 0211903 | 2 | S002 |
S023 | 0193 | 0211801 | 1 | S001 |
G012 | 0030 | 0131901 | 2 | B003 |
代码
---------- BEGIN ----------
SELECT tno,COUNT(*) FROM teaching GROUP BY tno;
---------- END ----------
第12关:Having子句使用
实验要求
- 查询人数超过70人(大于70)的学院的名称和人数。
- 查询第1学期授课数量多于1门(大于1)的教师工号和数量。
class(班级表)
gno(班级号) | gname(班级名) | grade(年级) | dept(学院) | gnum(班级人数) |
---|---|---|---|---|
0211801 | 软件18级1班 | 18级 | 软件 | 37 |
0211903 | 软件19级3班 | 19级 | 软件 | 38 |
0131901 | 机械19级1班 | 19级 | 机械 | 37 |
teaching(教师授课表)
cno(课程号) | tno(工号) | gno(班级号) | term(开课学期) | classroom(教室) |
---|---|---|---|---|
G001 | 0078 | 0211903 | 1 | A101 |
G001 | 0078 | 0131901 | 1 | A101 |
R003 | 0118 | 0211801 | 2 | S001 |
R009 | 0213 | 0211903 | 2 | S002 |
S023 | 0193 | 0211801 | 1 | S001 |
G012 | 0030 | 0131901 | 2 | B003 |
代码
---------- BEGIN ----------
SELECT dept,SUM(gnum) FROM class GROUP BY dept HAVING (SUM(gnum)>70);
SELECT tno,COUNT(tno) FROM teaching GROUP BY tno HAVING (COUNT(tno)>1);
---------- END ----------
第13关:单因素排序
实验要求
查询软件学院班级的班号、班级名和人数,并按人数升序排列。
class(班级表):
gno(班级号) | gname(班级名) | grade(年级) | dept(学院) | gnum(班级人数) |
---|---|---|---|---|
0211801 | 软件18级1班 | 18级 | 软件 | 37 |
0211903 | 软件19级3班 | 19级 | 软件 | 38 |
0131901 | 机械19级1班 | 19级 | 机械 | 37 |
代码
---------- BEGIN ----------
SELECT gno,gname,gnum FROM class WHERE dept = '软件' ORDER BY gnum ASC;
---------- END ----------
第14关:多因素排序
实验要求
查询教师授课情况,结果先按学期升序排列,再按工号降序排列。
teaching(教师授课表)
cno(课程号) | tno(工号) | gno(班级号) | term(开课学期) | classroom(教室) |
---|---|---|---|---|
G001 | 0078 | 0211903 | 1 | A101 |
G001 | 0078 | 0131901 | 1 | A101 |
R003 | 0118 | 0211801 | 2 | S001 |
R009 | 0213 | 0211903 | 2 | S002 |
S023 | 0193 | 0211801 | 1 | S001 |
G012 | 0030 | 0131901 | 2 | B003 |
代码
---------- BEGIN ----------
SELECT * FROM teaching ORDER BY term ASC,tno DESC;
---------- END ----------
实验收获:
- 掌握了关系数据库标准语言的进阶内容。
- 掌握了数据查询的基本方法。
- 掌握了子查询的部分内容。
心得体会:
- 通过学习第三章“关系数据库标准语言”的“数据查询”部分的内容,我完成了这次的实验报告,在这次报告中,我完成了数据查询的基本操作,实现了,模糊查询、去重查询等查询方法,在完成题目的过程中,也使用到了子查询的一些方法。
- 数据库的查询是一个非常强大的功能,通过这次报告我也有了写查询语句的一些经验,查询就是先写出SELECT我们要找什么,然后写我们找的东西涉及哪些表,然后加上查询的条件,有时候也要用到多重条件、子查询等方法,完成报告后我的数据库的查询能力获得了提升。