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

Ren*_*ger 7 feature-comparison dml sql-standard

曾使用至少两种顶级 DB 产品(例如 Oracle、SQL Server、Informix、Sybase、DB2、Teradata)在 SQL 方面进行可扩展性工作的人是否知道 DB 供应商的 SQL 方言彼此之间有何不同。由于我来自 Oracle 背景,因此我对

  • 分析功能
  • 示范条款
  • 分层查询(start with .. connect by想到)
  • 任何其他比通常更多的功能 ( select x, y from a, b where...)

问题可能归结为这些功能是否以及在多大程度上受 ansi 标准的监管。

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

Lei*_*fel 10

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


Mil*_*s D 6

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