Java教程

关于面试总结6-SQL经典面试题

本文主要是介绍关于面试总结6-SQL经典面试题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

前言

用一条SQL 语句查询xuesheng表每门课都大于80 分的学生姓名,这个是面试考sql的一个非常经典的面试题

having和not in

查询 xuesheng表每门课都大于80 分的学生姓名

namekechengscore
张三语文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 如下:自动编号 学号 姓名 课程编号 课程名称 分数

autoididnamekcidkcnamescore
12005001张三0001数学69
22005002李四0001数学89
32005001张三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分的学生信息;

namekechengscore
张青语文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 通配符

在 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);

交流QQ群:779429633

这篇关于关于面试总结6-SQL经典面试题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!