5.12 添加四张表
student :sid sname sbirth sex
sscore :sid cid score
course :cid cname tid
teacher :tid tname
用excel的randbetween函数造了四张csv文件,导入navicat:
编码—10008 (MAC - Simplified Chinese GB 2312)<百度选择此码没再出现乱码现象>
score字段数据类型选择float
此跳过了建表、 insert into 直接进入面试题练习。
正文
大纲:分为四大模块
一、简单查询
二、汇总分析
三、复杂查询
四、多表查询
构造思路:
壮志前言之一blablabla:
X老师教育我们要不耻下问,同时X教师也教育我们要打好基础,脚踏实地。
<也就是说你可能在山脚会停留很久,并且可能会不断的徘徊绕圈,但相信不久之后你就会爬到山峰..哦不山腰..哦不山坡..哦不还在山脚...>
<哪怕在山脚,但最起码你从山脚的这头爬到了山脚的这头呀~!!!>
凌志前言之二bibibibi:
做出一个准确的报表
1、熟悉表结构,并从业务逻辑上理解每个字段和每个值;
2、构造sql的逻辑思维,过程构造很重要;
3、检查数据是否符合业务逻辑,准确且反复验证;
——来自《风控策略分析师的日常是怎样的》
一、简单查询
练习一:查找学生
1、查询姓‘许’的学生名称
SELECT * FROM student WHERE sname LIKE '许%';
2、查询姓名中最后一个字是‘一’的学生名称
SELECT * FROM student WHERE sname LIKE '%一';
3、查询姓名中带‘清’的学生名称
SELECT * FROM student WHERE sname LIKE '%清%';
4、查询姓‘叶’的学生的个数
SELECT COUNT(sname)as 数量 FROM student WHERE sname LIKE '叶%'
二、汇总分析
练习二:汇总 sum求和 count计数
5、查询课程编号为002的总成绩
SELECT SUM(score) AS 总成绩 FROM sscore WHERE cid='002'
6、查询选了课程的学生人数
SELECT COUNT(DISTINCT sid)选了课程的总人数 FROM
练习三:分组 group by
7、查询各科成绩最高和最低的分
8、查询每门课程被选修的学生数
9、查询男生、女生数
1) count(列名) 区别:https://www.iteye.com/blog/eeeewwwqq-1972576
————————————————————————————————————————5.14————————————————————————————————————————
练习四:分组结果的条件
10、查询平均成绩大于60分学生的学号和平均成绩
11、查询至少选修两门课程的学生学号
12、查询同名同姓的学生名单并统计同名人数
13、查询不及格的课程并按课程号从大到小排列
练习五 :排序
14、查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列
15、查询课程编号为“2”且分数小于60的学生学号,结果按按分数降序排列
16、统计每门课程的学生选修人数(超过2人的课程才统计),查询结果按人数降序排序,若人数相同,按课程号升序排序
17、查询两门以上不及格课程的同学的学号及其平均成绩
三、复杂查询
18、查询所有有课程成绩小于60分学生的学号、姓名
19、查询没有学全所有课的学生的学号、姓名|
20、查询出只选修了两门课程的全部学生的学号和姓名
练习六:日期
21、查找1998年出生的学生名单
练习七:分取每组最大值、最小值、最大的topn记录
22、查询各科成绩前两名的记录
23、取各科成绩最大值、最小值、平均值
24、按课程号分组取成绩最大值所在行的数据
25、按课程号分组取成绩最小值所在行的数据
课程2由于有两个42最低成绩,所以有两行数据
26、查询各科成绩前两名的记录
四、多表查询
练习八:联结
27、查询所有学生的学号、姓名、选课数、总成绩,并按成绩升序
28、查询平均成绩大于85的所有学生的学号、姓名和平均成绩
29、查询学生的选课情况:学号,姓名,课程号,课程名称
30、查询出每门课程的及格人数和不及格人数
31、使用分段[100-85],[85-70],[70-60],[<60]来统计各科成绩,分别统计:各分数段人数,课程号和课程名称
32、查询课程编号为3且课程成绩在80分以上的学生的学号和姓名|
33、将成绩表实现行转列
思路:使用sum/max +case when 简单函数实现行转列