序(不想看可以直接跳过)
很久没有回来CSDN更新,因为一些个人原因下半年暂停了更新,也没怎么查看博客,但是回来看到还是有好些朋友一直在关注(有点赞的、有评论的,还有收藏的),甚是感动,谢谢大家的支持🤝。疫情三年,总算是熬过了,好在大家还都在,我也还在。这个博客会一直更下去,知道有些朋友不喜欢这个平台,但是不影响。我只是想记录自己学习的日常,在哪里都是一样,以后每周至少会更新一篇技术博客,时间多会三篇以上。鉴于现在的就业环境,既然不能改变,唯有让自己不断地学习保持随时能打的状态。此外,大家的评论和疑问我会抽时间慢慢回复,如果没有回复给你,可以私我,谢谢理解。废话不多说,下面进入正题。
面试题(MySQL篇)
1. ROW_NUMBER()与DENSE_RANK()的区别
-
考点解析:考察面试者对MySQL基础知识(常用函数) 的理解
-
参考答案:
首先两个函数都是窗口函数,都是对分组后当前行序号/排名的一个显示,返回的行号/排名都是连续整数,比如像1,2,3,4,5等。不同在于:ROW_NUMBER()
是分组后两者即便有相同值,ROW_NUMBER()
也会分给它唯一的行号。比如有一组数据是3,3,4,5,6,6,7;那么使用ROW_NUMBER()
后生成的对应行号就是1,2,3,4,5,6,7。DENSE_RANK()
则是分组后就算存重复值,也不会跳过重复值,依然都排一样的名次。比如还是上面的这组数据3,3,4,5,6,6,7;使用DENSE_RANK()
生成的排名列就是1,1,2,3,4,4,5。
简而言之,就是对分组后包含的重复值是否给一样的序号/排名。
-
面试总结:此题不难,只要面试者对常用的MySQL函数足够熟悉,就能轻易答出。
-
考点延伸:如果下次面试官考察多了一个
RANK()
函数,问ROW_NUMBER()
VSRANK()
VSDENSE_RANK()
三者的区别? 思考一下🤔,下一篇博客给出参考答案。
2. MySQL存在多种JOIN(连接)方式,其中有LEFT JOIN、RIGHT JOIN、INNER JOIN等,请问是否存在FULL JOIN的连接方式?
-
考点解析:考察面试者能否区分MySQL与其他SQL数据库的JOIN连接方式
-
参考答案:
记住两句话,第一句是MySQL目前是没有FULL JOIN的!!!
第二句是其他SQL数据库是支持FULL JOIN的,比如Oracle。 -
延伸知识:
-
FULL JOIN 是什么?
- FULL JOIN 又可以写为“FULL OUTER JOIN",它直接连接左右表的全部行,不论它们是否有匹配行。
-
MySQL中是如何替代FULL JOIN使用的?
- MySQL中通常使用LEFT OUTER JOIN 和RIGHT OUTER JOIN ,结合UNION ALL来进行表的全连接操作。
-
FULL JOIN的基础语法是什么?
-
SELECT left_table.column_name(s), right_table.column_name(s)...
FROM left_table
FULL OUTER JOIN right_table
ON left_table.key = right_table.key
WHERE condition;
- 面试总结:也是基础题,但是要清晰的知道SQL中JOIN的连接方式和MySQL的不同,不然就容易出错。
- 考点延伸:MySQL中是否存在NATURAL JOIN ? 大家思考一下,下一篇博客给出参考答案。
(未完待续~)
PS: 本篇探讨的情况都是基于MySQL8.0版本及以上的,谢谢。
参考资料: