前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于面试总结6-SQL经典面试题

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

作者头像
上海-悠悠
发布2018-12-27 11:57:44
7.2K0
发布2018-12-27 11:57:44
举报

前言

用一条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 通配符

在 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);
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • having和not in
    • 解决办法一: having
      • 解决办法二:not in
      • 模糊查询%
      • SQL 通配符
      相关产品与服务
      云数据库 MySQL
      腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档