Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Вниз

Понятие NULL   Найти похожие ветки 

 
Игорь Шевченко ©   (2006-09-29 12:29) [80]

k2 ©   (29.09.06 12:28) [79]


> математика приложенная например к бухгалтерии принимает
> иногда такие извращенные формы


Там человек с фамилией ИТОГО больше всех получает


 
Romkin ©   (2006-09-29 12:31) [81]


> Любая операция сравнения с NULL (даже операция «NULL = NULL»)
> даёт в результате значение «логическая ложь» (FALSE).

Ой-ой. Это не так. Результатом является unknown, но никак не false. Это - разные вещи. Если бы результат был false, то not (A = NULL) должна была бы давать True. А это жестоко.


 
Reindeer Moss Eater ©   (2006-09-29 12:36) [82]

Нет, здравый не плюнет. Разве что пьяный :)

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

А различий действительно нет.
В силу специфики символьного типа. Если бы существовали числовые типы нулевой длины, с ними была та же самая песня.


 
Тугодум ©   (2006-09-29 12:37) [83]

Romkin ©   (29.09.06 12:31) [81]

Результатом является unknown, но никак не false

Null и есть unknown.
Так и вижу:
IF (((Field = NULL) = NULL ) =NULL)...

:)


 
Тугодум ©   (2006-09-29 12:40) [84]

Reindeer Moss Eater ©   (29.09.06 12:36) [82]

Здравый смысл говорит, что между неизвестным значением и пустой строкой есть разница. Пустая строка не представляет собой ничего необычного. Например, length("")=0, upper("")="" и т.д. length(Null)=?


 
Romkin ©   (2006-09-29 12:41) [85]


> Null и есть unknown.

Нет. Это разные понятия.


 
pasha_golub ©   (2006-09-29 12:44) [86]


> Тугодум ©   (29.09.06 12:40) [84]


> Здравый смысл говорит, что между неизвестным значением и
> пустой строкой есть разница.


Поддерживаю.


 
Тугодум ©   (2006-09-29 12:47) [87]

Romkin ©   (29.09.06 12:41) [85]

По-моему, unknown представляется с помощью специального значения, обозначаемого NULL. Особенно это верно для логических типов данных.


 
Reindeer Moss Eater ©   (2006-09-29 12:48) [88]

Пустая строка не представляет собой ничего необычного.

Попробуй передать её по каналам связи. Скажем через WriteBuffer.
И заодно принять её.

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

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

Кто здесь сможет сказать определенно сколько пустых строк в моем сообщении после последней точки? Слабо? пустая строка это и есть NULL!
.


 
Alx2 ©   (2006-09-29 12:55) [89]

>Reindeer Moss Eater ©   (29.09.06 12:48)

>Пустая строка - это отсутствие строки.

Ну, в матчасти совсем по-другому написано. :) см. Теория множеств.  Реляционная алегба.


 
Тугодум ©   (2006-09-29 12:56) [90]

Reindeer Moss Eater ©   (29.09.06 12:48) [88]

Попробуй передать её по каналам связи. Скажем через WriteBuffer.
И заодно принять её.


Это детали реализации. Никто не мешает кроме указателя на начало данных передавать и длину данных, а не ориентироваться по байту со специальным значением.

Пустая строка - это отсутствие строки

и она же строка с нулевой длиной? В любом случае, ориентироваться нужно не на отсутствие, а на неизвестность. Отсутствие денег - это нуль, а не неизвестность.

Если бы строка была, ее можно было бы передать на носителе.

Да передавайте на здоровье. Сначала длину, потом каждый символ, если понадобится.

Кто здесь сможет сказать определенно сколько пустых строк в моем сообщении после последней точки? Слабо? пустая строка это и есть NULL!

Не слабо. Если бы Вы спросили "сколько неизвестных строк?", я бы ответил 0.
А спрашивать сколько незначащих нулей не записано слева и справа (после запятой) от числа "1" не имеет большого смысла. Потому что ответ - Unknown, NULL :)


 
Reindeer Moss Eater ©   (2006-09-29 12:57) [91]

Пусть эта матчасть ответит, сколько пустых строк я навставлял после последнй точки предудущего сообщения.

С точностью хотя бы плюс/минус миллиард.


 
Romkin ©   (2006-09-29 13:00) [92]

Reindeer Moss Eater ©   (29.09.06 12:48) [88]
Вот тебе пустые строки:

И можно посчитать.
Если в поле записано значение NULL - то это отсутствие значения. Если пустая строка - значение есть. И здесь есть разница: NULL в поле может означать как отсутствие информации, так и неприменимость. А если значение есть - значит, оно применимо :)


 
k2 ©   (2006-09-29 13:01) [93]

примерно столько же сколько и null"ов


 
Reindeer Moss Eater ©   (2006-09-29 13:02) [94]

И можно посчитать.

Ага. Щаз. Можно посчитать CRLF.
А я прошу сказать сколько я вставил пустых строк, а не CRLF"ов


 
Alx2 ©   (2006-09-29 13:02) [95]

>Reindeer Moss Eater ©   (29.09.06 12:57)

Это не к матчасти, а к психиатру :)

А на объяснение свойств пустого множества как-то разоряться не хочется :)


 
pasha_golub ©   (2006-09-29 13:21) [96]


> Reindeer Moss Eater ©   (29.09.06 13:02) [94]

По вашему нужно из теории алгебры выкинуть понятие нейтрального элемента относительно бинарной операции?

Например, 1*3*1 = 3, хоть сколько раз не умнажай на 1. Так давайте ее нафиг выкинем, зачем нам этот цирк? С нулем поступим также.

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


 
Reindeer Moss Eater ©   (2006-09-29 13:22) [97]

А на объяснение свойств пустого множества как-то разоряться не хочется :)

Пока никто и не просил разоряться на тему множеств.

Пока что просили ответить, есть в сообщении пустые строки или нет их.
Если манипулировать длинами всех строк сообщения, то получается, что исследуемый объект одновременно присутствует и отсутствует в сообщении.

То есть никто не может определенно сказать сколько там пустых строк.
Более того, никто не может сказать, что есть ли там хотя бы одна пустая строка вообще.

Ну и кто после этого логичнее обходится с нулом?
Фрэнк Борланд или Ларри Элиссон?


 
pasha_golub ©   (2006-09-29 13:31) [98]


> То есть никто не может определенно сказать сколько там пустых
> строк.
> Более того, никто не может сказать, что есть ли там хотя
> бы одна пустая строка вообще.
>


4=2*2=2*2*1=1*1*1*2*2=2*1*2*1=...

Сколько таких представлений числа?


 
k2 ©   (2006-09-29 13:32) [99]

все больше напоминает спор остроконечников и тупоконечников %)


 
Reindeer Moss Eater ©   (2006-09-29 13:33) [100]

Цифры то здесь при чем?

По вашему нужно из теории алгебры выкинуть понятие нейтрального элемента относительно бинарной операции?

да я вообще таких трудных слов не знаю. :)
Это не мое мнение, это чья-то неудачная догадка.


 
Alx2 ©   (2006-09-29 13:33) [101]

>Reindeer Moss Eater ©   (29.09.06 13:22)

Ну хорошо.
Следующее утверждение справедливо: во всякой строке содержится одна пустая строка :)
Более того:
Во всякой строке содержится счетное множество пустых строк.


 
pasha_golub ©   (2006-09-29 13:36) [102]


> k2 ©   (29.09.06 13:32) [99]
>
> все больше напоминает спор остроконечников и тупоконечников
> %)
>

Угу, и не подумал бы, что есть такая тема для священной войны. :0)


 
Reindeer Moss Eater ©   (2006-09-29 13:36) [103]

>все больше напоминает спор остроконечников и тупоконечников %)

спор вполне конкретен.
Спорят о том, кто более последователен в обращении с нулом. Оракл или остальные.

Оракл совершенно справдедливо считает, что строка нулевой длины эквивалента нулу.
И правильно делает.
/* Потому что я тоже так считаю :) */


 
MOA ©   (2006-09-29 13:36) [104]

Вас не настораживает, что в любом языке тип данных "строка" как-то маркируется (длиной или стоп символом) - так всегда можно сказать сколько именно строк даже и пустых. И как следсвие всегда отличить пустую строку от её, строки, полного отсутствия?


 
pasha_golub ©   (2006-09-29 13:39) [105]


>
> Reindeer Moss Eater ©   (29.09.06 13:33) [100]
>
> Цифры то здесь при чем?
>


Ну как это при чем? Мы рассуждаем об алгебре. Множество есть, бинарная операция на нем задана, нейтральный элемент присутствует. По-моему, все честно.


 
kaif ©   (2006-09-29 13:56) [106]

Вопросец.
Если ORACLE отличает пустые строки от NULL при хранении, но не отличает в каких-то иных случаях, то что должен вернуть такой запрос?

SELECT F1, COUNT(*)
FROM T1
GROUP BY F1

?

Вот Firebird вернет, допустим:


"Вася"   15
"Петя"   4
""         50
null      18


А что вернет ORACLE?


 
Игорь Шевченко ©   (2006-09-29 14:08) [107]

kaif ©   (29.09.06 13:56) [106]


> А что вернет ORACLE?


Пустую строку и count (в SQL*Plus)


 
Reindeer Moss Eater ©   (2006-09-29 14:19) [108]

А что вернет ORACLE?

Вернет все то, что и должен вернуть.

Случай с count(*) оговорен в SQL специально
Он считает не значения, а строки.

То есть  для таблицы где два Васи, два Пети и два нула
будет такой результат

Вася 2
Петя 2
нулл 2


 
Reindeer Moss Eater ©   (2006-09-29 14:20) [109]

Ну как это при чем? Мы рассуждаем об алгебре.

рассуждайте о чем хотите. Я рассуждаю о нулл и пустой строке.


 
kaif ©   (2006-09-29 14:23) [110]

Это означает, что ORACLE просто отождествляет "пустую строку" и NULL.

Так как в тексте запроса я нигде не использовал операндов, которые нужно было бы как-то еще интерпретировать "в процессе парсинга текста запроса".

Вот если бы я написал

insert into T1(F1) values ("")

то еще можно было бы допустить, что клиент ORACLE или кто-то еще по пути не отличает, что я хочу вставить именно пустую строку (пусть даже по своим, ORACLE-а, соображениям).

но то, что простой запрос с группировкой не различает пустые строки и null - это уже существенный момент.

Можно этому радоваться или возмущаться, но теперь это так.
Я понимаю, что пользователям это удобнее.

Тогда следующий вопрос.

Допустим поле F1 определено как NOT NULL.

И я делаю две вставки:

insert into T1(F1) values ("")

и

insert into T1(F1) values (NULL)

Зная уже про запрос с группировкой и его результаты, мне будет очень странно видеть, что одна команда прошла, а другая - нет.

Так как со вставкой значения NULL в строковое поле NOT NULL дело обстоит?

Просветите, знатоки ORACLE.


 
Игорь Шевченко ©   (2006-09-29 14:27) [111]

kaif ©   (29.09.06 14:23) [110]

> insert into T1(F1) values ("")


Ошибка будет. ORA-01400


> Зная уже про запрос с группировкой и его результаты, мне
> будет очень странно видеть, что одна команда прошла, а другая
> - нет.


Это неверное утверждение


 
k2 ©   (2006-09-29 14:27) [112]

kaif ©   (29.09.06 14:23) [110]
нельзя вставить в обоих случаях


 
Reindeer Moss Eater ©   (2006-09-29 14:28) [113]

Это означает, что ORACLE просто отождествляет "пустую строку" и NULL.

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

И стало так.
Все посмотрели на числовой тип, на весь его диапазон, и поняли, что ни одно значение из диапазона не эквивалентно нулу. И ввели отдельный специальный нул.
То  же самое сделали со строковым типом.
А Оракл был умнее и смог рассмотреть в значении строкового типа "пустая строка" эквивалент нул. И не ввел спец значения нула, отличающегося от пустой строки.


 
pasha_golub ©   (2006-09-29 14:28) [114]


> kaif ©   (29.09.06 14:23) [110]


> Допустим поле F1 определено как NOT NULL.
>
> И я делаю две вставки:
>
> insert into T1(F1) values ("")
>
> и
>
> insert into T1(F1) values (NULL)
>


Вот, вот. Очень показательный момент. Спасибо, я как-то сразу в сторону NOT NULL constraint"ов не посмотрел.


 
pasha_golub ©   (2006-09-29 14:31) [115]

Эк, однако. Не все так просто. Ужасть.


> А Оракл был умнее и смог рассмотреть в значении строкового
> типа "пустая строка" эквивалент нул. И не ввел спец значения
> нула, отличающегося от пустой строки.

Чаще важнее следовать стандарту. БЫло бы по стандарту отождествление, нет вопросов.


 
Тугодум ©   (2006-09-29 14:31) [116]

Reindeer Moss Eater ©   (29.09.06 14:20) [109]

Empty string
Oracle treats the empty string ("") as null. This is not ansi compliant. Consequently, the length of an emtpy string is null, not 0.

http://www.adp-gmbh.ch/ora/misc/null.html

In Oracle 8, there is no such thing as a zero-length string. Any zero-length string, either from a function call or the literal "", is treated as null.

Some of the consequences of this are counterintuitive. Here are some examples.

The expression X="" is never true, regardless of what X is. In particular:
The expression ""="" is not true.
If you store an empty string ("") and read it back, the result will be null.
The expression trim(‘ ‘) returns null.
Be careful of this when writing your queries, particularly if you are porting code between Oracle and another database.


http://www.thunderguy.com/semicolon/2003/04/26/oracle-empty-string-null/

Круто, неправда ли? Trim("                 ") возвращает NULL :)


 
Reindeer Moss Eater ©   (2006-09-29 14:32) [117]

Так как со вставкой значения NULL в строковое поле NOT NULL дело обстоит?

Не вставит.


 
Reindeer Moss Eater ©   (2006-09-29 14:33) [118]

Круто, неправда ли? Trim("                 ") возвращает NULL :)

И чего?
Какие опасения?
Это как-то отличается от того, если бы трим вернул пустую строку?
Как именно?
Найдите 10 отличий.
Или хоть одно


 
k2 ©   (2006-09-29 14:35) [119]

pasha_golub ©   (29.09.06 14:31) [115]
стандарт тоже не из головы бога создан, люди писали, может лучше было стандарт привести к оракловому видению null"а? :)


 
Игорь Шевченко ©   (2006-09-29 14:35) [120]

Тугодум ©   (29.09.06 14:31) [116]
pasha_golub ©   (29.09.06 14:31) [115]

Ну не используйте Оракл, нехай Ларри Элиссон обеднеет :) Так ему, буржую, и надо.



Страницы: 1 2 3 4 5 6 7 8 9 
10 вся ветка

Форум: "Прочее";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.69 MB
Время: 0.073 c
2-1160484643
Kostafey
2006-10-10 16:50
2006.10.29
Использование компонентов ADO в dll


3-1156927553
SergP.
2006-08-30 12:45
2006.10.29
TADOconnection. Как выключить автоcommit ?


2-1160749564
KidMan
2006-10-13 18:26
2006.10.29
Как узнать кол-во строк в таблице


15-1160576251
Гарри Поттер
2006-10-11 18:17
2006.10.29
Поиск в Опера 9


2-1160811211
Xtreme
2006-10-14 11:33
2006.10.29
Delphi begin 4





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский