当前位置:   article > 正文

实训三 多表查询_在右侧编辑器补充代码,查询所有班级里分数在90分以上的学生的姓名和学生的成绩以

在右侧编辑器补充代码,查询所有班级里分数在90分以上的学生的姓名和学生的成绩以

多表查询-连接查询(一)

第1关:自然连接

编程要求

根据提示,在右侧编辑器补充代码,使用自然连接求选修了严敏老师的数学分析课程的学生的姓名、课程名称、教师名和成绩。

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select sname,cname,tname,grade
  5. from student natural join score natural join course natural join teach
  6. where tname like '严敏';
  7. /**********End**********/

第2关:等值连接

编程要求

根据提示,在右侧编辑器补充代码,使用等值连接求选修了严敏老师的数学分析课程的学生的姓名、课程名称、教师名和成绩。

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select sname,cname,tname,grade
  5. from student,score,course,teach
  6. where student.sno = score.sno and score.tno = teach.tno and score.cno = course.cno and
  7. tname like '严敏' and cname like '数学分析';
  8. /**********End**********/

第3关:JOIN连接

编程要求

根据提示,在右侧编辑器补充代码,使用 JOIN 连接求选修了严敏老师的数学分析课程的学生的姓名、课程名称、教师名和成绩。

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select sname,cname,tname,grade
  5. from score
  6. inner join student on score.sno = student.sno
  7. inner join course on score.cno = course.cno
  8. inner join teach on score.tno = teach.tno
  9. where tname = '严敏' and cname = '数学分析';
  10. /**********End**********/

第4关:自身连接查询

编程要求

在右侧编辑器补充代码,使用自身连接查询求年龄大于'刘东明' 的所有学生的姓名与出生日期。

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select b.sname,b.birthday
  5. from student as a,student as b
  6. where a.sname = '刘东明'
  7. and a.birthday > b.birthday
  8. /**********End**********/

第5关:外部连接查询

编程要求

在右侧编辑器补充代码,使用外部连接查询求未选修任何课程的学生的学号和姓名。

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select student.sno,sname
  5. from student left join score on (student.sno = score.sno)
  6. where score.sno is null;
  7. /**********End**********/

多表查询- 连接查询(二)

第1关:内连接查询

编程要求

在右侧编辑器补充代码,查询数据表中学生姓名以及对应的班级名称,将其对应的列名分别另命名为studentNameclassName

  1. USE School;
  2. ########## 查询数据表中学生姓名和对应的班级 ##########
  3. #请在此处添加实现代码
  4. ########## Begin ##########
  5. select tb_student.name as studentName, tb_class.name as className from tb_student join tb_class on tb_class.id = tb_student.class_id;
  6. ########## End ##########

第2关:外连接查询

编程要求

在右侧编辑器补充代码,分别使用左外连接右外连接查询数据表中所有学生姓名和对应的班级名称,查询结果列分别另命名为studentNameclassName

  1. USE School;
  2. ########## 使用左外连接查询所有学生姓名和对应的班级 ##########
  3. #请在此处添加实现代码
  4. ########## Begin ##########
  5. select tb_student.name as studentName,tb_class.name as className from tb_class right join tb_student on tb_class.id =tb_student.class_id;
  6. ########## End ##########
  7. ########## 使用右外连接查询所有学生姓名和对应的班级 ##########
  8. #请在此处添加实现代码
  9. ########## Begin ##########
  10. select tb_student.name as studentName,tb_class.name as className from tb_class left join tb_student on tb_class.id =tb_student.class_id;
  11. ########## End ##########

第3关:复合条件连接查询

编程要求

在右侧编辑器补充代码,查询所有班级里分数在90分以上的学生的姓名和学生的成绩以及学生所在的班级,其中学生的姓名和学生所在班级分别另命名为studentNameclassName

  1. USE School;
  2. ########## 查询所有班级里分数在90分以上的学生的姓名和学生的成绩以及学生所在的班级 ##########
  3. #请在此处添加实现代码
  4. ########## Begin ##########
  5. select s1.name as studentName,score,s2.name as className
  6. from tb_student as s1,tb_class as s2
  7. where s1.class_id=s2.id
  8. and s1.score>90
  9. order by score desc;
  10. ########## End ##########

多表查询-子查询(一)

第1关:子查询

程要求

在右侧编辑器补充代码,求年龄大于'刘东明' 的所有学生的姓名与出生日期。

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select sname,birthday
  5. from student
  6. where birthday<(select birthday from student where sname = '刘东明');
  7. /**********End**********/

第2关:子查询-练习

编程要求

根据提示,在右侧编辑器补充代码,求未选修任何课程的学生的学号和姓名。

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select sno,sname
  5. from student
  6. where sno not in(select sno from score)
  7. /**********End**********/

第5关:子查询-练习三

编程要求

在右侧窗口补充代码,求选修了'刘东明' 同学选修的全部课程的学生的学号。

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select sno
  5. from score
  6. where exists(select * from student where student.sno = score.sno and sname = '刘东明');
  7. /**********End**********/

第6关:子查询-练习四

编程要求

根据提示,在右侧编辑器补充代码, 求选修了全部课程的学生的学号。

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select sno
  5. from student
  6. where not exists
  7. (select * from course where not exists
  8. (select * from score where sno=student.sno and cno=course.cno));
  9. /**********End**********/

多表查询 - 子查询(二)

第1关:带比较运算符的子查询

编程要求

在右侧编辑器补充代码,查询大于所有平均年龄的员工姓名与年龄。

  1. USE Company;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. #1.查询大于所有平均年龄的员工姓名与年龄
  5. select name,age
  6. from tb_emp
  7. where age>(select avg(age) from tb_emp);
  8. ########## End ##########

第2关:关键字子查询

编程要求

我们为你提供了如下数据表: tb_salary表数据:

idpositionsalary
1Java8000
2Java8400
3Java9000
4Python6500
5Python10000

根据提供的数据,在右侧编辑器中补充代码:

  1. 查询薪资表中比Java最高工资高的所有员工职位名称和薪资;

  2. 查询薪资表中比Java最低工资高的所有员工职位名称和薪资;

  3. 查询薪资表中职位为Java的所有员工职位名称和薪资。

  1. USE Company;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. #1.使用 ALL 关键字进行查询
  5. select position,salary
  6. from tb_salary
  7. where salary>all(select salary from tb_salary where position = 'Java');
  8. #2.使用 ANY 关键字进行查询
  9. select position,salary
  10. from tb_salary
  11. where salary>any(select salary from tb_salary where position = 'Java');
  12. #3.使用 IN 关键字进行查询
  13. select position,salary
  14. from tb_salary
  15. where salary in (select salary from tb_salary where position = 'Java');
  16. ########## End ##########

大学数据库创建与查询实战

第1关:数据库表设计

编程要求

在右侧编辑器中的Begin-End之间补充代码,创建教师信息表和开课信息表(其他六张表系统已为你创建完成),使用 universityDB 数据库,创建的表命名依次为 instructor 和 section。

  1. #请在此添加创建开课信息表的SQL语句
  2. ########## Begin ##########
  3. use universityDB;
  4. create table instructor(
  5. ID varchar(5) comment'教师号' ,primary key(ID),
  6. name varchar(20) comment'教师名字' not null,
  7. dept_name varchar(20) default null comment'教师所在的系',
  8. salary numeric(8,2) comment '薪资' check(salary>29000),
  9. foreign key (dept_name) references department(dept_name)
  10. on delete set null
  11. );
  12. create table section(
  13. course_id varchar(8) comment '课程号' ,
  14. sec_id varchar(8) comment '课程段标识',
  15. semester varchar(6) comment'学期' check(semester in('Fall','Winter','Spring','Summer')),
  16. year numeric(4,0) comment '年份' ,
  17. building varchar(15) default null comment '课程所在建筑' ,
  18. room_number varchar(7) default null comment '课程所在教师号',
  19. time_slot_id varchar(4) comment '时间档序号',
  20. primary key (course_id,sec_id,semester,year),
  21. foreign key (course_id) references course(course_id)
  22. on delete cascade,
  23. foreign key (building,room_number) references classroom(building,room_number)
  24. on delete set null
  25. );
  26. ########## End ##########

第2关:查询(一)

编程要求

在右侧编辑器中的Begin-End之间补充代码,完成下列查询:

  1. 查询修了‘ Biology ’所有课程的学生姓名;

  2. 查询满足工资至少比‘ Biology ’系某一个教师的工资高的所有教师的姓名;

  3. 查询所有教师的姓名,以及他们所在系的名称和系所在建筑的名称;

  4. 查询在包含‘ Watson ’字段的大楼开课的所有系名。

  1. #********* Begin *********#
  2. echo "
  3. select name
  4. from student
  5. where ID in
  6. ( select ID
  7. from takes,course
  8. where dept_name='Biology'
  9. and takes.course_id=course.course_id
  10. );
  11. select name
  12. from instructor
  13. where salary >
  14. (
  15. select salary
  16. from instructor
  17. where dept_name='Biology'
  18. );
  19. select distinct name, instructor.dept_name,building
  20. from instructor,department
  21. where instructor.dept_name= department.dept_name;
  22. select dept_name
  23. from department
  24. where building='Watson';
  25. "
  26. #********* End *********#

第3关:查询(二)

编程要求

在右侧编辑器中的Begin-End之间补充代码,完成下列查询:

  1. 查询2010年春季学期教课的教师数;

  2. 查询2009年秋季学期讲授2门课程的教师信息;

  3. 查询每个系在2010年春季学期讲授至少一门课的教师人数。

  1. #********* Begin *********#
  2. echo "
  3. select count(distinct ID)
  4. from teaches
  5. where year = '2010' and semester = 'Spring';
  6. select ID,name,dept_name
  7. from instructor
  8. where ID in(select ID from teaches where year = '2009' and semester = 'Fall' GROUP BY ID having count(ID)>=2);
  9. SELECT dept_name,count(distinct instructor.ID) as instr_count
  10. FROM instructor join teaches on instructor.ID = teaches.ID
  11. WHERE semester = 'spring' and year = '2010'
  12. GROUP BY dept_name;
  13. "
  14. #********* End *********#

第4关:查询(三)

编程要求

在右侧编辑器中的Begin-End之间补充代码,完成下列查询:

  1. 根据工资将教师信息表(instructor)关系按工资的降序、姓名的升序排列;

  2. 查询大学里的最高工资;

  3. 找出平均工资最高的系;

  4. 查询教师平均工资超过50000的系,并按系名升序和平均工资降序排序。

注意:编写查询语句时,需要查询列表所有信息时,请使用表名.*(由于评测原因指定这样书写,实际自己使用可以直接*的)。

  1. #********* Begin *********#
  2. echo "
  3. select instructor.*
  4. from instructor
  5. group by salary desc,name asc;
  6. select max(salary)
  7. from instructor;
  8. select dept_name
  9. from instructor
  10. group by dept_name having avg(salary) >= all
  11. (select avg(salary) from instructor group by dept_name);
  12. select dept_name,avg(salary) as avg_salary
  13. from instructor group by dept_name
  14. having avg(salary)>50000 order by dept_name asc, avg_salary desc;
  15. "
  16. #********* End *********#

第5关:查询(四)

编程要求

在右侧编辑器中的Begin-End之间补充代码,完成下列查询:

  1. 查询在2009年秋季学期开课,但不在2010年春季学期开课的课程名称;

  2. 查询2009年秋季和2010年春季都开设的所有课程号;

  3. 查询2009年秋季学期和2010年春季学期开设的所有课程;

  4. 对于在2009年讲授的每个课程段,如果该课程段至少有两名学生选课,查询该课程段信息和选修该课程段的所有学生的总分数( tot_cred )的平均值。

  1. #********* Begin *********#
  2. echo "
  3. select distinct course_id
  4. from section
  5. where semester='Fall' and year=2009 and
  6. course_id not in (select course_id from section where semester='Spring' and
  7. year=2010);
  8. select course_id
  9. from section as S
  10. where year=2009 and semester='Fall' and exists
  11. (select section.* from section as T where year=2010 and semester='Spring' and
  12. S.course_id=T.course_id);
  13. select course_id
  14. from section
  15. where year=2009 and semester='Fall' union all select
  16. course_id from section where year=2010 and semester='Spring';
  17. select course_id,semester,year,sec_id,avg(tot_cred)
  18. from takes join student join department on takes.ID = student.ID
  19. where year=2009 group by course_id,semester,year,sec_id having count(takes.ID)>=13;
  20. "
  21. #********* End *********#

第6关:查询(五)

编程要求

在右侧编辑器中的Begin-End之间补充代码,完成下列查询:

  1. 查询‘ Physics ’系的所有教师姓名及其课程号;

  2. 查询所有在‘ Physics ’系并且工资大于80000的教师姓名;

  3. 年度工资增长,请你更新各教室的工资,要求10万元以上的教师涨3%,10万元及以下的教师涨5%(注意要先更新工资大于10万的,再更新小于10万的,否则先更新小于10万的,可能更新后大于10万了);

  4. 创建视图,列出‘ Physics ’系在2009年秋季学期开设的所有课程段,以及课程段在哪栋建筑的哪个房间授课,视图名称为Physics_fall_2009

  1. #********* Begin *********#
  2. echo "
  3. select instructor.name,teaches.course_id
  4. from instructor,teaches
  5. where instructor.ID=teaches.ID and dept_name='Physics';
  6. select name
  7. from instructor
  8. where dept_name='Physics' and salary>80000;
  9. update instructor set salary = case when salary <= 100000 then salary*1.05 else salary*1.03 end;
  10. create view Physics_fall_2009 as select course.course_id,building,room_number from course,section where course.course_id = section.course_id and course.dept_name='Physics' and section.semester='Fall' and section.year='2009';
  11. "
  12. #********* End *********#

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/783015
推荐阅读
相关标签
  

闽ICP备14008679号