查询练习题由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“简单查询练习题”。
《网络数据库》讲稿
查询练习题
简单的单表查询
例1:检索出1983年6月1日之后出生的学生的姓名、性别和民族,并按降序排列。
SELECT 姓名,性别,民族 FROM 学生 WHERE 出生日期>'1983-6-1' ORDER BY 出生日期 DESC
多表查询
在FROM后跟随多个表。
例1:查找出已修学分达到20分的学生的姓名、出生日期、班级名称、已修学分。
SELECT 姓名,出生日期,班级名称,已修学分FROM 学生,班级WHERE 学生.班级编号=班级.班级编号AND
已修学分>=20
解释:这里的“学生.班级编号=班级.班级编号”是连接条件。如果在FROM短语中有两个表,那么这两个表必须具备可建立联系的字段,否则无法查询。如果FROM短语中的多个表中有同名字段,当使用这些字段名时,需要在字段名左边加上表名和圆点,作为字段名的前缀。
练习题01:查找出已修学分低于20分的学生的姓名、性别和班主任。练习题02:查找出学生“王林”的班主任。
练习题03:查找出班主任“刘成河”班的全部男生的信息。
例2:查找出课程“中国历史”考试及格的全部学生的学号、姓名。
SELECT 学生.学号,姓名 FROM 学生,课程,成绩 WHERE 分数>=60 AND 课程名称='中国历史' AND 学生.学号=成绩.学号 AND 成绩.课程编号=课程.课程编号
练习题04:查找出课程“中国历史”考试及格的全部学生的学号、姓名、班级名称和分数。练习题05:查找出全部同学的所有考试的姓名、课程名称、分数,查找结果的格式如下:
嵌套查询
P121-126
例1:查找出取得过95分及其以上考试成绩的学生的学号和姓名。
SELECT 学号,姓名 FROM 学生 WHERE 学号IN(SELECT 学号 FROM 成绩 WHERE 分数>=95)
解释:该命令中的IN相当于集合运算的包含运算符∈。括号外的查询称为外层查询;括号内的查询称为内层查询(也称为“子查询”)。内层查询的结果被当做是一个集合。
P104
例2:查找出“计算机应用”课程考试取得95分及其以上考试成绩的学生的学号和姓名。
SELECT 学号,姓名 FROM 学生 WHERE 学号 IN(SELECT 学号 FROM 成绩 WHERE 分数>=95 AND 课程编号 IN(SELECT 课程编号 FROM 课程 WHERE 课程名称='计算机应用'))
例3:查找出所有学生的考试都及格的班级名称。
答案一:
SELECT 班级名称 FROM 班级 WHERE 班级编号 NOT IN(SELECT 班级编号 FROM 学生 WHERE 学号 IN(SELECT 学号 FROM 成绩 WHERE 分数
答案二:
select 班级名称 from 班级
where not exists(select * from 学生 where
exists(select * from 成绩
where 分数
答案三:
select 班级名称 from 班级 where not exists(select * from 成绩,学生
where 班级.班级编号=学生.班级编号 and 学生.学号=成绩.学号 and 分数
练习题01:查找出班主任“刘成河”班的全部男生的信息。练习题02:查找出考试全及格的课程名称。
练习题03:查找出所有学生的考试都及格的班级,并排除那些没有学生的班级。练习题04:使用多表查询实现例1。练习题05:使用多表查询实现例2。
练习题06:查找出“数学专业”班全体同学的姓名和“数学”课程考试分数。
三个特殊运算符
一、谓词EXISTS
P122
EXISTS判断子查询中是否为空集。
例1:查找出那些还没有学生的班级名称。
SELECT 班级名称 FROM 班级 WHERE NOT EXISTS
(SELECT * FROM 学生 WHERE 学生.班级编号=班级.班级编号)
例2:检索出每个学生都选修了的课程(并且考试都及格)。
SELECT 课程编号,课程名称 FROM 课程 WHERE NOT EXISTS(SELECT 学号 FROM 学生 WHERE NOT EXISTS(SELECT * FROM 成绩
WHERE 课程.课程编号=成绩.课程编号AND 学生.学号=成绩.学号AND 分数>=60))
练习题01:写出可实现例1要求的其他命令。练习题02:写出可实现例2要求的其他命令。
二、范围运算符BETWEEN …AND…
P103 该范围是一个闭区间,意思是在 …和… 之间,包括两个端点的值。
例3:查找出1983年6月1日至1984年6月1日之间出生的学生的信息。
SELECT * FROM 学生 WHERE 出生日期 BETWEEN '1983-6-1' AND '1984-6-1' 练习题03:查找出已修学分在15和20之间的学生的信息。
练习题04:查找出1983年6月1日至1984年6月1日之间出生的少数民族学生的信息。
练习题05:查找出已修学分在15和20之间、且“自然辨证法”课程的考试分数达到80分的学生的姓名、性别、所在班级。
三、字符串匹配运算符LIKE
P105 例4:查找出姓名中包含有“林”的学生的信息。SELECT * FROM 学生WHERE 姓名LIKE '%林%' 例5:查找出姓名中第二个字是“林”的学生的信息。SELECT * FROM 学生WHERE 姓名LIKE '_林%'
练习题06:查找出湖北出生的学生的信息。练习题07:查找出武汉出生的学生的信息。
练习题08:查找出班主任“郭大壮”的班中出生地是武汉的学生的姓名、班级。
练习题09:查找出至少参加了辛有余老师所任课程中一门课程考试的男生的姓名。至少写出两条不同的命令。
聚合函数及其分组查询
为了完成后续题目,请首先计算出每位同学的已修学分
UPDATE 学生 SET 已修学分=(SELECT SUM(学分)FROM 成绩,课程
WHERE 学生.学号=成绩.学号AND 分数>=60 AND 成绩.课程编号=课程.课程编号)
一、常用统计(聚合)函数
P109表4-3 例1:计算出全部学生的平均已修学分。SELECT AVG(已修学分)FROM 学生
例2:计算出“软件工程”班全体同学的平均已修学分。
SELECT AVG(已修学分)FROM 学生 WHERE 班级编号IN(SELECT 班级编号FROM 班级WHERE 班级名称='软件工程')
练习题01:计算出“软件工程”和“计算机应用”两个班全体同学的平均已修学分。
注意:当子查询的结果只有一个数据时,可以用等号;为多个数据时,需用 IN。练习题02:计算出李建同学各门课程考试总分。
例3:查找出“数学专业”班“数学”课程考试的最高分数。
SELECT MAX(分数)FROM 学生, 成绩 WHERE 学生.学号=成绩.学号 AND 班级编号=(SELECT 班级编号 FROM 班级 WHERE 班级名称='数学专业')AND 课程编号=(SELECT 课程编号 FROM 课程 WHERE 课程名称='数学')
另一个答案
SELECT MAX(分数)FROM 成绩 WHERE 学号 IN(SELECT 学号 FROM 学生 WHERE 班级编号=(SELECT 班级编号 FROM 班级 WHERE 班级名称='数学专业'))AND 课程编号=(SELECT 课程编号 FROM 课程 WHERE 课程名称='数学')
例4:查找出“数学专业”班“数学”课程考试最高得分的同学姓名和分数。
SELECT 姓名, 分数 FROM 学生, 成绩 WHERE 学生.学号=成绩.学号
AND 班级编号=(SELECT 班级编号 FROM 班级 WHERE 班级名称='数学专业')AND 课程编号=(SELECT 课程编号 FROM 课程 WHERE 课程名称='数学')AND 分数=(SELECT MAX(分数)FROM 学生, 成绩 WHERE 学生.学号=成绩.学号
AND 班级编号=(SELECT 班级编号 FROM 班级 WHERE 班级名称='数学专业')AND 课程编号=(SELECT 课程编号FROM 课程 WHERE 课程名称='数学'))
附:TOP … PERCENT
P98
二、GROUP BY短语
GROUP BY后面跟随的是分组关键字段,按照关键字段的值,将记录分成若干个组,每一组转变为查询结果中的一行。
例5:计算出各班学生的平均已修学分。SELECT 班级编号,AVG(已修学分)FROM 学生 GROUP BY 班级编号
练习题04:计算出各门课程考试的平均分数。练习题05:计算出各位学生的考试总分。
练习题06:计算出辛有余老师所任课程中每门课程的课程编号和学生平均考试分数。
三、别名及其应用
P113-114, P99
例6:查找出已修学分低于本班平均已修学分的学生信息。
SELECT 姓名, 班级编号, 已修学分 FROM 学生
WHERE 已修学分
说明:在FROM短语中为表取别名也可省略AS,例如FROM 学生 XS。
例7:查找和计算出各位学生的姓名和考试总分。
SELECT 姓名, 总分
FROM 学生,(SELECT 学号, SUM(分数)AS 总分 FROM 成绩 GROUP BY 学号)AS ZF WHERE 学生.学号=ZF.学号
说明:在FROM短语中可用子查询的结果作为表,此时,必须为该子查询取别名。
在SELECT短语中可为查询结果列取别名,其格式有三种,见P99。
练习题07:查找和计算出各门课程的名称及其考试的平均分数。
练习题08:查找和计算出各门课程的名称及其考试达到90分的人数。
四、HAVING短语
HAVING后面跟随的是筛选条件,作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含统计(聚合)函数。
例8:查找出讲授多门课程的教师姓名及其授课门数。
SELECT 任课教师,COUNT(*)AS 授课门数 FROM 课程 GROUP BY 任课教师 HAVING COUNT(*)>1 说明:HAVING短语通常与GROUP BY短语配合使用,否则无使用价值。HAVING短语中使用的统计函数应该是SELECT短语中使用的函数。
练习题10:查找出考试成绩优秀人数多于3人的课程编号及其学生人数(假定考试分数达到90分为优秀)。练习题11:查找出考试成绩优秀人数多于3人的课程名称及其学生人数(假定考试分数达到90分为优秀)。练习题12:查找出考试成绩优秀人次多于5人次的班级名称及其人次(假定考试分数达到90分为优秀)。
练习题13:查找出考试分数标准差小于
10、且最高分与最低分之差小于20的各班(班级名称)各门课程(课程名称)的考试人数,考试分数的最高分、最低分、平均分、标准差、方差。
常用函数、连接
一、常用函数
P159
二、链接 P114 用于多表查询,实现表之间的链接。
例6:在多表查询中,下面的命令可查找出已修学分达到17分的学生的姓名、出生日期和班级:SELECT 姓名,出生日期,班级名称 FROM 学生,班级 WHERE 学生.班级编号=班级.班级编号 AND 已修学分>=17 用INNER JOIN … ON …,可将该命令改写为:
SELECT 姓名,出生日期,班级名称 FROM 学生 INNER JOIN 班级 ON 学生.班级编号=班级.班级编号
WHERE 已修学分>=17 或
SELECT 姓名,出生日期,班级名称 FROM 学生 INNER JOIN 班级 ON 学生.班级编号=班级.班级编号 AND 已修学分>=17
解释:这里的“学生.班级编号=班级.班级编号”是连接条件。如果在FROM短语中有两个表,那么这两个表必须具备可建立联系的字段,否则无法查询。如果FROM短语中的多个表中有同名字段,当使用这些字段名时,需要在字段名左边加上表名和圆点,作为字段名的前缀。
练习题01:查找出已修学分低于17分的学生的姓名、性别和班主任。练习题02:查找出学生“王林”的班主任。
练习题03:查找出班主任“刘成河”班的全部男生的信息。
例7:在多表查询中,下面的命令可查找出课程“中国历史”考试及格的全部学生的学号、姓名:SELECT 学生.学号,姓名 FROM 学生,课程,成绩 WHERE 分数>=60 AND 课程名称=“中国历史” AND 学生.学号=成绩.学号 AND 成绩.课程编号=课程.课程编号
用INNER JOIN … ON …,可将该命令改写为:
SELECT 学生.学号,姓名 FROM 学生 INNER JOIN(成绩 INNER JOIN 课程 ON 成绩.课程编号=课程.课程编号)ON 学生.学号=成绩.学号 WHERE 分数>=60 AND 课程名称=“中国历史”
练习题04:查找出课程“中国历史”考试及格的全部学生的学号、姓名、班级和分数。练习题05:查找出全部同学的所有考试的姓名、课程名称、分数。查找结果的格式如下:
练习题06:计算出每个同学实际取得的学分(不是学生表中的已修学分)。查找结果的格式如下:
操作查询
一、生成表查询
P136
例1:
SELECT 姓名, 出生日期, 班级名称 INTO XYZ FROM 学生, 班级
WHERE 学生.班级编号=班级.班级编号 AND 已修学分>=17 例2:
SELECT 班级名称, 课程名称, 分数 INTO 考试分数
FROM 课程 INNER JOIN((班级 INNER JOIN 学生 ON 班级.班级编号 = 学生.班级编号)INNER JOIN 成绩 ON 学生.学号 = 成绩.学号)ON 课程.课程编号 = 成绩.课程编号
二、更新查询
P137
例3:将每位同学的已修学分设置为0。
UPDATE 学生 SET 已修学分=0 将每位同学的已修学分设置为4。UPDATE 学生 SET 已修学分=4 省略WHERE短语,表示无条件修改全部记录。例4:为每个女生增加2学分。
UPDATE 学生 SET 已修学分=已修学分+2 WHERE 性别= “女”
练习题01:(综合练习)首先为“学生”表添加一个整型字段“年龄”,然后用UPDATE命令计算出每位同学的年龄并填入“年龄”字段。
例5:根据考试成绩,计算出每位同学的实际已修学分,并填入“学生”表的“已修学分”字段。
UPDATE 学生 SET 已修学分=(SELECT SUM(学分)FROM 成绩,课程
WHERE 学生.学号=成绩.学号AND 分数>=60 AND 成绩.课程编号=课程.课程编号)
练习题02:根据“学生”表,计算出每班的男生人数和女生人数,并填入“班级”表中。
三、追加查询
P134
四、删除查询
P141 例6:删除XS表中已修学分低于4分的记录。
DELETE FROM XS WHERE 已修学分
DELETE FROM 班级 WHERE 班级编号 NOT IN(SELECT 班级编号 FROM 学生 WHERE 班级编号 IS NOT NULL)
练习题03:删除没有参加过任何考试的学生。
练习题04:删除考试平均分数低于本班所有学生全部考试平均分数的同学。
考点7:查询1.若在“tEmployee”表中查找所有出生日期在“1970-1-1”和“1980-1-1”之间的记录,可以在查询设计视图的准则行中输入( )。答案:A A)Between #1970-1-1# And #1980-1......
--(1) 查询20号部门的所有员工信息。 select * from emp e where e.deptno=20; --(2) 查询奖金(COMM)高于工资(SAL)的员工信息。 select * from emp where comm>sal; --(3) 查询奖金高......
说明:根据题目要求编写下列题目的代码,运行代码得出正确结果后把代码复制到题号的下面,最后在文件名前加上学号和姓名(例:2013111055+张三+查询操作练习4-分组查询),并提交文件到教......
子查询1.查询和scott相同部门的员工姓名ename和雇用日期hiredate select ename,hiredate from emp where deptno=(select b.deptno from emp a,dept b where a.deptno=b.dep......
利用scott用户自带的四张表完成如下作业: 1.列出至少有一个员工的所有部门select b.deptno,b.dname from emp a,dept b where a.deptno=b.deptno group by b.deptno,b.dname......