大妈谈SQL

w
walkrandom
楼主 (未名空间)

我来科普一下SQL吧,看不下去了
https://forums.huaren.us/showtopic.html?topicid=2562330&fid=398

以前回帖科普过,看到最近帖子很多人有误解,把好多想学习的大妈都吓退了

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往哪儿
塞。就像做填空题一样。

好了先写这么多。
w
walkrandom

大妈第一句就错了
SQL属于declarative
其它的属于imperative
s
squirrelrun

看来大妈网流行是有原因的。
大妈的这个交流风格我喜欢。
大妈的第一句话咋错了?

【 在 walkrandom (walkrandom) 的大作中提到: 】
: 大妈第一句就错了
: SQL属于declarative
: 其它的属于imperative

w
walkrandom
https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms

SQL属于造车的和开车的,分得比较清楚的语言
y
yhangw

每个数据库都有过程支持,灵活度稍稍不同,基本上都差不多。

甚至像with CTE这些事实上用来支持过程逻辑的东西造成了有些人特别喜欢把复杂的逻辑都塞到一个SQL里面,动不动两三百行的SQL语句,以为很酷其实很蠢,

【 在 walkrandom (walkrandom) 的大作中提到: 】
: 大妈第一句就错了
: SQL属于declarative
: 其它的属于imperative

T
TeacherWei

谈SQL,看到这个题目,我认为首先想到的应该是:作为语言,是图灵完备么?

明显,没有CTE,SQL不是图灵完备。所以,CTE是必须的。没有CTE,SQL就不是一个独
立的编程语言。

Disclaimer,我从没用过CTE,将来也不打算用。SQL对我来讲,就是一个persistent
store。而且我必须一直保证access是infrequent的。这个其实对任何应用都能保证,
前提是用另外的语言实现transactional的高层逻辑,而且大量数据in memory。