loading..
Русский    English
05:29
листать

Еще раз о NULL-значениях стр. 2

Для примера рассмотрим информацию о моделях 1298, имеющихся в таблице Laptop. Чтобы познакомиться с данными, выполним запрос:

Консоль
Выполнить
  1. SELECT *
  2. FROM Laptop
  3. WHERE model = 1298;

Вот результаты выполнения этого запроса:

code model speed ram hd price screen
1 1298 350 32 4 700.0 11
4 1298 600 64 10 1050.0 15
6 1298 450 64 10 950.0 12

Рассмотрим задачу получения средней цены модели 1298. Пока все цены известны решение этой задачи не вызывает никаких сомнений:

Консоль
Выполнить
  1. SELECT model, AVG(price) avg_price
  2. FROM Laptop
  3. WHERE model = 1298
  4. GROUP BY model;

model avg_price
1298 900.0

Пусть теперь цена модели с кодом 4 неизвестна. Если, как было решено ранее, мы будем заменять неизвестное значение, скажем, нулем (UPDATE Laptop SET price = 0 WHERE code=4), то получим заведомо неверное среднее значение цены — 550.0

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

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

Примечание:

Ради объективности отсылаем вас к аргументированной критике Дейта относительно использования NULL-значений [1]. Коддом было предложено [6] два разных типа NULL-значений, соответствующих как раз тем двум аспектам их применения, о которых шла речь выше.

Страницы: 1 2
Тэги:
ALL AVG battles CASE CAST CHAR CHARINDEX classes COALESCE Convert COUNT CTE DATEDIFF DATEPART DATETIME DELETE DISTINCT EXCEPT EXISTS EXTRACT FROM FULL JOIN GROUP BY Guadalcanal HAVING IN INNER JOIN insert INTERSECT ISNULL laptop LEFT LEFT OUTER JOIN LEN maker MAX MIN MySQL NOT IN NULL ORDER BY Outcome outcomes OVER PARTITION BY pc PIVOT PostgreSQL printer product Больше тэгов
Учебник обновлялся
несколько дней назад
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100