mysql语句复杂使用_mysql--复杂sql语句解析

本文梳理了SQL中涉及Join和Group By的关键查询,包括查询选修特定课程的学生信息、选修多门课程的学生、学员选修课程信息、未选修特定课程的学生、各门课选修人数、学员选修课程数量、不及格学生信息、各门课平均成绩及极端值、选修人数超过两人的课程、平均成绩高于某课程平均成绩的学生以及年龄与平均成绩关系等复杂查询。通过实例解析,帮助读者理解和掌握这些高级查询技巧。
摘要由CSDN通过智能技术生成

但凡是sql语句麻烦的都是牵扯到join和group by的,即使平时用到的不多但在面试的过程中被提及的可能性是非常大的,反正对自己都是有用的,在这里就梳理一下。

1 搜索选修课程是税收基础的学生信息

SELECTs.*

FROMc

JOINscONc.id=sc.cid

JOINsONs.id=sc.sid

WHEREc.cn='税收基础'

2 查询选修课程大于2门课的学生信息

SELECTm.*

FROM(

SELECT

s

.

*

,

count

(

*

)

AS

aaa

FROM

s

JOIN

sc

ON

s

.

id

=

sc

.

sid

GROUP

BY

s

.

id

)m

WHEREm.aaa>3

或者

SELECTs.*,count(*)

FROMs

JOINscONs.id=sc.sid

GROUPBYs.id

HAVINGcount(*)>3

3 查询学员朱欣磊选修的课程信息

SELECTs.*

FROMs

JOINscONs.id=sc.sid

WHEREs.sn='朱欣磊'

4查询没有选择数学课的学生信息

SELECT*

FROMs

WHEREidNOT

IN(

SELECT

s

.

id

FROM

s

JOIN

sc

ON

s

.

id

=

sc

.

sid

JOIN

c

ON

c

.

id

=

sc

.

cid

WHERE

c

.

cn

=

'数学'

)

先查找的选修了数学的学生,然后排除的

5查询没门课选修的人数

SELECTcn,count(*)

FROMs

JOINscONs.id=sc.sid

JOINcONc.id=sc.cid

GROUPBYcn

6 查询每个学员选修了几门课程

SELECTsn,count(*)

FROMs

JOINscONs.id=sc.sid

JOINcONc.id=sc.cid

GROUPBYsn

7 查询选修课程不及格的学生信息及课程信息

SELECT*

FROMs

JOINscONs.id=sc.sid

JOINcONc.id=sc.cid

WHEREsc.g<60

8查询各门课的平均成绩,输出课程名及平均成绩,最高,最低

SELECTc.cn,avg(g),max(g),min(g)

FROMs

JOINscONs.id=sc.sid

JOINcONc.id=sc.cid

GROUPBYcn

9 查询至少有两人选修的课程

SELECTcn

FROMs

JOINscONs.id=sc.sid

JOINcONc.id=sc.cid

GROUPBYcn

HAVINGcount(*)>2

10 查询税收基础成绩不低于平均成绩的学生信息及其成绩

SELECTsn,sc.g

FROMs

JOINscONs.id=sc.sid

JOINcONc.id=sc.cid

GROUPBYcn

HAVINGsc.g>avg(sc.g)

这样写是不正确的,这里

SELECT *

FROM s

JOIN sc ON s.id=sc.sid

JOIN c ON c.id=sc.cid

where c.cn = '税收基础' and g > (select avg(g) from sc where cid = 1)

11 查询年龄是21岁的平均成绩最高的学生信息

select max(abc.aaa) from (select sa,avg(g) as aaa   from s join sc on s.id = sc.sid join c on c.id = sc.cid group by s.id) as abc  where abc.sa = 21

12 查询选修过课的学生的总人数

select *,count(*) from sc group by sc.sid

这是不行的,这种写法以为是以学生来分类的,所以取出的是每个学生选修了几门课

select count(*) from (select *,count(*) from sc group by sc.sid)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值