Значение NULL в SQL – неизвестное значение
Примечание:
Во всех статьях текущей категории уроков по SQL используются примеры и задачи, основанные на учебной базе данных.
Приступая к изучению данного материала, рекомендуется ознакомиться с описанием учебной БД.
Даже для небольших баз данных часто встречаются ситуации, когда значение какого-либо поля таблицы может быть неизвестно. Причины возникновения подобных ситуаций могут быть разными, начиная ошибками ПО и проектирования БД, заканчивая особенностями бизнес-процессов организации.
Если рассмотреть диаграмму таблицы сотрудников учебной БД, то можно заметить, что последний столбец диаграммы указывает возможность наличия неизвестных значение в конкретном поле, а именно:
- Отчество. Вполне возможно, что сотрудником является гражданин страны, где не используется отчество.
- Дата увольнения может отсутствовать, так как увольнения еще не было.
- Группа может быть неизвестна, потому что сотрудник может быть не распределен в группу на каком-то из этапов приема на работу.
Важно понять, что неизвестные (отсутствующие) значения – это не ноль (для числовых полей) и не пустая строка (для текстовых полей). Так как ноль является вполне конкретным значением, например, 0 рублей задолженности, а пустая строка сообщает о том, что на данный момент ничего кроме строки нулевой длины в поле строки быть не должно. В примере с отчеством, приведенном выше, вместо значения NULL можно задать пустую строку и это внесло бы дополнительную ясность, что отчество сотрудника нет в принципе, а не то, что его забыли внести.
Поиск отсутствующих значений
Выше было определено, что NULL не является конкретным значением, поэтому нужно понять, как операторы сравнения с ним будут работать. Никакое значение не может быть равно (также быть больше или меньше) неизвестному значению, даже условие NULL = NULL является ложным. Чтобы определить отсутствующее значения используется специальное условие IS NULL (является неизвестным). И наоборот, если требуется найти известные значения, то задается условие IS NOT NULL.
Рассмотрим задачу.
Найти всех сотрудников, которые были когда-либо уволены.
Решение.
Если в поле «Дата_увольнения» таблицы сотрудников отсутствует значение, то сотрудники работают на данный момент. Следовательно, нужно найти строки, где значение известно. Следующий sql-запрос выведет 7 строк, удовлетворяющих решению:
USE CallCenter SELECT * FROM Сотрудники WHERE Дата_увольнения IS NOT NULL
Решим еще одну задачу.
Вывести непринятые звонки за 1 декабря 2014 года.
Решение.
Звонок считается непринятым, если в таблице «Звонки» в поле «Сотрудник» отсутствует id принявшего звонок оператора. Отфильтровав таблицу по полям «Сотрудник» и «Дата_Время», получим 184 строки, удовлетворяющих запросу:
USE CallCenter SELECT * FROM Звонки WHERE Сотрудник IS NULL AND Дата_Время >= '01/12/2014 00:00:00' AND Дата_Время < '02/12/2014 00:00:00'
Обработка неизвестных значений
Если в своих запросах, Вы будете использовать поля, которые допускают значения NULL, то обязательно обрабатывайте такие поля, чтобы избежать ошибок. Например, любые арифметические операции или объединения строк, где в качестве аргумента будет хотя бы одно значение NULL, вернут неизвестное значение.
Рассмотрим пример.
Необходимо определить стаж работы каждого сотрудника, включая уволенных, на текущий момент. Стаж вывести в днях.
Для определения стажа необходимо найти интервал (разницу) между датой найма сотрудника и датой увольнения. Для этого можно использовать функцию DATEDIFF (ее описание можно найти в документации Microsoft). Но как быть с не уволенными сотрудниками, у которых отсутствует значение даты увольнения? Если выполнить ниже приведенный запрос, то можно убедиться, что большинство строк не покажут стаж:
USE CallCenter SELECT id, DATEDIFF(DAY, Дата_найма, Дата_увольнения) AS Стаж FROM Сотрудники
Поэтому обработаем поле «Дата_увольнения», применив функции ISNULL (если первый аргумент является NULL, то функция возвращает второй аргумент) и GETDATE (возвращает текущую системную дату и время). Следующий запрос выведет стаж в каждой строке:
USE CallCenter SELECT id, DATEDIFF(DAY, Дата_найма, ISNULL(Дата_увольнения, GETDATE())) AS Стаж FROM Сотрудники
- Объединение таблиц – UNION
- Соединение таблиц – операция JOIN и ее виды
- Тест на знание основ SQL
Если материалы office-menu.ru Вам помогли, то поддержите, пожалуйста, проект, чтобы я мог развивать его дальше.
MySQL SELECT только ненулевые значения
Можно ли сделать оператор select, который принимает только значения NOT NULL? Сейчас я использую это:
SELECT * FROM table
И тогда я должен отфильтровать нулевые значения в петле php. Есть ли способ сделать:
SELECT * (that are NOT NULL) FROM table
? Прямо сейчас, когда я выбираю *, я получаю val1, val2, val3, null, val4, val5, null, null и т.д., но я просто хочу получить значения, которые не равны нулю в моем результате. Возможно ли это без фильтрации с помощью цикла?
bryan sammon 12 март 2011, в 21:03
Поделиться
Что вы хотите, чтобы произошло, если есть строка, в которой некоторые столбцы имеют значения NULL, а другие столбцы не имеют значений NULL?
Mark Byers 12 март 2011, в 21:05
Я хотел бы получить только значения из столбцов, которые не являются нулевыми, и возвращать только значения столбцов в строке, которые не являются нулевыми. Прямо сейчас я использую цикл, чтобы отфильтровать их, возможно ли это сделать без цикла?
bryan sammon 12 март 2011, в 21:08
@bryan - Какая у вас структура таблицы? Все ли столбцы имеют одинаковый тип данных?
Martin Smith 12 март 2011, в 21:10
Да, все они имеют тип текстового значения
bryan sammon 12 март 2011, в 21:10
@bryan - Итак, как бы выглядел ваш идеальный набор результатов? Набор результатов из одного столбца, содержащий все ненулевые значения? Если не редактировать свой вопрос с примерами данных и желаемых результатов, будет полезно .
Martin Smith 12 март 2011, в 21:15
Да, я просто хотел бы получить все значения, которые не являются нулевыми из этой строки.
bryan sammon 12 март 2011, в 21:18
Что ж, вы могли бы сделать это с помощью UNION . WHERE coln IS NOT NULL но при этом таблица будет сканироваться один раз для каждого столбца. В MySQL нет оператора UNPIVOT который бы здесь помог. Поэтому, вероятно, наиболее эффективным способом было бы сделать это в вашем коде. Лучшее, что вы можете сделать, это исключить строки, где все столбцы имеют NULL . Вы уверены, что структура вашего стола нормализована?
Martin Smith 12 март 2011, в 21:23
Я не уверен насчет нормализации. Что нормализуется?
bryan sammon 12 март 2011, в 21:27
@ Брайан - Похоже, ваша таблица может иметь повторяющиеся группы по столбцам? (См. Статью Wiki для объяснения и предлагаемой альтернативной структуры, если это так. En.wikipedia.org/wiki/First_normal_form )
Martin Smith 12 март 2011, в 21:30
Спасибо мужчина, я собираюсь разобраться в этом
bryan sammon 12 март 2011, в 21:33
Показать ещё 8 комментариев
Поделиться:
7 ответов
Лучший ответ
Вы должны использовать IS NOT NULL . (Операторы сравнения = и <> обе дают UNKNOWN с NULL по обе стороны от выражения.)
SELECT * FROM table WHERE YourColumn IS NOT NULL;
Просто для полноты. Я упомянул, что в MySQL вы также можете отрицать null безопасный оператор равенства, но это не стандартный SQL.
SELECT * FROM table WHERE NOT (YourColumn NULL);
Отредактировано для отражения комментариев. Похоже, что ваша таблица может быть не в первой нормальной форме, и в этом случае изменение структуры может облегчить вашу задачу. Несколько других способов сделать это, хотя.
SELECT val1 AS val FROM your_table WHERE val1 IS NOT NULL UNION ALL SELECT val2 FROM your_table WHERE val2 IS NOT NULL /*And so on for all your columns*/
Недостатком вышеизложенного является то, что он сканирует таблицу несколько раз один раз для каждого столбца. Этого можно избежать из-за ниже, но я не тестировал это в MySQL.
SELECT CASE idx WHEN 1 THEN val1 WHEN 2 THEN val2 END AS val FROM your_table /*CROSS JOIN*/ JOIN (SELECT 1 AS idx UNION ALL SELECT 2) t HAVING val IS NOT NULL /*Can reference alias in Having in MySQL*/
Не показывать нулевые значения
Здравствуйте, помогите пожалуйста. (Microsoft SQL Server) Вывести из clients ФИО, значение контакта , условие: 0 значения не показывать.
Вот мой код, но нулевые значения показываются, помогите пожалуйста исправить.
1 2 3 4 5
/* вывести из clients ФИО, значение контакта , условие: 0 значения не показывать. */ SELECT client_name, cc_name, CLIENT_FIRST_APPEAL FROM clients INNER JOIN client_contacts ON CC_CLIENT_ID = client_id ORDER BY CLIENT_FIRST_APPEAL
Если нужны подробности что находится в таблицах, напишите.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как вывести нулевые значения в запросе?
Нужно вывести для каждого сборщика кол-во просроченных заказов, но я столкнулся с проблемой, что не.

Пропустить нулевые значения до первого значения больше нуля
Доброго времени суток. Такой вопрос есть ли функция расчета примера: 55,100 0 0 100,3 0 0 0.

Как показывать текст в зависимости от ид и значения
Подскажите пожалуйста, как в зависимости от значения показывать текст, а если значение не.
Как вывести ненулевые значения SQL

SQL (Structured Query Language) является одним из самых популярных языков программирования для работы с реляционными базами данных. Одной из распространенных задач при работе с SQL-запросами является вывод только ненулевых значений из базы данных. В этой статье мы рассмотрим несколько эффективных методов и решений для решения этой задачи.
Первым методом является использование оператора SQL WHERE для фильтрации данных. Оператор WHERE позволяет задать условие, которое должно быть выполнено для вывода данных. В случае вывода только ненулевых значений, условие может быть следующим: WHERE column_name IS NOT NULL. Это условие позволит исключить значения, равные NULL, и вывести только ненулевые значения.
Еще одним эффективным методом является использование функции SQL COALESCE. Функция COALESCE позволяет выбрать первое ненулевое значение из списка аргументов. Например, в запросе SELECT COALESCE(column_name, 0) AS column_alias FROM table_name;, функция COALESCE будет возвращать ненулевое значение столбца column_name, если оно существует, иначе будет возвращено значение 0.
Иногда ненулевые значения могут быть записаны в виде пустых строк или других символов. В таких случаях можно использовать функцию SQL TRIM для удаления лишних символов и затем применить оператор WHERE для фильтрации только ненулевых значений. Например, запрос SELECT column_name FROM table_name WHERE TRIM(column_name) != »; позволяет выбрать только ненулевые значения столбца column_name, удалив при этом пустые строки.
Методы для получения ненулевых значений в SQL
При работе с базами данных SQL нетрудно столкнуться с необходимостью получения только ненулевых значений. В этой статье рассмотрены несколько эффективных методов получения ненулевых значений в SQL.
1. Использование условия WHERE
Простейшим и наиболее распространенным способом получения ненулевых значений является использование условия WHERE. Это позволяет отфильтровать строки, содержащие нулевые значения определенной колонки. Например, следующий запрос выберет все ненулевые значения из колонки «имя» в таблице «пользователи»:
SELECT имяFROM пользователи
WHERE имя IS NOT NULL;
2. Использование функции COALESCE
Функция COALESCE также может быть использована для получения ненулевых значений. Она возвращает первое ненулевое значение из списка аргументов. Если все аргументы нулевые, она возвращает NULL. С помощью этой функции можно выполнить такой запрос:
SELECT COALESCE(имя, 'Нет имени')FROM пользователи;
Данный запрос вернет все значения из колонки «имя», заменяя нулевые значения на строку «Нет имени».
3. Использование оператора ISNULL
Оператор ISNULL позволяет заменить нулевое значение на другое значение. Он принимает два аргумента: проверяемое значение и значение, которым нужно заменить нулевое значение. Пример использования оператора ISNULL:
SELECT ISNULL(имя, 'Нет имени')FROM пользователи;
Этот запрос вернет все значения из колонки «имя», заменяя нулевые значения на строку «Нет имени».
4. Использование функции NULLIF
Функция NULLIF позволяет сравнить два значения и вернуть NULL, если они равны. Она принимает два аргумента: первое значение и второе значение. Пример использования функции NULLIF:
SELECT NULLIF(имя, 'Нет имени')FROM пользователи;
Этот запрос вернет все значения из колонки «имя», заменяя значения, равные строке «Нет имени», на NULL.
5. Использование подзапросов
Для более сложных случаев можно использовать подзапросы для получения ненулевых значений. Например, следующий запрос вернет все ненулевые значения из колонки «имя», где колонка «возраст» больше 18:
SELECT имяFROM пользователи
WHERE возраст > 18 AND имя IS NOT NULL;
Это позволяет объединить несколько условий для получения нужных результатов.
В заключение, существует несколько способов получения ненулевых значений в SQL. Выбор метода зависит от конкретной задачи и предпочтений разработчика. Каждый из этих методов может быть эффективным в определенных ситуациях.
а) Использование оператора SELECT с условием WHERE
Один из самых простых и эффективных способов вывести ненулевые значения в SQL — использование оператора SELECT с условием WHERE. Для этого необходимо указать столбец, который нужно проверить на нулевое значение, а затем добавить условие WHERE, указав, что значение этого столбца не равно NULL.
SELECT column_nameFROM table_name
WHERE column_name IS NOT NULL;
В данном примере мы выбираем значения из столбца column_name таблицы table_name, при условии, что значение этого столбца не равно NULL. Таким образом, будут выведены только ненулевые значения.
Оператор IS NOT NULL используется для проверки значения на NULL. Когда значение столбца равно NULL, оператор IS NOT NULL возвращает false, и такие значения не будут выбраны.
Этот метод легко применить для различных сценариев, где необходимо учитывать только ненулевые значения. Например, если мы хотим вывести список клиентов, у которых указан номер телефона, мы можем использовать следующий SQL-запрос:
SELECT customer_name, phone_numberFROM customers
WHERE phone_number IS NOT NULL;
В данном примере мы выбираем имена клиентов и номера телефонов из таблицы customers, при условии, что номер телефона не равен NULL. Таким образом, будут выведены только клиенты с ненулевыми номерами телефонов.
b) Применение функции IS NOT NULL
Еще один эффективный способ вывести ненулевые значения в SQL — это использование функции IS NOT NULL. Она позволяет проверить, является ли значение столбца ненулевым.
Синтаксис запроса с использованием функции IS NOT NULL выглядит следующим образом:
WHERE column_name IS NOT NULL;
Здесь column_name — это название столбца, в котором нужно проверить наличие ненулевых значений, а table_name — название таблицы, в которой находится этот столбец.
Например, если мы хотим вывести все ненулевые значения столбца «name» из таблицы «users», мы можем использовать следующий запрос:
WHERE name IS NOT NULL;
Этот запрос вернет все строки, в которых значение столбца «name» не равно NULL.
Функция IS NOT NULL особенно полезна, если мы хотим исключить нулевые значения при выполнении различных вычислений и операций над данными.
Применение функции IS NOT NULL позволяет значительно упростить запросы и получить только нужные нам данные, избегая при этом ненужных null-значений.
Решения для фильтрации ненулевых значений в SQL
Фильтрация ненулевых значений является распространенной задачей в SQL. В этом разделе рассмотрим несколько эффективных методов и решений, которые помогут выбрать только ненулевые записи из базы данных.
Использование оператора IS NOT NULL
Один из простых способов фильтрации ненулевых значений в SQL — использование оператора IS NOT NULL. Этот оператор используется в предложении WHERE для проверки, что значение столбца не равно NULL.
SELECT *
FROM table_name
WHERE column_name IS NOT NULL;
Использование функции COALESCE
Функция COALESCE позволяет выбрать первое ненулевое значение из списка. Это может быть полезно, когда необходимо выбрать значение из нескольких столбцов или выражений.
SELECT COALESCE(column1, column2, . )
FROM table_name;
Использование предиката NOT NULL
NOT NULL является предикатом, который можно использовать для фильтрации ненулевых значений. Этот предикат можно использовать в предложении WHERE для проверки, что значение столбца не равно NULL.
SELECT *
FROM table_name
WHERE column_name NOT NULL;
Использование оператора <> или !=
Операторы <> и != используются для сравнения значений столбцов и проверки на неравенство. Их можно использовать для фильтрации ненулевых значений.
SELECT *
FROM table_name
WHERE column_name <> NULL;
-- или
WHERE column_name != NULL;
Использование функции NULLIF
Функция NULLIF позволяет заменить значение столбца на NULL, если оно равно определенному значению. Это можно использовать для фильтрации ненулевых значений, заменяя их на NULL.
SELECT NULLIF(column_name, 0)
FROM table_name;
Это были некоторые из способов фильтрации ненулевых значений в SQL. Выберите метод, который наиболее подходит для вашей конкретной задачи и используйте его в своих запросах.
Использование оператора CASE WHEN
Оператор CASE WHEN позволяет выполнить условное присваивание значения столбцу в зависимости от различных условий. В рамках задачи по выводу ненулевых значений SQL данный оператор может быть очень полезным.
Синтаксис оператора CASE WHEN выглядит следующим образом:
CASE
WHEN условие1 THEN значение1
WHEN условие2 THEN значение2
.
ELSE значение_по_умолчанию
END
Оператор CASE WHEN может использоваться для вывода ненулевых значений с помощью проверки условий на ноль. Например, если необходимо вывести только положительные значения из столбца price:
SELECT
CASE WHEN price > 0 THEN price ELSE 0 END AS positive_price
FROM
products;
Таким образом, в результате будут выведены только те значения, которые больше нуля, а остальные будут заменены нулем.
Оператор CASE WHEN также может быть использован для проверки на подотчетное значение (NULL) и замены его на другое значение. Например, если необходимо заменить подотчетные значения в столбце quantity на значение «Н/Д»:
SELECT
CASE WHEN quantity IS NULL THEN 'Н/Д' ELSE quantity END AS quantity_with_default
FROM
products;
В результате подотчетные значения будут заменены на строку «Н/Д», а все остальные значения останутся без изменений.
Вопрос-ответ
Как вывести ненулевые значения из таблицы в SQL?
Для вывода ненулевых значений из таблицы в SQL можно использовать оператор WHERE в комбинации с оператором IS NOT NULL. Например, SELECT * FROM таблица WHERE столбец IS NOT NULL;
Как вывести только те строки, где значение столбца больше нуля?
Для вывода только тех строк, где значение столбца больше нуля, можно использовать оператор WHERE и операторы сравнения. Например, SELECT * FROM таблица WHERE столбец > 0;
Как вывести только уникальные ненулевые значения?
Для вывода только уникальных ненулевых значений можно использовать оператор DISTINCT в комбинации с оператором WHERE IS NOT NULL. Например, SELECT DISTINCT столбец FROM таблица WHERE столбец IS NOT NULL;
Как вывести количество ненулевых значений в столбце?
Для вывода количества ненулевых значений в столбце можно использовать функцию COUNT в комбинации с оператором WHERE IS NOT NULL. Например, SELECT COUNT(*) FROM таблица WHERE столбец IS NOT NULL;
Как вывести ненулевые значения из нескольких столбцов?
Для вывода ненулевых значений из нескольких столбцов можно использовать оператор WHERE в комбинации с оператором IS NOT NULL и оператором OR для каждого столбца. Например, SELECT * FROM таблица WHERE столбец1 IS NOT NULL OR столбец2 IS NOT NULL;
