雷可凡 2022-09-18 23:50 采纳率: 100%
浏览 272
已结题

文科生如何学习sql?

文科生如何学习sql?

现状

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

    期望

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

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

  • 写回答

13条回答 默认 最新

  • 削尖的螺丝刀 后端领域新星创作者 2022-09-19 10:35
    关注

     
     

       谢邀,针对问题给出点个人的经验和见解,希望对题主有帮助 ( 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的分析语句,怎样建立索引,索引在什么场景失效,建表的范式,以及适当的逆范式,存储的数据结构,等等(这些我也个人建议在极客时间找专栏看,这里没有任何广告,因为我以前是这样过来的,或者你可以找其他途径来完善自己的数据库知识,那么你每天花的时间不管是深度学习还是零散学习就可以把这个内容包括进去)。

     
     
     

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

     
     
     
     
     
     
     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(12条)

报告相同问题?

问题事件

  • 系统已结题 9月28日
  • 已采纳回答 9月20日
  • 创建了问题 9月18日

悬赏问题

  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示