总之,MySQL 必须得会,还得“精通”,今天给大家分享一波 MySQL 连环 66 问,2 万字+50 张手绘图,可以啃起来了。
日常开发,不会 MySQL,领导都看你不顺眼;当然了,如果你发现领导不会 MySQL,除了可以恶狠狠地鄙视他之外,一定得反思,这家伙不会是老板的亲戚吧?
你去面试,不会 MySQL,出门左拐右拐都行,反正就是回去等消息。
大家好,我是二哥呀。有一说一,MySQL 已经成为 Java 后端程序员必须要掌握的技能之一了。
(玩了个倒序,相信大家雪亮的眼睛发现哪里不对劲了!)
基础
作为 SQL Boy,基础部分不会有人不会吧?面试也不怎么问,基础掌握不错的小伙伴可以跳过这一部分。当然,可能会现场写一些 SQL 语句,SQ 语句可以通过牛客、LeetCode、LintCode 之类的网站来练习。
1. 什么是内连接、外连接、交叉连接、笛卡尔积呢?
- 内连接(inner join):取得两张表中满足存在连接匹配关系的记录。
- 外连接(outer join):不只取得两张表中满足存在连接匹配关系的记录,还包括某张表(或两张表)中不满足匹配关系的记录。
- 交叉连接(cross join):显示两张表所有记录一一对应,没有匹配关系进行筛选,它是笛卡尔积在 SQL 中的实现,如果 A 表有 m 行,B 表有 n 行,那么 A 和 B 交叉连接的结果就有 m*n 行。
- 笛卡尔积:是数学中的一个概念,例如集合 A={a,b},集合 B={1,2,3},那么 A✖️B=
{<a,o>,<a,1>,<a,2>,<b,0>,<b,1>,<b,2>,}
。
2. 那 MySQL 的内连接、左连接、右连接有有什么区别?
MySQL 的连接主要分为内连接和外连接,外连接常用的有左连接、右连接。
MySQL-joins-来源菜鸟教程
- inner join 内连接,在两张表进行连接查询时,只保留两张表中完全匹配的结果集
- left join 在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记录。
- right join 在两张表进行连接查询时,会返回右表所有的行,即使在左表中没有匹配的记录。
- 第三范式:在满足第二范式的基础上,表中的非主键只依赖于主键,而不依赖于其他非主键。例如订单表,就不能存储用户信息(姓名、地址)。
你设计遵守范式吗?
三大范式的作用是为了控制数据库的冗余,是对空间的节省,实际上,一般互联网公司的设计都是反范式的,通过冗余一些数据,避免跨表跨库,利用空间换时间,提高性能。