关于面试总结-SQL经典面试题
关于面试总结6-SQL经典面试题
前言
用一条SQL 语句查询xuesheng表每门课都大于80 分的学生姓名,这个是面试考sql的一个非常经典的面试题
having和not in
查询 xuesheng表每门课都大于80 分的学生姓名
| name | kecheng | score |
|---|---|---|
| 张三 | 语文 | 81 |
| 张三 | 数学 | 73 |
| 李四 | 语文 | 86 |
| 李四 | 数学 | 90 |
| 王五 | 数学 | 89 |
| 王五 | 语文 | 88 |
| 王五 | 英语 | 96 |
解决办法一: having
如果不考虑学生的课程少录入情况(比如张三只有2个课程,王五有3个课程)
SELECT name
FROM xuesheng
GROUP BY name
HAVING MIN(score)> 80
如果考虑学生的课程数大于等于3的情况
SELECT name
FROM xuesheng
GROUP BY name
HAVING MIN(score)> 80
AND COUNT(kecheng)>=3
解决办法二:not in
可以用反向思维,先查询出表里面有小于80分的name,然后用not in去除掉
SELECT DISTINCT name
FROM xuesheng
WHERE name NOT IN
(SELECT DISTINCT name
FROM xuesheng
WHERE score <=80);

删除
学生表xueshengbiao 如下:自动编号 学号 姓名 课程编号 课程名称 分数
| autoid | id | name | kcid | kcname | score |
|---|---|---|---|---|---|
| 1 | 2005001 | 张三 | 0001 | 数学 | 69 |
| 2 | 2005002 | 李四 | 0001 | 数学 | 89 |
| 3 | 2005001 | 张三 | 0001 | 数学 | 69 |
删除除了自动编号不同, 其他都相同的学生冗余信息
DELETE t1
FROM xueshengbiao t1, xueshengbiao t2
WHERE t1.id = t2.id
and t1.name = t2.name
and t1.kcid = t2.kcid
and t1.kcname = t2.kcname
and t1.score = t2.score
and t1.autoid < t2.autoid

如果只是查询出自动编号不同, 其他都相同的学生冗余信息,可以用group by
SELECT * from xueshengbiao t1
WHERE t1.autoid
NOT IN
(SELECT MIN(autoid) as autoid FROM xueshengbiao
GROUP BY id, name, kcid, kcname, score)

模糊查询%
表名:student ,用sql查询出“张”姓学生中平均成绩大于75分的学生信息;
| name | kecheng | score |
|---|---|---|
| 张青 | 语文 | 72 |
| 张华 | 英语 | 81 |
| 王华 | 数学 | 72 |
| 张青 | 物理 | 67 |
| 李立 | 化学 | 98 |
| 张青 | 化学 | 76 |
select * from student
where name in
(select name from student
where name like '张%' group by name having avg(score) > 75);
SQL Limit

查询分数最高的前5人
select * from 成绩表 order by 分数 desc limit 5;
SQL--联合查询【Union】
联合:将多个结果集,合并为一个结果集。Union(去除重复,相当于默认应用了Distinct),Union All不去除重复

SQL 通配符
在 SQL 中,通配符与 SQL LIKE 操作符一起使用。SQL 通配符用于搜索表中的数据。在 SQL 中,可使用以下通配符:
| 通配符 | 描述 |
|---|---|
| % | 替代 0 个或多个字符 |
| _ | 替代一个字符 |
| [charlist] | 字符列中的任何单一字符 |
| [^charlist]或[!charlist] | 不在字符列中的任何单一字符 |
MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式
找出姓张和姓李的同学, 用rlike实现匹配多个
-- 找出姓张和姓李的
select * from xuesheng
where name in
(select name from xuesheng
where name rlike '[张李]' group by name having avg(score) > 75);
也可以用 REGEXP,结合正则匹配
select * from xuesheng
where name in
(select name from xuesheng
where name REGEXP '^[张李]' group by name having avg(score) > 75);

关于面试总结-SQL经典面试题的更多相关文章
- 决胜面试之---SQL经典面试题
在SQL面试部分,一般会考核多表连接查询能力,精选了一些SQL面试题记录下: 四张表(学生表,教师表,课程表,成绩表) 以下是表的创建和添加SQL语句 学生 ...
- 最强最全面的大数据SQL经典面试题(由31位大佬共同协作完成)
本套SQL题的答案是由许多小伙伴共同贡献的,1+1的力量是远远大于2的,有不少题目都采用了非常巧妙的解法,也有不少题目有多种解法.本套大数据SQL题不仅题目丰富多样,答案更是精彩绝伦! 注:以下参考答 ...
- 关于面试总结6-SQL经典面试题
前言 用一条SQL 语句查询xuesheng表每门课都大于80 分的学生姓名,这个是面试考sql的一个非常经典的面试题 having和not in 查询 xuesheng表每门课都大于80 分的学生姓 ...
- SQL经典面试题及答案
1.一道SQL语句面试题,关于group by表内容:2005-05-09 胜2005-05-09 胜2005-05-09 负2005-05-09 负2005-05-10 胜2005-05-10 负2 ...
- sql 经典面试题及答案(选课表)
SQL数据库面试题以及答案 Student(Sno,Sname,Sage,Ssex) 学生表 Sno:学号:Sname:学生姓名:Sage:学生年龄:Ssex:学生性别Course(Cno ...
- 【数据库】SQL经典面试题 - 数据库查询 - 子查询应用二
上节课我们通过子查询,完成了查询的最高分学生的需求,今天我们来学习子查询的分类,以及通过子查询来完成工作中经常遇到一些个性化需求. 子查询概念: 一个SELECT语句嵌套在另一个SELECT语句中,子 ...
- 【数据库】SQL经典面试题 - 行列转换二 - 列转行
本帖子是行转列的一个逆向操作——列转行,看下面一个面试题 面试题2: 柠檬班第30期学生要毕业了,他们的Linux.MySQL.Java成绩数据表 tb_lemon_grade_column中, 表中 ...
- sql 经典面试题
如果数据库里两个日期型字段d1,d2,怎样用sql语句列出按月的所有区间,比如表结构如下localid d1 d21 2014-1-15 2014-3- ...
- SQL经典笔试题之一
本题用到下面三个关系表: CARD 借书卡. CNO 卡号,NAME 姓名,CLASS 班级 BOOKS 图书. BNO 书号,BNAME 书名,AUTHOR 作者,PRIC ...
随机推荐
- javascript要点(上)
立即执行函数 即Immediately Invoked Function Expression (IIFE),正如它的名字,就是创建函数的同时立即执行.它没有绑定任何事件,也无需等待任何异步操作: ( ...
- 页面在Native端滚动时模拟原生的弹性滚动效果
width: 100%;overflow: scroll;overflow-y: hidden;-webkit-overflow-scrolling: touch; ---- 对应的滚动内容内添加 ...
- 初始Activity启动模式
之前断断续续接触了解过Android activity,可是从没有应用过,这次因为一个严重缺陷再次认识Activity的启动模式,相比以前理解更深入了,以后使用检查也就更方便了. 任务栈(Task S ...
- JavaScript单元测试框架:Jasmine
摘抄:http://blog.csdn.net/GuoJiangweigege/article/details/52130589 互联网的快速发展,给web开发人员带来了前所未有的挑战.对于前端开发, ...
- Mongo学习
几种可能存在的实体类型 public class AAA{ public List<Common> CommonList{get;set;} } public class BBB{ pub ...
- aspx页面调用webapi接口报错:远程服务器返回错误:(500)内部服务器错误
代码在运行到response = (HttpWebResponse)request.GetResponse();就开始报错 原因:可能因为所调用的接口不存在或者接口中存在错误,可用postman测试接 ...
- Java虚拟机(JVM),JDK,JRE和JVM的区别——通过示例学习Java编程(2)
Java虚拟机(JVM),JDK,JRE和JVM的区别 作者:CHAITANYA SINGH 来源:https://www.koofun.com/pro/kfpostsdetail?kfpostsid ...
- AJPFX分享JAVA修饰符详解
1.类的修饰符分为:可访问控制符和非访问控制符两种. 可访问控制符是:公共类修饰符 public 非访问控制符有:抽象类修饰符 abstract :最终类修饰符 final 1 )公共类修饰符 pub ...
- git更新到远程服务器代码
git commit -a 在vi里输入一些内容 wq退出,git pull, git push
- 《深入理解JavaScript闭包和原型》笔记
By XFE-堪玉 以下知识来源于对王福朋所写<深入理解javascript原型和闭包>的理解和整理 一切都是对象[引用类型],对象都是通过函数创建的[Funcion类型] 对象是属性的集 ...