Иногда при попытке настроить общий доступ к точке W-Fi, созданной на ПК, пользователи получают сообщение от системы об ошибке с кодом null. Что это за сбой и как быть в данной ситуации.
Почему пользователи сталкиваются с данной ошибкой
Ноутбук может работать в качестве роутера, то есть раздавать интернет другим устройствам, находящимся рядом. Например, ПК подключён к интернету с помощью обычного провода: Wi-Fi в этом случае нет. При этом у человека есть ещё и другие гаджеты (планшет, смартфон и т. д.), которые также желательно подключить к сети. Решение проблемы может быть в виде покупки роутера либо же создания виртуального Wi-Fi на компьютере, которое будет использоваться в качестве маршрутизатора, раздающего сигнал.
Однако настроить точку доступа на компьютере недостаточно: другие устройства смогут к ней подключиться, но при этом интернета у них не будет. В окне «Свойства» созданного подключения нужно для этого разрешить общий доступ к сети.
Во вкладке «Доступ» пользователь может активировать общий доступ к созданной им точке Wi-Fi
При попытке это сделать некоторые пользователи сталкиваются с ошибкой под кодом null. Почему система не даёт разрешить другим девайсом пользоваться данным подключением к интернету?
При попытке включить общий доступ на экране может появится сообщение об ошибке с кодом null
Основная причина — отключённый «Брандмауэр Защитника Windows». В этой ОС нельзя дать доступ к интернету, если стандартная программа для защиты устройства была изъята из служб. При этом неважно, какая у вас версия: «семёрка», «десятка» или XP.
Как исправить ошибку
Выход из ситуации довольно простой — нужно снова запустить «Брандмауэр Защитника Windows», который был по каким-то причинам отключён. Возможно, это сделал сам пользователь ранее или же произошёл какой-то сбой в системе, так как по умолчанию служба защитника всегда работает. После включения клиент Windows сможет разрешить доступ и начать раздавать интернет со своего ПК.
Активация «Брандмауэра Windows»
Запустить эту встроенную утилиту можно двумя способами: в «Службах» и на «Панели управления». Они оба просты в освоении, поэтому справится с задачей даже новичок.
Через «Службы»
В системном окне «Службы» любой пользователь ПК может включить ту или иную службу, а также настроить её автоматический запуск вместе с ОС. У «Защитника Windows» есть своя служба. Как её найти в перечне и включить, рассмотрим в инструкции:
- Быстро открыть окно «Службы» поможет стандартный сервис «Выполнить». Зажимаем на клавиатуре две кнопки: Win + R. В появившемся маленьком окошке вставляем код services.msc. Вы можете его также просто напечатать. Будьте внимательны, чтобы не сделать ошибку в слове. Тут же жмём на ОК.
В строке «Открыть» печатаем или вставляем заранее скопированный код services.msc
- В правой части окна с большим перечнем служб находим «Брандмауэр Защитника Windows». Пункты в списке упорядочены по алфавиту. Прокрутите объекты с английскими названиями. Нужная служба будет практически в начале списка.
В окне «Службы» ищем пункт «Брандмауэр Защитника Windows»
- Щёлкаем по нему правой клавишей мышки — в небольшом сером меню выбираем последний раздел «Свойства».
В сером меню кликаем по пункту «Свойства» для запуска дополнительного окна
- Поверх главного окна со службами появится дополнительное, в котором и нужно выполнить манипуляции. В выпадающем меню «Тип запуска» кликаем по «Автоматически». Это позволит системе запускать программу для защиты сразу после включения компьютера и загрузки ОС. Теперь жмём на первую кнопку в ряде под названием «Запустить».
Выбираем автоматический тип запуска и кликаем по кнопке «Запустить»
- Чтобы внесённые изменения начали сразу же действовать, кликаем сначала по «Применить», а затем по ОК.
- Пробуем снова дать доступ к точке Wi-Fi. Проблема должна быть решена.
Через «Панель управления»
Встроенную программу для защиты можно активировать и через «Панель управления». Рассмотрим подробно, как добраться до его раздела:
- Запустить эту классическую утилиту Windows можно несколькими методами. Если у вас «семёрка», вы можете найти её в системном меню «Пуск», которое открывается кликом по иконке виде окна, расположенной в левом нижнем углу экрана.
Откройте «Панель управления» через меню «Пуск», если у вас Windows 7
- Если у вас Windows 10, кликните по значку в виде лупы на «Панели задач» — появится панель для поиска. Напечатайте соответствующий запрос. По мере ввода система уже начнёт выдавать в небольшом окне результаты. Кликаем по нужному пункту, чтобы запустить панель.
В Windows 10 вы можете найти «Панель управления» через универсальное окошко для поиска разделов по системе
- Универсальный метод для запуска, который подходит для всех версий «операционки» — окно «Выполнить». Вызываем его комбинацией клавиш Win + R, а затем в поле «Открыть» печатаем простой код control. Кликаем по ОК — на экране появится «Панель управления».
Команда control в окне «Открыть» поможет запустить «Панель управления»
- В перечне находим название блока «Брандмауэр Защитника Windows». Если у вас стоит значение «Мелкие значки» для параметра «Просмотр», он будет вторым в первом столбце.
Найдите в списке пункт «Брандмауэр Защитника Windows»
- В левой колонке с множеством ссылок синего цвета кликаем по четвёртой «Включение и отключение брандмауэра…».
Жмём по ссылке ««Включение и отключение брандмауэра…» для открытия следующей страницы
- Ставим круглые отметки рядом с пунктами о включении защитника. Нужно активировать программу как для частных, так и для общедоступных сетей.
Включите «Брандмауэр Windows» для каждого типа сети
- Жмём на ОК, закрываем все окна и перезапускаем ПК.
Видео: два метода запуска «Брандмауэра Windows»
Проблема с кодом null решается простой активацией «Брандмауэра Windows». Данную утилиту, встроенную в систему Windows, можно включить в одном из двух окон: «Панель управления» либо «Службы». В последнем вы также можете настроить автоматический запуск приложения с каждой загрузкой ОС.
- Автор: Екатерина Васильева
- Распечатать
Оцените статью:
- 5
- 4
- 3
- 2
- 1
(0 голосов, среднее: 0 из 5)
Поделитесь с друзьями!
Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article
What is undeclared Error: When we use some constant in our program maybe they are built-in constant and may be created by a user according to the requirement. But when we use some constant, and they are not built-in and also not defined by a user in that condition, we get an undeclared error. Below is the code that shows the example of NULL undeclared Error:
CPP
using
namespace
std;
int
main()
{
int
* num = NULL;
return
0;
}
Time complexity: O(1)
Auxiliary Space: O(1)
The above code will show an error as “NULL undeclared Error”. The reason for the NULL undeclared error is “NULL” is not a built-in constant. Why do we need NULL? When we create some pointer in our program, they are used for storing addresses. But an uninitialized pointer variable is very dangerous so that we can assign them NULL which means they are not pointing to any memory location, so our program runs smoothly and securely. Now if NULL is not built-in constant, how we can overcome the NULL undeclared error. Below are some code which is used to remove the NULL undeclared Error:
- Assign 0: Instead of assigning NULL to num we can simply assign 0 which indicate that it is not pointing to any address, so the simplest solution is simply assigning 0. Below code shows its implementation:
CPP
using
namespace
std;
int
main()
{
int
* num = 0;
return
0;
}
Time complexity: O(1)
Auxiliary Space: O(1)
- Include “stddef.h” Header file: In stddef.h header file NULL is already defined, so we can include this header file in our program and our program will compile and execute without any error. Below code shows its implementation:
C
#include <stddef.h>
int
main()
{
int
* num = NULL;
return
0;
}
Time complexity: O(1)
Auxiliary Space: O(1)
- Include iostream Header File: In C++ if we want to execute our program without NULL undeclared error, we can simply include iostream in our program and make it happen without any error. Below code shows its implementation:
CPP
#include <iostream>
using
namespace
std;
int
main()
{
int
* num = NULL;
return
0;
}
Time complexity: O(1)
Auxiliary Space: O(1)
- #define NULL 0: Using #define NULL 0 line in our program, we can solve the NULL undeclared error. Below code shows its implementation:
CPP
#define NULL 0
using
namespace
std;
int
main()
{
int
* num = NULL;
return
0;
}
Time complexity: O(1)
Auxiliary Space: O(1)
- In newer C++(C++11 and higher):: nullptr is a built-in constant, so we can use it instead of using NULL.
CPP
#include <iostream>
using
namespace
std;
int
main()
{
int
* num = nullptr;
return
0;
}
Time Complexity: O(1) // Declaration/Initialization takes constant time
Auxiliary Space: O(1)
Last Updated :
21 Jun, 2022
Like Article
Save Article
Довольно часто при разработке на Java программисты сталкиваются с NullPointerException, появляющимся в самых неожиданных местах. В этой статье мы разберёмся, как это исправить и как стараться избегать появления NPE в будущем.
NullPointerException (оно же NPE) это исключение, которое выбрасывается каждый раз, когда вы обращаетесь к методу или полю объекта по ссылке, которая равна null. Разберём простой пример:
Integer n1 = null; System.out.println(n1.toString());
Здесь на первой строке мы объявили переменную типа Integer и присвоили ей значение null (то есть переменная не указывает ни на какой существующий объект).
На второй строке мы обращаемся к методу toString переменной n1. Так как переменная равна null, метод не может выполниться (переменная не указывает ни на какой реальный объект), генерируется исключение NullPointerException:
Exception in thread "main" java.lang.NullPointerException at ru.javalessons.errors.NPEExample.main(NPEExample.java:6)
Как исправить NullPointerException
В нашем простейшем примере мы можем исправить NPE, присвоив переменной n1 какой-либо объект (то есть не null):
Integer n1 = 16; System.out.println(n1.toString());
Теперь не будет исключения при доступе к методу toString и наша программа отработает корректно.
Если ваша программа упала из-за исключение NullPointerException (или вы перехватили его где-либо), вам нужно определить по стектрейсу, какая строка исходного кода стала причиной появления этого исключения. Иногда причина локализуется и исправляется очень быстро, в нетривиальных случаях вам нужно определять, где ранее по коду присваивается значение null.
Иногда вам требуется использовать отладку и пошагово проходить программу, чтобы определить источник NPE.
Как избегать исключения NullPointerException
Существует множество техник и инструментов для того, чтобы избегать появления NullPointerException. Рассмотрим наиболее популярные из них.
Проверяйте на null все объекты, которые создаются не вами
Если объект создаётся не вами, иногда его стоит проверять на null, чтобы избегать ситуаций с NullPinterException. Здесь главное определить для себя рамки, в которых объект считается «корректным» и ещё «некорректным» (то есть невалидированным).
Не верьте входящим данным
Если вы получаете на вход данные из чужого источника (ответ из какого-то внешнего сервиса, чтение из файла, ввод данных пользователем), не верьте этим данным. Этот принцип применяется более широко, чем просто выявление ошибок NPE, но выявлять NPE на этом этапе можно и нужно. Проверяйте объекты на null. В более широком смысле проверяйте данные на корректность, и консистентность.
Возвращайте существующие объекты, а не null
Если вы создаёте метод, который возвращает коллекцию объектов – не возвращайте null, возвращайте пустую коллекцию. Если вы возвращаете один объект – иногда удобно пользоваться классом Optional (появился в Java 8).
Заключение
В этой статье мы рассказали, как исправлять ситуации с NullPointerException и как эффективно предотвращать такие ситуации при разработке программ.
В статье рассказывается:
- Пример значения NULL
- Значение NULL и НЕ NULL
- Значение NULL в MySQL
- Логические операции и NULL
- Функция NULL в MySQL
- Операторы IN и NOT IN для значения NULL
- Значение NULL и пустая строка в СУБД
- Отличия между null и undefined
-
Пройди тест и узнай, какая сфера тебе подходит:
айти, дизайн или маркетинг.Бесплатно от Geekbrains
Если вы далеки от работы с базами данных, для вас может быть открытием, что ноль – это не значение NULL, хотя, признаем, они созвучны. Кроме того, NULL не является значением пустой строки, хотя можно найти поле, содержащее данные любого типа.
NULL можно представить как значение для представления неизвестного фрагмента данных (обратите внимание: не нулевого, хотя поле при этом выглядит пустым). А еще он не равен ничему, даже другому NULL. И сегодня мы поговорим об этом загадочном (на первый взгляд) значении NULL более подробно.
Итак, что вы должны знать о значении NULL? Давайте разбираться.
Представьте себе письменный стол, на котором лежат канцелярские принадлежности: 6 шариковых ручек и 2 простых карандаша. Также известно, что в ящике стола должны быть фломастеры. Но вот сколько их и есть ли они вообще — данных нет. Если нам нужно составить таблицу инвентаризации с вводом значения NULL, то выглядеть она будет так:
InventoryID | Item | Количество |
1 | ручки | 6 |
2 | карандаши | 2 |
3 | фломастеры | NULL |
Как вы понимаете, принимать за «0» количество фломастеров в данном случае было бы неверным, так как подобная запись показывала бы, что фломастеров нет вообще. Но точные данные об их количестве отсутствуют, поэтому может оказаться, что несколько штук все же есть.
Значение NULL и НЕ NULL
IS NULL и IS NOT NULL – специально созданные операторы, которые осуществляют сравнение имеющихся NULLов. IS NULL возвращает истину, если операнда является NULLом. Соответственно, если операнд не является NULLом, то значение будет ложным.
select case when null is null then ‘YES’ else ‘NO’ end from dual; — YES
select case when ‘a’ is null then ‘YES’ else ‘NO’ end from dual; — NO
IS NOT NULL имеет обратный принцип: значение будет истинным, если операнд не является NULLом, и ложным, если он таковым является.
select case when ‘a’ is NOT null then ‘YES’ else ‘NO’ end from dual; — YES
select case when null is NOT null then ‘YES’ else ‘NO’ end from dual; — NO
Учтите, что когда речь идет об отсутствующих значениях, есть особые случаи их сравнения:
- DECODE — принимает два NULLа за равные значения;
- составные индексы — в случае, когда у двух ключей есть пустые поля, но заполненные поля при этом равны между собой, то Oracle воспримет эти ключи, как равные.
Читайте также
Вот так проявляет себя DECODE:
select decode( null
, 1, ‘ONE’
, null, ‘EMPTY’ — это условие будет истинным
, ‘DEFAULT’
)
from dual;
Значение NULL в MySQL
Результат при сравнении NULLов, в зависимости от операции SQL, часто будет иметь значение NULL. Предположим, что А НЕДЕЙСТВИТЕЛЕН:
Арифметические операторы
- A + B = NULL
- A – B = NULL
- A * B = NULL
- A/B = NULL
Скачать
файл
Операторы сравнения
- A = B = NULL
- A! = B = NULL
- A> B = NULL
- A!
Эти случаи — лишь часть примеров операторов, возвращающих значение NULL при равенстве NULL одного из операндов. На практике встречаются куда более сложные запросы, чья обработка затруднена количеством значений NULL. Главное, нужно понимать и планировать итоги работы с базой данных, в которой вы разрешаете значение NULL.
Логические операции и NULL
Для логических операторов AND и OR есть свои особенности при работе со значением NULL. Краткое руководство рассмотрим на примере.
Как правило, НЕИЗВЕСТНО обрабатывается так же, как и состояние ЛОЖЬ. Если выбрать из таблицы строки и вычисление условия X=NULL в предложении WHERE дало результат НЕИЗВЕСТНО, то ни одной строки не будет получено. Но есть и различия: выражение НЕ(ЛОЖЬ) вернет истину, а НЕ(ИЗВЕСТНО) вернет НЕИЗВЕСТНО.
Чаще всего с неизвестным результатом работают как с ЛОЖЬЮ:
select 1 from dual where dummy = null; — запрос не вернёт записей
При отрицании неизвестности результатом будет НЕИЗВЕСТНО:
exec test_bool( not(null = null)); — UNKNOWN
exec test_bool( not(null != null) ); — UNKNOWN
exec test_bool( not(null = ‘a’) ); — UNKNOWN
exec test_bool( not(null != ‘a’) ); — UNKNOWN
Оператор OR:
exec test_bool(null or true); — TRUE <- !!!!!
exec test_bool(null or false); — UNKNOWN
exec test_bool(null or null); — UNKNOWN
Оператор AND:
exec test_bool(null and true); — UNKNOWN
exec test_bool(null and false); — FALSE <- !!!!!
exec test_bool(null and null); — UNKNOWN
Функция NULL в MySQL
В системе MySQL есть ряд функций, позволяющих результативно работать с NULL. Это IFNULL, NULLIF и COALESCE.
- IFNULL может принять два параметра: возвращает первый аргумент, если он не является NULL, в обратном случае — возвращает второй аргумент.
- NULLIF также может принять два аргумента: если они равны, то функция возвращает NULL, в обратном случае — возвращает первый аргумент. Эта функция также будет эффективна, если в вашей таблице в столбце есть пустые строки со значением NULL.
- COALESCE может принимать список аргументов и возвращать первый аргумент не-NULL. Например, эту функцию можно применять для базы контактных данных с потенциальной возможностью в зависимости от важности информации в порядке Телефон — Электронная почта — N/A.
Топ-30 самых востребованных и высокооплачиваемых профессий 2023
Поможет разобраться в актуальной ситуации на рынке труда
Подборка 50+ ресурсов об IT-сфере
Только лучшие телеграм-каналы, каналы Youtube, подкасты, форумы и многое другое для того, чтобы узнавать новое про IT
ТОП 50+ сервисов и приложений от Geekbrains
Безопасные и надежные программы для работы в наши дни
Уже скачали 21223
Операторы IN и NOT IN для значения NULL
Чтобы понять взаимодействие этих операторов с NULLом, рассмотрим пример.
Создадим таблицу Т, состоящую из одного числового столбца А и строками: 1, 2, 3 и NULL.
create table t as select column_value a from table(sys.odcinumberlist(1,2,3,null));
Затем выполним трассировку запроса (учтите, что для этого нужно обладать ролью PLUSTRACE).
От трассировки в листингах оставлена часть filter, чтобы показать преобразование указанных в запросе условий.
set autotrace on
Теперь, после подготовительных действий, попробуем выбрать те записи, которые будут соответствовать набору (1, 2, NULL).
select * from t where a in(1,2,null); — вернёт [1,2]
— Predicate Information:
— filter(«A»=1 OR «A»=2 OR «A»=TO_NUMBER(NULL))
По какой-то причине строка с NULLом не выбрана. Возможно, это случилось потому, что вычисление предиката «А»=TO_NUMBER(NULL) вернуло состояние НЕИЗВЕСТНО. Попробуем явно указать условие включения NULLов в результаты запросов:
select * from t where a in(1,2) or a is null; — вернёт [1,2,NULL]
— Predicate Information:
— filter(«A» IS NULL OR «A»=1 OR «A»=2)
Попробуем с NOT IN:
select * from t where a not in(1,2,null); — no rows selected
— Predicate Information:
— filter(«A»<>1 AND «A»<>2 AND «A»<>TO_NUMBER(NULL))
Ни одной записи так и не появилось.
Читайте также
Это объясняется тем, что трехзначная логика NOT IN не взаимодействует с NULLами: при попадании NULL в условия отбора данных можно не ждать.
Значение NULL и пустая строка в СУБД
Oracle отличается от стандартов ANSI SQL в определении NULLов: он проводит знак равенства между NULL и пустой строкой. Эта особенность программы рождает много споров, хотя Oracle и заявляет, что, возможно, в будущих релизах будет изменен подход в обработке пустой строки, как NULL. Но в реальности проведение таких изменений сомнительно, так как под эту СУБД написано неимоверное количество кода.
Только до 15.06
Скачай подборку тестов, чтобы определить свои самые конкурентные скиллы
Список документов:
Тест на определение компетенций
Чек-лист «Как избежать обмана при трудоустройстве»
Инструкция по выходу из выгорания
Чтобы получить файл, укажите e-mail:
Подтвердите, что вы не робот,
указав номер телефона:
Уже скачали 7503
Равенство пустой строки и NULL:
exec test_bool( » is null ); — TRUE
Если попытаться найти причину, почему вообще пустую строку стали считать эквивалентной NULL, то ответ можно найти в формате хранения varchar`ов и NULLов внутри блоков данных. Табличные строки Oracle хранит в структуре, представляющей собой заголовок и следующими за ним столбцы с данными.
Каждый столбец, в свою очередь, состоит из 2-х полей: длина данных в столбце (1 или 3 байта) и сами данные. При нулевой длине varchar2 в поле с данными нечего вносить, так как оно не занимает ни байта. В поле же, где указывается длина, вносится специальное значение 0xFF, что и означает отсутствие данных.
NULL Oracle представляет аналогично, то есть отсутствует поле с данными, а в поле длины данных вносится 0xFF. Так как изначально разработчики Oracle не разделяли эти два состояния, то и сейчас принцип внесения данных не изменился.
Понятие «пустая строка» допустимо толковать как абсолютное отсутствие значения, так как ее длина равна нулю. NULL же, в свою очередь, имеет длину неопределенного значения. Поэтому выражение length (») возвращает NULL, а не ожидаемый ноль.
Еще одна причина, по которой нельзя сравнивать NULL с пустой строкой: выражение val = » вернёт состояние НЕИЗВЕСТНО, так как, по сути, идентично val=NULL.
Неопределенная длина пустой строки:
select length(») from dual; — NULL
Сравнение с пустой строкой невозможно:
exec test_bool( ‘a’ != » ); — UNKNOWN
Критика такого подхода Oracle к значениям NULL и пустой строки, основывается на том, что не всегда пустая строка может означать неизвестность. Например, когда менеджер-продавец вносит данные в карточку клиента, то в поле «Контактный номер» он может указать конкретный номер; также он может указать, что номер неизвестен (NULL); но еще он может указать, что номера как такового нет (пустая строка).
С методом хранения пустых строк, предлагаемым Oracle, последний случай будет очень затруднительно осуществить. Если смотреть на этот довод критики через призму семантики, то звучит он очень убедительно. Но с другой стороны, каким образом менеджер сможет внести в поле «Контакты» пустую строку, и как в будущем он сможет отличить ее от «номер неизвестен» (NULL)?
Отличия между null и undefined
Можно сказать, что NULL – это такое значение, которое является определенным для отсутствующего объекта. UNDEFINED же означает именно неопределенность. Например:
var element;
// значение переменной element до её инициализации не определённо: undefined
element = document.getElementById(‘not-exists’);
// здесь при попытке получения несуществующего элемента, метод getElementById возвращает null
// переменная element теперь инициализирована значением null, её значение определено
Осуществляя проверку на NULL или UNDEFINED, нужно помнить о разнице в операторах равенства (==) и идентичности (===): с первым оператором производится преобразование типов.
typeof null // object (не «null» из соображений обратной совместимости)
typeof undefined // undefined
null === undefined // false
null == undefined // true
Это все то, что вы должны знать о значении NULL. Обрастая опытом и применяя некоторые уловки для избежания NullPointerException, вы научитесь делать безопасный код. Главным образом неразбериха возникает из-за того, что NULL может трактоваться как пустое значение или как неидентифицированное.
Поэтому важно документально фиксировать поведение метода, когда есть входящее значение NULL. Держите в памяти, что NULL – это значение по умолчанию ссылочных переменных. И вызывать методы экземпляра или получать доступ к переменным экземпляра, применяя NULL-ссылку, вы не можете.
Уровень сложности
Простой
Время на прочтение
5 мин
Количество просмотров 12K
NULL — это специальное значение, которое используется в SQL для обозначения отсутствия данных. Оно отличается от пустой строки или нулевого значения, так как NULL означает отсутствие какого-либо значения в ячейке таблицы.
История появления NULL в SQL довольно интересна и длинна. В начале 1970-х годов Д. Камерер (D. Chamberlin) и Р. Бойд (R. Boyce) предложили использовать реляционную модель для полной замены иерархических и сетевых моделей данных, которые были актуальны в то время. Полная замена предполагала возможность хранения значений NULL в таблицах структуры базы данных.
Первоначально, NULL был создан как интегральный элемент реляционной модели данных. Это означало, что NULL мог быть использован в качестве значения для любого типа данных (целого числа, строки и т.д.) или даже целой строки (например, таких значений как «неизвестно» или «нет данных»).
Когда была разработана SQL, NULL был реализован как специальное значение или маркер, который указывает на отсутствие значения в столбце. Таким образом, в SQL NULL означает отсутствие значения или неопределенное значение.
Однако, NULL создал некоторые проблемы при работе с данными в SQL. Например, если вы выполняете операцию на столбце, содержащем NULL значение, результат операции также будет NULL. Это означает, что использование NULL может приводить к нежелательным результатам, таким как непредсказуемое поведение.
Однако, важно понимать, что NULL не обязательно означает отсутствие информации или отсутствие значения в столбце. NULL может быть использован для разных целей, таких как указание на неопределенный результат для вычислений или как маркер для отметки отсутствия значения в таблице.
Рассмотрим несколько SQL операций с NULL:
-
Как назначить значение NULL в SQL?
Значение NULL можно явно указать при создании таблицы или добавления записей в таблицу. Например, при создании таблицы можно указать, что один из столбцов не обязательно должен иметь значение, используя ключевое слово NULL. -
Как проверить NULL в SQL?
Для того чтобы проверить значение NULL в SQL, используется оператор IS NULL. Этот оператор возвращает true, если значение столбца равно NULL. -
NULL и требования целостности данных
NULL может нарушить требования целостности данных, которые гарантируют, что данные в таблице являются валидными и согласованными. Например, требование необходимости заполнения поля значением может быть нарушено, если значение NULL допустимо. -
Ограничение NOT NULL
Ограничение NOT NULL позволяет определить, что значение в столбце не может быть NULL. Это означает, что при добавлении записи в таблицу обязательно должно быть заполнено значение для данного столбца. -
ISNULL
Функция ISNULL возвращает первый аргумент, если он не равен NULL, и второй аргумент, если первый аргумент равен NULL. ISNULL наиболее часто используется для замены значений NULL на конкретные значения. -
COALESCE
Функция COALESCE возвращает первый аргумент, который не равняется NULL. COALESCE может быть полезна, когда вам нужно выбрать первое значение из двух или нескольких, которые могут быть пустыми. -
NULLIF
Функция NULLIF возвращает NULL, если два аргумента равны. Если аргументы не равны, она возвращает первый аргумент. Эта функция может быть полезна для условного выполнения некоторых операций в зависимости от того, равны ли значения.
Почему знание NULL важно для SQL-разработчиков?
Понимание того, что такое NULL и как он работает, важно для SQL-разработчиков, так как они должны убедиться, что данные в таблице корректны и не содержат NULL, если это не предусмотрено требованиями для соответствующего столбца таблицы. Также знание правильной работы с NULL в SQL позволяет избежать неожиданного поведения запросов и операторов, которые могут привести к ошибкам или неверным результатам. Кроме того, понимание того, как обрабатывать значения NULL, может улучшить эффективность запросов, так как правильное использование функций для работы с NULL может сократить количество кода и убрать дублирование.
NULL в базе данных может привести к ошибкам, например:
-
Сравнение значений. Если в таблице присутствуют значения NULL, то при выполнении операции сравнения, например, WHERE column_name = NULL, результатом будет False. Вместо этого нужно использовать оператор IS NULL.
-
Вычисления. Если при выполнении арифметических операций включены значения NULL, то результат такой операции тоже будет NULL. Например, 5 + NULL = NULL.
-
Сортировка. При сортировке значений в столбце, которые содержат NULL, может произойти непредсказуемый результат в зависимости от реализации сортировки в базе.
-
Внешние ключи. Если в таблице соединения используются внешние ключи, то значение NULL может привести к нарушению связной целостности.
-
Агрегирующие функции. При использовании агрегирующих функций в запросах, значения NULL могут не быть учтены в результате.
-
Вывод на экран. Если значение NULL выводится на экран пользователя, это может вызвать возможное недопонимание и ухудшение пользовательского опыта.
Все эти проблемы могут привести к ошибкам при обработке данных и привести к неправильным результатам. Необходимо быть осторожным при работе с NULL значениями в базе данных и учитывать их взаимодействие при проектировании и разработке баз данных.
Пример неудачного использования NULL
Допустим, у нас есть таблица, в которой хранится информация о заказах в интернет-магазине. Среди полей есть поля, отражающие дату создания заказа (orderdate) и дату его доставки (deliverydate).
Однажды в этой таблице обнаружилась ошибка: у нескольких заказов deliverydate было не заполнено, т.е. им было присвоено значение NULL. Разработчики не заметили этого и продолжили работу с данными.
Однако при анализе статистики продаж на одном из графиков заказы отображались в зависимости от даты доставки. Из-за того, что несколько заказов не имели значения в поле deliverydate, они не отображались на графике вовсе, что привело к искажению реальных данных и ошибочным выводам о продажах на определенные даты.
Эта ошибка привела к тому, что команда интернет-магазина долго работала с неточными данными, и необходимо было потратить много времени на исправление ошибки и калибровку аналитических инструментов. Все эти проблемы могли быть исправлены, если бы разработчики были внимательными и не допустили присвоения значения NULL в поле, которое требует обязательного заполнения.
В итоге, знание NULL очень важно для SQL-разработчиков, так как неправильное использование NULL может привести к ошибкам в запросах и значительно затруднить дальнейшую обработку данных. Однако, правильное использование NULL может упростить запросы и дать возможность корректно хранить и обрабатывать данные. Поэтому, при работе с базами данных, SQL-разработчикам необходимо быть внимательными и осознанными в использовании NULL.
Бонус
Три вопроса с собеседований, где вас проверяют на знание NULL в SQL:
-
Как проверить, есть ли NULL значение в определенном столбце таблицы в SQL?
Ответ: Необходимо использовать оператор «IS NULL» или «IS NOT NULL». Например, чтобы проверить, есть ли NULL значение в столбце «name» таблицы «users», нужно выполнить следующий запрос: SELECT FROM users WHERE name IS NULL;
-
Как можно заменить NULL значения на определенное значение в SQL?
Ответ: Для замены NULL значений можно использовать оператор «COALESCE». Например, чтобы заменить NULL значения в столбце «price» таблицы «products» на значение 0, нужно выполнить следующий запрос: SELECT COALESCE(price, 0) FROM products;
-
Как можно проверить, что два столбца имеют одинаковые значения, включая NULL, в SQL?
Ответ: Для этого нужно использовать оператор «IS NOT DISTINCT FROM». Он сравнивает значения двух столбцов, включая NULL значения. Например, чтобы проверить, что значения столбцов «name» и «address» в таблице «users» совпадают, нужно выполнить следующий запрос: SELECT FROM users WHERE name IS NOT DISTINCT FROM address;