编程语言
SQL语言也属于是一种编程语言,而编程语言大体可分为四种:命令式,对象式,并发式还有声明式。
1.命令式编程语言
命令式编程语言是最像“编程语言”的语言。
命令式编程语言是几乎所有编程语言所采用的,在命令式编程语言中,程序是若干指令组成的语句。程序员要告知电脑如何运行。
我们学的汇编,C语言这些都是命令式的编程语言。也就所谓的冯•诺伊曼机运行机制,从内存中获取指令和数据,然后一条一条的执行。
类似于命令电脑:先走A,再走B,碰到C以后再返回B……
2.声明式编程语言
声明式语言只描述了程序应该完成的任务,至于如何做,并不管。比如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的时候,一定要记住,写的顺序和执行的顺序没什么关系。这一点和命令式编程也有非常大的不同。
3.对象式编程语言
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。虽然名字各有区别,但是,里面的原理是一样的。