21 прочтение · 9 месяцев назад
Работа с NULL в SQL Понимание принципов работы с NULL существенно сокращает время разработки сложных SQL запросов. Самое важное в том, что пустая строка, 0 и NULL – это разные понятия. NULL – это признак, указывающий на отсутствие данных. При проектировании схем данных мы предполагаем, что при последующем их заполнении командой INSERT исходные данные для некоторых полей могут отсутствовать по разным (часто не зависящим от разрабоnки) причинам. Также при проектировании схемы сразу важно определиться, допустимо ли отсутствие данных для каждого конкретного поля или нет. Например, при проектировании схемы данных для меню кафе CREATE TABLE menu (    ID SERIAL PRIMARY KEY,    NAME TEXT NOT NULL ); явно указано, что поле name ( наименование блюда ) обязательно должно быть заполнено ( NOT NULL). Немного модифицируем эту схему – добавим поле CODE, которое по умолчанию можно не заполнять значениями. CREATE TABLE menu (    ID SERIAL PRIMARY KEY,    CODE VARCHAR(5),    NAME TEXT NOT NULL ); Добавим данные INSERT INTO menu (code, NAME) VALUES ('TOST','Тост с яйцом пашот под голландским соусом'); INSERT INTO menu (NAME) VALUES ('Блинчики с начинкой'); INSERT INTO menu (code, NAME) VALUES ('HASH','Картофельный Хаш с яйцом пашот под голландским соусом'); INSERT INTO menu (NAME) VALUES ('Омлет с ветчиной и помидорами'); INSERT INTO menu (NAME) VALUES ('Шакшука'); В результате запроса SELECT *  FROM menu ; можно увидеть, как часть полей CODE возвращается со значением NULL. Очень важно знать, что с такими значениями не работают привычные операнды сравнения. Например, для выборки записей с заполненным значением CODE запрос SELECT *  FROM menu m  WHERE m.code != NULL ; вернёт либо пустой набор данных либо породит сообщение об ошибке (зависит от типа базы данных). Правильный запрос выглядит вот так SELECT *  FROM menu m  WHERE m.code IS NOT NULL ; Для выбора строк с незаполненным полем CODE нужно использовать запрос SELECT *  FROM menu m  WHERE m.code IS NULL ;
Преобразование значений NULL в не-NULL значения в SQL часто является неотъемлемой частью разработки баз данных. NULL — это особое значение в SQL, которое обозначает отсутствие значения или неопределенность. Однако, в некоторых случаях, нам может потребоваться заменить значение NULL на не-NULL значение. В данной статье мы рассмотрим различные способы преобразования значений NULL в не-NULL значения с использованием примеров кода. 1. Использование функции IFNULL: Функция IFNULL является одним из наиболее распространенных способов преобразования значений NULL в SQL. Она принимает два аргумента: значение, которое нужно проверить на NULL, и значение, которое необходимо использовать в случае, если первое значение равно NULL. Пример использования функции IFNULL: SELECT column1, IFNULL(column2, 0) FROM table; # Здесь, если значение column2 равно NULL, то функция IFNULL вернет значение 0. 2. Использование функции COALESCE: Функция COALESCE является альтернативой функции IFNULL и позволяет проверить несколько значений на NULL и вернуть первое не-NULL значение. Она принимает несколько аргументов и возвращает первое не-NULL значение. Пример использования функции COALESCE: SELECT column1, COALESCE(column2, column3, 'Нет значения') FROM table; # Здесь, если значения column2 и column3 равны NULL, то функция COALESCE вернет строку 'Нет значения'. 3. Использование выражения IS NULL: Оператор IS NULL используется для проверки, является ли значение NULL. Мы можем использовать его в сочетании с оператором CASE, чтобы выполнить определенные действия в случае, если значение равно NULL. Пример использования выражения IS NULL: SELECT column1, CASE WHEN column2 IS NULL THEN 0 ELSE column2 END FROM table; # Здесь, если значение column2 равно NULL, то оператор CASE вернет значение 0. 4. Использование функции ISNULL: Функция ISNULL является также альтернативой функции IFNULL и позволяет заменить значение NULL на указанное значение. Он принимает два аргумента: значение для проверки на NULL и значение, которое нужно использовать в случае, если первое значение равно NULL. Пример использования функции ISNULL: SELECT column1, ISNULL(column2, 0) FROM table; # Здесь, если значение column2 равно NULL, то функция ISNULL вернет значение 0. В завершение, эти примеры демонстрируют различные способы преобразования значений NULL в не-NULL значения в SQL. Выбор конкретного метода зависит от ваших требований и предпочтений. Каждый из представленных методов имеет свои особенности и применяется в различных ситуациях.