MySQL 面试一般常问问题有哪些?
MySQL 面试一般常问问题有哪些?
篱笆资讯
MySQL 面试一般常问问题有哪些?
掌握了以下几种方法,你就可以轻松解决95%的SQL面试题!

本篇内容包括

(1)三个帮你快速解决问题的Tips
(2)SQL面试必备知识点
(3)SQL经典面试题


01
三个tips帮你面试时快速正确解决问题

1、答题前多思考

在看到面试题目的时候,先想一下你最后要的表是什么样的,primary key(主键)是什么,summary statistics(统计概要)是什么,然后从已有的表里面如何推到你想要的表。这个步骤我建议大家把自己的想法直接说出来。面试中最忌讳自己在默默的想,不和面试官交流,你在展现你的思路的时候,既能帮助你更好理清思路,也能保持和面试官的交流。


2、巧用with语句

当你的语句超过两个from的时候,整个script(脚本)就会非常的复杂,所以建议用with语句,每次需要改变primary key(主键)的时候都建一个新表,合理命名让你在下一步可以直接用简单的column name


3、思考corner case(边界案例)


如果你的表格里有null值,你会怎么处理?根据题目的条件,是不是用别的值代替?如果你的分母可能是0,怎么办?是不是要用safe_divide代替普通的slash/。写完了以后再检查一下有没有丢一些语句或者没有考虑到corner case。


02
必备知识点:


1、window function

window function在我看来是不改变data的行数的情况下,把group by的一些stats分到了每一行。

比如说 sum(revenue) over (partition by country) 就是把每个country的revenue加了一下,行数和原来不变,所有美国的行的这个数据都是美国revenue的总和。常见的window function还有RANK等。在这里着重讲一下RANK()、DENSE_RANK()、ROW_NUMBER()三者排序的不同:

RANK()返回的是不持续的编号,例如100, 101, 101, 102返回的编号将是1,2,2,4;
DENSE_RANK()返回的是持续的编号,例如100, 101, 101, 102返回的编号是1,2,2,3;
ROW_NUMBER()返回的是持续不重复的编号,例如100, 101, 101, 102返回的编号将是1,2,3,4。



2、 join的区别

一共有5种join语句,left, right, inner, full outer, cross join。目的都是一样的,就是用相同的key把两张表的column并起来。

left就是保留所有在左边的数据的行数,无论右边能不能找到对应的key。

inner就是只保留两张表共同的key。

full outer join就会把两张表所有的行保留。

cross join会把两张表每一行都和另一张表的每一行join,这个计算量非常大,一般要尽量避免。


03
经典面试题

在面试前刷一遍经典面试题可以帮助理解语句和知识点。在这里我挑选了两个经常被面到的题目:
(更多题目可以参考原链接:https://zhuanlan.zhihu.com/p/38354000)



查找1990年出生的学生名单,学生表中出生日期列的类型是datetime


select 学号,姓名 
 from student 
 where year(出生日期)=1990;



查询所有学生的学号、姓名、选课数、总成绩

selecta.学号,a.姓名,count(b.课程号) as 选课数,sum(b.成绩) as 总成绩from student as a left join score as bon a.学号 = b.学号group by a.学号;

查询平均成绩大于85的所有学生的学号、姓名和平均成绩

select a.学号,a.姓名, avg(b.成绩) as 平均成绩from student as a left join score as bon a.学号 = b.学号group by a.学号having avg(b.成绩)>85;

查询学生的选课情况:学号,姓名,课程号,课程名称

select a.学号, a.姓名, c.课程号,c.课程名称from student a inner join score b on a.学号=b.学号inner join course c on b.课程号=c.课程号;

更多SQL经典面试题,在这文章中也有详细的介绍:
https://m.nowcoder.com/discuss/95812?&headNav=www

以上链接中的题目数量很多,但只有多做多练才能更好的掌握知识点,帮助你在面试中取得更好的成绩。

希望以上回答对你的面试有所帮助!有什么问题欢迎后台留言告诉我们~
coffee 直连行业大牛导师,1v1模拟面试与求职指导
mentors
airplay 实战与求职精品课程
数据科学
软件工程
人工智能
金融商科
产品经理
产品设计
bookmark 2000+名企面试真题
amazon google tiktok microsoft meta