Форум: "Прочее";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];
ВнизПонятие NULL Найти похожие ветки
← →
Тульский © (2006-09-28 08:45) [0]Смотрю методичку по лаб. работам с БД. И вижу:
Значение NULL. Значение NULL в SQL - это неизвестное значение, которое не следует путать с пустым. Пустое значение - это отсутствие данных, в случае же значения NULL неизвестно, какое зна-чение должно быть записано в данном поле. Значения NULL трактуются в SQL особым образом. Пустые значения равны друг другу, значения NULL — не равны, что интуитивно по-нятно, так как это неизвестные значения, а два неизвестных значения не должны обяза-тельно быть равны друг другу.
По-моему, гон. Википидия дает определение NULL как отсутствующее значение. Учебник от Microsoft Corporation Проектирование и реализация баз данных Microsoft SQL Server 2000. Учебный курс MCAD/
MCSE, MCDBA/ И вовсе называет NULL - пустым значением.
А вы как считаете?
← →
Внук © (2006-09-28 08:47) [1]Тут скорее всего имеется в виду, что пустая строка и NULL - не одно и то же. Хотя изложено коряво.
← →
Sergey13 © (2006-09-28 09:19) [2]У разных серверов наверное и слегка разные интерпретации NULL. Например в Оракле вставляя "" вставляется NULL. В ФБ вставятся именно "" и NULL, т.е. по разному.
← →
pasha_golub © (2006-09-28 09:27) [3]
Mantra:
NULL is a state, not a value.
NULL is a state, not a value.
NULL is a state, not a value.
Кстати, мужики, есть у кого-нибудь короткие такие определения или что-нибудь эдакое, что может служить подсказкой дня (tip of the day) при старте програмы? Интересует дизайн БД.
← →
Sergey13 © (2006-09-28 09:30) [4]> [3] pasha_golub © (28.09.06 09:27)
Нормализация - не цель, а метод.
Занимаясь нормализацией главное не переусердствовать.
8-)
← →
pasha_golub © (2006-09-28 09:40) [5]
> Sergey13 © (28.09.06 09:30) [4]
Круто. :-) А англицкий вариант есть? Я то переведу, просто может эта фраза уже узнаваема в каком-либо виде.
← →
Sergey13 © (2006-09-28 09:47) [6]> [5] pasha_golub © (28.09.06 09:40)
Если честно, это мои фразы (хотя на уникальность не претендую 8-), посему аглицкого варианта нет. Переводи как хочешь. Ссылка на меня НЕ обязательна.
8-)
← →
Johnmen © (2006-09-28 09:48) [7]
> Тульский © (28.09.06 08:45)
Хорошо изложено, доходчиво и понятно.
А от того, что палец назовут ж...й, он пальцем быть не перестанет :))
← →
Курдль © (2006-09-28 09:51) [8]
> Sergey13 © (28.09.06 09:19) [2]
> Например в Оракле вставляя "" вставляется NULL.
Не верю! :(
Надо срочно проверить. А то я - наивный чукотский мальчик, думал, что вставляется значение, равное пустой строке...
← →
Sergey13 © (2006-09-28 10:04) [9]> [8] Курдль © (28.09.06 09:51)
Я перед тем как писать проверил на 8.1.7. 8-)
← →
Тульский © (2006-09-28 10:05) [10]
> Johnmen © (28.09.06 09:48) [7]
> Хорошо изложено, доходчиво и понятно.
Но неправильно.
← →
Курдль © (2006-09-28 10:28) [11]
> Sergey13 © (28.09.06 10:04) [9]
> Я перед тем как писать проверил на 8.1.7. 8-)
Черт! Оракла под рукой нет. Проверил на DB2 AS/400.
Запросыselect count(*) from T where F is Null
select count(*) from T where F = ""
выдают совершенно разные ответы...
← →
Sergey13 © (2006-09-28 10:33) [12]> [11] Курдль © (28.09.06 10:28)
Я создал табличку test(id,name). Вставил туда
insert into test(id,name) values(1,"");
insert into test(id,name) values(2,NULL);
select * from test where name is NULL
1
2
select * from test where name=""
данных нет.
← →
Johnmen © (2006-09-28 10:44) [13]
> Тульский © (28.09.06 10:05) [10]
> Но неправильно.
Что конкретно неправильно?
← →
Тульский © (2006-09-28 11:42) [14]вот это:
> Значение NULL в SQL - это неизвестное значение
← →
Palladin © (2006-09-28 11:46) [15]почему? для "неизвестного значения" в SQL есть что то другое?
← →
Johnmen © (2006-09-28 12:07) [16]
> Тульский © (28.09.06 11:42) [14]
> вот это:> Значение NULL в SQL - это неизвестное значение
А что, известное?
Да и дело не в терминах. А в сути. Про палец я уже говорил :)
← →
Тугодум © (2006-09-28 12:09) [17]Oracle must die? :)
← →
Reindeer Moss Eater © (2006-09-28 12:47) [18]Oracle must have!
Прикол с пустой строкой и нулом там с незапамятных времен. Это не баг а фича!
select sysdate from dual where "" = ""
← →
Тугодум © (2006-09-28 13:09) [19]Reindeer Moss Eater © (28.09.06 12:47) [18]
Что в результате? Системная дата в единственном экземпляре?
← →
Reindeer Moss Eater © (2006-09-28 13:13) [20]В результате пустой НД
← →
Баба Яга (2006-09-28 13:14) [21]
> А что, известное?
> Да и дело не в терминах. А в сути. Про палец я уже говорил
> :)
Уважаемый, если вы не понимаете логики SQL, то может стоит задуматься над тем, что называть пальцем, а кого им делали, и соответственно кто чем думает.
SQL запрос должен выдавать только то, что ТОЧНО соответствует запросу. И если в запросе стоит условие = "", то должны учитываться только пустые строки, а в строках с NULL нет ничего (например ещё не присвоено), даже пустой строки, поэтому они не соответствуют условию. Если вы этого не понимаете, то не надо говорить что палец это ж..а, а то возникают сомнения по поводу того, чем вы думаете.
← →
Игорь Шевченко © (2006-09-28 13:19) [22]Баба Яга (28.09.06 13:14) [21]
В SQL равенство с NULL никто вроде не пишет. Обычно для этого используется оператор IS, который прекрасно выбирает по условию IS NULL
> Если вы этого не понимаете
Эта...при блистании интеллектом все-таки за словарным запасом надо следить. Вытру нафиг.
← →
Баба Яга (2006-09-28 13:32) [23]
> Эта...при блистании интеллектом все-таки за словарным запасом
> надо следить. Вытру нафиг.
Мильён пардонов, действительно уважаемый! Никоим образом не хотел оскорбить чувств присутствующих, я лишь употребил цитаты, из написанного ранее, но если это кого задело, то примите мои искренние извинения.
В моём сообщении нет записи "=NULL". Но ваше замечание ценно ещё и тем, для понимания вопроса, что к понятию NULL условие равенства даже не применяется, в отличие от "пустой строки", которую сравнивать разрешено.
← →
Johnmen © (2006-09-28 13:45) [24]
> Уважаемый, если вы не понимаете логики SQL
А если понимаю, то что?
> Если вы этого не понимаете
А если понимаю, то что?
Почему логическое выражение неполное? В NULL ушло?
← →
Баба Яга (2006-09-28 13:50) [25]
> А если понимаю, то что?
Если бы понимали, то не написали бы:
> А от того, что палец назовут ж...й, он пальцем быть не перестанет
> :))
← →
Sergey13 © (2006-09-28 13:52) [26]> [25] Баба Яга (28.09.06 13:50)
А ты не согласен? Ты считаешь, что палец после переименования, станет мягче и толще? 8-)
← →
Johnmen © (2006-09-28 13:54) [27]>Если бы понимали, то не написали бы:
Ваше мнение мне очень интересно и важно!
Расскажите мне, ламеру, как пользоваться пальцем и ж...й, а то никогда с этим не сталкивался.
Спасибо, мой добрый друг.
← →
Баба Яга (2006-09-28 13:59) [28]Johnmen © (28.09.06 13:54) [27]
Благодарю.
Однако смею заверить, что Ваше мнение интересует окружающих, так же сильно, как и моё, тем более, что Вы его очень убедительно аргументируете.
Однако это уже переходит в личное общение и глубокоуважаемый модератор имеет все основания удалить эти сообщения. Не будем засорять тему.
← →
Johnmen © (2006-09-28 14:01) [29]
> Баба Яга (28.09.06 13:59) [28]
> так же сильно, как и моё,
Не льсти себе, мой загадочный друг.
← →
Внук © (2006-09-28 14:52) [30]Изложено коряво. Потому что надо уточнять, что под пустым значением имеется в виду строка нулевой длины. Иначе возникает вопрос - что такое "пустая дата" и "пустое число". В двух последних случаях понятие "пустое значение" не имеет смысла. Есть либо некоторое значение, либо отсутствие значения (неизвестное значение, NULL).
То, как Oracle обходится с пустой строкой - печальный факт, но не образец для подражания.
← →
kaif © (2006-09-28 15:41) [31]Вообще тема интересная.
Изложено, действительно, криво.
значения NULL — не равны
Например из сказанного неясно, что вернет такое вот выражение:
(Field1 = NULL) or (Field1 <> NULL)
Судя по сказанному, вернет TRUE.
А вот судя по ИМХО, вернет опять NULL
:)
← →
Тульский © (2006-09-28 15:58) [32]
DECLARE @A INT, @B INT
SET @A = Null
SET @B = Null
if @A = @B print "TRUE" else print "FALSE"
if @A <> @B print "TRUE" else print "FALSE"
---
Результат:FALSE
FALSE
← →
vuk © (2006-09-28 23:13) [33]Какое такое нафиг неизвестное значение? Данные, они либо есть либо нет(NULL). Третьего не бывает. Сравнивать с нечто с понятием "нет данных" смысла особого нет, поэтому при сравнении получаем false. При сложении чего угодно с NULL получим опять же NULL.
← →
Ученик чародея. (2006-09-28 23:35) [34]
> Смотрю методичку по лаб. работам с БД. И вижу:
> Значение NULL. Значение NULL в SQL - это неизвестное значение,
> которое не следует путать с пустым. Пустое значение - это
> отсутствие данных, в случае же значения NULL неизвестно,
> какое зна-чение должно быть записано в данном поле. Значения
> NULL трактуются в SQL особым образом. Пустые значения равны
> друг другу, значения NULL — не равны, что интуитивно по-
> нятно, так как это неизвестные значения, а два неизвестных
> значения не должны обяза-тельно быть равны друг другу.
> По-моему, гон. Википидия дает определение NULL как отсутствующее
> значение. Учебник от Microsoft Corporation Проектирование
> и реализация баз данных Microsoft SQL Server 2000. Учебный
> курс MCAD/
> MCSE, MCDBA/ И вовсе называет NULL - пустым значением.
> А вы как считаете?
При логических операциях со значениями типа Null в БД получается третье логическое значение Unknown, а не True или False.
Советую почитать книгу Гектор Гарсиа-Молина, Джеффри Д. Ульман, Дженнифер Уидом "Системы баз данных полный курс". Хотя у Дейта лучше описывается.
← →
evvcom © (2006-09-29 08:59) [35]> [8] Курдль © (28.09.06 09:51)
> Не верю! :(
А зря. Так и есть. Oracle 9.2
> [17] Тугодум © (28.09.06 12:09)
Не... Тугодум must die! :-)
> [30] Внук © (28.09.06 14:52)
> То, как Oracle обходится с пустой строкой - печальный факт,
> но не образец для подражания
А какой смысл разделять понятия "пустая строка" и "пустое значение в строке"? Каков практический смысл? Практически каждый день пишу на нем, и ни разу не было даже мысли, что здесь разработчики оракла не правы.
> [32] Тульский © (28.09.06 15:58)
Надо было писать "... else print "FALSE или неопределено""!
[0] А в методичке упоминается какая-нить конкретная СУБД? Для каких-то это верно, для Оракла - лажа.
← →
Тугодум © (2006-09-29 09:15) [36]evvcom © (29.09.06 08:59) [35]
А какой смысл разделять понятия "пустая строка" и "пустое значение в строке"? Каков практический смысл? Практически каждый день пишу на нем, и ни разу не было даже мысли, что здесь разработчики оракла не правы.
Да уж, человек ко всему привыкает. Я думаю, если бы в Oracle не было бы и пустой строки, а была бы строка из одного пробела, ты бы то же самое сказал:
А какой смысл разделять понятия "пустая строка" и "строка из одного пробела"? Каков практический смысл? Практически каждый день пишу на нем, и ни разу не было даже мысли, что здесь разработчики оракла не правы
:)
← →
Внук © (2006-09-29 09:20) [37]>>evvcom © (29.09.06 08:59) [35]
>>Каков практический смысл? Практически каждый день пишу на нем, и ни разу не было даже мысли, что здесь разработчики оракла не правы.
Практически - никакого. Тоже почти каждый день пишу на нем, и не страдаю. Но теоретически - не правы.
← →
Внук © (2006-09-29 09:22) [38]Например, запрос
Select * from table1 where field1="" будет работать не так, как следовало бы ожидать теоретически
← →
Тугодум © (2006-09-29 09:51) [39]Внук © (29.09.06 09:20) [37]
Ну вот первый пришедший на ум случай - заполняется БД с каким-либо необязательным полем, причем оператор может выбрать NULL для указания того, что значение ему неизвестно, либо указать "", если значение - пустая строка.
Например, пусть это будет номер мобильного телефона или отчество.
Возможно, кто-то из других операторов знает нужное значение и сможет затем отредактировать строку и заменить NULL. Но в Oracle придется заводить еще одно поле, чтобы оператору не пришлось каждый раз просматривать записи с "" и догадываться, настоящиая это пустая строка или всего лишь неизвестное значение.
← →
Sergey13 © (2006-09-29 09:59) [40]> [39] Тугодум © (29.09.06 09:51)
Фантазер. 8-)
Просто надо знать особенности того инструмента (а сервер БД это именно инструмент) с которым работаешь. Х.З. почему Ораклы так обрабатывают NULL, но наверное не с бухты-барахты.
Страницы: 1 2 3 4 5 6 7 8 9
10 вся ветка
Форум: "Прочее";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.064 c