以前回帖科普过,看到最近帖子很多人有误解,把好多想学习的大妈都吓退了,这个帖子就是写给那些门外观望的人了解一下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往哪儿塞。就像做填空题一样。 好了先写这么多。
谁说没人用,search非结构数据不用nosql难道还能用sql?
我学建筑的,这个完全没入门,所以多少希望能有个introduce to的课程能看看,我刚上了w3school,摆弄了一下发觉完全不知道在干嘛
一看楼主就是个头脑清醒的硬核选手, 不知道为啥看起来很爽。 给你点个赞。 以后多上来科普啊。
这也叫干货!外行真是好骗啊。
MySQL 是数据库。强在存取数据。 Sas是统计软件,强在数据分析。
我觉得最主要的区别是你的query 在哪run的,SAS的proc sql也好,用python做data wrangling也好,都是吧data先存到一个object里,拿python举例子吧我SAS不太熟,python的dataframe如果你locally run python相当于每个dataframe会occupy一定的memory. 我不太确定sas但是我感觉SAS你query executing也是software本身deal with object你连server的话连的是SAS的server,简单来说你的query并没有直接在data warehouse里面run. 好处也是有的,因为这样子的话你做join不用考虑data存在哪个db里,你可以把data pull到SAS/python里,join是在python/SAS里面进行的。坏处非常明显,假设你处理非常大的data, 假设你是locally run, 你电脑本身会决定你能run多大的data. 而且你把data存到object之后再做join, 你基本是不用table本身的key或者indexing的。而如果你直接run query在db里面的话,你才会真正利用到database/data warehouse的optimizer. 这种方式的话,麻烦之处就是如果你想join两张table, 而两张table在两个db, 你就需要build ETL
我感觉正相反。Python 有很多magic, 比如 decorator, metaclass,理解几行magic 比读几百行直来直去的c/c++ Code难多了。
苍天啊,再一次表明能说的人到哪儿都占便宜啊。
之前一直用SAS分析数据,偶尔用用Stata, 现在正在学习Python,感觉有点不习惯
墙贴留名。 mark
Python code 也要看谁写的。聪明人可以搞得很奥妙难懂。而c语言压根儿搞不出这么多花样。
学习一下!马克马克!!
谁能给一下“leetcode上面关于SQL的那百来个题”的LINK🔗吗?
多谢~!
库是什么?
赞大妈之友👍
都有,你说这些都是SQL语言带的 比如mySQL里面有stored procedure,就是你见到的那种用begin 和end 封装起来的那种SQL,这个就是function,你可以先预编,然后存在数据库侧,然后你从其他程序可以直接调用,或者在mySQL里面也可以直接call这个函数。for loop和if这些也有。通常来说,写在procedure里面。但是有的人也直接写在嵌套的SQL里面,也就是不用begin 和end封装,你也可以嵌入。 sas的SQL和mySQL除了细微的句法差异,总体差不多。我用sas用的不多,也许有其他的玄机,我不清楚 mySQL的强大之处,我在前面说了,他的workbench很友好,可以直接生成SQL脚本,你画好relational的table图,定义好表格之间的主键外键和对应关系,他直接能给你生成脚本,其他SQL好像不能
不是能说,你要针对你的目标人群,也就是听众说,你说的再高深,听众表示一脸茫然,你不等于白说了吗?人家想知道SQL到底是个啥,入门难不难,你就讲讲门框在哪里,大概啥质地,高矮,能不能跨过门槛,磕着碰着会有多疼........ 你如果跟人家讲门框很高的,能扣篮那样的选手都不一定能摸着门框上沿,而且进了门一堆的坑,有的坑专坑爹,还有连环坑,还有机关玄弩。大哥人家不就是为了试试SQL而且未必真的要如何,你搞得跟盗墓笔记一样骇人听闻有意思吗?
https://leetcode.com/problemset/database/
Mark mark mark
and dob>'12/31/1989' :)
mark mark mark!
笑死!
希望多一些这样的讨论
我是惊诧于SQL可以跟硬核联系在一起。
数据库跟操作系统一样是个博大精深的天坑呀,而且是把各种算法理论发挥到极致的application。真正理论与实践完美结合。入门简单,精通的话可以看看postgres源代码,感受算法实现的精妙
如果能骗到经费可以啊。反正都是化妆品,时髦的比较抓眼球。
what are you talking about?! 这些常用语言早就有现成的各种 database connection library 的。
数据库研发和使用完全两个不同范畴吧。楼主这里说的显然不是研发。
dob>'12/31/1989' 这个日期是什么梗?
跟前半句合起来只调出90后美眉资料,哈哈,你们00后在里面耶。
哈哈哈,这个好玩!你那个跟帖里有2个点赞,其中有一个是我送的。大方吧我!LOL
越多层的嵌套和join越复杂,不用很长也可以很复杂
C++ 的template 也不到好懂啊。 而且一个typo 几百行的error message 。。。
我上过sql的网课,UC系统的,老师讲得非常好,作业也很有针对性,简单的难得都有,有期中期末考,有project,大概9周时间吧,每周大概两三个小时。对于我这种没啥行动力的人来说网课非常好,有人讲解有作业push,当然因为是公司出钱,最后还得拿个certificate保证过了考试。总体来说比自己学习或者同事给我讲解跟系统更快上手。同意一个jms说的话,上身就很容易,想学得精的话需要多下功夫。整体来说,比Matlab上手简单。
对,两个outer join再来几个group by就足以干翻新手了。
mark mark