是否有定义和接受的标准SQL语言?

时间:2009-06-04 06:48:11

标签: sql database

我记得在大学里参加数据库课程,我们学生可以选择我们的数据库管理系统。作为我第一次使用数据库,我记得很困惑,根据使用的数据库管理系统,SQL语句有不同的语法。在本课程之前,我认为SQL语言是一种通用语言,用户可以使用该语言与所有数据库进行通信。

那是什么交易?是否有定义的SQL标准?如果是这样,为什么数据库管理系统制造商与规范不同?标准设计是否不完整,并认为公司会将其作为语言扩展的基础?最初的SQL标准是否已过时,制造商是否需要构建更多功能?原始版本是否未及时更新以满足现代应用程序的需求?是为了创造收入的商业模式吗?

感谢。

5 个答案:

答案 0 :(得分:8)

有SQL标准:

http://en.wikipedia.org/wiki/SQL#Standardization

但是,大多数DBMS仍然实现标准的某种定制或扩展版本。 (Microsoft SQL Server是主要的嫌疑人)。

答案 1 :(得分:7)

是的,有SQL ANSI标准,请参阅例如a draft of the SQL-92 one。但是,每个数据库供应商都实现了标准SQL的“扩展子集” - 如果你考虑一下,在某种意义上,任何东西都是其他任何东西的“扩展子集”;-)。毫无疑问,这背后存在商业原因,但即使是像PostgreSQL这样的非商业实现也表现得差不多......

答案 2 :(得分:4)

您可以区分数据操作语言(SELECT,UPDATE,INSERT:SQL),数据定义语言(CREATE,DELETE:SQL),数据控制语言(GRANT:SQL)。

SQL可以涵盖所有这些部分,但有时供应商不喜欢SQL的方式。有时它们不实现部件(参见DCL)。更常见的是现实之后的标准“追踪”(参见DML中的Xpath表达式),他们只是创建自己的语法。

答案 3 :(得分:3)

  

原始SQL标准是否已过时   制造商需要建立更多   功能?原来是不是   及时更新以保持最新状态   现代应用需求?是吗?   创造收入的商业模式?

我认为这些是主要因素。该标准没有涵盖一些有用的功能,供应商热衷于添加能够让客户选择其实现的功能,而不是游说以尽快使其标准化。

答案 4 :(得分:2)

有一个标准化的SQL。正如其他回复所述,数据库供应商提供了特定于其数据库引擎的扩展。

根据我对数据库的经验(特别是在大型数据库的情况下),尝试实现“跨供应商”数据库没什么意义。例如,数据定义语言中的扩展允许开发人员/ dba使用供应商的特定功能(例如表的物理表示,表的存储细节,索引实体等)来优化数据库性能。如果是查询,对于大型数据库,您可能需要提供数据库引擎的提示以构建执行计划。提示的语法再次特定于供应商。

这些是可能产生重大影响的“非标准”功能的一些示例。

同样,根据我的经验,不幸的是,很多客户或技术人员(架构师?)对数据库细节的关注较少,并且错过了数据库为数据管理和访问提供的强大功能。