数据库-DQL练习(附答案)

DQL语句练习(附上自编答案)

数据源:
没法导入脚本文件,下面附上建表语句可以自己把语句粘贴在记事本上 改为.sql后缀名使用

show variables like'character_set_%';
set character_set_server=utf8;
set character_set_database=utf8;

create database exp;
use exp;

create table 教师 
 (教师号  char(8) primary key,
  教师名  char(8) not null,
  学院代码  char(10)) default char set ='utf8';

create table 课程
( 课程号 char(8)  primary key,
  课程名 char(20) not null,
  学时   int) default char set ='utf8';
  
  create table 学生
  ( 学号 char(8) primary key,
    姓名 char(10) not null,
    性别 char(4) not null,
    学院代码 char(10)) default char set ='utf8';

create table 授课
( 教师号 char(8) references 教师(教师号),
  课程号 char(8) references 课程(课程号),
  primary key (教师号, 课程号)) default char set ='utf8';
  
  
create table 学院
( 学院代码 char(10) primary key,
  学院名称 char(30) not null) default char set ='utf8';
  

create table 学习
( 学号  char(8) references 学生(学号),
  课程号 char(8) references 课程(课程号),
  教师号 char(8) references 教师(教师号),
  成绩 int ,
  primary key  (学号,课程号,教师号)) default char set ='utf8';

insert into 教师 values('1','李梦','100');
insert into 教师 values('2','张亮','101');
insert into 教师 values('3','王刚','102');
insert into 教师 values('4','赵广','103');
insert into 教师 values('5','孙露','104');

insert into 课程 values('C1','数据库','40');
insert into 课程 values('C2','软件工程','32');
insert into 课程 values('C3','经济学','32');
insert into 课程 values('C4','古代汉语','64');
insert into 课程 values('C5','信号与系统','72');
insert into 课程 values('C6','材料力学','56');
insert into 课程 values('C7','通信原理','72');


insert into 学生 values('T01','王娜','女','100');
insert into 学生 values('T02','李倩','女','100');
insert into 学生 values('T03','张皓','男','100');
insert into 学生 values('T04','李静','女','101');
insert into 学生 values('T05','周小米','女','101');
insert into 学生 values('T06','王石','男','102');
insert into 学生 values('T07','谢楠','女','102');
insert into 学生 values('T08','蒋明','男','102');
insert into 学生 values('T09','陈冲','男','102');
insert into 学生 values('T10','赵琳','女','102');
insert into 学生 values('T11','韩寒','女','103');
insert into 学生 values('T12','吴亮','男','103');
insert into 学生 values('T13','刘波','男','103');
insert into 学生 values('T14','张斌','男','104');
insert into 学生 values('T15','周通','男','104');
insert into 学生 values('T16','张航','男','100');

insert into 学习 values('T01','C1','1',88);
insert into 学习 values('T01','C3','3',54);
insert into 学习 values('T01','C4','3',69);
insert into 学习 values('T01','C5','3',85);
insert into 学习 values('T02','C3','3',74);
insert into 学习 values('T02','C4','3',63);
insert into 学习 values('T02','C5','3',66);
insert into 学习 values('T02','C6','4',77);
insert into 学习 values('T03','C1','1',95);
insert into 学习 values('T03','C2','2',92);
insert into 学习 values('T03','C3','3',92);
insert into 学习 values('T03','C4','3',91);
insert into 学习 values('T03','C5','3',87);
insert into 学习 values('T04','C1','1',83);
insert into 学习 values('T04','C3','3',64);
insert into 学习 values('T04','C5','3',62);
insert into 学习 values('T05','C3','3',83);
insert into 学习 values('T05','C4','3',78);
insert into 学习 values('T05','C6','4',78);
insert into 学习 values('T06','C3','3',66);
insert into 学习 values('T06','C5','5',33);
insert into 学习 values('T07','C3','3',69);
insert into 学习 values('T07','C4','3',56);
insert into 学习 values('T08','C3','3',64);
insert into 学习 values('T08','C5','5',65);
insert into 学习 values('T09','C2','2',64);
insert into 学习 values('T09','C3','3',45);
insert into 学习 values('T10','C3','3',46);
insert into 学习 values('T10','C4','3',56);
insert into 学习 values('T11','C3','3',75);
insert into 学习 values('T12','C3','3',86);
insert into 学习 values('T13','C3','3',67);
insert into 学习 values('T14','C3','3',65);
insert into 学习 values('T15','C3','3',68);
insert into 学习 values('T15','C5','3',56);
insert into 学习 values('T16','C1','1',91);
insert into 学习 values('T16','C2','2',89);
insert into 学习 values('T16','C3','3',94);
insert into 学习 values('T16','C4','3',76);
insert into 学习 values('T16','C5','5',81);
insert into 学习 values('T16','C6','4',82);


insert into 学院 values('100','计算机');
insert into 学院 values('101','机电');
insert into 学院 values('102','管理');
insert into 学院 values('103','材料');
insert into 学院 values('104','文法');

insert into 授课 values('1','C1');
insert into 授课 values('2','C2');
insert into 授课 values('3','C3');
insert into 授课 values('3','C4');
insert into 授课 values('3','C5');
insert into 授课 values('4','C6');
insert into 授课 values('5','C5');
insert into 授课 values('5','C6');
insert into 授课 values('5','C7');

1.求选修了老师“王刚”开课课程且成绩在90分以上的学生姓名、课程名称和成绩;(姓名,课程名,成绩)

select e.姓名,e1.课程名,e2.成绩 from 学生 e,课程 e1,学习 e2,教师 e3 where e.学号=e2.学号 and e1.课程号=e2.课程号 and e2.成绩>90 and e3.教师号=e2.教师号 and e3.教师名="王刚";

2.求选修了“王刚”老师所授全部课程的学生姓名和学院名称;(姓名,学院名称)

select e.姓名,e1.学院名 from 学生 e,学院 e1 where e.学院编码=e1.学院编码 and not exists (select *from 授课 e2,教师 e3 where e2.教师号= e3.教师号 and e3.教师名="王刚" and not exists(select *from 学习 where 学习.学号=e.学号 and 学习.课程号=e2.课程号));

3.求没有选修课程“软件工程”的学生学号和姓名;(学生学号,姓名)

select distinct e.学号,e.姓名 from 学生 e,学习 e1,课程 e2 where e.学号=e1.学号 and e1.课程号=e2.课程号 and not exists(select e5.学号 from 课程 e4,学习 e5  where e5.课程号=e4.课程号 and e4.课程名="软件工程"and e5.学号=e.学号);

4.求至少选修了两门课程的学生学号;(学号)

select distinct e1.学号 from 学习  e1 join (select e2.学号,count(e2.学号) p from 学习 e2 group by e2.学号) t on t.学号=e1.学号 where t.p>=2;

5.求课程“经济学”不及格学生姓名和考试成绩;(姓名,成绩)

select e1.姓名,e3.成绩 from 学生 e1,课程 e2,学习 e3 where e1.学号=e3.学号 and e2.课程号=e3.课程号 and e2.课程名="经济学" and e3.成绩<60;

6.求至少选修了与学号“T06” 同学选修的课程相同的学生学号;(学号)

select e.学号 from 学生 e where not exists (select *from 学习 e1 where e1.学号="T06" and not exists(select *from 学习 e2 where e2.学号=e.学号 and e2.课程号=e1.课程号));

7.求至少选修了“C3,C4”两门课程的学生姓名和学院名称;(姓名,学院名称)

select distinct e.姓名,e1.学院名 from 学生 e,学院 e1,学习 e2 where e.学号=e2.学号 and e.学院编码=e1.学院编码 and e2.课程号="C3”  and e.学号 in (select e3.学号 from 学习 e3 where e3.课程号=”C4”);

8.查询“王石”同学没有选修的课程号和课程名; (课程号,课程名)

select distinct e6.课程号,e6.课程名 from 课程 e6 where e6.课程号 not in ( select  e1.课程号 from 学生 x ,课程 e1,学习 e where x.学号=e.学号 and e.课程号=e1.课程号  and  x.姓名="王石");

9.查询没有被任何学生选修的课程的课程号;(课程号)

select distinct e5.课程号 from 课程 e5 where e5.课程号 not in( select distinct e.课程号 from  学习 e);

10.求选修了全部课程的学生姓名;(姓名)

select e.姓名 from 学生 e where not exists(select *from 课程 e1 where not exists(select *from 学习 e2 where e2.课程号=e1.课程号 and e2.学号=e.学号));

11.查询各学院课程“经济学”的平均分,并按照成绩从高到低的顺序排列;(学院名称,平均分)

select e3.学院名 ,avg(e.成绩) 成绩 from 学习 e,课程 e1,学生 e2,学院 e3 where e.学号=e2.学号 and e.课程号=e1.课程号 and e2.学院编码=e3.学院编码 and e1.课程名=”经济学” group by e2.学院编码 order by 成绩 desc;

12.查询选修课程“经济学”的学生姓名和所在院系,结果按各院系排列,同时成绩从高到低排列;(姓名,学院名称,成绩)

select e2.姓名 ,e3.学院名, e.成绩  from 学习 e,课程 e1,学生 e2,学院 e3 where e.学号=e2.学号 and e.课程号=e1.课程号 and e2.学院编码=e3.学院编码 and e1.课程名=”经济学” order by e3.学院名 desc,e.成绩 desc;

13.求学时在30-45之间(含30和45)的课程的课程号和课程名称及授课教师;(课程号,课程名,教师姓名)

select e.课程号,e.课程名,e1.教师名 from 课程 e,教师 e1,授课 e2 where e.课程号=e2.课程号 and e2.教师号=e1.教师号 and e.学时 between 30 and 45;

14.检索选修课程“经济学”的最高分学生的姓名;(姓名)

select e1.姓名 from 学生 e1 ,学习 e2,课程 e3 where e1.学号=e2.学号 and e2.课程号=e3.课程号 and e3.课程名=”经济学” and e2.成绩=(select max(e.成绩)  from 学习 e,课程 e0 where  e.课程号=e0.课程号  and e0.课程名=”经济学”);

15.查询选课人数超过5人的课程的课程号及课程名;(课程号,课程名)

select e.课程号,e.课程名 from 课程 e join(select e1.课程号,count(e1.课程号) number from 学习 e1 group by e1.课程号) t on e.课程号=t.课程号 where  number>5;

有错误/好的建议可以评论回复,谢谢观看.

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

看不见的罗辑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值