Как в SQL выбрать записи, где значение поля меньше заданного?

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

Ответ

Для выборки записей, где значение столбца меньше определенного, используется оператор сравнения < в условии WHERE.

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

SELECT * FROM `products` WHERE `price` < 1000;
-- Выберет все товары с ценой меньше 1000

Примеры с разными типами данных:

  • Числа: WHERE quantity < 5
  • Даты: WHERE created_at < '2024-01-01'
  • Строки (лексикографическое сравнение): WHERE name < 'M' (все имена, начинающиеся на A-L)

Реализация в PHP с использованием PDO (рекомендованный способ):

// 1. Установка соединения
$pdo = new PDO('mysql:host=localhost;dbname=my_db;charset=utf8mb4', 'user', 'pass');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// 2. Подготовленный запрос с параметром
$maxPrice = 1000;
$sql = "SELECT id, name, price FROM products WHERE price < :max_price AND active = 1";
$stmt = $pdo->prepare($sql);

// 3. Выполнение с привязкой значения
$stmt->execute([':max_price' => $maxPrice]);

// 4. Получение результатов
$cheapProducts = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($cheapProducts as $product) {
    echo $product['name'] . ': ' . $product['price'] . "n";
}

Ключевые моменты для оптимизации:

  1. Используйте подготовленные выражения (prepare/execute). Это защищает от SQL-инъекций и позволяет СУБД кэшировать план запроса.
  2. Добавьте индекс на столбец, используемый в условии WHERE. Для примера выше индекс INDEX(price) или INDEX(price, active) значительно ускорит выборку.
    ALTER TABLE `products` ADD INDEX `idx_price_active` (`price`, `active`);
  3. Ограничивайте выборку. Если таблица большая, используйте LIMIT или пагинацию.
    SELECT * FROM `products` WHERE `price` < 1000 LIMIT 20;