我来科普一下SQL吧,看不下去了

o
okyes
楼主 (北美华人网)
以前回帖科普过,看到最近帖子很多人有误解,把好多想学习的大妈都吓退了,这个帖子就是写给那些门外观望的人了解一下SQL,大牛就不要笑话了。 SQL本身是一种语言,structure query language,严格的说不算编程语言。在学校也就是database这门课一学期课程里面的一节课的内容,有的老师干脆不讲直接带过。 编程语言大致分两种,一种是需要编译的,比如Java,要先把人写的代码编译成机器码然后执行,还有一种不需要编译的叫做解释语言,比如很多脚本语言常见的Javascript,这些,都是直接执行的。 而SQL连脚本语言都算不上,就是用词造句,或者叫做填空题? 所有的语句通常细分为4/5类 DDL – Data Definition Language,包括create,rename,alter,drop,truncate和comment DQl – Data Query Language 就是select语句 DML – Data Manipulation Language包括insert,delete,update等 DCL – Data Control Language包括grant,revoke 有的也把TCL单独算一类 COMMIT– commits a Transaction. ROLLBACK– rollbacks a transaction in case of any error occurs. SAVEPOINT–sets a savepoint within a transaction. SET TRANSACTION–specify characteristics for the transaction 好了,关于SQL就那么多,一共20来个语句都有固定的表达式,你说快一点的半个小时或者半天能不能学会,肯定能学会,记得住不,肯定记不住,所以具体用啥,就像查字典一样,查一下表达式,换一下变量,然后在嵌套循环就行了,很多公司的DA,每天也就写一下以上这些语句,而且集中在查询,删除,更新,三个里面,最多再加一个commit。没有了,你说简单不。这也是大部分公司的DA行情,因为价钱就在那里摆着的。和会用excel制表差不多。闷头写query基本上就差不多了。
用抖音快手里面那种段子的话说,你要再不会,我提着五花肉上你家教你做回锅肉。 好了,如果半天学不会的,我提着SQL上你家给你亲自做SQL?
======================= 此处为华丽的分界线,以下为和SQL相关的,但是本身不属于SQL的内容,我想到哪儿讲到哪儿
stored procedure 或者不同的平台叫法不一样,比如Oracle 里面又有function又有stored procedure。总之叫做函数。马工一般叫做库函数,因为只有他们在写数据库预编函数的时候用得多。 这个本身不属于SQL的内容,这一部分有点编程的味道了,如果说SQL是一门程序语言,也是因为有函数。也可以写循环嵌套,if else那一套都行。 这个函数比较死板,有固定的格式,类似于八股文,起承转合一样,所以文科大妈不必害怕。随手一放狗替换一下你需要的变量名称基本上就妥了。 你看很多人写resume除了写SQL一般都是 PL/SQL。
triger,index以及数据库一端的相关操作 这些也不属于SQL的内容,甚至和DA都没关系,这些属于马工的活儿,一般后台马工都会搞定这个,作为大妈完全可以不知道这部分。
normalization ER data mapping这些也不属于SQL本身,这个属于database层面的内容,这一部分也不是DA的活儿,是DS,或者马工的活儿,写SQL的知道知道表单之间的relation是必须的,因为你需要query不同的表单,然后各种join的活儿,所以需要了解relational database,但是实在是不知道问题也不大。至于ORM你完全可以不知道。
HQL 或者叫做hibernate 这个作为一个例子说说SQL的衍生语言,因为要和其他平台和语言很好的融合,所以有了HQL,就是在hibernate framework里面把 SQL作为string直接嵌入其他程序语言,作为DA大妈这个也完全可以不知道不懂,毫不影响你,当然,你写SQL总的有一定环境,很少让你对着SQL server或者像 mySql的workbench或者postSQL的pgAdmin写的。所以你知道HQL当然好,可以让你和其他马工搭配写SQL,你的看得懂把你写好的SQL往哪儿塞。就像做填空题一样。
好了先写这么多。




 

🔥 最新回帖

s
serbil
173 楼
markmark
k
kengdie
172 楼
以前回帖科普过,看到最近帖子很多人有误解,把好多想学习的大妈都吓退了,这个帖子就是写给那些门外观望的人了解一下SQL,大牛就不要笑话了。 SQL本身是一种语言,structure query language,严格的说不算编程语言。在学校也就是database这门课一学期课程里面的一节课的内容,有的老师干脆不讲直接带过。 编程语言大致分两种,一种是需要编译的,比如Java,要先把人写的代码编译成机器码然后执行,还有一种不需要编译的叫做解释语言,比如很多脚本语言常见的Javascript,这些,都是直接执行的。 而SQL连脚本语言都算不上,就是用词造句,或者叫做填空题? 所有的语句通常细分为4/5类 DDL – Data Definition Language,包括create,rename,alter,drop,truncate和comment DQl – Data Query Language 就是select语句 DML – Data Manipulation Language包括insert,delete,update等 DCL – Data Control Language包括grant,revoke 有的也把TCL单独算一类 COMMIT– commits a Transaction. ROLLBACK– rollbacks a transaction in case of any error occurs. SAVEPOINT–sets a savepoint within a transaction. SET TRANSACTION–specify characteristics for the transaction 好了,关于SQL就那么多,一共20来个语句都有固定的表达式,你说快一点的半个小时或者半天能不能学会,肯定能学会,记得住不,肯定记不住,所以具体用啥,就像查字典一样,查一下表达式,换一下变量,然后在嵌套循环就行了,很多公司的DA,每天也就写一下以上这些语句,而且集中在查询,删除,更新,三个里面,最多再加一个commit。没有了,你说简单不。这也是大部分公司的DA行情,因为价钱就在那里摆着的。和会用excel制表差不多。闷头写query基本上就差不多了。
用抖音快手里面那种段子的话说,你要再不会,我提着五花肉上你家教你做回锅肉。 好了,如果半天学不会的,我提着SQL上你家给你亲自做SQL?
======================= 此处为华丽的分界线,以下为和SQL相关的,但是本身不属于SQL的内容,我想到哪儿讲到哪儿
stored procedure 或者不同的平台叫法不一样,比如Oracle 里面又有function又有stored procedure。总之叫做函数。马工一般叫做库函数,因为只有他们在写数据库预编函数的时候用得多。 这个本身不属于SQL的内容,这一部分有点编程的味道了,如果说SQL是一门程序语言,也是因为有函数。也可以写循环嵌套,if else那一套都行。 这个函数比较死板,有固定的格式,类似于八股文,起承转合一样,所以文科大妈不必害怕。随手一放狗替换一下你需要的变量名称基本上就妥了。 你看很多人写resume除了写SQL一般都是 PL/SQL。
triger,index以及数据库一端的相关操作 这些也不属于SQL的内容,甚至和DA都没关系,这些属于马工的活儿,一般后台马工都会搞定这个,作为大妈完全可以不知道这部分。
normalization ER data mapping这些也不属于SQL本身,这个属于database层面的内容,这一部分也不是DA的活儿,是DS,或者马工的活儿,写SQL的知道知道表单之间的relation是必须的,因为你需要query不同的表单,然后各种join的活儿,所以需要了解relational database,但是实在是不知道问题也不大。至于ORM你完全可以不知道。
HQL 或者叫做hibernate 这个作为一个例子说说SQL的衍生语言,因为要和其他平台和语言很好的融合,所以有了HQL,就是在hibernate framework里面把 SQL作为string直接嵌入其他程序语言,作为DA大妈这个也完全可以不知道不懂,毫不影响你,当然,你写SQL总的有一定环境,很少让你对着SQL server或者像 mySql的workbench或者postSQL的pgAdmin写的。所以你知道HQL当然好,可以让你和其他马工搭配写SQL,你的看得懂把你写好的SQL往哪儿塞。就像做填空题一样。
好了先写这么多。





okyes 发表于 2020-06-17 15:50

mark mark
B
BelleRLin
171 楼
谢谢楼主,有意思!!
c
cida
170 楼
谢谢科普,很有需要!
A
AkanaRika
169 楼
多谢科普学习一下

 

🛋️ 沙发板凳

a
amelialily1
写得好,SQL我天天都用
o
okyes
写得好,SQL我天天都用
amelialily1 发表于 2020-06-17 15:51

是吧,我就是看很多人本来有兴趣学,结果一堆不太精确的所谓科普把好容易站起来的大妈带沟里了,不忍心
m
manduka
thanks a lot!
m
manduka
樓主能評價一下java, C++, python嗎
o
okyes
接着写一点 关于database 通常有两种,一种是和SQL相关的,叫做relational database, 还有一种叫non relational database,后者对应的是noSQL 你上课的时候,老师会给你强调此处noSQL不是没有SQL,而是不仅仅是SQL,上课后遗症好吧 多数大妈只知道SQL很流行,其实noSQL也很热哦 noSQL的语言也有很多,但是最最常见的就是mongoDB,如果没听说过,油管上搜一搜,找个视频看看就入门了,稍微比SQL要复杂点,最多也就是回锅肉到水煮鱼的那种跨度。 很多非科班大妈都是学python的,其实学学mongoDB倒是不错,因为mongo的语法和结构和python的很近,很像。你再会一点JSON,对于那种非structure的data就有更深刻的认识了。比如生物千老的NGS数据,就需要mongoDB来handle了,好吧我只想到这个例子,其他其实很多。就是那种不是简单的表格能搞定的数据。 马工一般用xml或者json来存储这些数据,但是要query或者好update通常就要用到mongoDB,你学了,你会发现比写SQL的人会有更多机会。
j
jennifer111ar
太好了
l
luch
回复 1楼okyes的帖子
Mark mark mark 学习。
s
sparklingwater
谢谢科普,楼主继续
O
Orangetabby
👏👏
t
twptwp
thanks lz for sharing, zan
v
vivian2006
马克sql。
a
azhe
谢谢楼主科普!写得太好了~~~~~~~~~~~
o
okyes
樓主能評價一下java, C++, python嗎
manduka 发表于 2020-06-17 16:04

我都会,但是都是三脚猫,不敢说点评,达不到那个高度,在学校学101是学的Java,工作中主要是写Java的,也写Python。除了Java都是自学的。Java和C++相对都比较老了。这两个从语法是比较相近的,当然C++多一个指针,很多人直接蒙逼的地方也就是这个指针。和那两个比,python算是后浪吧,当然后浪也不一定把前浪拍死,比如我刚开始在岸上看的时候,perl就是后浪,很猛的,现在基本上就不流行了。 最大的区别就是,Java C++都是大括号来分割不同的block,而python是靠空位近缩来控制,所以很多人对于画风的切换很不习惯。 python对于数据库和string的处理太强大了。折腾字符串查找或者颠三倒四的操作,Java写好多行的东西,python可能三两行就搞定。还有就是处理大数据,所谓的big data,基本上都是python的菜,比如生物的NGS数据,还有爬虫爬网页那种海量的信息然后抓数据等等。python很多package,你只要能想到的,或者大多数人需要的,都有现成的包,要是供下载的包没有,比如你要是会github抄作业,那还有海量的资源。
如果是转行,或者半路出家,python容易上手,尤其是没有其他语言基础的话,很快适应这种近缩。
k
kellyqin6
Mark 有营养的帖子。
n
nface
lz 威武!
颜即是正义
难得在鲜花看着这种技术贴 支持楼主一下
q
qqzj
语言不难,难的是对数据的理解,这个理解包括结构,内容,在未知和一知半解的时候怎么能迅速上手。
w
williamzwly
mark mark
o
okyes
有人问我,说最快的方法是啥 我个人觉得如果找DA的职位写sql的话,最快最有效的应该是刷oracle的certificate吧,要不然你怎么说服人家你会写SQL啊,你可能说当场写几句,那你也得能过简历关不是,如果简历上写着几个打酱油的证书在加上oracle的11g或者12c,应该勉强能晃一下hr的眼睛的。亮瞎不至于,至少保住你的resume不被扔进垃圾桶。拿到面试机会当然最好是刷题,leetcode上面关于SQL的那百来个题,就算背着也不难的,都是join 啊union啊或者select然后再倒腾出去一部分这种。
a
aiyamayayongle
sql就是典型的容易上手用好了难的工具。
z
zoaldyeck11
赞这个 之前那个帖子我看了一眼就看不下去 还是中国大学那一套 讲个C语言 从定义讲起 各种高深 学生学得云里雾里的
我就学校里上过一门database的课 最后几节课过了一遍语法 就行了 实在有复杂的就临时google语法
h
hijklmn
为什么忽然说sql?
o
okyes
为什么忽然说sql?
hijklmn 发表于 2020-06-17 16:59

看到了一个方向跑偏了的所谓科普,我没忍住开了一个楼科普一下,主要是wfh闲的难受,无他
t
tinifwife
谢谢分享,字数字数...
m
maplepine
can any insider comment on the salary levels of SQL and noSQL related jobs?
o
okyes
can any insider comment on the salary levels of SQL and noSQL related jobs?
maplepine 发表于 2020-06-17 17:03

出门去glass door上面搜你心仪的公司的DA
m
manduka
我都会,但是都是三脚猫,不敢说点评,达不到那个高度,在学校学101是学的Java,工作中主要是写Java的,也写Python。除了Java都是自学的。Java和C++相对都比较老了。这两个从语法是比较相近的,当然C++多一个指针,很多人直接蒙逼的地方也就是这个指针。和那两个比,python算是后浪吧,当然后浪也不一定把前浪拍死,比如我刚开始在岸上看的时候,perl就是后浪,很猛的,现在基本上就不流行了。 最大的区别就是,Java C++都是大括号来分割不同的block,而python是靠空位近缩来控制,所以很多人对于画风的切换很不习惯。 python对于数据库和string的处理太强大了。折腾字符串查找或者颠三倒四的操作,Java写好多行的东西,python可能三两行就搞定。还有就是处理大数据,所谓的big data,基本上都是python的菜,比如生物的NGS数据,还有爬虫爬网页那种海量的信息然后抓数据等等。python很多package,你只要能想到的,或者大多数人需要的,都有现成的包,要是供下载的包没有,比如你要是会github抄作业,那还有海量的资源。
如果是转行,或者半路出家,python容易上手,尤其是没有其他语言基础的话,很快适应这种近缩。
okyes 发表于 2020-06-17 16:20

非常感謝樓主。
r
rita27
回复 1楼okyes的帖子
mark mark
b
bluegene123
看到了一个方向跑偏了的所谓科普,我没忍住开了一个楼科普一下,主要是wfh闲的难受,无他
okyes 发表于 2020-06-17 17:01

你说的所谓科普贴是指我那贴吗? 我写的内容是针对绝对的小白, 请问哪点说错了? 你说的‘所谓’是指什么?
你这贴是非常 technical 的东西, 和 detailed 的东西。 我那贴是针堆市场一大片 SQL 的需求,很多小白急着学SQL, 以为就可以找到工作。 但别人看重的不是会不会写, 是注重SQL相关的东西, 至于里面一大堆缩写, 背的滚瓜烂熟也敲不开门。要注重后面的思考。
不同的贴对不同的读者。 你想上位也不需要踩着别人的贴上吧?
h
huanglin82
有人问我,说最快的方法是啥 我个人觉得如果找DA的职位写sql的话,最快最有效的应该是刷oracle的certificate吧,要不然你怎么说服人家你会写SQL啊,你可能说当场写几句,那你也得能过简历关不是,如果简历上写着几个打酱油的证书在加上oracle的11g或者12c,应该勉强能晃一下hr的眼睛的。亮瞎不至于,至少保住你的resume不被扔进垃圾桶。拿到面试机会当然最好是刷题,leetcode上面关于SQL的那百来个题,就算背着也不难的,都是join 啊union啊或者select然后再倒腾出去一部分这种。
okyes 发表于 2020-06-17 16:41

我自认为SQL写的并不差,可为什么找不到DA的工作呢?甚至连面试都不多,是因为简历上面没有SQL证书吗?
b
bluegene123
我自认为SQL写的并不差,可为什么找不到DA的工作呢?甚至连面试都不多,是因为简历上面没有SQL证书吗?
huanglin82 发表于 2020-06-17 17:13

这就是exactly my point of my post。 市场一大片 SQL 的需求, 但别人看重的不是会不会写, 是注重SQL相关的东西, 至于里面一大堆缩写, 背的滚瓜烂熟也敲不开门。
o
okyes
你说的所谓科普贴是指我那贴吗? 我写的内容是针对绝对的小白, 请问哪点说错了? 你说的‘所谓’是指什么? 你想上位也不需要踩着别人的贴上吧?
bluegene123 发表于 2020-06-17 17:12

没有踩你的意思,我是说你把很多不属于SQL的东西揉合进去了,这样很初学的人看得云里雾里,如果你认为伤害到你了,我给你道歉,真的不是故意的。 比如procedure和relational database的那部分真的不属于SQL本身。就一个relational database就能难倒一堆人,包括我自己,如果几十个表单,one to one, one to many,many to many也许还有生还的希望,wfh的时候,我改写一个东西,我一看公司的那个database一共几百个表单,relational的线比城中村那个飞天电线还更密集,我直接立扑 个人观点,你那个帖子挺好的,但是恰恰不是针对小白,小白必须看晕,有基础的看当然没问题
p
pop
我自认为SQL写的并不差,可为什么找不到DA的工作呢?甚至连面试都不多,是因为简历上面没有SQL证书吗?
huanglin82 发表于 2020-06-17 17:13

如果只是写query写得好的话,不是应该申请database developer吗? DA没有证书谁敢用你啊,万一你手一抖把数据库删了呢。
p
pineappletin
没有踩你的意思,我是说你把很多不属于SQL的东西揉合进去了,这样很初学的人看得云里雾里,如果你认为伤害到你了,我给你道歉,真的不是故意的。 比如procedure和relational database的那部分真的不属于SQL本身。就一个relational database就能难倒一堆人,包括我自己,如果几十个表单,one to one, one to many,many to many也许还有生还的希望,wfh的时候,我改写一个东西,我一看公司的那个database一共几百个表单,relational的线比城中村那个飞天电线还更密集,我直接立扑 个人观点,你那个帖子挺好的,但是恰恰不是针对小白,小白必须看晕,有基础的看当然没问题
okyes 发表于 2020-06-17 17:19

我学normalization 的时候就很头晕,让我设计我肯定设计不出来
h
herolover
很久以前用过“no SQL”, 现在好像没有人用了
b
bluegene123
没有踩你的意思,我是说你把很多不属于SQL的东西揉合进去了,这样很初学的人看得云里雾里,如果你认为伤害到你了,我给你道歉,真的不是故意的。 比如procedure和relational database的那部分真的不属于SQL本身。就一个relational database就能难倒一堆人,包括我自己,如果几十个表单,one to one, one to many,many to many也许还有生还的希望,wfh的时候,我改写一个东西,我一看公司的那个database一共几百个表单,relational的线比城中村那个飞天电线还更密集,我直接立扑 个人观点,你那个帖子挺好的,但是恰恰不是针对小白,小白必须看晕,有基础的看当然没问题
okyes 发表于 2020-06-17 17:19

technical 的东西我是一点都没提的,只是跟贴的人提了。 要不然我怎么会说一,两天就学会呢。 我写那贴就是提醒那些小白, 别为了学 SQL 而学 SQL, 它本身很简单。 到知道背后的原因, 市场真正需要的是什么, 那去 interview 的时候才能发挥得更好。
o
okyes
我学normalization 的时候就很头晕,让我设计我肯定设计不出来
pineappletin 发表于 2020-06-17 17:23

一般到3NF和BCNF normalization还好,再往后就很晕菜了。 这个视频我觉得是讲database normalization讲的最简洁易懂的,送给你
https://www.youtube.com/watch?v=4Z9KEBexzcM
i
ilovess
接着写一点 关于database 通常有两种,一种是和SQL相关的,叫做relational database, 还有一种叫non relational database,后者对应的是noSQL 你上课的时候,老师会给你强调此处noSQL不是没有SQL,而是不仅仅是SQL,上课后遗症好吧 多数大妈只知道SQL很流行,其实noSQL也很热哦 noSQL的语言也有很多,但是最最常见的就是mongoDB,如果没听说过,油管上搜一搜,找个视频看看就入门了,稍微比SQL要复杂点,最多也就是回锅肉到水煮鱼的那种跨度。 很多非科班大妈都是学python的,其实学学mongoDB倒是不错,因为mongo的语法和结构和python的很近,很像。你再会一点JSON,对于那种非structure的data就有更深刻的认识了。比如生物千老的NGS数据,就需要mongoDB来handle了,好吧我只想到这个例子,其他其实很多。就是那种不是简单的表格能搞定的数据。 马工一般用xml或者json来存储这些数据,但是要query或者好update通常就要用到mongoDB,你学了,你会发现比写SQL的人会有更多机会。

okyes 发表于 2020-06-17 16:10

赞赞赞全力马克!!!
小蘑菇一家
回复 1楼okyes的帖子
干货帖,必须留名。。。
u
usbeautifullife
希望多一些这样的讨论
C
Caffeine
大妈我当年需要处理数据的时候是自学的,差不多花了一个礼拜上班的时间(里面还有工作的普通事情),我也同意数据分析更重要。语言本身是为了数据分析服务的。 不过数据分析要真的懂ultimate use才行。
麻花辫
这玩意儿易学难精,只有做多了,积累到了,自然就容易了。 做DA的,除了维修数据库外,还经常需要做tuning/optimization,这才是考较能力的东西。
2
201120152019
大赞啊!强帖留个名,需要好好学习!
大鸟鸟
楼主肤浅了,为什么说SQL不是编程语言? 也是好吧。 你的sql指令在哪里执行? 数据库Engine呀。sql只是用与数据编程。也算是编程语言。
s
songxm99
收藏先。 有次面试就被SQL卡住了,汗
好奇宝宝1314
SQL写的好一点也不容易,因为评判的标准不只是结果正不正确,效率是非常重要的,甚至超过了结果。如何提高效率说白了是通过日积月累的工作经验获得的。这就是为什么DBA和DB developer都喜欢要经验丰富的。如果认为随便研究一下怎么写code就可以找到相关的工作,那真是太天真了。
z
zclbobo
回复 3楼okyes的帖子
写得好,希望别歪楼。入门的话,推荐一个资源?
o
okyes
回复 3楼okyes的帖子
写得好,希望别歪楼。入门的话,推荐一个资源?
zclbobo 发表于 2020-06-17 18:14

看视频太费时间了,w3school直接上去开始写就行了,其实那些所谓的网课,不花钱的都嫌挺浪费自己时间的,还不要说那些花钱的网课。w3school应付一般入门都够了,只要你能想到的都有。
w
wdmg
回复 41楼usbeautifullife的帖子
不错,谢谢科普。。。
K
Kayla0810
谢谢楼主科普
T
TheArchitect
SQL是一种基于逻辑式范式的领域专有编程语言(Domain-specific language, DSL),但不是通用编程语言(General-purpose programming language)
语言有三个层面:词法(lexical grammar)、语法(syntactical grammar)、语义(semantics)。不同语言之间最根本的区别在于语义所决定的计算模型(computational model)。
SQL的计算模型是Tuple relational calculus,本质上是一阶谓词逻辑,抛去词法(例如"SELECT"/"FROM")与语法结构,SQL表达的实际上就是我们小学就学过的集合论的“comprehension”,也就是类似 A = { x | x ∈ B ∧ x > 1 } 这样通过指定约束条件来定义一个结果集合,其主要特点是声明式(declarative),也就是说我们只要指定约束条件(相当于列方程),那么数据库系统就有一套机制自动去解这个方程,而不需要我们去指定具体的计算过程(后者在数学上一般称为algebra,与calculus对应)。
也就是说SQL所提供的最重要的功能是让数据分析师可以“列方程”并交给SQL执行引擎去求解/优化,这是计算模型而不是语法层面的东西,其它语言如C++/Java/Python并不能做到这一点。如果要做到,这些语言必须内置SQL求解引擎,那就是多此一举(实际上大部分数据库系统本身都是用C++写的),所以SQL与通用语言没有可替代关系。此外,现在流行一些的数据处理的库,如Spark DataFrame、R DataFrame、Pandas,本质上是relational algebra —— 注意它们是algebra,不是列方程而是要明确写出计算步骤,所以语言的表达能力/优化能力是比不上SQL的,这也是这些框架回过头又做SQL引擎的原因。
熊熊ABC
有人问我,说最快的方法是啥 我个人觉得如果找DA的职位写sql的话,最快最有效的应该是刷oracle的certificate吧,要不然你怎么说服人家你会写SQL啊,你可能说当场写几句,那你也得能过简历关不是,如果简历上写着几个打酱油的证书在加上oracle的11g或者12c,应该勉强能晃一下hr的眼睛的。亮瞎不至于,至少保住你的resume不被扔进垃圾桶。拿到面试机会当然最好是刷题,leetcode上面关于SQL的那百来个题,就算背着也不难的,都是join 啊union啊或者select然后再倒腾出去一部分这种。
okyes 发表于 2020-06-17 16:41

我觉得不是做dba没必要考certificate。现在都是流行白板写code,题能做出来就行了。做分析的话不止考select union这么简单,各种window function要会,还要能讲出数据里面可能有的各种陷阱,例如叫你写sql算出每一天的retention rate是多少,中间就可以有很多坑,例如table里面的日期不是连续的怎么办你要能generate那个缺失掉的日子
熊熊ABC
如果只是写query写得好的话,不是应该申请database developer吗? DA没有证书谁敢用你啊,万一你手一抖把数据库删了呢。
pop 发表于 2020-06-17 17:20

照理不应该随便哪个人都有权限删库,security问题
芒果冰
我自认为SQL写的并不差,可为什么找不到DA的工作呢?甚至连面试都不多,是因为简历上面没有SQL证书吗?
huanglin82 发表于 2020-06-17 17:13

你想想query很多人都会写,但是query performance tuning很多人就做不好甚至不care. 我觉得你简历里面要是能体现不仅会写query而且懂一点点data warehouse会比较好。
a
aiyamayayongle
回复 54楼熊熊ABC的帖子
即便有权限删除,数据库有至少一个备份也是最低要求了。
s
sea9
SQL是一种基于逻辑式范式的领域专有编程语言(Domain-specific language, DSL),但不是通用编程语言(General-purpose programming language)
语言有三个层面:词法(lexical grammar)、语法(syntactical grammar)、语义(semantics)。不同语言之间最根本的区别在于语义所决定的计算模型(computational model)。
SQL的计算模型是Tuple relational calculus,本质上是一阶谓词逻辑,抛去词法(例如"SELECT"/"FROM")与语法结构,SQL表达的实际上就是我们小学就学过的集合论的“comprehension”,也就是类似 A = { x | x ∈ B ∧ x > 1 } 这样通过指定约束条件来定义一个结果集合,其主要特点是声明式(declarative),也就是说我们只要指定约束条件(相当于列方程),那么数据库系统就有一套机制自动去解这个方程,而不需要我们去指定具体的计算过程(后者在数学上一般称为algebra,与calculus对应)。
也就是说SQL所提供的最重要的功能是让数据分析师可以“列方程”并交给SQL执行引擎去求解/优化,这是计算模型而不是语法层面的东西,其它语言如C++/Java/Python并不能做到这一点。如果要做到,这些语言必须内置SQL求解引擎,那就是多此一举(实际上大部分数据库系统本身都是用C++写的),所以SQL与通用语言没有可替代关系。此外,现在流行一些的数据处理的库,如Spark DataFrame、R DataFrame、Pandas,本质上是relational algebra —— 注意它们是algebra,不是列方程而是要明确写出计算步骤,所以语言的表达能力/优化能力是比不上SQL的,这也是这些框架回过头又做SQL引擎的原因。
TheArchitect 发表于 2020-06-17 18:38

简而言之,SQL是编写what to do后台系统(就是所谓engine)决定how to do, 一般编程语言是写how to do
p
psyentistc
没有踩你的意思,我是说你把很多不属于SQL的东西揉合进去了,这样很初学的人看得云里雾里,如果你认为伤害到你了,我给你道歉,真的不是故意的。 比如procedure和relational database的那部分真的不属于SQL本身。就一个relational database就能难倒一堆人,包括我自己,如果几十个表单,one to one, one to many,many to many也许还有生还的希望,wfh的时候,我改写一个东西,我一看公司的那个database一共几百个表单,relational的线比城中村那个飞天电线还更密集,我直接立扑 个人观点,你那个帖子挺好的,但是恰恰不是针对小白,小白必须看晕,有基础的看当然没问题
okyes 发表于 2020-06-17 17:19

你说的几百个表单的情况下,你最后是怎么处理改写的呢?另外真的需要经常手写SQL吗?感觉很多时候都是前台UI 自动生成的SQL或者是用stored-procedure(写一次就好)。
p
psyentistc
大妈我当年需要处理数据的时候是自学的,差不多花了一个礼拜上班的时间(里面还有工作的普通事情),我也同意数据分析更重要。语言本身是为了数据分析服务的。 不过数据分析要真的懂ultimate use才行。
Caffeine 发表于 2020-06-17 17:39

什么叫ultimate use呢?举几个例子可以吗?
烟熏三文鱼
谢谢分享!
m
mangmang
问下sql 和sas的主要区别? 除去做统计的部分
F
Fhu
我都会,但是都是三脚猫,不敢说点评,达不到那个高度,在学校学101是学的Java,工作中主要是写Java的,也写Python。除了Java都是自学的。Java和C++相对都比较老了。这两个从语法是比较相近的,当然C++多一个指针,很多人直接蒙逼的地方也就是这个指针。和那两个比,python算是后浪吧,当然后浪也不一定把前浪拍死,比如我刚开始在岸上看的时候,perl就是后浪,很猛的,现在基本上就不流行了。 最大的区别就是,Java C++都是大括号来分割不同的block,而python是靠空位近缩来控制,所以很多人对于画风的切换很不习惯。 python对于数据库和string的处理太强大了。折腾字符串查找或者颠三倒四的操作,Java写好多行的东西,python可能三两行就搞定。还有就是处理大数据,所谓的big data,基本上都是python的菜,比如生物的NGS数据,还有爬虫爬网页那种海量的信息然后抓数据等等。python很多package,你只要能想到的,或者大多数人需要的,都有现成的包,要是供下载的包没有,比如你要是会github抄作业,那还有海量的资源。
如果是转行,或者半路出家,python容易上手,尤其是没有其他语言基础的话,很快适应这种近缩。
okyes 发表于 2020-06-17 16:20

Re python的缩位,时不时就习惯回括号,恶心死了
l
lulala
还在码ada的请举手。
p
pop
照理不应该随便哪个人都有权限删库,security问题
熊熊ABC 发表于 2020-06-17 19:05

因为手抖删除数据库的事,我就干过啊。 当时刚被录用,啥也不懂,干啥都靠google。 而且就让我负责整个分部的数据,分部就我一个人, 出啥事连个商量的人都没有。 当时前任分部的数据管理员辞职之后才急忙招了我, 也没来得及入职培训, 入职第二天就直接给我管理员权限了, 虽然我当时会的一点数据库知识就是以前上学时候上的那两门课。
然后我就边干边自学, 终于在自学的过程中把主要的数据库当成测试的给删掉了。。 当时我脑袋嗡地一声,冷汗就下来了。
好在后来找到了备份文件。
s
sea9
因为手抖删除数据库的事,我就干过啊。 当时刚被录用,啥也不懂,干啥都靠google。 而且就让我负责整个分部的数据,分部就我一个人, 出啥事连个商量的人都没有。 当时前任分部的数据管理员辞职之后才急忙招了我, 也没来得及入职培训, 入职第二天就直接给我管理员权限了, 虽然我当时会的一点数据库知识就是以前上学时候上的那两门课。
然后我就边干边自学, 终于在自学的过程中把主要的数据库当成测试的给删掉了。。 当时我脑袋嗡地一声,冷汗就下来了。
好在后来找到了备份文件。

pop 发表于 2020-06-17 21:05

想起了多年以前在公司的一个unix服务器上用root用户执行了\rm -rf /
p
pop
想起了多年以前在公司的一个unix服务器上用root用户执行了\rm -rf /
sea9 发表于 2020-06-17 21:09

你干的? 然后呢?
p
pineappletin
因为手抖删除数据库的事,我就干过啊。 当时刚被录用,啥也不懂,干啥都靠google。 而且就让我负责整个分部的数据,分部就我一个人, 出啥事连个商量的人都没有。 当时前任分部的数据管理员辞职之后才急忙招了我, 也没来得及入职培训, 入职第二天就直接给我管理员权限了, 虽然我当时会的一点数据库知识就是以前上学时候上的那两门课。
然后我就边干边自学, 终于在自学的过程中把主要的数据库当成测试的给删掉了。。 当时我脑袋嗡地一声,冷汗就下来了。
好在后来找到了备份文件。

pop 发表于 2020-06-17 21:05

呃……这个公司胆真大……
p
pineappletin
一般到3NF和BCNF normalization还好,再往后就很晕菜了。 这个视频我觉得是讲database normalization讲的最简洁易懂的,送给你
https://www.youtube.com/watch?v=4Z9KEBexzcM

okyes 发表于 2020-06-17 17:31

谢谢!
m
majiahuaren
多谢分享,大学时候学过,后来不需要忘得差不多,正在面试的工作需要熟悉这部分,正好看到mm的帖子
s
subrina
个人认为工作中学SQL挺值得鼓励的,但是想通过掌握SQL找工作,实在是有点不现实。DA要掌握的远远不止SQL。
另外,通常大家讨论的几种编程语言,我的一点浅见: 最底层效率最高最难的是C++,很多底层的协议都是C/C++写的,如果要求效率高占用资源少的,C/C++还是首选。 大公司商业平台大多数用Java,因为java有跨平台的优越性,同时效率也很高 数据处理,机器学习建模很多用Python,现在学习Python的人越来越多,是因为Python是高级的语言,入门简单,有很多库,尤其因为它是解释性的语言调试起来快速方便,很适合来做快速模型开发,但是工作中用Python的应该远低于前两个,Python的运行效率是非常低的,同样的问题,用Python跑,耗时比前两个多的不是一个数量级好吗?毕竟有多少人做模型开发,需要快速编程呢,大多数还是为大公司的商业系统搬砖吧。
总结就是做tech最核心的就是学习的能力,一般你掌握了一种语言,公司默认你可以通过自己学习很快掌握其他。
o
okyes
SQL是一种基于逻辑式范式的领域专有编程语言(Domain-specific language, DSL),但不是通用编程语言(General-purpose programming language)
语言有三个层面:词法(lexical grammar)、语法(syntactical grammar)、语义(semantics)。不同语言之间最根本的区别在于语义所决定的计算模型(computational model)。
SQL的计算模型是Tuple relational calculus,本质上是一阶谓词逻辑,抛去词法(例如"SELECT"/"FROM")与语法结构,SQL表达的实际上就是我们小学就学过的集合论的“comprehension”,也就是类似 A = { x | x ∈ B ∧ x > 1 } 这样通过指定约束条件来定义一个结果集合,其主要特点是声明式(declarative),也就是说我们只要指定约束条件(相当于列方程),那么数据库系统就有一套机制自动去解这个方程,而不需要我们去指定具体的计算过程(后者在数学上一般称为algebra,与calculus对应)。
也就是说SQL所提供的最重要的功能是让数据分析师可以“列方程”并交给SQL执行引擎去求解/优化,这是计算模型而不是语法层面的东西,其它语言如C++/Java/Python并不能做到这一点。如果要做到,这些语言必须内置SQL求解引擎,那就是多此一举(实际上大部分数据库系统本身都是用C++写的),所以SQL与通用语言没有可替代关系。此外,现在流行一些的数据处理的库,如Spark DataFrame、R DataFrame、Pandas,本质上是relational algebra —— 注意它们是algebra,不是列方程而是要明确写出计算步骤,所以语言的表达能力/优化能力是比不上SQL的,这也是这些框架回过头又做SQL引擎的原因。
TheArchitect 发表于 2020-06-17 18:38

整深了,你会吓着初学者的 比如relational algebra 如果在database的书里面就是一连串的公式,大妈就是看到那一堆delta符号估计就不想往下看了。 比如随便写一个left out join 的抽象数学表达

g
gaoyouli
必须mark!当年学C++的时候都是泪啊。
w
wyzgbjnhzlg
必须mark,学习一下。
o
okyes
你说的几百个表单的情况下,你最后是怎么处理改写的呢?另外真的需要经常手写SQL吗?感觉很多时候都是前台UI 自动生成的SQL或者是用stored-procedure(写一次就好)。
psyentistc 发表于 2020-06-17 20:07

我是优化函数和sql本身关系不大,但是函数要涉及到HQL里面有内嵌的sql语句。这个是优化整个系统的问题,根本不是一个人两个人能完成的,整个infrastructure都要动,最后讨论扯皮各种方案,你懂的。 如果你用mySQL workbench,只要你画完relational diagram,能自动生成SQL,也就是所有DDL create database的部分的sql语句都可以自动生成,包括constraints,基本上点点鼠标,界面添加就能自动给你转换成SQL语句。当然,其实做后台开发或者维护其实也不需要写太多的SQL,你看log,那些客户前端界面提交的SQL语句都有了。但是这个是在科普,不走那么远。
o
okyes
问下sql 和sas的主要区别? 除去做统计的部分
mangmang 发表于 2020-06-17 20:54

SQL本身是一种语言,不属于任何一家,也不属于任何一个软件。 SAS里面有内置SQL 叫做proc SQL,语法和其他商家的SQL稍有差异,但是都是基于SQL语言本身。 SAS是一种商业化程序。sas就像mySQL或者oracle,或者SQL server一样,是一种第三方开发的程序。 所以SAS要卖license,每年都要renew而且很贵。不知道这样说你懂没
o
okyes
因为手抖删除数据库的事,我就干过啊。 当时刚被录用,啥也不懂,干啥都靠google。 而且就让我负责整个分部的数据,分部就我一个人, 出啥事连个商量的人都没有。 当时前任分部的数据管理员辞职之后才急忙招了我, 也没来得及入职培训, 入职第二天就直接给我管理员权限了, 虽然我当时会的一点数据库知识就是以前上学时候上的那两门课。
然后我就边干边自学, 终于在自学的过程中把主要的数据库当成测试的给删掉了。。 当时我脑袋嗡地一声,冷汗就下来了。
好在后来找到了备份文件。

pop 发表于 2020-06-17 21:05

你们公司也太任性了,哈哈哈 稍微大一点的工地,对于数据库权限grant是很严格的,像狗牙交错,相互制衡,同一个数据库有n多user不同权限。屁大一个事儿需要授权。而且cloud上各种备份,你想手抖都没机会搞破坏。
s
sorasky
这是帮人吗?有误导嫌疑。 那么高薪水,好像是个人都能干的。无语了 你总结的那点皮毛东西是人都知道, 但sql工作绝非crud这么简单。。。
c
commander
Mark 师父领进门 修行在个人啊
o
okyes
这是帮人吗?有误导嫌疑。 那么高薪水,好像是个人都能干的。无语了 你总结的那点皮毛东西是人都知道, 但sql工作绝非crud这么简单。。。

sorasky 发表于 2020-06-17 22:02

大姐,拜托,我在主贴里面写了SQL找工作的字样吗?我只是告诉大妈如何学SQL,如何入门,还有你一定有误解,写SQL的工作工资不高的,你不信自己glassdoor随便搜一把,或者indeed随便找个职位看看不就知道了吗,和高薪半毛钱关系没有。至于工作中是不是简单看个人handle的能力和看你的公司。你要是几个人的小公司,啥都的干,那是不简单,从requirement 分析到系统设计,前端写道后台,从data mapping到query都要干,但是成型的正规公司,往往就是螺丝钉,你干的东西很范围很窄的。因为你手太长了,人家就没活儿干了。
m
minglan
楼主说得对。 我也用SQl, 但只是套用script, 因为不同部门数据的名字不一样,但我也就是选个时间段,选一些变量,我只有权把数据搞出来, 不允许改动数据。 出来以后用spss和sas分析
m
mangmang
SQL本身是一种语言,不属于任何一家,也不属于任何一个软件。 SAS里面有内置SQL 叫做proc SQL,语法和其他商家的SQL稍有差异,但是都是基于SQL语言本身。 SAS是一种商业化程序。sas就像mySQL或者oracle,或者SQL server一样,是一种第三方开发的程序。 所以SAS要卖license,每年都要renew而且很贵。不知道这样说你懂没
okyes 发表于 2020-06-17 21:57

我想问的是MySQL 和sas的区别?我知道sas有做统计模型的部分好像MySQL 没有,其它方面呢?mysql 也有类似function ,macro, for loop 那些吗?是不是能做的没有SAS 多?谢谢
公马密码123
原来如此
d
diep
SQL难在优化
r
redeye
mark一下~~~ 有帮助
无悔的今生
这是个好贴子,马克一下
k
katypeng
mark一下
m
minglan
我想问的是MySQL 和sas的区别?我知道sas有做统计模型的部分好像MySQL 没有,其它方面呢?mysql 也有类似function ,macro, for loop 那些吗?是不是能做的没有SAS 多?谢谢
mangmang 发表于 2020-06-17 22:43

土豆和猕猴桃的区别:)
y
yiyitiantian
mark SQL
h
hralex
原本以为是搞笑贴,这种纯技术问题发一些了解到别的网站不就行了?确实不适合小白。一个例子都没有,blah blah一大堆。
赵蜀黍
我都会,但是都是三脚猫,不敢说点评,达不到那个高度,在学校学101是学的Java,工作中主要是写Java的,也写Python。除了Java都是自学的。Java和C++相对都比较老了。这两个从语法是比较相近的,当然C++多一个指针,很多人直接蒙逼的地方也就是这个指针。和那两个比,python算是后浪吧,当然后浪也不一定把前浪拍死,比如我刚开始在岸上看的时候,perl就是后浪,很猛的,现在基本上就不流行了。 最大的区别就是,Java C++都是大括号来分割不同的block,而python是靠空位近缩来控制,所以很多人对于画风的切换很不习惯。 python对于数据库和string的处理太强大了。折腾字符串查找或者颠三倒四的操作,Java写好多行的东西,python可能三两行就搞定。还有就是处理大数据,所谓的big data,基本上都是python的菜,比如生物的NGS数据,还有爬虫爬网页那种海量的信息然后抓数据等等。python很多package,你只要能想到的,或者大多数人需要的,都有现成的包,要是供下载的包没有,比如你要是会github抄作业,那还有海量的资源。
如果是转行,或者半路出家,python容易上手,尤其是没有其他语言基础的话,很快适应这种近缩。
okyes 发表于 2020-06-17 16:20

头一次看到这个角度说Python 和 java, c++的最大区别。服!
h
hata007007
以前回帖科普过,看到最近帖子很多人有误解,把好多想学习的大妈都吓退了 SQL本身是一种语言,structure query language,严格的说不算编程语言。在学校也就是database这门课一学期课程里面的一节课的内容,有的老师干脆不讲直接带过。 编程语言大致分两种,一种是需要编译的,比如Java,要先把人写的代码编译成机器码然后执行,还有一种不需要编译的叫做解释语言,比如很多脚本语言常见的Javascript,这些,都是直接执行的。 而SQL连脚本语言都算不上,就是用词造句,或者叫做填空题? 所有的语句通常细分为4/5类 DDL – Data Definition Language,包括create,rename,alter,drop,truncate和comment DQl – Data Query Language 就是select语句 DML – Data Manipulation Language包括insert,delete,update等 DCL – Data Control Language包括grant,revoke 有的也把TCL单独算一类 COMMIT– commits a Transaction. ROLLBACK– rollbacks a transaction in case of any error occurs. SAVEPOINT–sets a savepoint within a transaction. SET TRANSACTION–specify characteristics for the transaction 好了,关于SQL就那么多,一共20来个语句都有固定的表达式,你说快一点的半个小时或者半天能不能学会,肯定能学会,记得住不,肯定记不住,所以具体用啥,就像查字典一样,查一下表达式,换一下变量,然后在嵌套循环就行了,很多公司的DA,每天也就写一下以上这些语句,而且集中在查询,删除,更新,三个里面,最多再加一个commit。没有了,你说简单不。这也是大部分公司的DA行情,因为价钱就在那里摆着的。和会用excel制表差不多。闷头写query基本上就差不多了。
用抖音快手里面那种段子的话说,你要再不会,我提着五花肉上你家教你做回锅肉。 好了,如果半天学不会的,我提着SQL上你家给你亲自做SQL?
======================= 此处为华丽的分界线,以下为和SQL相关的,但是本身不属于SQL的内容,我想到哪儿讲到哪儿
stored procedure 或者不同的平台叫法不一样,比如Oracle 里面又有function又有stored procedure。总之叫做函数。马工一般叫做库函数,因为只有他们在写数据库预编函数的时候用得多。 这个本身不属于SQL的内容,这一部分有点编程的味道了,如果说SQL是一门程序语言,也是因为有函数。也可以写循环嵌套,if else那一套都行。 这个函数比较死板,有固定的格式,类似于八股文,起承转合一样,所以文科大妈不必害怕。随手一放狗替换一下你需要的变量名称基本上就妥了。 你看很多人写resume除了写SQL一般都是 PL/SQL。
triger,index以及数据库一端的相关操作 这些也不属于SQL的内容,甚至和DA都没关系,这些属于马工的活儿,一般后台马工都会搞定这个,作为大妈完全可以不知道这部分。
normalization ER data mapping这些也不属于SQL本身,这个属于database层面的内容,这一部分也不是DA的活儿,是DS,或者马工的活儿,写SQL的知道知道表单之间的relation是必须的,因为你需要query不同的表单,然后各种join的活儿,所以需要了解relational database,但是实在是不知道问题也不大。至于ORM你完全可以不知道。
HQL 或者叫做hibernate 这个作为一个例子说说SQL的衍生语言,因为要和其他平台和语言很好的融合,所以有了HQL,就是在hibernate framework里面把 SQL作为string直接嵌入其他程序语言,作为DA大妈这个也完全可以不知道不懂,毫不影响你,当然,你写SQL总的有一定环境,很少让你对着SQL server或者像 mySql的workbench或者postSQL的pgAdmin写的。所以你知道HQL当然好,可以让你和其他马工搭配写SQL,你的看得懂把你写好的SQL往哪儿塞。就像做填空题一样。
好了先写这么多。





okyes 发表于 2020-06-17 15:50

谢谢楼主
l
loveyogurt68
谢谢楼主分享,非常感谢!
b
boden
mark住,谢谢lz分享啊
s
subrina
头一次看到这个角度说Python 和 java, c++的最大区别。服!
赵蜀黍 发表于 2020-06-17 23:49

哈哈,看到楼主mm总结的java,c++和python的最大区别是括号和空格,我也是
z
zhaoxiaoxi
mark mark mark
哈森森
谢谢科普,感谢楼主。
L
LQLOVENK
赞lz
t
tracysyn
难得一见有些干货的好帖子