文科生如何学习sql?

文科生如何学习sql?

现状

  • 目前是在互联网做运营工作,牛客网非技术入门的sql题已经刷完了,现在在刷大厂真题,感觉到有点吃力。
  • 基础的语法也还算清楚,但感觉自己对数据的结构还是比较混乱,没有比较系统的了解数据的结构
  • 语法方面基础不是很牢,自己是直接刷题,边刷边学的,语法经常出bug,要改半天。
  • 真到解决实际问题的时候,不知道算法怎么写,自然也转换不成sql语句。

    期望

  • 希望能把select学明白,不再求人取数
  • 预期每天花费30min深度学习+零散时间30min练习,希望30天内做到熟练。
  • 公司用的是阿里云,希望所学的语法能适配

希望友友们能给指点指点,真的感激不尽(现在实在是太卷了orz)

 
 

   谢邀,针对问题给出点个人的经验和见解,希望对题主有帮助 ( PS: 全程亲自手打 / 手画,无任何 Copy )

    首先,从博主的提问诉求来看,显然是已经尝试过刷题战术(刷题战术是没问题的,我仍然支持)和其他相关的战术了,主要留存的问题在于记不牢和没有实战过,那么我就针对这些问题,从我个人经历过的一些方法和角度,给出一些建议,希望能帮助到你:

 
 

理解记忆

从一个文科生的角度来说,你肯定是没有系统学习过数据库的,那么我认为最好的切入点就是语意理解。你应该听过记忆的方法之一就是理解记忆 —— 然后你是文科生嘛,基本的英语肯定不差的。
 
 
那我们来看看一个基本的语法: select * from A —— 他就相当于 Select all from A,翻译过来就是 “从A里查出所有东西”。从这个基本的理解作为衍生,再到where —— 相当于一个从句嘛, select * from a where A.name = 'test' 。 那翻译过来就是 Select all from A where A's name is 'test.' 再加大这个从句的内容描述 —— select * from a where A.name = 'test' group by id, 翻译过来 —— Select all from A where A name is 'test' group by id. (从A中查出所有内容,其中A按照id分组且名称为“test”)
 
 
同理你会发现,所有的sql语句,从简单到复杂都能用这个方法来形容描述。由于 Sql 是一门 结构化 的语言,你又是在理解的基础上去记忆的,下次无非就是写重复的内容,不同的只是表和字段而已了。久而久之,你会发现写sql和写一句话一样的简单,信手拈来。

 
 
 

图像记忆

上面说完理解记忆了,现在再说出我的第二个法宝,就是图像记忆 —— 你在针对表写sql的时候,有点卡壳的原因大多数情况下是因为你对表结构不理解不熟悉,所以我建议你建立表的图像。
 
 
比如UML建模,或者用PDM画出来,别看到名字就以为很难被吓到,建议你先去百度了解一下,如果不愿意百度,我这里也可以简单的告诉你一下,没多复杂 —— 其实就是一张图的表格。你可以用Navicat对多张表右键【逆向表到模型】,然后就能看到表的内容了,然后再对表设置你想要的颜色(有趣吧),相同的业务用相同的颜色。然后再对表右键来设置主外键关系(就是工具而已,多点一点看一看你就会用了),最终图就像下面这样了:

 
 
 

img

 
 
 

通过这张我为你建立好的表 —— 你能一目了然的看到上方的 t_user 是主表,下方的 t_user_detail 的是子表,通过外键 user_id 来连接 (注意最开始不需要多复杂的表,当然熟悉后你可以建立更多的表关系来练习) —— 如此,表在你的大脑里就有了清晰的图像了,他的结构你也你清楚,那子表可以是多个内容,你想查一个用户user的用户明细userDetail怎么办?那就是从子表里找这个用户id的内容即可,假设用户id是1,那就是 select * from t_user_detail where user_id = 1。

 
 

你可以试试这个方法,因为你建立了图像,针对这个图像你练习了sql。你会记得非常清楚,熟悉了结构,写sql自然而然会更加顺手,甚至有时候吃饭的时候都会想到这个图像的结构...

 
 

最后针对你的 “预期每天花费30min深度学习+零散时间30min练习,希望30天内做到熟练” 回答一下 —— 就像我开头说过的,我认为刷题战术是没问题的,所以我仍然支持你刷题,但是要在理解的基础上刷题,比如你连表结构都没熟悉清除,然后业务也没理解透就开始刷题,这是很容易卡壳的。在说你再公司真正的实战,也是在业务理解透出的基础上来写内容的,我们平时工作中也经常会用到我上面都说的PDM画图内容,帮助更好理解。

 
 
 

再多提一嘴,这些都是辅助你理解记忆和练习的。掌握这些了,熟练会写sql了还不够。要写出好的sql还需要一点功夫,好的sql能加快执行效率,节省消耗等等。要学会这些,你就真的要求了解数据库的一些详细知识了,这里简单列举一些能够真正提升你实战技术水平的知识点,比如 —— sql的执行顺序,sql的分析语句,怎样建立索引,索引在什么场景失效,建表的范式,以及适当的逆范式,存储的数据结构,等等(这些我也个人建议在极客时间找专栏看,这里没有任何广告,因为我以前是这样过来的,或者你可以找其他途径来完善自己的数据库知识,那么你每天花的时间不管是深度学习还是零散学习就可以把这个内容包括进去)。

 
 
 

好了,这就是我针对你核心诉求的一些小建议,希望对你有帮助,希望你早日成为 数据库大神 , 谢谢 !

 
 
 
 
 
 
 

建议先学习了解sql基础相关概念,sql的执行顺序等。
刷题建立在有一定基础之上的,先有相关的知识基础,再实践性做一些项目练习。
看视频学习是一个比较有效的学习方式了。

去B站看教学视频。

快速入门上手:
1.从单表所有查询,到单表筛选字段查询,到单表加条件过滤查询,再到单表限制行数查询,再到单表的函数查询,比如sun对某个字段求和,avg求平均等等,然后在弄清楚单表的分组groupby和having的用法,最后就是上诉几个东西的各种组合使用,比如单表筛选字段并加条件过滤再限制返回几行这样。
2.单表的搞清楚之后,再到多表间的关联,lef jion,inner join,right join三者间区别和用法,以及union all和union的区别和用法。接着就可以把1中单表之间的各种组合在这里用各种join和union连接成多表查询。
3.单表和多表的上诉基本用法弄清楚后,再学习子查询,和一些其他的补充用法,例如case when方法,if方法,对时间日期的处理等等

sql也不难啊,无非就是增删改查,搞搞缓存什么的,记住语法,根据表结构,根据需要设计sql语句,再掌握一些常用的优化方案就行了

开始不用太复杂,学个增删改查,用的多了自然熟能生巧了

sql查询语句差不多,有区别的是个别的,你根据你公司用的是什么数据库,然后去找该数据库的教程血一下,基本都先学会了,基于高深的一些,只能是慢慢来了

首先我推荐还是看书,sql入门,还有必知必会等,看完书之后在进行实际,一开始不推荐去看视频什么的

我觉得得多多实战,理论讲的再好和现实还是有差距!

你已经工作了还是准备转这行,我看你把基础得都练完了,没啥问题了,sql其实很简单得,只有工作上遇到一些较难得逻辑,再查查,都是边工作边进步

多看多练

熟能生巧

其实sql倒不难,主要牵扯的知识点比较多,建议多花点时间跟别人视频学