数据分析面试、笔试题汇总+解析(五)

序(不想看可以直接跳过)

很久没有回来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() VS RANK() VS DENSE_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版本及以上的,谢谢。

参考资料:

  1. MySQL官方文档
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值