AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 1014
Accepted
René Nyffenegger
René Nyffenegger
Asked: 2011-02-02 17:06:47 +0800 CST2011-02-02 17:06:47 +0800 CST 2011-02-02 17:06:47 +0800 CST

顶级数据库供应商的 SQL (DML-) 方言之间有何不同?

  • 772

是否曾使用过至少两种顶级数据库产品(例如 Oracle、SQL Server、Informix、Sybase、DB2、Teradata)在 SQL 方面进行过扩展工作的人是否知道数据库供应商的 SQL 方言彼此之间有多么不同。由于我来自 Oracle 背景,因此我特别感兴趣

  • 分析函数
  • 示范条款
  • 分层查询(start with .. connect by想到)
  • 任何其他超出常规的功能 ( select x, y from a, b where...)

问题可能归结为这些特征是否以及在何种程度上受 ansi 标准的监管。

实际上,我想知道是否有“经验法则”表明我是否(以及如何)可以采用在一个数据库上运行的 SQL DML 语句并让它在另一个数据库上运行。

sql-standard feature-comparison
  • 5 5 个回答
  • 4993 Views

5 个回答

  • Voted
  1. Best Answer
    Leigh Riffel
    2011-02-03T06:40:46+08:002011-02-03T06:40:46+08:00

    ANSI是一个创建自愿标准的私人非营利组织。因此,它实际上并没有监管任何东西。遵循公认的标准通常对公司有利,这就是为什么许多数据库公司遵循 SQL 的 ANSI 标准。当然,随着每家公司寻求使他们的产品与众不同,他们将开发超出标准的附加功能。

    来自w3schools:

    尽管 SQL 是 ANSI(美国国家标准协会)标准,但 SQL 语言有许多不同的版本。

    但是,为了符合 ANSI 标准,它们都以类似的方式至少支持主要命令(例如 SELECT、UPDATE、DELETE、INSERT、WHERE)。

    注意:除了 SQL 标准之外,大多数 SQL 数据库程序还有自己的专有扩展!

    在您列出的更专业的领域中,SQL 方言之间的差异太大,无法将问题简化为“经验法则”。在这些情况下,您可能应该为每个数据库转换整个语句。通过这样做,可以利用每个数据库可以提供的特殊功能为每个平台优化每个语句。将 SQL 写入最低公分母 (ANSI) 可能会简化迁移,但会以性能为代价。

    SQL Dialects Reference对 SQL 变体进行了一些有用的比较。有关更多信息,我建议您搜索您正在切换的特定方言,如下所示:

       differences between mysql and oracle sql

    • 10
  2. Miles D
    2011-02-02T22:38:07+08:002011-02-02T22:38:07+08:00

    我曾经使用过您提到的所有数据库。不幸的是,除了最简单的 SELECT、INSERT、UPDATE 和 DELETE 之外,我发现语法偏离自己的风格并不需要很长时间。当它到达您建议的某些类别时,它将很快获得特定于供应商的信息。我几乎总是不得不将我的 SQL 从一个平台“移植”到另一个平台。尽管回到几年前,我对 SQL Server 和 Teradata SQL 的不同之处感到惊讶,即使是包含几个连接的 UPDATE 也是如此。

    • 6
  3. user804
    2011-02-04T19:37:48+08:002011-02-04T19:37:48+08:00

    每个供应商通常都遵循标准语法的最低核心。SQL-92 通常是最符合的标准。然后他们在此基础上添加额外的功能。SQL3 向语法标准添加了过程功能。对这个标准的符合性要低得多。供应商通常会声称某些符合性。符合标准仅意味着它们“至少”提供此功能。它们可以提供任何数量的功能,因此可以提供超出该标准的语法。每个数据库供应商还添加了特定于他们实现其数据库结构的方式的功能。这就是每个数据库供应商试图在竞争中提供优势的方式。

    • 2
  4. jcolebrand
    2011-02-03T09:13:19+08:002011-02-03T09:13:19+08:00

    只是把它扔出去讨论,即使它也可能是一个评论。这就是为什么现在大多数人喜欢使用各种框架,如 EntityFramework 和 LINQ,其中所有查询的底层抽象都降级到应用程序层,而数据层只是平面存储。

    请注意,这给 NoSQL 人群带来了另一个好处,因为数据库只是一种存储介质。

    • 1
  5. Phillip Julian
    2014-09-06T13:11:39+08:002014-09-06T13:11:39+08:00

    一些数据库供应商提供有关其 ANSI SQL 标准合规性的详细信息。对于 Teradata,他们专门列出了 ANSI 标准的每个元素以及每个详细项目的 SQL 标准——比如每个函数、数据类型等。我没有看到关于 Teradata 合规性的一般断言,但我确实搜索了两个文档“SQL:2”,它将获得任何最近的 ANSI 合规性。它们与 ANSI SQL:2011 兼容,但触发器、存储过程和十六进制文字与 SQL:2008 兼容。

    魔鬼在细节中,您必须让它们来确定数据库是否在任何级别都符合 ANSI SQL。此外,它还不足以适应 SQL-92(又名 SQL2)的旧标准。如果供应商为较新的标准提供了良好的支持,那么这是否说明了数据库质量的很多方面?

    比较数据库信息的好地方是“SQL In a Nutshell”,第 2 版或第 3 版,由 Kline、Kline 和 Hunt 编写,由 O'Reilly 出版。他们有几个表来比较 SQL:2003 的不同数据库特性。Teradata 不在列表中,但由于它们至少符合 SQL:2003,因此我可以使用该列表来比较数据库功能。

    查看 O'Reilly 书中的列表,我可以找到 Oracle 中不支持 SQL:2003 标准的特性。当然,我需要查看 Oracle 文档以验证这些事实,因为那本书已经过时了。然后 Oracle 到 SQL:2003 的比较将帮助我完成从 Oracle 到 Teradata 的大型转换项目。

    • 0

相关问题

  • 为什么某些 DBMS 不允许某些 DDL 语句回滚?

  • 哪些数据库引擎允许我对特定列进行 GRANT/REVOKE?

  • 还有哪些数据库具有类似于 Oracle 的闪回查询的功能?

  • 何时使用 NULL 以及何时使用空字符串?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve