这是别人发的一道MySQL面试题,别人要求你在15分钟内完成。一眼看过去,这张面试题并不是很难,但是你能不能很快做出来呢?可以看到,最下方的第3题可能不太全,但是影响不大,后面的那就先不管。
1. 第一题
1)建表语句
create table test1( id varchar(20), name varchar(20) ) charset=utf8; insert into test1(id,name) values ("1001","张三"), ("1002","李四"), ("1003","王五"), ("1003","王五"), ("1004","陈六");
结果如下:
2)请用一条SQL语句,查询去重后的人员信息清单
select id,name from test1 group by id,name; ---------------------- ----------或者--------- select distinct(id),name from test1
结果如下:
3)请用一条SQL语句,查询出存在重复记录的人员id
select id,count(id) counts from test1 group by id having counts >=2;
结果如下:
2. 第二题
1)建表语句
# math_table表 create table math_table( id int, name varchar(20), math_score int ) charset=utf8; insert into math_table(id,name,math_score) values (1,"李明",83), (3,"张建国",76), (5,"王华",57); ============================================= # english_table表 create table english_table( id int, name varchar(20), english_score int ) charset=utf8; insert into english_table(id,name,english_score) values (2,"陈斌",73), (3,"张建国",65), (5,"王华",89);
结果如果:
2)请用一条SQL语句,查询出两项比赛都参加了的学生的name清单
select a.id,a.name,a.math_score,b.english_score from math_table a join english_table b on a.id = b.id
结果如下:
3)请用一条SQL语句,查询出参加了数学竞赛但是没有参加英语竞赛的学生的name清单
select a.id,a.name,a.math_score from math_table a left join english_table b on a.id = b.id where b.english_score is null;
结果如下:
4)请用一条SQL语句,查询出两项竞赛得分均大于60分的学生的两项竞赛的平均分
select a.id,a.name,a.math_score,b.english_score from math_table a join english_table b on a.id = b.id where a.math_score >=60 and b.english_score >=60;
结果如下: