0°

SQL语言算不算编程语言?为什么看起来这么奇怪?

内容预览:
  • 使用了ORM以后,我们可以不用操作表,不用写SQL语句,可以在程序中用面...~
  • 几乎所有大型的web框架都实现了ORM,在Ruby on Rails中,实现的方法叫做...~
  • 点击阅读原文可以直达我的网站~

原文始发于微信公众号(软件那些事儿):SQL语言算不算编程语言?为什么看起来这么奇怪?

因为有几行SQL语言的代码,这里不容易排版,点阅读原文可以直达我的网站。



简单的来说,当然算!

接下来我要复杂的说。

编程语言有几种范式?

编程语言林林总总,可谓是不计其数,但是总的来说,不外乎这几种范式:命令式,对象式,并发式还有声明式。

先一个一个来说。

命令式编程语言

命令式编程语言是最像“编程语言”的语言。

命令式编程语言是几乎所有编程语言所采用的,在命令式编程语言中,程序是若干指令组成的语句。程序员要告知电脑如何运行。

我们学的汇编,C语言这些都是命令式的编程语言。也就所谓的冯•诺伊曼机运行机制,从内存中获取指令和数据,然后一条一条的执行。

类似于命令电脑:先走A,再走B,碰到C以后再返回B……

声明式编程语言

声明式语言只描述了程序应该完成的任务,至于如何做,并不管。比如SQL就是这样一种语言,看下面这条语句。

SELECT id FROM qqgroup WHERE driving > 50


这条语句的意思是从QQ群中选出开车次数大于50的人来。只描述了一个任务,至于怎么选,声明式语言并不关心。以结果为导向。

这和我们普通人首次接触的命令式编程语言有非常大的区别。于是,很多人认为SQL语言不是编程语言,或者是一种很奇怪的编程语言。

其实,SQL语句只是声明式编程语言中的一小部分,往细了分,声明式编程语言可以分为以Lisp家庭为代表的函数式编程语言和以Prolog为代表的逻辑式编程语言。

不仅如此,在Java中的annotation和XDoclet库中,采用的也是具有声明式特征的编程。假以时日,也许命令式和声明式语言会互相渗透,尤其是在声明式语言的大本营:人工智能领域,符号处理领域,数理逻辑领域越来越被人重视以后。

SQL语言执行不按顺序来

比如说,SQL查询的时候,一般是这样写:

SELECT + FROM + WHERE + GROUP BY + HAVING + UNION + ORDER BY


但是在执行的过程中,和命令式不一样,执行的顺序又变了

FROM + WHERE + GROUP BY + HAVING + SELECT + UNION + ORDER BY


在写SQL的时候,一定要记住,写的顺序和执行的顺序没什么关系。这一点和命令式编程也有非常大的不同。

对象式编程语言

OOP (Object-Oriented Programming),翻译成面向对象其实非常不好,可能是个单身汉翻译的。

我认为我前面讲的命令式语言,声明式语言(包括声明式与逻辑式)想比,OOP并不能单独存在,如果说这三个可以平行并能自成一体独挡一面的话,OOP是与这三者相交的一种编程范式。

命令式和声明式语言,都能融合OOP的范式。C++和Java都是在命令式的基础上发展了OOP,其核心思想是:以数据为中心,将系统划分为相互作用的对象集合。这个思想不仅仅能运用在命令式语言上,也可以运用在函数式语言上和逻辑式语言上,只是将命令式语言中的过程换成函数式语言中的函数,或者逻辑式语言中的断言。

那OOP能和SQL这种声明式语言结合么?

答案是:当然可以!

SQL如何和OOP结合起来?

这种方法叫ORM(Object-Relational Mapping),对象关系映射,这是是一种为了解决OOP与关系数据库存在的互不匹配的现象的技术。

我们都知道,OOP会让编程相对来说更易于理解。

使用了ORM以后,我们可以不用操作表,不用写SQL语句,可以在程序中用面向对象的思路,直接操作对象即可。

几乎所有大型的web框架都实现了ORM,在Ruby on Rails中,实现的方法叫做ActiveRecord。虽然名字各有区别,但是,里面的原理是一样的。

我录的《使用Ruby on Rails做社交网站》的第十三期发布了,这一期的主要内容就是讲的如何ORM方法,如何将OOP和关系数据库结合起来。

欢迎到我的网站 lmzdx.com 购买。如果不想购买,在 lmzdx.com 可以查看第十三期的讲义。点击阅读原文可以直达我的网站。


以上就是:SQL语言算不算编程语言?为什么看起来这么奇怪? 的全部内容。

本站部分内容来源于互联网和用户投稿,如有侵权请联系我们删除,谢谢。
Email:[email protected]


0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论