mysql升序和降序语句_MySQL-六-面试题总结

1.简单查询

练习一:查询姓猴的学生名单

0349a58917059a5d94f6504e1f55d7fb.png

练习二:查询姓名中最后一个字是猴的学生名单

6a9f5db00589be7694d41323da138a8e.png

练习三:查询姓名中带猴的学生名单

8081c24d69244e2dc7cfbbc2911246a3.png

练习四:查询姓孟老师的个数

6d640b092c698be7c595a453a1d44ca3.png

2.汇总分析

练习五:查询课程编号为‘0002’的总成绩

079e5efbbf22f765d13951443b1d19d6.png

练习六:查询选了课程的学生人数

d6184aa308624458efc59e90a56798ca.png

练习七:查询各科成绩最高和最低的分

5e749a78ecdadb52b6f38cf018d539f5.png

练习八:查询每门课程被选修的学生人数

4e0fd43f9ad5c3944b36488dcf077d6b.png

练习九:查询男生女生人数

7d71fc1ea86b17efc78b981bd90f01c5.png

练习十:查询平均成绩大于60分学生的学号和平均成绩

04df44f12533289600806df6298b4974.png

练习十一:查询至少选修两门课程的学生学号

ee8b233abf1c9875764b5c788bf8bf84.png

练习十二:查询同名同姓学生名单并统计同名人数

62e7ce5ac8bb4121c4eea6c3f189be6b.png

练习十三:查询不及格的课程并按照课程号从大到小排列

910b76c0e72fa4e9c6cf4a920522f937.png

练习十四:查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列

fe212a65a0757505f2192fc92af407d6.png

练习十五:检索课程编号为“0004”且分数小于60的学生学号,结果按按分数降序排列

3c3e510b8853029891ec9e3efad38cc3.png

练习十六:统计每门课程的学生选修人数(超过2人的课程才统计),要求输出课程号和选修人数,查询结果按人数降序排序,若人数相同,按课程号升序排序

854c5319ad6d81b1ccad5266728d8019.png

练习十七:查询两门以上不及格课程的同学的学号及其平均成绩

f1f36387329de13641d275bff207090c.png

三.复杂查询

练习十八:查询所有课程成绩小于60分学生的学号、姓名

思路:1.查询所有学生的学号,姓名。2.条件是:所有课程的成绩小于60

4e29855d0d8daa1229b0a7c083a129cf.png

练习十九:查询没有学全所有课的学生的学号、姓名

e5d15e10d274da8188064bf0bc12fce8.png

练习二十:查询出只选修了两门课程的全部学生的学号和姓名

491720ebf83e984a6e3a55c3bd96c809.png

练习二十一:1990年出生的学生名单

431dd1026ce4b62f86a295cb30591413.png
应用日期函数year()

732a17ed96a60ba40fe719bc902878f2.png

面试题补充:

2e7c45b30dc94e349ed833b4cd58ea1c.png

练习二十二:分组取每组最大值,按课程号分组取求成绩最大值所在行的数据

43dd0acd48ae7284dda4e0b15a7cd1c9.png
关联子查询

练习二十三:按课程号分组取成绩最小值所在行的数据

905e9b56cd9d49da94047616798da7c3.png

案例:练习二十四:查询各科成绩前两名的记录(topN系列问题)

第1步,先查出有哪些组,按课程号分组。

查询有哪些课程号。

35bb943bddf00179ed72f5a6182b1768.png

(分别求出各个组的前两名)求课程号'0001' 这一组里成绩前2名。

4a5d4fc5172c1a1124703f9a59ca065b.png

写出其他组的(其他课程号)取出成绩前2名的sql

978431749f484e123f2514ec7698ac34.png
0002

2c8af2c20396cc915f14d76f0d280fba.png
0003

使用union all 将每组选出的数据合并到一起,UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值。UNION 操作符用于合并两个或多个 SELECT 语句的结果集。默认地,UNION 操作符选取不同的值。如果允许重复的值,使用 UNION ALL。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同

(SELECT *
from score
WHERE 课程号='0001'
ORDER BY 成绩 DESC
LIMIT 2)
UNION ALL
(SELECT * 
FROM score
WHERE 课程号='0002'
ORDER BY 成绩 DESC
LIMIT 2)
UNION ALL
(SELECT *
FROM score
WHERE 课程号='0003'
ORDER BY 成绩 DESC
limit 2)

88640269809e295e13acefabbe637f2d.png
topN系列问题

MySQL中的UNION

UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。如

select * from gc_dfys unionselect * from ls_jg_dfys

这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。

使用Union,则所有返回的行都是唯一的,如同对整个结果集合使用了DISTINCT。

MySQL中的UNION ALL

UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL,如下:

select * from gc_dfys union all select * from ls_jg_dfys

如果使用ORDER BY或LIMIT子句来对全部UNION结果进行分类或限制,则应对单个地SELECT语句加圆括号,并把ORDER BY或LIMIT放到最后一个的后面

例如
(SELECT a FROM tbl_name WHERE a=10 AND B=1)   
UNION 
(SELECT a FROM tbl_name WHERE a=11 AND B=2) 
ORDER BY a LIMIT 10; 

四.多表查询

练习二十五:查询所有学生的学号、姓名、选课数、总成绩

505bf571661674c828a63e3bcd93e33b.png

练习二十六:查询平均成绩大于85的所有学生的学号、姓名和平均成绩

48247677123423a88a095dba2080f387.png

练习二十七:查询学生的选课情况:学号,姓名,课程号,课程名称

15d489f939d4dd94f799cbcb7ffabaa7.png

-- 考察case表达式

练习二十八:查询出每门课程的及格人数和不及格人数

5d14f088618751cac023958dea660a1e.png

练习二十九:使用分段[100-85],[85-70],[70-60],[‹60]来统计各科成绩,分别统计:各分数段人数,课程号和课程名称

97b02fa1e355328156f044d4f39a787f.png

练习三十:查询课程编号为0003且课程成绩在80分以上的学生的学号和姓名

401ff8a0484a3cb1671553eabf459b8d.png

练习三十一:面试题:行列如何互换的问题

下面是学生的成绩表(表名score,列名:学号、课程号、成绩)

1fd145d2a3a850b9f8a7f22a1fd15840.png

使用sql实现将该表行转列为下面的表结构

aeeb24f13ad44c97c8ac85126ff51c56.png

第1步,使用常量列输出目标表的结构

6442a36d8f970f2fa03a47f90b1274fb.png

第2步,使用case表达式,替换常量列为对应的成绩/分组,并使用最大值函数max取出上图每个方块里的最大值

682820d39e8d6787ce194d9c438387f8.png

课上练习题共三十一道,结束。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值