← Назад к вопросам

Что такое WHERE в SQL?

1.0 Junior🔥 271 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое WHERE в SQL?

WHERE — это ключевое слово (предложение) в языке SQL, которое используется для фильтрации записей (строк) в операциях выборки (SELECT), обновления (UPDATE), удаления (DELETE) и некоторых других. Его основная задача — ограничить набор данных, с которыми работает запрос, только теми строками, которые удовлетворяют определённому условию (логическому выражению).

Основная цель и синтаксис

Предложение WHERE всегда следует после указания таблицы (например, после FROM table_name в SELECT). Оно задаёт условие, которое вычисляется для каждой строки. Если условие возвращает TRUE, строка включается в результат или затрагивается операцией. Синтаксис базового запроса:

SELECT column1, column2
FROM table_name
WHERE condition;

Ключевые возможности и операторы

  • Операторы сравнения:
    *   `=` (равно)
    *   `<>` или `!=` (не равно)
    *   `>` (больше), `<` (меньше)
    *   `>=` (больше или равно), `<=` (меньше или равно)
```sql
SELECT * FROM users WHERE age >= 18;
```
  • Логические операторы (AND, OR, NOT): Позволяют комбинировать несколько условий.

    SELECT * FROM products
    WHERE category_id = 5 AND price < 1000
    OR (discount IS NOT NULL AND stock > 0);
    
  • Операторы для работы с диапазонами и множествами:

    *   `BETWEEN`: Проверка на вхождение в диапазон (включительно).
    ```sql
    SELECT * FROM orders WHERE total_amount BETWEEN 500 AND 5000;
    ```
    *   `IN`: Проверка на вхождение в список значений.
    ```sql
    SELECT * FROM cities WHERE country_id IN ('RU', 'BY', 'KZ');
    ```
  • Операторы для работы с текстом (строковые):
    *   `LIKE`: Поиск по шаблону (с использованием wildcards: `%` — любое количество символов, `_` — один символ).
    ```sql
    SELECT * FROM articles WHERE title LIKE '%PHP%';
    ```
    *   В современных СУБД также часто используются полнотекстовый поиск (`MATCH ... AGAINST`) и регулярные выражения (`REGEXP`).

  • Операторы для работы с NULL:
    *   `IS NULL`: Проверка на пустое значение.
    *   `IS NOT NULL`: Проверка на непустое значение.
```sql
SELECT * FROM employees WHERE department_id IS NOT NULL;
```

Важные аспекты использования в Backend-разработке (PHP)

  1. Безопасность и SQL-инъекции: Наиболее критичный момент. НИКОГДА не подставляйте переменные PHP напрямую в строку запроса.
    *   **Неправильно (опасно!):**
    ```php
    $sql = "SELECT * FROM users WHERE login = '$input_login'";
    ```
    *   **Правильно — использовать подготовленные выражения (Prepared Statements):**
    ```php
    $stmt = $pdo->prepare("SELECT * FROM users WHERE login = :login");
    $stmt->execute([':login' => $input_login]);
    ```
        Это полностью исключает риск SQL-инъекций, так как данные передаются отдельно от кода запроса.

  1. Производительность: Условие в WHERE — основа эффективного запроса.
    *   Для ускорения поиска по колонкам, указанным в `WHERE`, используются **индексы**. Запрос `SELECT * FROM users WHERE email = '...'` выполнится мгновенно, если на поле `email` есть уникальный индекс.
    *   Следует избегать использования функций или вычислений над индексированными колонками в условии, так как это может заставить СУБД игнорировать индекс (например, `WHERE YEAR(created_at) = 2024` вместо `WHERE created_at >= '2024-01-01'`).

  1. Читаемость и поддержка: Сложные условия с множеством AND/OR следует аккуратно форматировать и, если нужно, разбивать на части с использованием комментариев.

Пример в контексте PHP (PDO)

<?php
// Допустим, мы ищем активных пользователей из определённой страны, зарегистрированных после заданной даты.
$country = 'RU';
$registrationDate = '2023-01-01';
$isActive = true;

$sql = "
    SELECT id, username, email, created_at
    FROM users
    WHERE
        country_code = :country
        AND is_active = :isActive
        AND created_at > :regDate
    ORDER BY created_at DESC
";

$stmt = $pdo->prepare($sql);
$stmt->execute([
    ':country' => $country,
    ':isActive' => $isActive,
    ':regDate' => $registrationDate
]);

$users = $stmt->fetchAll(PDO::FETCH_ASSOC);

Итог

WHERE — это фундаментальный инструмент для точного и эффективного отбора данных в SQL. Для backend-разработчика критически важно не только понимать его синтаксис и операторы, но и обязательно применять подготовленные выражения для безопасности, а также учитывать влияние условий на использование индексов для обеспечения высокой производительности приложения. Умение грамотно составлять условия WHERE напрямую влияет на корректность, скорость работы и защищённость вашего PHP-приложения.

Что такое WHERE в SQL? | PrepBro