Как выбрать записи с нулевым значением в SQL

«Как выбрать записи с нулевым значением в SQL» — вопрос из категории Базы данных, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В SQL 0 (ноль) и NULL (отсутствие значения) — это разные сущности. Для выборки строк, где числовое поле равно именно нулю, используется простое сравнение.

Базовый запрос:

SELECT id, product_name, quantity
FROM inventory
WHERE quantity = 0;

Этот запрос вернет все товары, остаток которых равен нулю.

Если нужно включить и NULL: Часто в бизнес-логике NULL тоже трактуется как "отсутствие" или "ноль". В этом случае используется оператор IS NULL.

-- Выбрать товары, которых нет в наличии (quantity = 0 ИЛИ quantity IS NULL)
SELECT id, product_name, quantity
FROM inventory
WHERE quantity = 0 OR quantity IS NULL;

Работа с разными типами данных:

  • Для строковых полей (VARCHAR), где хранится числовое значение как текст, нужно сравнивать со строкой '0'.
  • В приложении на PHP при обработке результатов важно учитывать тип. $row['quantity'] может быть строкой '0', целым числом 0 или null.

Пример с PDO и явной проверкой:

$stmt = $pdo->prepare("SELECT * FROM products WHERE stock = :stock");
$stmt->execute(['stock' => 0]);
$zeroStockProducts = $stmt->fetchAll();

// Для обработки, где NULL тоже считается пустым
$stmt = $pdo->prepare("SELECT * FROM products WHERE COALESCE(stock, 0) = 0");
$stmt->execute();
$outOfStockProducts = $stmt->fetchAll();

Функция COALESCE(stock, 0) подменяет NULL на 0, что упрощает условие.