Зачем нужен оператор IS TRUE?

В некоторых диалектах SQL, таких как BigQuery, есть оператор IS [NOT] TRUE|FALSE. Какой в ​​этом смысл? Например, нельзя просто сделать val=TRUE или val!=TRUE? Какое преимущество дает нам приведенный выше оператор, если он принимает только логические входные данные?

Я вижу его полезность для чего-то вроде Databricks, где он позволяет использовать такие вещи, как '1' или 1 или 'y', но приведенное выше не кажется очень полезным. Я полагаю, что он дает ожидаемый результат для NULL? Например:

select
  true is true,
  false is true,
  null is true

# true | false | false

смысл is [not] (true|false|unknown) в том, чтобы работать с трёхзначной логикой Modern-sql.com/concept/three-valued-logic#truth-value-test

Martin Smith 24.03.2024 03:10

x = true или x <> true приведут к результату NULL/UNKNOWN вместо TRUE/FALSE, если x имеет значение NULL/UNKNOWN, с другой стороны, x is true приведет к результату TRUE, если x имеет значение TRUE, и FALSE, когда x имеет значение FALSE или UNKNOWN.

Mark Rotteveel 25.03.2024 13:29

@MarkRotteveel, какая тогда разница между x IS UNKNOWN и x IS NULL. Является ли UNKNOWN просто псевдонимом для NULL?

David542 26.03.2024 02:42

@ Дэвид542 Дэвид542 В принципе, да. Вы также можете спросить, почему нельзя просто использовать IS [NOT] DISTINCT FROM; Комитет по стандартизации SQL решил, что им нужна такая ясность в языке.

Mark Rotteveel 26.03.2024 10:17
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
4
96
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На этот раз полнота. У вас есть все три предиката:

  • x is true: проверить, истинно ли значение предиката x.
  • x is false: проверить, является ли значение предиката x ложным.
  • x is unknown: проверить, неизвестно ли значение предиката x.

Помимо этого, в редких случаях может возникнуть необходимость различать «предикат x истинен» и «предикат x не является ложным». Обычно это происходит для предикатов фильтрации (например, предложения WHERE), которые используют первую форму, тогда как проверки ограничений используют вторую форму.

Если вы хотите реализовать какое-то нетривиальное поведение, x is true может пригодиться для ограничений.

Понятно, спасибо за этот ответ, который охватывает все это. И еще: зачем нужен оператор is unknown, если он действует так же, как is null (unknown кажется своего рода псевдонимом для null) или это означает, что это столбец, содержащий только BOOL?

David542 25.03.2024 21:35

Неизвестно — это истинное значение, которое представлено нулем. Это просто смысловая разница.

The Impaler 26.03.2024 05:20

ок, SELECT NULL IS NULL, NULL IS UNKNOWN возвращает true, true в каждой базе данных, которую я пробовал. Ожидается ли это? Другими словами, UNKNOWN — это скорее подсказка, говорящая что-то вроде: «Мы используем это, чтобы явно указать, что это значение должно иметь тип BOOL».

David542 27.03.2024 04:49

«SELECT NULL IS NULL, NULL IS UNKNOWN возвращает true, true для каждой базы данных, которую я пробовал. Это ожидаемо?» -- Да, эти два выражения эквивалентны. Однако второй работает только для логических значений, а первый применим к каждому типу.

The Impaler 27.03.2024 16:22

Другие вопросы по теме