什么是 F301:查询表达式中的 CORRESPONDING 子句?

Eva*_*oll 0 select exception union sql-standard

SQL 2011 规范支持CORRESPONDING子句,

功能 F301,“CORRESPONDING在查询表达式中”:

这是什么功能?它是如何使用的?并且,它是否得到任何行业 RDBM 的支持?

one*_*hen 6

简而言之,CORRESPONDING被引入 SQL 标准是为了使语法更符合关系模型 (RM) 的精神。

一个完整的答案将不可避免地涉及关于 SQL 语言如何具体地偏离关系模型(例如空值)和良好的语言设计(例如数据类型)的讨论。

本质上,在 1992 年之前,某些 SQL 语法(例如,UNION依赖于从左到右的列排序)。例如,如果不挑剔数据类型及其兼容性等,以下内容将不起作用:

SELECT col1, col2 FROM Table1 WHERE col3 = 0
UNION
SELECT col2, col1 FROM Table1 WHERE col3 = 1
Run Code Online (Sandbox Code Playgroud)

因为列不遵循相同的从左到右的顺序。

当然,在 RM 中,关系具有一组属性,而隐含集合没有排序。但是,原始 SQLUNION语法暗示这SELECT col1, col2 FROM Table1在某种程度上与SELECT col2, col1 FROM Table1.

因此,UNION CORRESPONDING纠正了早期的设计缺陷,即

SELECT col1, col2 FROM Table1 WHERE col3 = 0
UNION CORRESPONDING
SELECT col2, col1 FROM Table1 WHERE col3 = 1
Run Code Online (Sandbox Code Playgroud)

将给出正确的结果。