关于SQL刷题及其具体执行过程的心得

发布于:2022-11-29 ⋅ 阅读:(331) ⋅ 点赞:(0)

关于SQL刷题及其具体执行过程的心得

本篇博客是刚开始练手用的,原创的不多,不过其中转载的均是优秀的博客,在此基础上会标注清楚来源,如果有自己的理解也会注明。

一、sql知识点结构化

再难的sql也是由各部分知识点组成,各个要素之间产生联系然后发挥综合作用,如果基础不牢,最基础部分的知识点不熟,碰到稍微复杂一些的sql就会显得无从应手,例如查找最高值,我们可以利用联结进行比较取最高值,也可以利用排序加上limit分页等方案,但是如果不知道limit呢?岂不是断掉了一个思路。所谓工欲善其事必先利其器,一定一定要将最最基础的东西记住,熟练使用,并且在实践中得到更新的认知,然后再实践,不然一定会在碰到较难的sql一点思路都没有。

以《mysql必知必会》的介绍+最新版的特性更新思维导图,当然不全,也肯请大家补充,我会注明来源。可以以加粗字为中心进行查看。

一些要点:

  • 数据库是简称,咬文嚼字来说数据库是保存有组织的数据的容器(通常是一个文件或者一组文件),咱们常说的mysql叫数据库管理软件DBMS,它用来创建数据库
  • 展现形式是表,表的具体表现是行+列,要关注这个,因为他们涉及到数据的组合展现,便于理解sql中的group by,join,子查询等
  • 在保存及检索形式上是树,b树,b+树等,这涉及到优化,大家可自行查阅资料,后续也会提到。
  • 注意虚拟表,他不是真实的表,只是我们在操作过程中对数据的一种组装,我们要关注最终的结果表
  • 尤其注意sql执行顺序,不要搞错,例如limit是对结果进行分页,不是对原始数据分页(即它的执行时间比较靠后),如果先对原始数据分页,可能会出错。又例如group by先于select执行,如果认为select先执行,可能会觉得为什么一条数据对了好多条数据然后就乱掉。

基础查询语言:

展开的话字就太小了,大家凑合看,将知识结构化,看sql都是由哪些要素集合起来的。我比较推荐先熟悉都有什么再去练习。
在这里插入图片描述

现在我们已经学会1+1=2了,让我们开始解决哥德巴赫猜想吧!

二、对于一些概念的理解

sql的执行顺序
在这里插入图片描述

关于group by:CSDN,shaofei63,可以这样理解group by

关于子查询:本人的,简单用法,不涉及使用场景

关于联结:知乎博主:Moses,图解sql中各种join

关于count:

基础区别:
	count(1):计算一共有多少符合条件的行,不会忽略nullcount(*):统计所有的行数,包括为null的行,不单会进行全表扫描,也会对表的每个字段进行扫描,自动优化到最优列(聚集索引)
	count(column):查询列名那一列,为null不统计(纯null,不是空字符串或者0)
速度上:
	有主键:1 < column
	无主键:1 > column
	表只有一个字段:*最好
	确定合适用主键使用cloumn
count(*)count(1) > count(id) > count(普通字段)

关于窗口函数:知乎博主:猴子,关于sql窗口函数的理解

三、刷题中常见分类及其思路做法

1,排序最高值最低值(topN)

2,根据条件做取舍,例如求和,求平均值

3,行转列,列转行

4,连续出现的数据(连续登录/点赞等)

5,区间计算(某个区间比如时间段等)

6,中位数

7,递归问题

8,笛卡尔积问题

……

这些分类均来自知乎博主Ocean,它将常见题型做了分类,而且均是leetcode上的,看完有自己的理解后可以直接去leetcode上进行练习。注意其中的思路,回想本文刚开始说的,各个要素进行组成,然后综合发挥作用。其中我的思路如下:

  1. 第一眼看过去心里有个大概判断
  2. 然后挑出需求中需要配合的知识点,分组,排序,子查询等
  3. 如果不太熟练,可以将sql分步编写,写出几条后进行组合
  4. 组合时注意sql执行顺序,避免出现死局。
  5. 最后进行完善

知乎:Ocean,淦完142道sql题总结的题型

本文含有隐藏内容,请 开通VIP 后查看