在非过程语言中,什么指定了如何完成事情?

时间:2010-08-02 06:27:49

标签: sql c comparison procedural-programming

如果比较C vs SQL,则这是参数:

  

与程序语言形成对比   比如C,它描述了事情如何   应该这样做,SQL是非过程的   并描述应该做什么。

因此,语言本身指定了SQL等语言的如何部分,是吗?如果我想更改某些查询的工作方式该怎么办?假设我想改变处理SELECT的方式。这可能吗?

2 个答案:

答案 0 :(得分:4)

  

那么,语言的部分如何   SQL由语言指定   本身,是吗?

不严格地由语言(即SQL),但通常由数据库及其优化器。因此,即使从具有相同结构和相同索引的表中查询相同的数据,某些数据库也会以不同的方式构建结果集。

  

假设我想改变方式   处理SELECT。这可能吗?

在某种程度上,是的。你可以:

  1. 重写查询,以不同的方式获得相同的结果,或
  2. 使用提示 - http://en.wikipedia.org/wiki/Hint_%28SQL%29
  3. 这些都没有直接指示数据库引擎使用哪种方法,但它们都会影响返回结果集的方式 - 这可能因数据库而异。

    此外,我了解一些数据库具有额外的接口,允许与数据库引擎进行更多的低级别交互,从而可以更好地控制查询的构建方式,而不是普通的SQL。 (但是,您的问题确实指定了SQL。)

答案 1 :(得分:2)

这实际上夸大了差异。没有一个明确的观点,一个人在讲述事情是如何完成的,而另一个人只是告诉它做了什么。相反,人们可能必须指定事物在什么/如何在更高的细节水平上完成。典型的SQL实现允许用户控制诸如使用(或忽略)索引,要执行何种锁定等操作。

如果你在C中做同样的工作,你会(在某些时候)必须指定更多的细节(除非你使用像ODBC这样的东西)。尽管如此,你仍然在告诉应该做些什么,而不是所有应该做的细节(例如,尽管尽可能低级汇编语言,C仍然会自动进行某些类型的转换,所以你不必告诉它如何做一些事情,比如在浮点数中添加一个整数 - 你只需告诉它添加它们,它就会处理细节。

底线:试图将一个作为程序性而另一个作为非程序性进行讨论是误导性的。 SQL并不总是需要那么多细节,但它是程度的差异,而不是真正的“如何”与“什么”。