代码之家  ›  专栏  ›  技术社区  ›  Cimplicity

是否有已定义和公认的标准SQL语言?

  •  7
  • Cimplicity  · 技术社区  · 16 年前

    我记得在大学里,我们上了一门数据库课,学生们可以选择我们的数据库管理系统。作为我第一次使用数据库的经历,我记得我很困惑,因为SQL语句的语法不同,具体取决于使用的数据库管理系统。在这门课之前,我一直认为SQL语言是一种通用语言,用户可以使用它与所有数据库进行通信。

    那怎么回事?是否有明确的SQL标准?如果是这样,为什么数据库管理系统制造商与规范不同?标准的设计是否不完整,因为公司会把它作为扩展语言的基础?原始的SQL标准是否已经过时,制造商是否需要构建更多的功能?原始版本是否没有以跟上现代应用程序需求的速度进行更新?是为了创造一种收入商业模式吗?

    谢谢。

    5 回复  |  直到 11 年前
        1
  •  8
  •   Andy White    16 年前

    有SQL标准:

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

    然而,大多数DBMS仍然实现了该标准的某种自定义或扩展版本。(微软SQL Server是主要嫌疑人)。

        2
  •  7
  •   Alex Martelli    16 年前

    是的,有SQL ANSI标准,参见例如。 a draft of the SQL-92 one 然而,每个数据库供应商都实现了标准SQL的“扩展子集”——如果你仔细想想,从某种意义上说,任何东西都是其他东西的“扩展子集”;-).毫无疑问,这背后有商业原因,但即使是PostgreSQL这样的非商业实现,其行为也大致相同。..

        3
  •  4
  •   Leonidas    16 年前

    您可以在数据操作语言(SELECT、UPDATE、INSERT:SQL)、数据定义语言(CREATE、DELETE:SQL)和数据控制语言(GRANT:SQL)之间进行区分。

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

        4
  •  3
  •   Michael Borgwardt    16 年前

    功能?原来不是 以最新的速度进行更新 现代应用需求?是为了 为收入创建商业模式?

        5
  •  2
  •   Cătălin Pitiș    16 年前

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

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