Как выполнить фильтрацию данных в SQL-запросе с помощью WHERE?

«Как выполнить фильтрацию данных в SQL-запросе с помощью WHERE?» — вопрос из категории Базы данных, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основной оператор для фильтрации строк в SQL — WHERE. Он позволяет задавать условия, которым должны соответствовать возвращаемые записи.

Базовый синтаксис:

SELECT column1, column2
FROM table_name
WHERE condition;

Основные типы условий и операторов:

1. Операторы сравнения:

SELECT * FROM Products WHERE Price > 100;
SELECT * FROM Employees WHERE Department = 'Sales';
SELECT * FROM Orders WHERE Status <> 'Cancelled';

2. Логические операторы (AND, OR, NOT):

SELECT * FROM Customers 
WHERE Country = 'Germany' AND (City = 'Berlin' OR City = 'Munich');

3. Оператор LIKE для поиска по шаблону:

-- Найти имена, начинающиеся на 'A'
SELECT * FROM Users WHERE Name LIKE 'A%';
-- Найти email-адреса, содержащие '@gmail.com'
SELECT * FROM Users WHERE Email LIKE '%@gmail.com';

4. Операторы IN и BETWEEN:

-- Выбор из списка значений
SELECT * FROM Products WHERE CategoryID IN (1, 5, 7);
-- Выбор диапазона
SELECT * FROM Orders 
WHERE OrderDate BETWEEN '2024-01-01' AND '2024-01-31';

5. Проверка на NULL:

SELECT * FROM Customers WHERE PhoneNumber IS NULL;

Критически важное замечание по безопасности: При использовании SQL из кода приложения (например, C#) никогда не встраивайте значения напрямую в строку запроса (конкатенация). Всегда используйте параметризованные запросы для предотвращения SQL-инъекций.

Пример безопасного запроса в C#:

string sql = "SELECT * FROM Users WHERE Username = @username AND IsActive = @isActive";
using (var command = new SqlCommand(sql, connection))
{
    command.Parameters.AddWithValue("@username", userInputName);
    command.Parameters.AddWithValue("@isActive", true);
    // ... выполнение команды
}