Изменения

Перейти к: навигация, поиск

Неполные данные и null

155 байт добавлено, 03:06, 23 декабря 2021
м
Неинтуитивность null
* <tex>R \cap R</tex> - не всегда <tex>R</tex>
* <tex>R \bowtie R</tex> - не всегда <tex>R</tex>
 
=== Неинтуитивность null ===
Рассмотрим запрос, для нахождения студентов не из группы 'M34391'.
<font color = blue>select</font> * <font color = blue>from</font> Students <font color = blue>where</font> GroupId <> <font color = green>'M34391'</font>
Корректность запроса зависит от смысла '''null'''. Неясно, надо ли возвращать в этом запросе студента, о котором нет информации, в какой группе он учится.
 
Следующий запрос, хоть и выглядит странно, предполагает просто поиск всевозможных студентов
<font color = blue>select</font> * <font color = blue>from</font> Students <font color = blue>where</font> GroupId <> <font color = green>'M34391'</font>
<font color = blue>union</font>
<font color = blue>select</font> * <font color = blue>from</font> Students <font color = blue>where</font> GroupId <> <font color = green>'M34391'</font>
Но из-за наличия '''null''', этот запрос не отработает так, как предполагалось. Если GroupId студента '''''null''''', то сравнение не вернет ''true'', а значит в результате это учтено не будет. <br>
Подробнее у работе функции <font color = blue>where</font> будет рассказано в следующем разделе.
* Если все аргументы null - возвращает '''null'''
=== Спецэффекты ===
При детальном рассмотрении, оказывается, что сравнение не транзитивно и не рефлексивно.
* ''x = x'' - true или null
* ''x <> x'' - true или null
* ''x or x'' - true или null
* ''x or not x'' - true или null
* ''x and not x'' - false или null
=== Ключи и null ===
'''Первичные ключи не могут содержать null.'''
== Неинтуитивность null ==
=== Студенты, учащиеся в группе M34391 ===
<font color = blue>select</font> * <font color = blue>from</font> Students <font color = blue>where</font> GroupId <> <font color = green>'M34391'</font>
Корректность запроса зависит от смысла '''null'''. Неясно, надо ли возвращать в этом запросе студента, о котором нет информации, в какой группе он учится.
 
=== Поиск всех студентов ===
<font color = blue>select</font> * <font color = blue>from</font> Students <font color = blue>where</font> GroupId <> <font color = green>'M34391'</font>
<font color = blue>union</font>
<font color = blue>select</font> * <font color = blue>from</font> Students <font color = blue>where</font> GroupId <> <font color = green>'M34391'</font>
Из-за наличия '''null''', этот запрос не отработает так, как предполагалось.
== Работа с null в SQL ==
71
правка

Навигация