Зачем нужен NULL или кто его использует?

Духовность™

Продвинутый новичок
Зачем нужен NULL или кто его использует?

Собственно, меня интересует, кто-нибудь реально использует в СУБД значение NULL? И когда его использование может быть реально необходимо?

Просто интересно.
 

zerkms

TDD infected
Команда форума
зачем заполнять поле, если данных для заполнения нет?
например: не у каждого сотрудника в организации есть местный телефон

id | user | phone
 

berkut

Новичок
не у каждого сотрудника в организации есть местный телефон
в этом случае можно воткнуть пустую строку или 0. при этом null, если не ошибаюсь занимает 2 байта. Дюбуа говорит не используйте null. вот зачем он тогда нужен это вопрос
 

berkut

Новичок
dark-demon
зачем? тут идёт речь не о существовании такой величины, а о возможности вписать её в таблицу
 

dark-demon

d(^-^)b
[sql]CREATE TABLE `a` (
`content` varchar(128) NOT NULL default '',
`email` varchar(128) default NULL
);

INSERT INTO `a` VALUES ('a1', 'one@mail');
INSERT INTO `a` VALUES ('a2', NULL);

CREATE TABLE `b` (
`content` varchar(128) NOT NULL default '',
`email` varchar(128) default NULL
);

INSERT INTO `b` VALUES ('b1', 'one@mail');
INSERT INTO `b` VALUES ('b2', NULL);

SELECT * FROM a, b WHERE a.email = b.email[/sql]

вернёт одну стоку "a1 b1 one@mail" а не две, как в случае с ненулевыми значениями.

тут идёт речь не о существовании такой величины, а о возможности вписать её в таблицу
null - это отсутствие величины. всегда можно сказать "в доме никого нет", но фраза "в доме есть никто" звучит довольно глупо.
 

berkut

Новичок
dark-demon бредятина. вставь в a VALUES ('a2', '')
также вернёт 1 строку

-~{}~ 06.01.08 00:44:

да, эт я сам удак.

-~{}~ 06.01.08 00:48:

хоття пример всё равно натянутый. AND a.email != ''
хз. нуль оно всё-таки правильно. но дюбуа глаголит, что оно круто, объявлять not null
 

Фанат

oncle terrible
Команда форума
я согласен с Дюбуа. not null по дефолту, а нулл - только там, где точно знаешь, что подляну не выкинет
 

berkut

Новичок
***** насколько помню, он делал упор на то, что NULL занимает 2 байта, типо жрёт место понапрасну, а не на заморочки с операциями сравнения. а вроде больше заморочек с нулём и нет
 

zerkms

TDD infected
Команда форума
я согласен с Дюбуа. not null по дефолту, а нулл - только там, где точно знаешь, что подляну не выкинет
какая, например, "подляна"? и собственно да - хотелось бы аргументов. понятно, что фамилия авторитетная, все дела - но всё таки??

-~{}~ 06.01.08 11:37:

berkut
насколько помню, он делал упор на то, что NULL занимает 2 байта, типо жрёт место понапрасну
а если поле char(32) ???
 

Pigmeich

Новичок
triumvirat
NULL - означает "значение не заполнено".

Может означать:
1. Понятия этого поля для данной записи не существует.
2. Данные пишутся из нескольких источников и ответсвенный за данный столбец еще данные не записал.
3. Джойны, уже написали.

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

tashkentchi

Новичок
NULL означает отсутствие данных.
Пример. Поле о наличии товара:

0 - нет в наличии
1 - есть в наличии
NULL - нет данных о наличии
 

akd

dive now, work later
Команда форума
Pigmeich, можно-ли использовать BOOL в этом случае, зависит от того, два у тебя состояния или три. почуйствуйте разницу:
0 - нет, 1 - есть
и
0 - нет, 1 - есть, NULL - неизвестно
 
Сверху