Подтвердить что ты не робот

Являются ли SQL ANY и SOME синонимами во всех диалектах SQL?

В Postgres ANY и SOME являются синонимами, когда они используются в правой части предикатного выражения. Например, они одинаковы:

column = ANY (SELECT ...)
column = SOME (SELECT ...)

Это описано здесь:

http://www.postgresql.org/docs/9.1/static/functions-subquery.html#FUNCTIONS-SUBQUERY-ANY-SOME

Я заметил, что ANY и SOME поддерживаются, по крайней мере, этими СУБД SQL:

  • DB2
  • Derby
  • Н2
  • HSQLDB
  • Энгр
  • MySQL
  • Oracle
  • Postgres
  • SQL Server
  • Sybase ASE
  • Sybase SQL Anywhere

Можно ли смело предположить, что все эти диалекты (и другие тоже) относятся к ANY и SOME как синонимы или есть тонкая разница между двумя ключевыми словами в какой-либо/некоторой СУБД?

Я нашел это в определении SQL92:

<quantifier> ::= <all> | <some>
<all> ::= ALL
<some> ::= SOME | ANY

Это ничего не говорит о семантике ANY и SOME. Позже в документе упоминается только <some>, а не два ключевых слова. Я подозреваю, что может быть тонкая разница в обработке NULL, например, по крайней мере, в некоторых СУБД. Любой/некоторый указатель на ясное утверждение, можно ли это принять или нет, приветствуется.

4b9b3361

Ответ 1

Несколько строк после того, что вы цитируете, стандарт SQL92 также указывает семантику для <some>, а именно:

c) If the implied <comparison predicate> is true for at least
one row RT in T, then "R <comp op> <some> T" is true.

d) If T is empty or if the implied <comparison predicate> is
false for every row RT in T, then "R <comp op> <some> T" is
false.

e) If "R <comp op> <quantifier> T" is neither true nor false,
then it is unknown.

Эти правила применяются для токена <some>, независимо от того, является ли он альтернативой SOME или ANY, поэтому да, они являются синонимами в соответствии со стандартным