目录
1.简单查询:模糊查询
2.汇总分析:分组、分组结果条件
3.复查查询:标量子查询,面试top n问题
4.多表查询:多表联结(左联结)、转换行列问题
5.如何提高sql的查询效率
背景:
1.简单查询
1:查找姓猴的学生(模糊查询)
2.查询姓名中最后一个字是猴的学生名单
3.查询姓名中带猴的名单
4.查询姓“孟”老师的个数(count函数)
------------------------------------------------------------------------------
2.汇总分析
1.查询课程编号为“0002”的总成绩
2.查询选了课程的学生人数
2.1分组汇总分析
1.查询各科成绩的最高值和最低值
2.查询每门课程选修的人数
3.查询男生、女生人数
2.1.1分组结果的条件
1.查询平均成绩大于60分的学号和平均成绩
2.查询至少选修两门课程学生的学号
3.查询同名同姓学生名单并统计人数
4.查询不及格的课程并按课程号从大到小排列
5.查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列
6.检索课程编号为“0004”且分数小于60的学生学号,结果按按分数降序排列
7.统计每门课程的学生选修人数(超过2人的课程才统计)
要求输出课程号和选修人数,查询结果按人数降序排序,若人数相同,按课程号升序排序
8.查询两门以上不及格课程的同学的学号及其平均成绩
------------------------------------------------------------------------------
3.复查查询
3.1子查询(in,all,any)
1.***查询所有课程成绩小于60分学生的学号、姓名
2.查询没有学全所有课的学生的学号、姓名|
3.查询出只选修了两门课程的全部学生的学号和姓名|
4.1990年出生的学生名单
3.2面试top n问题
关联子查询
这类问题其实就是常见的:分组取每组最大值、最小值,每组最大的N条(top N)记录。
如何找到每个类别下用户最喜欢的产品是哪个?
如何找到每个类别下用户点击最多的5个商品是什么?
问题: 按课程号分组取成绩最大值所在行的数据
关联子查询
2.分组取每行最小值
3.查询各科成绩前两名的记录
------------------------------------------------------------------------------
4.多表查询
背景
1.
2.
3.
*转换行列
5.如何提升sql的查询效率
1.select子句中尽量避免使用*,select子句中,*是选择全部数据的意思
2.where子句比较符号左侧避免函数,导致数据库引擎进行全表扫描,从而增加运行时间。
3.尽量避免使用in和not in,导致数据库进行全表搜索
4.尽量避免使用or,可以用union代替
5.使用limit子句限制返回的数据行数