标签: sql-standard

SQL:选择除某些列之外的所有列

有没有办法访问SELECT表中的所有列,除了特定的列?从表中选择所有非 blob 或非几何列会非常方便。

就像是:

SELECT * -the_geom FROM segments;
Run Code Online (Sandbox Code Playgroud)
  • 我曾经听说这个功能被故意排除在SQL 标准之外,因为更改向表中添加列会改变查询结果。这是真的?论证有效吗?
  • 有没有解决方法,尤其是在 PostgreSQL 中?

postgresql sql-standard

140
推荐指数
5
解决办法
14万
查看次数

CREATE INDEX 与 ALTER TABLE ADD INDEX - MySQLism 还是 SQL 标准?

刚刚遇到一个奇怪的问题,根据我创建索引的方式,需要一个索引名称。

http://dev.mysql.com/doc/refman/5.5/en/create-index.html

http://dev.mysql.com/doc/refman/5.5/en/alter-table.html

CREATE INDEX `random_name` ON `my_table` (`my_column`); # Requires an index name

ALTER TABLE `my_table` ADD INDEX (`my_column`); # Does not require an index name
Run Code Online (Sandbox Code Playgroud)

在我看来, CREATE INDEX 调用不应该要求索引名称。我想知道这是 MySQL 主义还是 SQL 标准?

mysql index sql-standard

31
推荐指数
1
解决办法
7万
查看次数

为什么 ANSI SQL 将 SUM(无行)定义为 NULL?

ANSI SQL标准定义(第6.5章,集功能规范),用于空的结果集的集合函数以下行为:

COUNT(...) = 0
AVG(...) = NULL
MIN(...) = NULL
MAX(...) = NULL
SUM(...) = NULL
Run Code Online (Sandbox Code Playgroud)

为 AVG、MIN 和 MAX 返回 NULL 非常有意义,因为空集的平均值、最小值和最大值是未定义的。

然而,最后一个让我感到困扰:在数学上,空集的 SUM 是明确定义的:0。使用 0,加法的中性元素,作为基本情况使一切保持一致:

SUM({})        = 0    = 0
SUM({5})       = 5    = 0 + 5
SUM({5, 3})    = 8    = 0 + 5 + 3
SUM({5, NULL}) = NULL = 0 + 5 + NULL
Run Code Online (Sandbox Code Playgroud)

定义SUM({})null基本上使“无行”成为不适合其他行的特殊情况:

SUM({})     = NULL  = NULL
SUM({5})    = 5    != …
Run Code Online (Sandbox Code Playgroud)

null aggregate relational-theory sql-standard

30
推荐指数
1
解决办法
7131
查看次数

哪里可以找到第一个 SQL 标准化 SQL-86?

这个问题是不同的,但类似于这个寻找 SQL-89 的请求。

SQL 的初稿被标记为 SQL-86。对其进行了大量引用。这个可以下载吗?维基百科甚至没有一个页面。由于历史原因,我对它感兴趣。

好像也叫

  • ANSI X3.135-1986
  • CAN/CSA Z243.47-88
  • ISO 9075:1987
  • SQL/1
  • 国家统计局 FIPS 127

该规范在该时期的文件中被引用为来自ANSI 技术委员会 X3H2

我知道有 webstore.ansi.org,但我找不到该X3.135-1986文件。但是,我可以X3.168-1989X3.135-1992Searching for找到可用的规格both X3.168,并且X3.135不允许我购买 1986 规格。

sql-standard

28
推荐指数
4
解决办法
2222
查看次数

SQL:2008 标准中是否指定了 CTE(带查询)的优化栅栏行为?如果有,在哪里?

我看到频繁引用WITH查询(公共表表达式,或 CTE)充当优化栅栏,服务器不允许将过滤器下推到 CTE 查询中,将公共表达式从 CTE 中拉出等。它经常被声称成为 SQL 标准要求的行为。

CTE绝对PostgreSQL 中的优化栅栏……但这是标准要求的,还是实际上只是实现细节?

例如,这些邮件列表帖子声称或建议它是标准的:

评论中提到它之后,我被问到它的指定位置 - 在查看了 SQL:2008 的唯一草案后,我可以访问我并没有太多运气找到它。

我还没有深入研究标准,所以我希望有人提出建议:标准实际上是否需要PostgreSQL中CTE的优化围栏?如果是这样,它在哪里指定?还是 Pg 邮件列表上的陈述有误?

另见todo list上的线程CTE优化围栏?.

postgresql optimization sql-standard

24
推荐指数
1
解决办法
2883
查看次数

此查询的正确结果是什么?

在这里的评论中遇到了这个难题

CREATE TABLE r (b INT);

SELECT 1 FROM r HAVING 1=1;
Run Code Online (Sandbox Code Playgroud)

SQL ServerPostgreSQL返回 1 行。

MySQLOracle返回零行。

哪个是正确的?或者两者都同样有效?

aggregate sql-standard

20
推荐指数
2
解决办法
825
查看次数

在哪里可以找到 SQL 标准文档?

在哪里可以找到 ISO SQL 2008 标准的合法副本?

sql-standard

14
推荐指数
2
解决办法
1860
查看次数

ANSI/ISO LIMIT 标准化计划?

目前是否计划标准化一种限制查询返回结果数量的最佳方法?

是否有 ANSI SQL 替代 MYSQL LIMIT 关键字的堆栈溢出问题列出了用不同语言处理这种行为的各种方法:

DB2 -- select * from table fetch first 10 rows only 
Informix -- select first 10 * from table 
Microsoft SQL Server and Access -- select top 10 * from table 
MySQL and PostgreSQL -- select * from table limit 10 
Oracle -- select * from (select * from table) where rownum <= 10
Run Code Online (Sandbox Code Playgroud)

我不经常玩数据库,所以我在这里说的是无知,但似乎这是一个非常重要的功能 - 至少足够重要,当我看到它被留给供应商时我会挠头。

limits sql-standard

12
推荐指数
1
解决办法
3926
查看次数

是否存在具有副作用的标准 SQL 函数?

SQL 标准是否定义了具有副作用的函数?

例如,当您执行类似操作时,它们是否具有写入文件* 或更新表某些列中的值的功能

SELECT myfunction(params...);
Run Code Online (Sandbox Code Playgroud)

我有时会看到这些,但我很好奇 SQL 标准是否也这样做。


* 这不是专门针对 PostgreSQL 的问题。我只使用了我在 PostgreSQL 中看到的副作用示例。

functions sql-standard

11
推荐指数
2
解决办法
2553
查看次数

SQL Spec 是否需要在 EXISTS() 中使用 GROUP BY

Microsoft 当前允许使用此语法。

SELECT *
FROM ( VALUES (1) ) AS g(x)
WHERE EXISTS (
  SELECT *
  FROM ( VALUES (1),(1) )
    AS t(x)
  WHERE g.x = t.x
  HAVING count(*) > 1
);
Run Code Online (Sandbox Code Playgroud)

请注意,没有GROUP BYEXISTS条款,是有效的ANSI SQL。或者它只是暴露了一个实现细节。

作为参考,PostgreSQL 中不允许使用相同的语法。

错误:列“tx”必须出现在 GROUP BY 子句中或用于聚合函数中

但是这种语法是允许的..

SELECT *
FROM ( VALUES (1) ) AS g(x)
WHERE EXISTS (
  SELECT 1  -- This changed from the first query
  FROM ( VALUES (1),(1) )
    AS t(x)
  WHERE g.x = t.x
  HAVING count(*) …
Run Code Online (Sandbox Code Playgroud)

postgresql sql-server group-by sql-standard exists

11
推荐指数
1
解决办法
2438
查看次数