# 1、查询所有的课程的名称以及对应的任课老师姓名
#where
select
teacher.tname,course.cname
from
teacher,course
where
course.teacher_id = teacher.tid #内联写法
select
teacher.tname,course.cname
from
teacher inner join course on course.teacher_id = teacher.tid; # 2、查询学生表中男女生各有多少人
select
gender,count(*)
from
student
group by
gender; # 3、查询物理成绩等于100的学生的姓名
#where
select
student.sid,student.sname,score.num
from
course,score,student
where
course.cid = score.course_id
and student.sid = score.student_id
and course.cname = "物理"
and score.num = 100 # inner join
select
student.sid,student.sname,score.num
from
course inner join score on course.cid = score.course_id
inner join student on student.sid = score.student_id
where
course.cname = "物理"
and score.num = 100 #4.查询平均成绩大于八十分的同学的姓名和平均成绩
select
student_id,avg(num)
from
score
group by
student_id
having
avg(num) > 80; #where 写法
select
student_id,avg(num),sname
from
score,student
where
score.student_id = student.sid
group by
student_id
having
avg(num) > 80; #内联写法
select
student_id,avg(num),sname
from
score inner join student on score.student_id = student.sid
group by
student_id
having
avg(num) > 80; # 5、查询所有学生的学号,姓名,选课数,总成绩
#选课数
select
student_id,count(*)
from
score
group by
student_id
#总成绩
select
student_id,sum(num)
from
score
group by
student_id #where
'''group by +字段 by谁搜谁,跟其他表要搜索的字段无关'''
select
student_id,sname,count(*),sum(num)
from
score,student
where
score.student_id = student.sid
group by
student_id; #内联写法
select
student_id,sname,count(*),sum(num)
from
score inner join student on score.student_id = student.sid
group by
student_id; #附加(展现所有学生,使用左联以学生表为主)
select
student.sid,sname,count(score.course_id),sum(num)
from
student left join score on score.student_id = student.sid
group by
student.sid; ## 6、 查询姓李老师的个数
select
count(*)
from
teacher
where
tname like "李%"; # 7、 查询没有报李平老师课的学生姓名
#1.先查报了李平老师课程的学生id
'''distinct 去重
distinct score.student_id
distinct(score.student_id)
'''
select
distinct(score.student_id)
from
teacher,course,score
where
teacher.tid = course.teacher_id
and course.cid =score.course_id
and teacher.tname = "李平";
#2.除了这些学习李平老师id的,剩下的就没有学习李平课程的
select
*
from
student
where
sid not in (1号);
#3.综合拼接
select
sname
from
student
where
sid not in (select
distinct(score.student_id)
from
teacher,course,score
where
teacher.tid = course.teacher_id
and course.cid =score.course_id
and teacher.tname = "李平"
); ## 8、 查询物理课程的分数比生物课程的分数高的学生的学号
#1.物理课程学生分数
select
score.student_id,score.num,course.cid
from
course inner join score on course.cid = score.course_id
where
course.cname ="物理";
#2.生物课程学生分数
select
score.student_id,score.num,course.cid
from
course inner join score on course.cid = score.course_id
where
course.cname = '生物'
#3.综合拼接
select
t1.t1_id
from
(select
score.student_id as t1_id,score.num as t1_num,course.cid as t1_cid
from
course inner join score on course.cid = score.course_id
where
course.cname = "物理"
) as t1
inner join(select
score.student_id as t2_id,score.num as t2_num,course.cid as t2_cid
from
course inner join score on course.cid = score.course_id
where
course.cname = "生物"
) as t2
on t1.t1_id = t2.t2_id
where
t1.t1_num > t2.t2_num; # 9、 查询没有同时选修物理课程和体育课程的学生姓名
#1.找物理和体育的课程id
select
course.cid
from
course
where
cname ="物理" or cname = "体育"
#2.找学习了体育和物理的学生id
select
student_id
from
score
where
course_id in(2,3);
#3.拼接数据
select
student_id
from
score
where
course_id in(select
course.cid
from
course
where
cname = "物理" or cname = "体育"
);
#4.(同时)学习物理和体育的学生id
select
student_id
from
score
where
course_id in (select
course.cid
from
course
where
cname = "物理" or cname = "体育"
)
group by
score.student_id
having
count(*) = 2;
#5.除了同时学习物理和体育的学生id之外,剩下的都是没有同时学习的id
select
sid
from
student
where
sid not in (3号)
#6.综合拼接
select
sid
from
student
where
sid not in (select
student_id
from
score
where
course_id in (select
course.cid
from
course
where
cname = "物理" or cname = "体育"
)
group by
score.student_id
having
count(*) = 2) #10、查询挂科超过两门(包括两门)的学生姓名和班级
'''通过查询出来的id,在和其他表进行联表,找出需要中的对应字段展示即可'''
select
student_id,sname,caption
from
score inner join student on student.sid = score.student_id
inner join class on class.cid = student.class_id
where
num < 60
group by
student_id
having
count(*) >= 2; # 11、查询选修了所有课程的学生姓名
# 1.先统计所有课程总数
select count(*) from course;
#2.按照学生分类,总数量是1号查询出来的数据,就认为学了所有课
select
score.student_id,student.sname
from
socre inner join student on score.student_id = student.sid
group by
score.student_id
having
count(*) = (select count(*) from course);
#3.综合拼接
select
score.student_id,student.sname
from
score inner join student on score.student_id = student.sid
group by
score.student_id
having
count(*) = (1号); # 12、查询李平老师教的课程的所有成绩记录
#内联写法
select
score.student_id,course.cid,course.cname,score.num
from
teacher,course,score
where
teacher.tid = course.teacher_id
and
score.course_id = course.cid
and
teacher.tname = '李平';
#1.找李平老师所有课程id
select
course.cid
from
teacher,course
where
teacher.tid = course.teacher_id
and
teacher.tname ="李平";
#2.找这几门课程对应的数据
select
*
from
score
where
course_id in (1号)
#3.综合拼接
select
*
from
score
where
course_id in (select
course.cid
from
teacher,course
where
teacher.tid = course.teacher_id
and
teacher.tname = "李平"
); #13.查询全部学生都选修了的课程号和课程名
#1.通过score表,找有成绩的学生个数
select
count(distinct student_id)
from
score
#2.按照课程分类,筛选学生个数为13的课程id(一个学科被13人学习,等于说都选秀了)
select
course_id
from
score
group by
course_id
having
count(*) = (1号数据13);
#3.综合拼接
select
course_id,course.cname
from
score,course
where
score.course_id = course.cid
group by
course_id
having
count(*) = (select
count(distinct student_id)
from
score
); #14.查询每门课程被选修的次数
select
course_id,count(*)
from
score
group by
course_id; #15.查询只选修了一门课程的学生学号和姓名
#1.按照学生分类,统计个数是1(选一门)
select
student_id
from
score
group by
student_id
having
count(*) = 1;
#2.顺带连一张学生表,通过id拿学生姓名
select
student_id,student.sname
from
score inner join student on score.student_id =student.sid
group by
student_id
having
count(*) = 1; #16.查询所有学生考出的成绩并按从高到低排序(成绩去重)
select
distinct num
from
score
order by
num desc; #加上学生形成一一对应的关系
select
distinct num,student_id
from
score
order by
num desc; ## 17、查询平均成绩大于85的学生姓名和平均成绩
#1.先搜索出学生id
select
score.student_id,avg(score.num)
from
score
group by
score.student_id
having
avg(score.num) > 85;
#2.拿id顺带联一张学生表找出姓名
select
score.student_id,avg(score.num),student.sname
from
score inner join student on student.sid =score.student_id
group by
score.student_id
having
avg(score.num) >85; # 18、查询生物成绩不及格的学生姓名和对应生物分数
select
student.sname,score.num,course.cname
from
course inner join score on score.course_id =course.cid
inner join student on score.student_id = student.sid
where
score.num < 60
and
course.cname ="生物"; #查询在所有选修了李平老师课程的学生中,这些课程(李平老师的课程,不是所有课程)平均成绩最高的学生姓名
#1.找李平老师所教的课程id
select
course.cid
from
teacher,course
where
teacher.tic =course.teacher_id
and
teacher.tname = "李平"; #(2,4)
#2.在学习李平老师课程基础上,按照学生分类,找出平均分最高的id
select
score.student_id
from
score
where
score.course_id in (2,4)
group by
score.student_id
order by
avg(num) desc limit 1;
#3.通过学生id,顺带连一张学生表,找出姓名
select
score.student_id,student.sname,avg(num)
from
score,student
where
score.student_id =student.sid
and
score,course_id in(2,4)
group by
score.student_id
order by
avg(num) desc limit 1; # 20、查询每门课程成绩最好的学生姓名和分数,课程id
#1.找分数最大值,按照课程分类
select
course_id,max(num) as max_num
from
score
group by
score.course_id;
#2.找出该分数对应的学生相关数据
select
*
from
score as t1 inner join(1号) as t2 on t1.course_id = t2.course_id
inner join student t3 on t1.student_id =t3.sid;
#3.数据拼接
select
t2.max_num,t3.sname,t1.course_id
from
score as t1 inner join(select
course_id,max(num) as max_num
from
score
group by
score.course_id
) as t2 on t1.course_id = t2.course_id
inner join student t3 on t1.student_id = t3.sid
where
t2.max_num = t1.num #21.查询不同课程但成绩相同的,学生号,成绩,课程号
select
s1.student_id as s1_sid,
s2.student_id as s2_sid,
s1.course_id as s1_cid,
s2.course_id as s2_cid,
s1.num as s1_num,
s2.num as s2_num
from
score as s1,
score as s2
where
# 不同的课程 (不要使用!= 相同的数据会查两遍,>的一遍,<的一遍)
s1.course_id > s2.course_id
and
s1.num = s2.num # 24、任课最多的老师中学生单科成绩最高的课程id、学生姓名和分数
# 1.老师任课的最大数量是几门?
select
count(*)
from
course
group by
teacher_id
order by
count(*) desc limit 1 # 2.找最大任课数量为2的老师id
select
teacher_id
from
course
group by
teacher_id
having
count(*) = (1号) # 综合拼接
select
teacher_id
from
course
group by
teacher_id
having
count(*) = (select
count(*)
from
course
group by
teacher_id
order by
count(*) desc limit 1) # 3.通过老师id,找对应课程
select cid from course where teacher_id in (2) # 2,4 # 4.通过该课程号,找其中的最大分数
select
course_id,
max(num) as max_num
from
score
where
course_id in (3号)
group by
course_id # 5.把对应的学生姓名,最大分数拼在一起,做一次单表查询
select
t1.num,t2.max_num,t3.sid,t3.sname,t1.course_id
from
score t1 inner join (4号) t2 on t1.course_id = t2.course_id
inner join student t3 on t3.sid = t1.student_id
where
t1.num = t2.max_num # 综合拼装: select
t1.num,t2.max_num,t3.sid,t3.sname,t1.course_id
from
score t1 inner join (select
course_id,
max(num) as max_num
from
score
where
course_id in (select cid from course where teacher_id in (select
teacher_id
from
course
group by
teacher_id
having
count(*) = (select
count(*)
from
course
group by
teacher_id
order by
count(*) desc limit 1)))
group by
course_id
) t2 on t1.course_id = t2.course_id
inner join student t3 on t3.sid = t1.student_id
where
t1.num = t2.max_num

sql题目---day39的更多相关文章

  1. LeetCode SQL题目(第一弹)

    LeetCode SQL题目 注意:Leetcode上的SQL编程题都提供了数据表的架构程序,只需要将它贴入本地数据库即可调试自己编写的程序 不管是MS-SQL Server还是MySQL都需要登陆才 ...

  2. Oracle语法 及 SQL题目(一)

    目录 课例复制 SQL题目一 SQL题目二 SQL题目三 笔记 课例复制 OCM 全称:Oracle Certified Master 认证大师 含义:Oracle 原厂推出的数据库方向最高级别认证 ...

  3. Oracle语法 及 SQL题目(三)

    目录 SQL题目六 第一个问题思路(查询酒类商品的总点击量) 第二个问题思路(查询每个类别所属商品的总点击量,并按降序排列) 第三个问题思路(查询所有类别中最热门的品种(点击量最高),并按点击量降顺序 ...

  4. 网上一些sql题目的解决(网上答案+自己答案)

    此篇博客内容引自“MySQL经典练习题及答案” 废话不不多说!!! 建表.插入数据. --建表 --学生表 CREATE TABLE Student( s_id VARCHAR(20), s_name ...

  5. 面试题中遇到的SQL题目

    1.假设有一张表示cj表 Name Subject Result 张三 语文 80 张三 数学 90 张三 物理 85 李四 语文 85 李四 数学 92 李四 物理 82 要求查询结果: 姓名 语文 ...

  6. 感觉挺有意思的SQL题目

    1.有如下数据,要求查询每个班最低分和最高分,并将最高分与最低分显示为同一列 ID Student CourseName Score1 张三 English 802 张三 Math 703 张三 Ch ...

  7. sql 题目

    1.自增列 通用: ) from table b where b.sid<a.sid) ,* from table a; ,),* from ... 第二个已经有主键自增列的就不可以用了 还有就 ...

  8. Oracle语法 及 SQL题目(二)

    目录 课例复制 思考题四 解题思路 思考题五 解题思路 课例复制 思考题四 最近,经过你的努力,你得到了一份工作,成为了百货公司的一位经理. 到位后,你发现你的销售数据库中有两张表,一个是商店促销时间 ...

  9. Sql题目精选练习

    1.每日经典sql 1.1.1 根据三张关系表查询雇员中工资最高的雇员的员工姓名.工资和部门号. salary(工资表) employee(员工表) department(部门表) Sql语句: SE ...

  10. Leetcode中的SQL题目练习(二)

    175. Combine Two Tables https://leetcode.com/problems/combine-two-tables/description/ Description Pe ...

随机推荐

  1. [转帖]读懂什么是RDMA

    https://blog.csdn.net/tony_vip?type=blog 一.什么是RDMA1.RDMA主要体现     2.如何理解RDMA和TCP技术的区别?3.使用RDMA的好处包括: ...

  2. [转帖]【k8s】1、基础概念和架构及组件

    文章目录 一.kubernetes概述 1.什么是kubernetes? 2.应用程序部署方式的演变 3.为什么要用kubernetes? 二.kubernetes 特性 三.Kubernetes集群 ...

  3. Oracle TNS 异常问题处理

    今天下午快下班时同事找我说自己的性能测试Oracle数据库 连不上了. 然后自己连上去简单看了一下. 因为已经是事后了, 所以没有截图,只通过文字说明. 环境说明:Win2012r2 + Oracle ...

  4. MySQL查询排序和分页

    连接数据库 mysql -hlocalhost -uroot -proot 排序查询语法: select 字段列表 from 表名 order by 字段1 排序方式1, 字段3 排序方式2,字段3 ...

  5. 火狐谷歌浏览器去掉input type=number时控件的方法

    html 默认:<input type="number" /></br> 处理:<input type="number" clas ...

  6. Django笔记四十二之model使用validator验证器

    本文首发于公众号:Hunter后端 原文链接:Django笔记四十二之model使用validator验证器 这一篇笔记介绍一下 model 里的 validator 验证器. 首先,这是个什么东西呢 ...

  7. 强化学习从基础到进阶-案例与实践[1]:强化学习概述、序列决策、动作空间定义、策略价值函数、探索与利用、Gym强化学习实验

    强化学习从基础到进阶-案例与实践[1]:强化学习概述.序列决策.动作空间定义.策略价值函数.探索与利用.Gym强化学习实验 1.1 强化学习概述 强化学习(reinforcement learning ...

  8. Python 实现ARP扫描与欺骗

    ARP欺骗又称ARP毒化或ARP攻击,是针对以太网地址解析协议ARP的一种攻击技术,通过欺骗局域网内访问者PC的网关MAC地址,使访问者PC错以为攻击者更改后的MAC地址是网关的MAC,导致网络不通. ...

  9. C/C++ 数据结构与算法笔记

    实现顺序表 #include <stdio.h> #include <stdlib.h> #define MaxSize 10 int Insert_Elem(int Arra ...

  10. Python 实现 WebSocket 通信

    WebSocket 协议主要用于解决Web前端与后台数据交互问题,在WebSocket技术没有被定义之前,前台与后端通信需要使用轮询的方式实现,WebSocket则是通过握手机制让客户端与服务端建立全 ...