4.3 数据表操作实训
SQL语句可以分为两部分:一部分用来创建数据库对象,另一部分用来操作这些对象,本项目详细介绍了数据表的基本操作,包括插入表数据、修改表数据、删除表数据、查询表数据。通过本项目的介绍,读者可以了解到SQL中的查询语言的强大功能,用户可以根据需要灵活使用。下面的“数据表操作实训”将回顾这些SQL语句。
本实训以学生管理信息系统数据库(stuMIS)为例进行操作。
1)stuMIS数据库中数据表的结构参考第3.4.1节。
2)向对应的表中插入数据。
向部门/系部表插入数据,数据如图4-1所示。
图4-1 向部门/系部表插入数据
向班级表插入数据,数据如图4-2所示。
图4-2 向班级表插入数据
向课程表插入数据,数据如图4-3所示。
图4-3 向课程表插入数据
向学生表插入数据,数据如图4-4所示。
图4-4 向学生表插入数据
向成绩表插入数据,数据如图4-5所示。
图4-5 向成绩表插入数据
3)根据stuMIS数据库中的表进行如下操作。
①修改表中数据。
修改学号为1611101的学生的总学分为55分。
修改学号为1621102的学生的学分为60分,生日为1990-8-5(一次改变多字段的值)。
修改王超的性别为女。
修改计算机系王超的性别为男(多个条件)。
②查询单表中部分字段。
查询所有学生的学号和姓名。
查询所有学生的姓名和家庭住址。
查询所有系部的名称和联系电话。
查询所有课程名称和该课程授课教师信息。
查询所有班级名称和班长信息。
③重命名检索得到的字段:要求用汉字作为字段名。
查询所有学生的姓名和性别。
查询所有学生的姓名、年龄和家庭住址。
查询所有系部的名称和办公室信息。
查询所有课程名称、授课时间和该课程授课教师信息。
查询所有班级名称和班长信息。
④返回结果集中的部分行。
返回学生成绩表中前10条数据。
返回课程表中前8条数据的课程名称和选课人数。
返回系部表中的第1条数据。
返回科目表中的第5~8条数据。
⑤消除重复行。
返回学生表所有不重复的班级编号,字段名使用汉字显示。
返回班级表中所有不重复的系部编号,字段名使用汉字显示。
返回成绩表中不重复的课程编号,字段名使用汉字显示。
返回课程表中不重复的授课时间,字段名使用汉字显示。
返回课程表中不重复的课程所属类别,字段名使用汉字显示。
返回学生表中每个班级的年龄信息。
⑥条件查询。
班级编号为20080101的所有学生信息。
生源地为武汉的所有学生信息。
生源地为荆门的学生的姓名、性别、年龄和生源地。
性别为女的所有学生信息。
课程类别为工程技术的所有课程信息。
学生密码和学号相同的学生信息。
班级编号为20080101且生源地为武汉的学生姓名、生源地信息。
性别为女、生源地为荆门的所有学生信息。
20岁的男生班级编号、姓名和生源地。
周四第1~2节上课的计算机类的课程信息。
报名人数下限为30的计算机类课程信息。
班级编号为20080101或者生源地为武汉的学生全部信息。
工程技术类和管理类的所有课程。
20080101和20080102所有班级学生信息。
生源地为黄冈和孝感的所有信息。
院系编号为2和3的所有班级信息。
显示所有大于18岁的学生信息。
显示所有不是18岁和20岁的学生信息。
显示所有不能正常开课的课程信息。
显示所有不及格的学生成绩。
报名人数大于等于30人,并且小于等于36人的课程信息。
年龄为17、19、21的所有学生信息。
黄冈、孝感、宜昌所有18岁女学生的学号、姓名、年龄和家庭住址。
计算机和工程技术类的所有课程信息。
年龄在18~20之间的学生的班级编号和姓名。
年龄在18~20之间的黄冈所有学生信息。
年龄在18~20之间的所有学生信息和孝感的所有学生信息。
年龄不是18~20之间的所有学生信息(两种方法)。
⑦模糊查询like。
院系表中电话带有98两个连续数字的院系信息。
院系表中主任中姓王的院系信息。
课程表中课程名中带有“计算机”三个字的所有课程信息。
课程表中课程编号以3开头的所有课程信息。
所有第3、4节上课的课程信息。
学生表中学生班级编号中有01的所有学生信息(学生表中不重复的班级信息)。
课程表中所有周二上课的课程名称、上课教师和详细的上课时间。
学生表中姓金的女生信息。
课程表中第1、2节上课的计算机类课程信息。
姓名中带有“超”字的学生信息。
查询姓孙的授课教师的开课信息。
所有周一开课的课程信息。
所有名字是两个字的学生信息。
姓赵和姓王的所有学生信息。
系主任不姓赵和吴的所有系部信息。
办公室不是A和B开头的所有系部信息。
学生姓名第三个字是“英”的所有学生的姓名和班级编号。
姓名的第二个字不是“文”的所有学生的学号和姓名信息。
密码中带有字母b或数字7的所有学生信息。
⑧排序练习。
检索course表的课程名称、授课教师、最低限制开班人数和报名人数,要求检索结果按照最低限制开班人数的升序排列;最低限制开班人数相同时,则按照报名人数的降序排列。
检索student表的学号、姓名、性别、年龄,要求检索结果按照年龄升序排列。年龄相同的,按女生在前、男生在后排列(降序)。
检索sc表的信息,要求按照课程编号升序排列,课程编号相同的,按照成绩降序排列。
检索student表的信息,要求按照班级升序排列,班级相同的,按照学号升序排列。
检索成绩表的信息,要求按照课程编号升序排列,课程编号相同的,按照成绩降序排列,成绩相同的,按照学号升序排列。
课程表中所有信息,要求按照报名人数从多到少的顺序显示。
⑨聚合函数。
检索student表中最小的年龄。
检索student表中最大的年龄。
检索student表中平均年龄。
检索course表中每个学生的总成绩。
检索class表中一共有多少个班级。
查询15112班级有多少个学生。
查询学号为1511101的学生的总成绩。
查询成绩表中有多少个学生选择课程编号为30106的课程。
查询最低限制开班人数和报名人数之差最大的课程信息。
检索student表中最小的年龄、最大的年龄和平均年龄。
检索课程编号为30106的最高分、最低分和平均分。
检索学号为1511101的学生的最高分、最低分和总分。
检索student表中来自荆门的学生的最小年龄、最大年龄和平均年龄。
⑩group by having分组查询。
统计各个系部班级数量。
统计各个班级男女生人数。
统计课程表中各类课程的数量。
统计成绩表中各科考试人数。
按生源地分类统计各个生源地学生的平均年龄。
按班级分类统计各个班级的学生的平均年龄。
按课程编号分类统计不同课程编号的学生的平均分数。
按学号分类统计各个学生的总分。
查询15112班级男生与女生人数。
统计各个学生的平均分。
查询平均成绩高于80的学生的学号和成绩。
统计成绩表中各科考试人数,并且考试人数大于5人的。
统计各个班级男女生人数,返回人数大于3人的。
○1 case when。
显示学生成绩表中的所有信息,要求使用“及格”或者“不及格”显示成绩。
显示所有学生的姓名和年龄,要求使用“成年”或者“未成年”显示年龄。
○12 in的应用(子查询)。
查询计算机系所有班级信息。
查询计算机系和经管系所有班级。
查询“汽修一班”所有学生信息。
查询系部主任是“孙丰伟”的所有班级信息。
查询系主任姓吴的系部的所有班级。
查询来自武汉的同学信息。
查询“管理”类课程的成绩。
查询来自武汉和荆门的学生的考试成绩信息。
查询参加“计算机应用基础”和“数据库技术及应用”考试的学生成绩信息。
○13多表联合查询。
显示系部编号、系部名称和班级名称、班长。
显示所有学生的班级编号、班级名称、学生姓名。
○14通过计算获得新列。
将成绩表中100分制成绩使用满分为120分的成绩。显示所有字段。
○15删除表中数据。
删除所有性别为女的学生信息。
删除经管系男生信息。
删除第4、5、6三个学期开课的课程信息。