Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.fds-net.ru/showflat.php?Number=7336757&src=arc&showlite=
Дата изменения: Unknown
Дата индексирования: Tue Apr 12 11:35:16 2016
Кодировка: Windows-1251
[SQL] зачем NULL трактуется так извращенно? - Public forum of MSU united student networks
Root | Google | Yandex | Mail.ru | Kommersant | Afisha | LAN Support
  
Technical >> Development (Archive)

Страницы: 0 | 20 | 40 | показать все | след. страница
Orient

Рег.: 18.09.2004
Сообщений: 924
Из: Singapore
Рейтинг: 133
  Re: [SQL] зачем NULL трактуется так извращенно? [re: Zoobastik]
      20.03.2008 12:34
-2


 Я к тому, что даже эти "базовые", как ты говоришь, вещи сходу не очевидны даже для базовиков с многолетним стажем.


Orient

Рег.: 18.09.2004
Сообщений: 924
Из: Singapore
Рейтинг: 133
  Re: [SQL] зачем NULL трактуется так извращенно? [re: nelapsi]
      20.03.2008 12:36
-3

Если в базе есть клиенты с именем NULL, они и должны получиться.
Этого будет ожидать любой нормальный человек (не мыслящий в троичной логике).


gadfatherАдминистратор
Carpal Tunnel

Рег.: 05.11.2003
Сообщений: 47302
Из: пл. Гагарина
Рейтинг: 16961
  Re: [SQL] зачем NULL трактуется так извращенно? [re: Orient]
      20.03.2008 12:37
1

> Я к тому, что даже эти "базовые", как ты говоришь, вещи сходу не очевидны даже для базовиков с многолетним стажем.

Ты в форуме больше трех лет. Ты все знаешь про HTTP?



You can't always get what you want
Orient

Рег.: 18.09.2004
Сообщений: 924
Из: Singapore
Рейтинг: 133
  Re: [SQL] зачем NULL трактуется так извращенно? [re: nelapsi]
      20.03.2008 12:39
-1

Сможешь развернуть условие, которое я выше дал
code:
select * from table where column1 = :value1 and column2 = :value2 or column3 = :value3

чтобы оно адекватно NULL-ы обработало?
Представь, что кто-то уже развернул.
Ты сможешь понять, что он имел в виду at a glance?


DarkGrayМодератор
Carpal Tunnel

Рег.: 30.09.2002
Сообщений: 31411
Рейтинг: 8952
  Re: [SQL] зачем NULL трактуется так извращенно? [re: Orient]
      20.03.2008 12:41
-2

Quote:

NULL or TRUE = TRUE
NULL and TRUE = NULL

...
select (1 = 1) from dual




и первое и второе - это чисто oracle, а не sql

в sql в первом случае должно быть: null or true - null

по второму должно быть
select 1=1 (без всяких dual-ов) и должно возвращаться true

Orient

Рег.: 18.09.2004
Сообщений: 924
Из: Singapore
Рейтинг: 133
  Re: [SQL] зачем NULL трактуется так извращенно? [re: gadfather]
      20.03.2008 12:42
-2

Начинаешь прям как Гусман :)
HTML меня мало интересует.
Общие вещи знаю.
А что, у тебя есть вопросы?


Orient

Рег.: 18.09.2004
Сообщений: 924
Из: Singapore
Рейтинг: 133
  Re: [SQL] зачем NULL трактуется так извращенно? [re: DarkGray]
      20.03.2008 12:44
 


  Похоже, что нет

gadfatherАдминистратор
Carpal Tunnel

Рег.: 05.11.2003
Сообщений: 47302
Из: пл. Гагарина
Рейтинг: 16961
  Re: [SQL] зачем NULL трактуется так извращенно? [re: Orient]
      20.03.2008 12:45
2

Ну вот ты за 3 года не научился различать HTML и HTTP. Чего ты хочешь от тех "базовиков"?



You can't always get what you want
botWi

Рег.: 22.11.2003
Сообщений: 10160
Из: Moscow
Рейтинг: 1764
  Re: [SQL] зачем NULL трактуется так извращенно? [re: nelapsi]
      20.03.2008 12:52
-1

Quote:

имхо ты сам себе противоречишь :confused:




вроде не противоречю
в первой яасти я говорю что троичная логика нужна, что спец. обработка для null нужна
во второй части я говорю что возможно есть один случай когда возможно она не нужна: это равенство
но потом я сообразил про джойны и этот случай тоже отпал, ибо джойнить по наллам это бред

если бы токо можно было отличать джойн от чиста сравнения
как-то так:

code:
where column ~= :value


ну тойсть есть спец. операция ~= которая может наллы сравнивать

но это же получается ненужный сахар, который еще и к путанице может привести

придумал еще вариант:

code:
where NVL(column, SPECIAL_VALUE_THAT_NEVER_CAN_OCCURS_IN_THIS_COLUMN) = NVL(:value, SPECIAL_VALUE_THAT_NEVER_CAN_OCCURS_IN_THIS_COLUMN)








Редактировал DarkGray (20.03.2008 13:00)
Хватит дрочить на рейтинги
botWi

Рег.: 22.11.2003
Сообщений: 10160
Из: Moscow
Рейтинг: 1764
  Re: [SQL] зачем NULL трактуется так извращенно? [re: DarkGray]
      20.03.2008 12:53
 

В ответ на:

и первое и второе - это чисто oracle, а не sql

в sql в первом случае должно быть: null or true - null




от тебя не ожидал :(
даже по обычной домашней логике: правда или всечтоугоднохотьчтотохотьничто = правда



Хватит дрочить на рейтинги
Orient

Рег.: 18.09.2004
Сообщений: 924
Из: Singapore
Рейтинг: 133
  Re: [SQL] зачем NULL трактуется так извращенно? [re: gadfather]
      20.03.2008 12:54
 

Ошибся.
Говорю же, с вебом дело мало имел, да и речь не о нем.
Я знаю их настолько, насколько мне это сейчас нужно.
Понадобится лучше - будет лучше.

DarkGrayМодератор
Carpal Tunnel

Рег.: 30.09.2002
Сообщений: 31411
Рейтинг: 8952
  Re: [SQL] зачем NULL трактуется так извращенно? [re: Orient]
      20.03.2008 12:59
 

херотень оказывается в том, что есть null, а есть unknown

от туда же
Quote:


Boolean datatype inconsistency
The ISO SQL:1999 standard introduced the Boolean datatype to SQL.[20] The Boolean datatype, as defined by the standard, can hold the truth values TRUE, FALSE, and UNKNOWN. Null is defined in this one instance as equivalent to the truth value UNKNOWN.

This "null equals UNKNOWN truth value" proposition introduces an inconsistency into SQL 3VL. One major problem is that it contradicts a basic property of nulls, the property of propagation. Nulls, by definition, propagate through all SQL expressions. The Boolean truth values do not have this property. Consider the following scenarios in SQL:1999, in which two Boolean truth values are combined into a compound predicate. According to the rules of SQL 3VL, and as shown in the 3VL truth table shown earlier in this article, the following statements hold:

( TRUE OR UNKNOWN ) → TRUE
( FALSE AND UNKNOWN ) → FALSE
However, because nulls propagate, treating null as UNKNOWN results in the following logical inconsistencies in SQL 3VL:

( TRUE OR NULL ) → NULL ( = UNKNOWN )
( FALSE AND NULL ) → NULL ( = UNKNOWN )
The SQL:1999 standard does not define how to deal with this inconsistency, and results could vary between implementations. Because of these inconsistencies and lack of support from vendors the SQL Boolean datatype did not gain widespread acceptance. Most SQL DBMS platforms now offer their own platform-specific recommendations for storing Boolean-type data.







nelapsi
the wumbologist

Рег.: 10.11.2003
Сообщений: 10758
Из: Orbis Tertius
Рейтинг: 10651
  Re: [SQL] зачем NULL трактуется так извращенно? [re: Orient]
      20.03.2008 13:02
 


 
В ответ на:

Если в базе есть клиенты с именем NULL, они и должны получиться.



таких нет конечно же - просто кто-то откуда-то прислал тебе пустую строчку вместо имени



Your touch will set me free
Orient

Рег.: 18.09.2004
Сообщений: 924
Из: Singapore
Рейтинг: 133
  Re: [SQL] зачем NULL трактуется так извращенно? [re: nelapsi]
      20.03.2008 13:09
 

Тогда ты никого и не получишь.
Что тебе не нравится?


Shurik

Рег.: 27.09.2003
Сообщений: 13646
Рейтинг: 787
  Re: [SQL] зачем NULL трактуется так извращенно? [re: Orient]
      20.03.2008 13:35
2

Quote:

Люди, работающие по несколько лет исключительно с базами данных, офигевают, когда узнают, что

code:
NULL or TRUE = TRUE
NULL and TRUE = NULL



весь тред не читал, но про нетривиальность NULL-а и троичную логику Кузнецов на ВМК в базовом курсе лекций по базам данных рассказывал :smirk:



not fluffing up the experience with features that will ultimately cause you a headache
gadfatherАдминистратор
Carpal Tunnel

Рег.: 05.11.2003
Сообщений: 47302
Из: пл. Гагарина
Рейтинг: 16961
  Re: [SQL] зачем NULL трактуется так извращенно? [re: Orient]
      20.03.2008 13:39
 

Quote:

Я знаю их настолько, насколько мне это сейчас нужно.
Понадобится лучше - будет лучше.




Теперь понятно, почему твои базовики мало знают про NULL?



You can't always get what you want
nelapsi
the wumbologist

Рег.: 10.11.2003
Сообщений: 10758
Из: Orbis Tertius
Рейтинг: 10651
  Re: [SQL] зачем NULL трактуется так извращенно? [re: Orient]
      20.03.2008 14:36
 


 
В ответ на:

Тогда ты никого и не получишь



ты недопонял :)
выбираешь ты не из таблицы с клиентами, а из таблицы где есть на них ссылка, которая может быть NULL



Your touch will set me free
mkal
RIP

Рег.: 29.12.2004
Сообщений: 3036
Рейтинг: 1658
  Re: [SQL] зачем NULL трактуется так извращенно? [re: Orient]
      20.03.2008 15:27
-6

NULL сделали для того, чтобы можно было указывать отсутсвующий внешний индекс и корректно его обрабатывать при JOINах. И пользоваться им надо только в тех колонках таблицы, которые хранят ссылки на внешний индекс. Если ты хранишь NULL в качестве отсутсвующего имени, а потом удивляешься, что все не интуитивно, то сам себе злобный буратин. Ибо так делать не надо. Если имени нет, то храни там пустую строку. Или FALSE или UNKNOWN, смотря что БД позволяет использовать.

botWi

Рег.: 22.11.2003
Сообщений: 10160
Из: Moscow
Рейтинг: 1764
  Re: [SQL] зачем NULL трактуется так извращенно? [re: mkal]
      20.03.2008 15:43
1

В ответ на:

Если имени нет, то храни там пустую строку. Или FALSE или UNKNOWN, смотря что БД позволяет использовать.





блин
прочти тред сначала
я ж писал: в оракле пустая строка и NULL это одно и то же
то есть если имени нет, то у тебя токо один вариант: хранить там NULL



Хватит дрочить на рейтинги
mkal
RIP

Рег.: 29.12.2004
Сообщений: 3036
Рейтинг: 1658
  Re: [SQL] зачем NULL трактуется так извращенно? [re: botWi]
      20.03.2008 15:59
2

Ну это как бы проблема оракла, а не SQL. И вопрос надо ставить не "почему NULL в SQL так нелогично себя ведет?", а "почему пустая строка так нелогично интерпретируется ораклом?".

Страницы: 0 | 20 | 40 | показать все | след. страница

Technical >> Development (Archive)

Дополнительная информация
1 зарегистрированных и 0 анонимных пользователей просматривают этот форум.

Модераторы:  DarkGray 

Печать темы
>>
Права
      Вы можете создавать новые темы
      Вы можете отвечать на сообщения
      HTML отключен
      UBBCode включен

Рейтинг:
Просмотров темы:

Переход в