标签: ansi-sql

数据库引擎和ANSI SQL合规性

我已经搜索了半个小时,找不到任何资源说明各种数据库引擎支持的SQL ANSI标准级别.

看起来大多数引擎都提供了一定程度的支持,但我想确切知道官方支持的级别.

我主要对MySQL,PostgreSQL,SQL Server和Oracle感兴趣.

编辑:PostgreSQL有一个很好的合规页面,正是我所寻找的其他引擎:http://www.postgresql.org/docs/current/interactive/features.html

sql database standards ansi-sql

19
推荐指数
2
解决办法
1万
查看次数

标准SQL布尔运算符IS与equals(=)运算符

在SQL的Wikipedia页面上,有一些关于SQL中布尔逻辑的真值表.[1]维基百科页面似乎源于SQL:2003标准.

equals运算符(=)的真值表与SQL:2003草案中的IS运算符不同.

此外,维基百科文章指出"IS NULL"(<null predicate>)是一种特殊情况.

在SQL:2003中,似乎有一个"IS"操作符,它是一个常规运算符,如AND,NOT和OR.但是,<null谓词>仍然存在.

当IS是常规布尔运算符时,为什么<null谓词>存在?它是否确保您可以使用具有非布尔值的"IS NULL"构造而不使用类型coersion?不鼓励使用"= NULL"吗?

SQL:2011标准的工作方式不同吗?

[1]:关于SQL的维基百科

[2]:SQL:2011草案 PDF第335页

[3]:SQL:2003草案 PDF第397页

sql null boolean-logic ansi-sql

19
推荐指数
2
解决办法
9450
查看次数

无论如何在Sql Server和PostgreSQL上执行`where booleanvalue = false`?

我试图使一个应用程序能够在Sql Server和PostgreSQL上运行.

我似乎无法找到一个基本的共同表达

 select * from table where booleancol=false
Run Code Online (Sandbox Code Playgroud)

在SQL Server上我必须做(这是非常令人困惑的,因为位类型的默认值必须为true或false,但你不能将它们分配为true或false或对它进行测试)

select * from table where booleancol=0
Run Code Online (Sandbox Code Playgroud)

在PostgreSQL上我必须这样做

select * from table where booleancol is false
Run Code Online (Sandbox Code Playgroud)

在我们的程序中有很多查询都这样做,所以我更喜欢是否只有一些通用语法我可以使用而不是做if(dbformat=="postgres")..类型废话..

此外,我更喜欢将列保留为布尔/位类型,而不是将它们更改为整数类型..虽然这是一个选项..

sql-server postgresql compatibility ansi-sql

17
推荐指数
2
解决办法
4万
查看次数

带有distinct和sum的SQL查询

我有下medleys表结合colors,fruitsratings:

[medleys]
medley_id   |   color   |   fruit   |   rating
==============================================
1               red         apple       25
2               blue        pear        5
3               green       apple       12
4               red         apple       10
5               purple      kiwi        5
6               purple      kiwi        50
7               blue        kiwi        3
8               blue        pear        9
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写符合ANSI标准的SQL查询,该查询将结合每个唯一/不同color- fruit对并对每对的各个rating值求和.因此,如果您在上面的表上运行查询,它将生成以下结果集:

[query]
color   |   fruit   |   sum
===========================
red         apple       35
blue        pear        14
blue        kiwi        3
green       apple       12
purple      kiwi        55
Run Code Online (Sandbox Code Playgroud)

因此,查询看到有两个 …

sql sum distinct ansi-sql

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

SELECT SQL 1的ANSI SQL版本

是否有符合ANSI SQL的SQL SERVER版本SELECT TOP n

sql sql-server ansi-sql

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

Postgres下一个/上一行SQL查询

我在Postgres 9.1数据库中有以下表结构,但如果可能,理想的解决方案应该是DB不可知的:

Table: users
|id|username|
|1 |one     |
|2 |two     |
|3 |three   |

Table: items
|id|userid|itemname|created  |
|1 |1     |a       |timestamp|
|2 |1     |b       |timestamp|
|3 |1     |c       |timestamp|
|4 |2     |d       |timestamp|
|5 |2     |e       |timestamp|
|6 |2     |f       |timestamp|
|7 |3     |g       |timestamp|
|8 |3     |h       |timestamp|
|9 |3     |i       |timestamp|

我有一个查询(视图),提供下一个和上一个item.id.

例如

View: UserItems
|id|userid|itemname|nextitemid|previtemid|created  |
|1 |1     |a       |2         |null      |timestamp|
|2 |1     |b       |3         |1         |timestamp|
|3 |1     |c       |4         |2         |timestamp|
|4 |2 …

sql postgresql ansi-sql

13
推荐指数
2
解决办法
2万
查看次数

为什么我需要在SQL"GROUP BY"子句中显式指定所有列 - 为什么不"GROUP BY*"?

这一直困扰着我 - 为什么SQL语句中的GROUP BY子句要求我包含所有非聚合列?默认情况下应该包含这些列 - 一种"GROUP BY*" - 因为我甚至无法运行查询,除非它们全部包含在内.每列必须是聚合或在"GROUP BY"中指定,但似乎任何未聚合的列都应自动分组.

也许它是ANSI-SQL标准的一部分,但即便如此,我也不明白为什么.有人可以帮我理解这个约定的必要性吗?

sql group-by aggregate ansi-sql sql-standards

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

SQL:我们需要ANY/SOME和ALL关键字吗?

我在10年使用SQL(SQL服务器,PostgreSQL的),并且仍然我从来没有使用过ANY/SOMEALL关键字在我的生产代码.我遇到的所有情况我可以逃脱IN,MAX,MIN,EXISTS,,我认为这是更具可读性.

例如:

-- = ANY
select * from Users as U where U.ID = ANY(select P.User_ID from Payments as P);

-- IN
select * from Users as U where U.ID IN (select P.User_ID from Payments as P);
Run Code Online (Sandbox Code Playgroud)

要么

-- < ANY
select * from Users as U where U.Salary < ANY(select P.Amount from Payments as P);

-- EXISTS
select * from Users as U where EXISTS (select * …
Run Code Online (Sandbox Code Playgroud)

mysql sql sql-server postgresql ansi-sql

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

有一种方法只使用ANSI SQL进行分页?

我知道:

  • 火鸟:FIRSTSKIP;
  • MySQL的:LIMIT;
  • SQL Server : ROW_NUMBER();

有人知道SQL ANSI的方式来执行结果分页吗?

sql ansi-sql

9
推荐指数
1
解决办法
4341
查看次数

没有自动增量字段的数据库上的AutoIncrement字段

在MS Sql Server中很容易创建自动增量字段.在我的系统中,我停止使用自动增量字段作为主键,现在我使用Guid了.太棒了,这个改变我有很多好处.但在另一个非主要关键领域,我真的需要实现"软自动增量".这是因为我的系统与数据库无关,所以我在c#中以编程方式创建了autoinc值.

我想在没有自动增量的数据库上自动增量字段的解决方案,您使用的解决方案是什么?为什么?关于这个有一些Sql Ansi声明吗?并直接从我的c#生成,是一个更好的解决方案?

PS:我知道从表选择max(id)+1并不是真正的并发友好...

sql sql-server auto-increment ansi-sql

9
推荐指数
1
解决办法
9862
查看次数