Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1160235793
ArtemESC
2006-10-07 19:43
2006.10.29
Хорошая ли вещь сервер Apache?


3-1157016139
Erik1
2006-08-31 13:22
2006.10.29
Записать DataSet в параметр.


15-1160372999
boriskb
2006-10-09 09:49
2006.10.29
У кого родственники, знакомые плавают?


15-1159963430
dreamse
2006-10-04 16:03
2006.10.29
Подскажите компоненту


1-1158443057
Pavel__
2006-09-17 01:44
2006.10.29
LoadIcon и Windows Vista





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский