博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于面试总结3-SQL查询
阅读量:6256 次
发布时间:2019-06-22

本文共 2188 字,大约阅读时间需要 7 分钟。

前言

select top n 形式的语句可以获取查询的前几个记录,但是 mysql没有此语法,mysql用limit来实现相关功能。

LIMIT子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。
如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。

  • 1.列出数学成绩前3名的学生(要求显示字段:学号,姓名, 科目,成绩)
  • 2.查询数学成绩第2和第3名的学生
  • 3.查询第3名到后面所有的学生数学成绩
  • 4.统计英语课程少于80分的,显示 学号id, 姓名,科目,分数
  • 5.查找每科成绩前2名,显示id, 姓名,科目,分数

万年不变学生表

有2张表,学生表(student)基本信息如下

1070438-20181204155909464-1704583458.png

科目和分数表(grade)

1070438-20181204160136256-480175290.png

查询前3名

1.列出数学成绩前3名的学生(要求显示字段:学号,姓名, 科目,成绩)

select  * from grade where kemu = '数学'order by score desclimit 3

1070438-20181206142132372-917186796.png

先通过limit取出前三条记录,再结合student表查询

select  a.id, a.name, b.kemu, b.scorefrom student a, grade bwhere a.id = b.idand kemu = '数学'order by score desclimit 3

1070438-20181206142425057-1744635616.png

查询第2-3名记录

2.查询数学成绩第2和第3名的学生

imit后面如果只写一个整数n,那就是查询的前n条记录;如果后面带2个整数n 和 m,那么第一个数n就是查询出来队列的起点(从0开始),第二个是m是统计的总数目

第2-3条记录,那么起点就是1, 第2-3名有2条记录,那么第二个参数就是2

select  a.id, a.name, b.kemu, b.scorefrom student a, grade bwhere a.id = b.idand kemu = '数学'order by score desclimit 1, 2

1070438-20181206142926231-1584457249.png

备注:limit是按条数取的,名次一样的,也算一个记录。如果取第5-14的记录,那就是limit 4 10

查询第3到后面所有的

3.查询第3名到后面所有的学生数学成绩

select  a.id, a.name, b.kemu, b.scorefrom student a, grade bwhere a.id = b.idand kemu = '数学'order by score desclimit 3, 10000

注意:有些资料上写的limit 3, -1 用-1代码最大值,这个是不对的,会报错,解决办法:随便写个非常大的整数

1070438-20181206144651434-1075458107.png

英语课程少于80分的人

4.统计英语课程少于80分的,显示 学号id, 姓名,科目,分数

SELECT a.id, a.name, b.kemu, b.scoreFROM student a, grade bWHERE a.id = b.idAND b.kemu = '英语'AND b.score < 80

1070438-20181206150236455-170501914.png

统计每门课程不及格、一般、优秀

课程 不及格(<60) 一般(60<= x <=80) 优秀(>80)
SELECT b.kemu, (SELECT COUNT(*) FROM grade WHERE score < 60 and kemu = b.kemu) as 不及格,(SELECT COUNT(*) FROM grade WHERE score between 60 and 80 and kemu = b.kemu) as 一般,(SELECT COUNT(*) FROM grade WHERE score > 80 and kemu = b.kemu) as 优秀 FROM grade bGROUP BY kemu

1070438-20181206151653883-2074209940.png

查找每科成绩前2名

5.查找每科成绩前2名,显示id, 姓名,科目,分数

先按科目和分数查询

SELECT t1.id, t1.kemu,t1.score FROM grade t1 ORDER BY t1.kemu,t1.score DESC

1070438-20181206165642599-458276708.png

再查找每个每科前面2名

SELECT t1.id, a.name, t1.kemu,t1.scoreFROM grade t1, student aWHERE    (SELECT count(*) FROM grade t2     WHERE t1.kemu=t2.kemu AND t2.score>=t1.score    )<=2and a.id = t1.idORDER BY t1.kemu,t1.score DESC

1070438-20181206165917388-956959103.png

如果第二名有重复的,也能一起查找出来

SELECT t1.id, a.name, t1.kemu,t1.scoreFROM grade t1, student aWHERE    (SELECT count(*) FROM grade t2     WHERE t1.kemu=t2.kemu AND t2.score>t1.score    )<2and a.id = t1.idORDER BY t1.kemu,t1.score DESC

转载地址:http://owxsa.baihongyu.com/

你可能感兴趣的文章
zabbix主动被动模式说明/区别
查看>>
神奇的AC
查看>>
数据库防火墙——实现数据库的访问行为控制、危险操作阻断、可疑行为审计...
查看>>
PCIE_DMA实例一:xapp1052详细使用说明
查看>>
MySQL也有潜规则 – Select 语句不加 Order By 如何排序?
查看>>
Struts(二十八):自定义拦截器
查看>>
安装Jenkins getting started卡住
查看>>
金软PDF转换(x-PDFConper)
查看>>
喵哈哈村的魔法考试 Round #15 (Div.2) 题解
查看>>
使用架构(XSD)验证XML文件
查看>>
Android开发之httpclient文件上传实现
查看>>
极客头条使用心得
查看>>
CSS解决无空格太长的字母,数字不会自己主动换行的问题
查看>>
日志打印longging模块(控制台和文件同时输出)
查看>>
这些年我们一起搞过的持续集成~Jenkins+Perl and Shell script
查看>>
php新版本号废弃 preg_replace /e 修饰符
查看>>
Android:Unable to resolve target ‘android-8’问题解决
查看>>
cocos2D(七)---- CCScene
查看>>
【DeepLearning】汉字手写体识别
查看>>
2017年中国大学生程序设计竞赛-中南地区赛暨第八届湘潭市大学生计算机程序设计大赛题解&源码(A.高斯消元,D,模拟,E,前缀和,F,LCS,H,Prim算法,I,胡搞,J,树状数组)...
查看>>