HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>4 июн 2024</li>
2 <ul><li>4 июн 2024</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Есть три вида пустоты. Ну вот какая между ними разница?</p>
4 </ul><p>Есть три вида пустоты. Ну вот какая между ними разница?</p>
5 <p>Иллюстрация: Оля Ежак для Skillbox Media</p>
5 <p>Иллюстрация: Оля Ежак для Skillbox Media</p>
6 <p>Пишет про digital и машинное обучение для корпоративных блогов. Топ-автор в категории "Искусственный интеллект" на Medium. Kaggle-эксперт.</p>
6 <p>Пишет про digital и машинное обучение для корпоративных блогов. Топ-автор в категории "Искусственный интеллект" на Medium. Kaggle-эксперт.</p>
7 <p>Ноль, пустота и неопределённость - в жизни подобные слова можно считать синонимами, но в программировании за ними скрыт разный смысл. Это три разных значения: 0, NULL и undefined. Ноль - просто ноль, пустота - NULL, а неопределённость - undefined. В статье на примере языка SQL мы разберём разницу между нулём и NULL. А вот для понимания undefined нам понадобится JavaScript. Запутанно? Сейчас по порядку во всём разберёмся.</p>
7 <p>Ноль, пустота и неопределённость - в жизни подобные слова можно считать синонимами, но в программировании за ними скрыт разный смысл. Это три разных значения: 0, NULL и undefined. Ноль - просто ноль, пустота - NULL, а неопределённость - undefined. В статье на примере языка SQL мы разберём разницу между нулём и NULL. А вот для понимания undefined нам понадобится JavaScript. Запутанно? Сейчас по порядку во всём разберёмся.</p>
8 <p><strong>Содержание</strong></p>
8 <p><strong>Содержание</strong></p>
9 <ul><li><a>Рекомендации для лучшего усвоения темы</a></li>
9 <ul><li><a>Рекомендации для лучшего усвоения темы</a></li>
10 </ul><ul><li><a>Познакомьтесь с основами SQL</a></li>
10 </ul><ul><li><a>Познакомьтесь с основами SQL</a></li>
11 <li><a>Зарегистрируйтесь на платформе Oracle Live SQL</a></li>
11 <li><a>Зарегистрируйтесь на платформе Oracle Live SQL</a></li>
12 </ul><ul><li><a>Что такое ноль в SQL</a></li>
12 </ul><ul><li><a>Что такое ноль в SQL</a></li>
13 <li><a>Что такое undefined и почему его нет в SQL</a></li>
13 <li><a>Что такое undefined и почему его нет в SQL</a></li>
14 <li><a>Что такое NULL и как с ним работать</a></li>
14 <li><a>Что такое NULL и как с ним работать</a></li>
15 <li><a>Что изучить дальше</a></li>
15 <li><a>Что изучить дальше</a></li>
16 </ul><p>Это подготовительный раздел, который разбит на две части. В первой части собрана теория по базам данным и языку SQL, а во второй есть ссылка на платформу для практики. Если вы новичок, рекомендуем сначала изучить предложенные материалы, а затем искать различия между нулём, NULL и undefined. Иначе примеры кода в этой статье вам могут быть непонятны.</p>
16 </ul><p>Это подготовительный раздел, который разбит на две части. В первой части собрана теория по базам данным и языку SQL, а во второй есть ссылка на платформу для практики. Если вы новичок, рекомендуем сначала изучить предложенные материалы, а затем искать различия между нулём, NULL и undefined. Иначе примеры кода в этой статье вам могут быть непонятны.</p>
17 <p>SQL, или Structured Query Language, - это язык для работы с реляционными базами данных. Эти базы представлены в виде связанных таблиц, в которых информация разложена по колонкам и строкам. В них можно хранить отчёты, банковские транзакции, контакты клиентов, накладные и прочие сведения.</p>
17 <p>SQL, или Structured Query Language, - это язык для работы с реляционными базами данных. Эти базы представлены в виде связанных таблиц, в которых информация разложена по колонкам и строкам. В них можно хранить отчёты, банковские транзакции, контакты клиентов, накладные и прочие сведения.</p>
18 <p><strong>Если вы не слышали о базах данных и SQL - вот ознакомительные статьи:</strong></p>
18 <p><strong>Если вы не слышали о базах данных и SQL - вот ознакомительные статьи:</strong></p>
19 <p>Для закрепления прочитанного посмотрите вебинар по основам языка SQL. Спикер - Мкртич Пудеян, специалист по анализу данных в Газпромбанке.</p>
19 <p>Для закрепления прочитанного посмотрите вебинар по основам языка SQL. Спикер - Мкртич Пудеян, специалист по анализу данных в Газпромбанке.</p>
20 На вебинаре вы узнаете, как хранятся данные в Сети, познакомитесь с языком SQL и напишете набор запросов к базе данных<em>Видео: "Skillbox Программирование"</em><p>Oracle Live SQL - это бесплатная онлайн-платформа, на которой вы можете учиться писать запросы и работать с базами данных. Достаточно перейти на сайт<a>oracle.com</a>, зарегистрироваться и верифицировать электронную почту.</p>
20 На вебинаре вы узнаете, как хранятся данные в Сети, познакомитесь с языком SQL и напишете набор запросов к базе данных<em>Видео: "Skillbox Программирование"</em><p>Oracle Live SQL - это бесплатная онлайн-платформа, на которой вы можете учиться писать запросы и работать с базами данных. Достаточно перейти на сайт<a>oracle.com</a>, зарегистрироваться и верифицировать электронную почту.</p>
21 <p>После регистрации вы попадёте в рабочее пространство и сможете сразу проверить подключение. Для этого введите любую SQL-команду и убедитесь, что после неё отображается выбранная таблица. Пример одной из команд:</p>
21 <p>После регистрации вы попадёте в рабочее пространство и сможете сразу проверить подключение. Для этого введите любую SQL-команду и убедитесь, что после неё отображается выбранная таблица. Пример одной из команд:</p>
22 SELECT * FROM hr.employees;Таблица вымышленных сотрудников. Если после ввода команды таблица не появилась - убедитесь, что вы нажали на зелёную кнопку Run в верхнем углу рабочего пространства<em>Скриншот:<a>Oracle Corporation</a></em><p>Представьте миску с абрикосами. Если вы их съедите, то миска опустеет и в ней будет ноль абрикосов. Ноль здесь будет числовым эквивалентом отсутствия чего-либо и нужен для арифметических или логических операций.</p>
22 SELECT * FROM hr.employees;Таблица вымышленных сотрудников. Если после ввода команды таблица не появилась - убедитесь, что вы нажали на зелёную кнопку Run в верхнем углу рабочего пространства<em>Скриншот:<a>Oracle Corporation</a></em><p>Представьте миску с абрикосами. Если вы их съедите, то миска опустеет и в ней будет ноль абрикосов. Ноль здесь будет числовым эквивалентом отсутствия чего-либо и нужен для арифметических или логических операций.</p>
23 <p>В арифметических операциях ноль можно вычитать и складывать с другими числами - значение этих чисел при этом не изменится. Ещё можно умножить или разделить любое число на ноль, но в результате это даст ноль:</p>
23 <p>В арифметических операциях ноль можно вычитать и складывать с другими числами - значение этих чисел при этом не изменится. Ещё можно умножить или разделить любое число на ноль, но в результате это даст ноль:</p>
24 SELECT 5 + 0 AS result FROM DUAL UNION ALL SELECT 10 * 0 AS result FROM DUAL UNION ALL SELECT 0 / 1 AS result FROM DUAL UNION ALL SELECT 10 - 0 AS result FROM DUAL;Примеры арифметических операций с нулём в SQL<em>Скриншот:<a>Oracle Corporation</a></em><p>В логических операциях ноль обозначает ложное значение - false. При этом любое другое число будет отвечать за правдивые значения - true.</p>
24 SELECT 5 + 0 AS result FROM DUAL UNION ALL SELECT 10 * 0 AS result FROM DUAL UNION ALL SELECT 0 / 1 AS result FROM DUAL UNION ALL SELECT 10 - 0 AS result FROM DUAL;Примеры арифметических операций с нулём в SQL<em>Скриншот:<a>Oracle Corporation</a></em><p>В логических операциях ноль обозначает ложное значение - false. При этом любое другое число будет отвечать за правдивые значения - true.</p>
25 <p>Создадим таблицу с данными о сотрудниках компании:</p>
25 <p>Создадим таблицу с данными о сотрудниках компании:</p>
26 CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR2(100), is_active NUMBER(1) );<p>Добавим в таблицу информацию о действующих и уволенных сотрудниках:</p>
26 CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR2(100), is_active NUMBER(1) );<p>Добавим в таблицу информацию о действующих и уволенных сотрудниках:</p>
27 INSERT INTO employees (id, name, is_active) VALUES (1, 'Катя', 1); INSERT INTO employees (id, name, is_active) VALUES (2, 'Таня', 0); INSERT INTO employees (id, name, is_active) VALUES (3, 'Женя', 1); INSERT INTO employees (id, name, is_active) VALUES (4, 'Саша', 0);<p>Теперь с помощью нуля и единицы выполним несколько SQL-запросов к нашей таблице. Для начала выберем всех действующих сотрудников:</p>
27 INSERT INTO employees (id, name, is_active) VALUES (1, 'Катя', 1); INSERT INTO employees (id, name, is_active) VALUES (2, 'Таня', 0); INSERT INTO employees (id, name, is_active) VALUES (3, 'Женя', 1); INSERT INTO employees (id, name, is_active) VALUES (4, 'Саша', 0);<p>Теперь с помощью нуля и единицы выполним несколько SQL-запросов к нашей таблице. Для начала выберем всех действующих сотрудников:</p>
28 SELECT * FROM employees WHERE is_active = 1;Таблица со списком действующих сотрудников: в компании работают Катя и Женя<em>Скриншот:<a>Oracle Corporation</a></em><p>Посмотрим список уволенных сотрудников:</p>
28 SELECT * FROM employees WHERE is_active = 1;Таблица со списком действующих сотрудников: в компании работают Катя и Женя<em>Скриншот:<a>Oracle Corporation</a></em><p>Посмотрим список уволенных сотрудников:</p>
29 SELECT * FROM employees WHERE is_active = 0;Таблица со списком действующих сотрудников: из компании уволены Таня и Саша ?<em>Скриншот:<a>Oracle Corporation</a></em><p>Закроем нашу компанию и обновим в базе данных статусы сотрудников:</p>
29 SELECT * FROM employees WHERE is_active = 0;Таблица со списком действующих сотрудников: из компании уволены Таня и Саша ?<em>Скриншот:<a>Oracle Corporation</a></em><p>Закроем нашу компанию и обновим в базе данных статусы сотрудников:</p>
30 UPDATE employees SET is_active = 0 WHERE is_active = 1;<p>Если теперь проверить результат, то в компании никто не работает:</p>
30 UPDATE employees SET is_active = 0 WHERE is_active = 1;<p>Если теперь проверить результат, то в компании никто не работает:</p>
31 SELECT * FROM employees;Таблица со списком действующих сотрудников: в компании никого не осталось ???<em>Скриншот:<a>Oracle Corporation</a></em><p>В языке JavaScript undefined относится к специальному типу данных, который указывает, что значение неопределённо. Undefined не нужно специально задавать, поскольку его интерпретатор всегда указывает автоматически.</p>
31 SELECT * FROM employees;Таблица со списком действующих сотрудников: в компании никого не осталось ???<em>Скриншот:<a>Oracle Corporation</a></em><p>В языке JavaScript undefined относится к специальному типу данных, который указывает, что значение неопределённо. Undefined не нужно специально задавать, поскольку его интерпретатор всегда указывает автоматически.</p>
32 <p>Значение undefined проще понять на примере. Перейдите в настройки браузера, откройте вкладку Дополнительные инструменты и найдите раздел Инструменты разработчика. Вам нужно открыть вкладку Консоль.</p>
32 <p>Значение undefined проще понять на примере. Перейдите в настройки браузера, откройте вкладку Дополнительные инструменты и найдите раздел Инструменты разработчика. Вам нужно открыть вкладку Консоль.</p>
33 <p>Объявим в консоли переменную, запишем в неё имя и выведем результат:</p>
33 <p>Объявим в консоли переменную, запишем в неё имя и выведем результат:</p>
34 const myName = "Юлия"; myName; /** * Если вместо консоли вы пишете код в редакторе, то для вывода результата * используйте команду console.log(myName); */<p>Ожидаемо мы получаем сохранённое в переменной значение:</p>
34 const myName = "Юлия"; myName; /** * Если вместо консоли вы пишете код в редакторе, то для вывода результата * используйте команду console.log(myName); */<p>Ожидаемо мы получаем сохранённое в переменной значение:</p>
35 <em>Скриншот: Chrome DevTools / Skillbox Media</em><p>Объявим ещё одну переменную, но добавлять в неё никакого значения пока не будем. Если вывести такую переменную в консоль, то результат будет не определён - undefined. Интерпретатор указал это значение автоматически:</p>
35 <em>Скриншот: Chrome DevTools / Skillbox Media</em><p>Объявим ещё одну переменную, но добавлять в неё никакого значения пока не будем. Если вывести такую переменную в консоль, то результат будет не определён - undefined. Интерпретатор указал это значение автоматически:</p>
36 let mySurname; mySurname<em>Скриншот: Chrome DevTools / Skillbox Media</em><p>Если мы заполним нашу пустую переменную значением и выведем результат в консоль, то undefined больше не будет отображаться:</p>
36 let mySurname; mySurname<em>Скриншот: Chrome DevTools / Skillbox Media</em><p>Если мы заполним нашу пустую переменную значением и выведем результат в консоль, то undefined больше не будет отображаться:</p>
37 mySurname = "Гаврилова"; mySurname<em>Скриншот: Chrome DevTools / Skillbox Media</em><p>В SQL вместо undefined используют NULL - так обозначают отсутствующие и неопределённые значения. Это предусматривает<a>SQL-92</a>и другие стандарты, которые обеспечивают совместимость различных<a>систем управления базами данных (СУБД)</a>. Отказ от undefined делает работу с базами данных более последовательной и позволяет избежать многих ошибок.</p>
37 mySurname = "Гаврилова"; mySurname<em>Скриншот: Chrome DevTools / Skillbox Media</em><p>В SQL вместо undefined используют NULL - так обозначают отсутствующие и неопределённые значения. Это предусматривает<a>SQL-92</a>и другие стандарты, которые обеспечивают совместимость различных<a>систем управления базами данных (СУБД)</a>. Отказ от undefined делает работу с базами данных более последовательной и позволяет избежать многих ошибок.</p>
38 <p>NULL в SQL используется для обозначения отсутствующих данных. Создадим таблицу с именами, телефонами и факсами сотрудников. Столбцы с именем и телефоном будут у каждого, а вот факс указывать не обязательно:</p>
38 <p>NULL в SQL используется для обозначения отсутствующих данных. Создадим таблицу с именами, телефонами и факсами сотрудников. Столбцы с именем и телефоном будут у каждого, а вот факс указывать не обязательно:</p>
39 CREATE TABLE CompanyContacts ( MemberID NUMBER GENERATED BY DEFAULT AS IDENTITY, FullName VARCHAR2(100) NOT NULL, Phone VARCHAR2(20) NOT NULL, Fax VARCHAR2(20) ); INSERT INTO CompanyContacts (FullName, Phone, Fax) VALUES ('Катя Иванова', '801-967-7890', '801-967-1234'); INSERT INTO CompanyContacts (FullName, Phone, Fax) VALUES ('Пётр Сидоров', '801-968-7891', NULL); INSERT INTO CompanyContacts (FullName, Phone, Fax) VALUES ('Виктор Попов', '801-969-7892', '801-969-1235'); INSERT INTO CompanyContacts (FullName, Phone, Fax) VALUES ('Дмитрий Фёдоров', '801-970-7893', NULL);<p>Если мы посмотрим таблицу, то в колонке Fax у двух сотрудников будут стоять прочерки. Эти прочерки означают NULL - значение отсутствует. Если вместо Oracle Live SQL вы будете работать с другой платформой, то можете увидеть разные отображения значения NULL: в одних программах тоже будут прочерки, другие добавят надпись NULL, а третьи оставят пустые ячейки.</p>
39 CREATE TABLE CompanyContacts ( MemberID NUMBER GENERATED BY DEFAULT AS IDENTITY, FullName VARCHAR2(100) NOT NULL, Phone VARCHAR2(20) NOT NULL, Fax VARCHAR2(20) ); INSERT INTO CompanyContacts (FullName, Phone, Fax) VALUES ('Катя Иванова', '801-967-7890', '801-967-1234'); INSERT INTO CompanyContacts (FullName, Phone, Fax) VALUES ('Пётр Сидоров', '801-968-7891', NULL); INSERT INTO CompanyContacts (FullName, Phone, Fax) VALUES ('Виктор Попов', '801-969-7892', '801-969-1235'); INSERT INTO CompanyContacts (FullName, Phone, Fax) VALUES ('Дмитрий Фёдоров', '801-970-7893', NULL);<p>Если мы посмотрим таблицу, то в колонке Fax у двух сотрудников будут стоять прочерки. Эти прочерки означают NULL - значение отсутствует. Если вместо Oracle Live SQL вы будете работать с другой платформой, то можете увидеть разные отображения значения NULL: в одних программах тоже будут прочерки, другие добавят надпись NULL, а третьи оставят пустые ячейки.</p>
40 SELECT * FROM CompanyContacts;Таблица с контактными данными сотрудников компании. Факс есть не у всех<em>Скриншот:<a>Oracle Corporation</a></em><p>Поработаем с таблицей и для начала выведем всех сотрудников с факсом:</p>
40 SELECT * FROM CompanyContacts;Таблица с контактными данными сотрудников компании. Факс есть не у всех<em>Скриншот:<a>Oracle Corporation</a></em><p>Поработаем с таблицей и для начала выведем всех сотрудников с факсом:</p>
41 SELECT * FROM CompanyContacts WHERE Fax IS NOT NULL;Таблица с данными сотрудников, у которых есть факс<em>Скриншот:<a>Oracle Corporation</a></em><p>Теперь отдельно посмотрим список сотрудников без факса:</p>
41 SELECT * FROM CompanyContacts WHERE Fax IS NOT NULL;Таблица с данными сотрудников, у которых есть факс<em>Скриншот:<a>Oracle Corporation</a></em><p>Теперь отдельно посмотрим список сотрудников без факса:</p>
42 SELECT * FROM CompanyContacts WHERE Fax IS NULL;Таблица с контактными данными сотрудников, которые работают без факса<em>Скриншот:<a>Oracle Corporation</a></em><p>Допустим, нас не устраивает, что не у всех есть факс. Купим за свой счёт недостающую технику и для удобства присвоим каждому сотруднику уникальный номер факса на основе его идентификатора из таблицы:</p>
42 SELECT * FROM CompanyContacts WHERE Fax IS NULL;Таблица с контактными данными сотрудников, которые работают без факса<em>Скриншот:<a>Oracle Corporation</a></em><p>Допустим, нас не устраивает, что не у всех есть факс. Купим за свой счёт недостающую технику и для удобства присвоим каждому сотруднику уникальный номер факса на основе его идентификатора из таблицы:</p>
43 UPDATE CompanyContacts SET Fax = '801-970-' || LPAD (MemberID, 4, '0');<p>Если сейчас посмотреть обновления, то NULL больше не встречается:</p>
43 UPDATE CompanyContacts SET Fax = '801-970-' || LPAD (MemberID, 4, '0');<p>Если сейчас посмотреть обновления, то NULL больше не встречается:</p>
44 SELECT * FROM CompanyContacts;Таблица с контактами сотрудников, где у всех есть телефон и факс<em>Скриншот:<a>Oracle Corporation</a></em><p>Вы познакомились со значением NULL и знаете, чем оно отличается от нуля. Однако в статье мы рассматривали простые примеры и не вникали в детали SQL-синтаксиса. Если вам нужно с этим разобраться - рекомендуем пройти два бесплатных интерактивных руководства на платформе Oracle Live SQL.</p>
44 SELECT * FROM CompanyContacts;Таблица с контактами сотрудников, где у всех есть телефон и факс<em>Скриншот:<a>Oracle Corporation</a></em><p>Вы познакомились со значением NULL и знаете, чем оно отличается от нуля. Однако в статье мы рассматривали простые примеры и не вникали в детали SQL-синтаксиса. Если вам нужно с этим разобраться - рекомендуем пройти два бесплатных интерактивных руководства на платформе Oracle Live SQL.</p>
45 <p><a>Querying Null-valued Rows: Databases for Developers</a>. Это руководство для изучения NULL. Вы на примерах ещё раз познакомитесь с этим значением, научитесь его правильно определять, сравнивать и использовать в функциях.</p>
45 <p><a>Querying Null-valued Rows: Databases for Developers</a>. Это руководство для изучения NULL. Вы на примерах ещё раз познакомитесь с этим значением, научитесь его правильно определять, сравнивать и использовать в функциях.</p>
46 Фрагмент интерактивного руководства по работе с NULL<em>Скриншот:<a>Oracle Corporation</a></em><p><a>Columns and Data Types: Databases for Developers</a>. В этом руководстве вы познакомитесь со структурой таблицы и популярными типами данных: числами, строками, булевыми и двоичными значениями, датой и временем.</p>
46 Фрагмент интерактивного руководства по работе с NULL<em>Скриншот:<a>Oracle Corporation</a></em><p><a>Columns and Data Types: Databases for Developers</a>. В этом руководстве вы познакомитесь со структурой таблицы и популярными типами данных: числами, строками, булевыми и двоичными значениями, датой и временем.</p>
47 Фрагмент интерактивного руководства по работе с различными типами данных в SQL<em>Скриншот:<a>Oracle Corporation</a></em><p>Data Science с нуля: пробуем профессии на практике за 5 дней</p>
47 Фрагмент интерактивного руководства по работе с различными типами данных в SQL<em>Скриншот:<a>Oracle Corporation</a></em><p>Data Science с нуля: пробуем профессии на практике за 5 дней</p>
48 <p>Вы разберётесь в трёх главных направлениях data science: машинном обучении, разработке на Python и визуализации данных. Решите, какая сфера вам ближе, и выполните 4 реальные задачи с данными.</p>
48 <p>Вы разберётесь в трёх главных направлениях data science: машинном обучении, разработке на Python и визуализации данных. Решите, какая сфера вам ближе, и выполните 4 реальные задачи с данными.</p>
49 <p><a>Пройти бесплатно</a></p>
49 <p><a>Пройти бесплатно</a></p>
50 <a><b>Попробуйте data science на бесплатном курсе</b>Пройдите курс по data science и изучите 3 направления в работе с данными. Решите, в какой сфере хотите развиваться дальше, и получите ценные подарки. Пройти курс →</a>
50 <a><b>Попробуйте data science на бесплатном курсе</b>Пройдите курс по data science и изучите 3 направления в работе с данными. Решите, в какой сфере хотите развиваться дальше, и получите ценные подарки. Пройти курс →</a>