V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chaleaochexist
V2EX  ›  程序员

后端工程师不会手写 sql,可以接受不?

  •  
  •   chaleaochexist · 2018-05-28 16:31:15 +08:00 · 15810 次点击
    这是一个创建于 2372 天前的主题,其中的信息可能已经有所发展或是发生改变。
    select 肯定会写.
    但是建表什么的,insert into 也不会...

    如果没毛病我就不学了,有问题我就补补.想听听大家的看法.
    第 1 条附言  ·  2018-05-29 08:55:15 +08:00
    不是不学,是学过不用就忘了。

    其实 python js java 敲多了,有时候 if else 怎么写都得找找前面的代码。
    也许是我记性差不适合干这行。

    为什么能接受 api 现查不能接受 sql 现查呢?

    BTree hash 索引我知道
    范式设计我也知道,我还知道反范式设计呢。。。
    第 2 条附言  ·  2018-05-31 14:13:36 +08:00
    我现在觉得,还是有必要学一下的

    因为 mybatis 用到的 SQL 文,真的真的很普遍.

    其实我并不排斥学习 SQL -- 无论是半小时还是半天甚至半个月.
    因为学完不用就忘了,所以一直很抵触二次学习.

    由于将来会用到 mybatis,经常使用应该就不会忘了.所以决定学习.
    125 条回复    2018-05-31 12:24:31 +08:00
    1  2  
    xxxy
        1
    xxxy  
       2018-05-28 16:37:01 +08:00   ❤️ 1
    讲道理,有发帖的时间花半个小时大概就能过一遍了
    Linxing
        2
    Linxing  
       2018-05-28 16:51:47 +08:00 via iPhone
    讲真的 就算你不知道怎么写 你也要看得懂吧 也要了解原理 索引啊这些都是基本的
    current
        3
    current  
       2018-05-28 16:54:24 +08:00
    最基本的 crud 总的会吧。。。。
    chaleaochexist
        4
    chaleaochexist  
    OP
       2018-05-28 16:55:51 +08:00
    @Linxing
    能看懂,你可以这么理解,每次我写的时候都要百度一下...
    @xxxy
    能过一遍,过完就忘.
    不常用吧...
    就像算法,每次不都是快找工作了,开始补补.
    平时有几个人能略写快排呢.
    chaleaochexist
        5
    chaleaochexist  
    OP
       2018-05-28 16:56:26 +08:00
    @current 只会 r...
    KgM4gLtF0shViDH3
        6
    KgM4gLtF0shViDH3  
       2018-05-28 16:58:22 +08:00 via iPhone
    肯定不能接受啊,这个写的时候有没有提示
    noli
        7
    noli  
       2018-05-28 16:58:45 +08:00
    讲真,MsSQL, MySQL, PostgreSQL 这么多种 SQL 方言我也不是全懂。
    但是我有工具可以 gen SQL。

    至于微调什么的还是交给专职 DBA 比较好。
    RorschachZZZ
        8
    RorschachZZZ  
       2018-05-28 16:59:16 +08:00
    这就和 1+1=2 一样,有不会的吗。。。。
    phpcxy
        9
    phpcxy  
       2018-05-28 17:16:58 +08:00
    大学老师教的 SQL 语句够我用了~
    tumi9527
        10
    tumi9527  
       2018-05-28 17:24:25 +08:00
    后端这些都是基本的吧
    CoderGeek
        11
    CoderGeek  
       2018-05-28 17:26:32 +08:00
    no。。。
    qq976739120
        12
    qq976739120  
       2018-05-28 17:28:24 +08:00
    现在找工作这么容易了?为啥我面试都问到优化细节...
    zhaishunqi
        13
    zhaishunqi  
       2018-05-28 17:29:58 +08:00
    还是自己会比较好吧.
    因为作为后台的话,你可能会接触到提数脚本的编写.烂点没关系,至少你得自己写出来啊,不用每个都去查吧.
    可能有些比较偏的函数记不住就算了,用的时候知道有去查下就好.
    0044200420
        14
    0044200420  
       2018-05-28 17:31:10 +08:00
    极端情况没网络就完了
    leven87
        15
    leven87  
       2018-05-28 17:31:32 +08:00 via Android
    基本功。
    xxxy
        16
    xxxy  
       2018-05-28 17:36:25 +08:00
    @chaleaochexist 面试前到 leetcode 刷刷就行了
    newtype0092
        17
    newtype0092  
       2018-05-28 17:40:17 +08:00
    @RorschachZZZ 1+1 不应该是 select 'Hello World'; 么?
    cxbig
        18
    cxbig  
       2018-05-28 17:42:49 +08:00
    后端也是分很细的,一般不要求普通 dev 手写 SQL。
    为了便于管理,大多数情况,我们会要求程序员使用 ORM 来处理所有的 CRUD。
    akstrom
        19
    akstrom  
       2018-05-28 17:42:57 +08:00
    这些心态不适合做后端,不管是业务后端还是服务器后端,劝你改行
    iyaozhen
        20
    iyaozhen  
       2018-05-28 17:43:08 +08:00 via Android
    一般建表用工具吧,手写很容易出错吧
    2bbing
        21
    2bbing  
       2018-05-28 17:44:44 +08:00
    我一直以为会 sql 以及相关简单优化和理解是后端开发的必备点。。。
    tjsdtc
        22
    tjsdtc  
       2018-05-28 17:47:44 +08:00
    讲真,好多前端工程工程师都会写
    NSAtools
        23
    NSAtools  
       2018-05-28 17:49:45 +08:00
    讲真,这是基础
    EmdeBoas
        24
    EmdeBoas  
       2018-05-28 17:52:09 +08:00
    ...我们的产品都会...
    maemual
        25
    maemual  
       2018-05-28 17:53:28 +08:00
    大概了解,具体语法细节用的时候再搜就好了。
    UIXX
        26
    UIXX  
       2018-05-28 17:56:57 +08:00
    你可以忘记具体语法,但是你一定要用过,得会用,一些数据库基本引擎原理要懂。
    PS. 如果你要应聘,一定要过一遍。保证能手写。
    2379920898
        27
    2379920898  
       2018-05-28 17:58:42 +08:00
    经常用链式操作。。 原声 SQL 早忘光光了
    yuanfans
        28
    yuanfans  
       2018-05-28 18:04:39 +08:00
    讲道理,有发帖看回帖这个时间,都过完一遍了
    1313213
        29
    1313213  
       2018-05-28 18:13:19 +08:00
    最基本的应该会写吧
    onepunch
        30
    onepunch  
       2018-05-28 18:17:02 +08:00   ❤️ 1
    有句老话叫 “勿在浮沙筑高台” ,一知半解总有你哭的一天
    leotso
        31
    leotso  
       2018-05-28 18:18:57 +08:00 via iPhone
    这应该属于基本功吧……顺便做个调查 有多少人知道递归查询
    mumbler
        32
    mumbler  
       2018-05-28 18:19:45 +08:00   ❤️ 1
    给你个 google 能不能写,能就没事
    karllynn
        33
    karllynn  
       2018-05-28 18:26:32 +08:00
    这不是基本功么。。这么菜鸡当什么后端
    lijsh
        34
    lijsh  
       2018-05-28 18:29:21 +08:00
    我们的测试都是手写 SQL 暴力改数据库创造测试情景的
    SingeeKing
        35
    SingeeKing  
       2018-05-28 18:32:28 +08:00
    会写是必须的,到底要不要写是另一码事。

    不要过度依赖 ORM,要是用了小众数据库或者一些特别复杂的操作还是要依托 pureSQL
    laravel
        36
    laravel  
       2018-05-28 18:33:59 +08:00
    经常登录 mysql 命令行玩玩就会了,多看看文档
    initialdp
        37
    initialdp  
       2018-05-28 18:36:53 +08:00
    不可接受。
    sunchen
        38
    sunchen  
       2018-05-28 18:47:56 +08:00
    我们运营,测试,产品经理都会
    Raymon111111
        39
    Raymon111111  
       2018-05-28 18:49:43 +08:00
    这个真的是两小时就能学会的东西...
    felinx
        40
    felinx  
       2018-05-28 19:03:30 +08:00
    不收
    nekolr
        41
    nekolr  
       2018-05-28 19:17:24 +08:00 via Android
    基本的 CRUD 要会,这个学习花不了多少时间。剩下复杂的一般也用不到,用到了能借助搜索引擎解决也行,这个慢慢积累。一般的后端这个程度就可以了
    boris1993
        42
    boris1993  
       2018-05-28 19:32:19 +08:00 via Android   ❤️ 2
    我觉得吧,只要用的到,就要学就得至少会用
    我大学学的 C#,出来实习第一份工作干的是 IBM 主机,z/OS 系统,COBOL 语言。编程是公司给教,后面我要兼任管理员,咋办,爬 18 摸文档库啃,现在用户管理权限管理这俩必会的已经熟练了
    然后业务变动改做 Java,但是同样,Java 没怎么写过,框架也是头一次听说,MySQL,Redis,都没见过,咋办?爬教程一点点学,搭框架,写个小玩具,一边写一边学
    然后某银行 DevOps 投标 POC,仗着 Linux 玩得转,铁着头去了,然后发现 Jenkins 之类的,见过没用过更没配过,咋办?还 TM 不是爬教程去学,最后 POC 的要求达到了
    逼逼了这么多,我想说的就是,你既然要搞技术,那就不是说这玩意我能不能不会,而是这玩意有用那我就学一个。技多不压身,谁知道你这技能啥时候就派上用场了,更何况增删改查都是基本操作
    yeepZhang
        43
    yeepZhang  
       2018-05-28 19:50:29 +08:00
    ...这都要纠结发个帖子问...
    nl101531
        44
    nl101531  
       2018-05-28 19:58:07 +08:00 via Android
    作为后端,快排还是需要手撕的啊。。。
    mocurius
        45
    mocurius  
       2018-05-28 19:58:39 +08:00
    @boris1993 #42 说的好,手动点赞。
    mhycy
        46
    mhycy  
       2018-05-28 20:00:11 +08:00
    说白了还是懒
    qiyuey
        47
    qiyuey  
       2018-05-28 20:01:35 +08:00
    反正我是记不住,都是生成的
    nieyujiang
        48
    nieyujiang  
       2018-05-28 20:02:48 +08:00 via iPhone
    写两次就会了
    janus77
        49
    janus77  
       2018-05-28 20:55:53 +08:00 via Android
    如果工作接触数据库 crud 必须会
    驱动 纯算法 操作系统这类可以不用会吧
    371657110
        50
    371657110  
       2018-05-28 21:05:08 +08:00
    我一个前端都会手写了.
    liprais
        51
    liprais  
       2018-05-28 22:00:13 +08:00   ❤️ 1
    没事,知道自己不会就行了
    反正大部分工程师都不会,但都以为自己会
    pandago
        52
    pandago  
       2018-05-28 22:02:47 +08:00 via iPhone
    要会的
    0x11901
        53
    0x11901  
       2018-05-28 22:11:58 +08:00
    现在工作这么好找了么……
    CFO
        54
    CFO  
       2018-05-28 22:37:53 +08:00 via Android
    我也就只会简单的 crud 加个简单的 join 有的同事写的复杂 sql 我看都看不懂…
    ilylx2008
        55
    ilylx2008  
       2018-05-28 22:50:57 +08:00 via Android
    不可接受
    写代码不考虑 sql 性能的,就像小孩一样永远长不大
    xpresslink
        56
    xpresslink  
       2018-05-28 23:05:01 +08:00
    我不会写代码想找个程序员工作,楼主觉得可接受么?
    dobelee
        57
    dobelee  
       2018-05-28 23:25:46 +08:00 via Android
    請問 sql 語句都不會寫,到時候你好意思跟人談到 sql 優化、數據遷移、mysql 問題定位、mysql 高可用、mysql 集群嗎?更別提特性繁多的 SQLServer 和 Oracle 等。

    insert into 不用說了,就建表的語句,是 DDL 最最最基礎的技能,我大學畢業之前就已經手打過至少 1000 次建表語句,我只能說,要么你不用它,要么你不用心。

    另外,這些開篇技能都欠缺,我完全可以斷定你也不會其他數據庫基礎理論,如第三範式、b 樹索引、存儲引擎等相關知識。

    所以你覺得好嗎?
    zhangbohun
        58
    zhangbohun  
       2018-05-29 00:48:28 +08:00 via Android
    select 最难
    jiangzhuo
        59
    jiangzhuo  
       2018-05-29 01:09:31 +08:00
    手写红黑树都能接受,别说手写个 select 了。当然是选择原谅他了
    opengps
        60
    opengps  
       2018-05-29 08:17:38 +08:00
    想要写出来高性能的代码,这些都是基础,不然一个数据库故障你用上一周去解决,你说你老大会不会开除你
    FrailLove
        61
    FrailLove  
       2018-05-29 08:29:49 +08:00
    很多 Java 程序几百行才能解决的问题 一个 select 就能搞定 你怕不怕
    chaleaochexist
        62
    chaleaochexist  
    OP
       2018-05-29 08:48:07 +08:00
    @boris1993 不知道老司机开了多少年车,想问一下
    > C#, IBM 主机,z/OS 系统,COBOL 语言。
    还剩下多少?

    ---
    其实我不是没学过,是学过不用就忘了,在学还是忘。。。也许我记性不好?
    为什么 select 会,因为 select 经常用。。。
    2pen
        63
    2pen  
       2018-05-29 08:53:33 +08:00
    drop
    6diyipi
        64
    6diyipi  
       2018-05-29 09:07:06 +08:00
    忘了就网上查一查啊, 你是不是来卖萌的。增删改查那么简单的。
    boris1993
        65
    boris1993  
       2018-05-29 09:07:45 +08:00 via Android
    @chaleaochexist C 井和 COBOL 很久不写,略微手生。z/OS 目前时不时的要处理权限和资源释放问题,目前可以不看屏幕用消息指导同事操作。
    emmm,最早看你的帖子,理解成了根本不会写,而不是时间长不用忘了。我也会忘东西啊,所以手边常备 Google,时不时也会写点东西温习一下
    nbstoner
        66
    nbstoner  
       2018-05-29 09:09:14 +08:00
    有啥不能接受的,你觉得你这样可以,然后让面试官觉得你这样可以。之后的工作中你也用你觉得可以的方法去做好工作。这不就得了
    keikeizhang
        67
    keikeizhang  
       2018-05-29 09:12:34 +08:00
    也许未来工具集越来越多,可能不会 SQL 也没有什么,如果有杠精,想想编程语言的底层是什么。
    chaleaochexist
        68
    chaleaochexist  
    OP
       2018-05-29 09:12:45 +08:00
    @6diyipi 不是卖萌。
    不过我有一个坏习惯就是做决定之前想听听别人的看法。V2 装逼的少,就上来问问。
    tedzhou1221
        69
    tedzhou1221  
       2018-05-29 09:13:06 +08:00
    我觉得起码简单的要会写
    leeyom
        70
    leeyom  
       2018-05-29 09:15:26 +08:00
    不接受
    jptx
        71
    jptx  
       2018-05-29 09:17:08 +08:00
    建表这类的低频率、复杂而且很重要的 SQL 不记得也没关系,直接用工具来建表最安全省事,至于 INSERT INTO 之类的常用 SQL,平时操作数据库时多写几遍就记住了,结构很简单
    hanxiV2EX
        72
    hanxiV2EX  
       2018-05-29 09:17:48 +08:00 via Android
    不用百度,准备一份手册,写的时候看看就行。又不是比速度,临时写也就 5 分钟的事情
    6diyipi
        73
    6diyipi  
       2018-05-29 09:18:02 +08:00
    @chaleaochexist 常用语句用印象笔记记着。最多半小时全部整理的妥妥的。
    niubee1
        74
    niubee1  
       2018-05-29 09:20:52 +08:00
    如果这个学不会我觉得是能力有问题, 接受不能.
    xjr7670
        75
    xjr7670  
       2018-05-29 09:23:49 +08:00
    这都能做后端??为啥我找个工作那么难,问得那么多
    AdamMing
        76
    AdamMing  
       2018-05-29 09:26:16 +08:00
    面试的时候不会问几种引擎的区别嘛。。
    KimJongun
        77
    KimJongun  
       2018-05-29 09:45:55 +08:00
    不推荐 ORM,还是写原声 SQL 吧
    nullen
        78
    nullen  
       2018-05-29 10:02:35 +08:00
    不能接受。
    akinoneko
        79
    akinoneko  
       2018-05-29 10:03:20 +08:00
    我们的测试都会.
    zhaogaz
        80
    zhaogaz  
       2018-05-29 10:06:36 +08:00
    其实我也忘,我跟楼主差不多,哈哈哈哈哈。

    经常写,还是忘。

    上面有人问,sql 递归,递归我也写过,具体到细节现在也忘了,大题思路还是有印象的。哈哈哈哈

    我觉得上面大部分人理解都是有问题的,记住了 /会了 就不会忘。怎么可能,又不是机器人,何况机器人也会坏呢。。。
    arthas2234
        81
    arthas2234  
       2018-05-29 10:07:07 +08:00
    。。不会写 SQL 一些问题你要怎么排查,数据库要怎么优化。要碰到没有 DBA 的公司,数据库都要你设计怎么办。我们运维和产品 SQL 都写的贼 6,别说是后端了
    xsliang
        82
    xsliang  
       2018-05-29 10:18:33 +08:00
    w3school 有一个 SQL 的快速参考
    http://www.w3school.com.cn/sql/sql_quickref.asp
    那里忘了看哪里 当然不包括一些细节
    silentstorm
        83
    silentstorm  
       2018-05-29 10:18:51 +08:00
    嗯,没啥大问题。只要 update,delete 时候 where 语句别忘了写就行
    Lanke0
        84
    Lanke0  
       2018-05-29 10:28:32 +08:00
    我经常忘,需要复习
    salamanderMH
        85
    salamanderMH  
       2018-05-29 10:28:50 +08:00
    不可能吧
    YouXia
        86
    YouXia  
       2018-05-29 10:29:28 +08:00
    工作前 3 年,没写过 SQL。后来做数据库内核开发时候,开始学了点。
    lazydog
        87
    lazydog  
       2018-05-29 10:31:26 +08:00 via Android
    如果没特殊要求的话,黑猫白猫抓到老鼠就是好猫!
    southsala
        88
    southsala  
       2018-05-29 10:52:13 +08:00
    对自己要求不高啊
    hjw45611
        89
    hjw45611  
       2018-05-29 11:00:02 +08:00
    增删查改、嵌套、联表等常用操作都写个例子,放在工作文档里,用到就看一下,怎么也能记住了。
    ytll21
        90
    ytll21  
       2018-05-29 11:01:16 +08:00
    对自己没要求的话,可以不会。
    enhancer
        91
    enhancer  
       2018-05-29 11:04:02 +08:00   ❤️ 1
    如果是做企业级应用开发的话,后端不会写 SQL 几乎无法干活。互联网应用情况可能稍微好一点。比如很普通的财务总账 SQL:

    SELECT AB.subject_code code, AB.subject_name name
    , IFNULL(AB.debit_amount_init, 0) debit_amount_init
    , IFNULL(AB.credit_amount_init, 0) credit_amount_init
    , IFNULL(AB.debit_amount_curr, 0) debit_amount_curr
    , IFNULL(AB.credit_amount_curr, 0) credit_amount_curr
    , IFNULL(C.debit_amount_end, 0) debit_amount_end
    , IFNULL(C.credit_amount_end, 0) credit_amount_end
    , IFNULL(D.debit_amount_total, 0) debit_amount_total
    , IFNULL(D.credit_amount_total, 0) credit_amount_total
    FROM
    (SELECT B.subject_code, B.subject_name
    , A.debit_amount_init, A.credit_amount_init
    , B.debit_amount_curr, B.credit_amount_curr
    FROM
    (SELECT subject_code
    , subject_name
    , SUM(debit_amount) debit_amount_init
    , SUM(credit_amount) credit_amount_init
    FROM accounting_document_item adi, accounting_document ad
    WHERE adi.doc_id = ad.id
    AND date_format(accounting_date, '%Y%m') < CONCAT(@12-YEAR@, @12-MONTH@)
    GROUP BY subject_code, subject_name) A
    RIGHT JOIN
    (SELECT subject_code
    , subject_name
    , SUM(debit_amount) debit_amount_curr
    , SUM(credit_amount) credit_amount_curr
    FROM accounting_document_item adi, accounting_document ad
    WHERE adi.doc_id = ad.id
    AND date_format(accounting_date, '%Y%m') = CONCAT(@12-YEAR@, @12-MONTH@)
    GROUP BY subject_code, subject_name) B
    ON A.subject_code = B.subject_code) AB
    LEFT JOIN
    (SELECT subject_code
    , subject_name
    , SUM(debit_amount) debit_amount_end
    , SUM(credit_amount) credit_amount_end
    FROM accounting_document_item adi, accounting_document ad
    WHERE adi.doc_id = ad.id
    AND date_format(accounting_date, '%Y%m') <= CONCAT(@12-YEAR@, @12-MONTH@)
    GROUP BY subject_code, subject_name) C
    ON AB.subject_code = C.subject_code
    LEFT JOIN
    (SELECT subject_code
    , subject_name
    , SUM(debit_amount) debit_amount_total
    , SUM(credit_amount) credit_amount_total
    FROM accounting_document_item adi, accounting_document ad
    WHERE adi.doc_id = ad.id
    AND date_format(accounting_date, '%Y') = @12-YEAR@
    GROUP BY subject_code, subject_name) D
    ON AB.subject_code = D.subject_code
    guoyuchuan
        92
    guoyuchuan  
       2018-05-29 11:06:35 +08:00
    至少基本的增删查改要会写,是会写,不是记得;
    younfor
        93
    younfor  
       2018-05-29 11:08:34 +08:00
    @FrailLove 怕不怕 。当然怕。从工程的角度来看,都是必须的。我还喜欢写胖代码,胖接口。成吨成吨的写。太可怕了。当然 SQL 你当然也要会。什么索引啊。视图啊,存储过程啊都要会写吧。之前我为了把 echarts 和自己业务 BI 展示合在一起,还专门封装了一遍。就是在写 SQL。太可怕了。
    younfor
        94
    younfor  
       2018-05-29 11:11:29 +08:00
    @enhancer 对。我想说的就是这个。企业应用类工程项目。必须是要会写的。有一次我 left join 10 张表。太可怕了。就为了查库存。
    HaoC12
        95
    HaoC12  
       2018-05-29 11:17:13 +08:00
    熟悉行转列,列转行,仍然找不到好工作。
    cuzfinal
        96
    cuzfinal  
       2018-05-29 11:21:09 +08:00
    测试运维都会手写 SQL。
    Tokin
        97
    Tokin  
       2018-05-29 11:53:10 +08:00
    我一直以为这些简单的 sql 语句学过编程的人都会,工作之后发现并不是这样,很多人都不会写。
    不知道为什么,难道他们学编程的时候,都没涉及到数据库吗?
    大学一些作业不都是什么图书管理系统、学生信息管理系统吗?
    难道数据都写 txt 里了吗。。。。
    ChiangDi
        98
    ChiangDi  
       2018-05-29 11:53:46 +08:00
    不会就百度呀。。。
    fuchaofather
        99
    fuchaofather  
       2018-05-29 12:17:34 +08:00 via Android
    @xxxy 没毛病
    bomb77
        100
    bomb77  
       2018-05-29 12:19:29 +08:00   ❤️ 2
    我记忆现在已经和金鱼差不多了,也动不动就怀疑自己是不是不适合做这行啊。。。
    算了,反正都是面向 Stack Overflow 编程。。。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   912 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 20:17 · PVG 04:17 · LAX 12:17 · JFK 15:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.