Извлечение и фильтрация данных: SELECT, FROM, WHERE, LIKE, IN
Данный материал носит информационно-обучающий характер и не является юридической или финансовой консультацией. Применение полученных знаний на практике требует соблюдения законодательства и этических норм. Ответственность за любые действия, предпринятые на основе информации из курса, лежит на вас.
В прошлых модулях мы разобрали роль антифрод-исследователя, типы мошенничества и их индикаторы. Теперь вы понимаете, что искать. Пришло время освоить инструменты, которые помогут это найти. В основе любой аналитической работы — умение извлекать и обрабатывать данные. Начнём с SQL — языка структурированных запросов, фундамента для работы с базами данных.
Зачем антифрод-исследователю SQL?
SQL — универсальный язык для работы с реляционными базами данных. Там хранится большая часть информации: транзакции, пользователи, их действия и многое другое. Для антифрод-исследователя SQL — это:
- Доступ к информации: Получайте нужные данные сами, без помощи разработчиков.
- Гибкость анализа: Создавайте кастомные выборки для детального изучения подозрительных операций.
- Эффективность: Быстро извлекайте большие объёмы данных для дальнейшей обработки.
Представьте: вам нужно проверить тысячи транзакций на аномалии. Вручную это невозможно. SQL автоматизирует процесс — достаточно задать нужные критерии.
Основы извлечения данных: SELECT и FROM
Самый базовый и часто используемый оператор в SQL — это SELECT. Он выбирает данные из одной или нескольких таблиц. Предложение FROM указывает, из какой таблицы брать данные.
Синтаксис:
SELECT column1, column2, ...
FROM table_name;
Или для выбора всех столбцов:
SELECT *
FROM table_name;
Пример:
Допустим, у нас есть таблица transactions (транзакции) со столбцами transaction_id, user_id, amount, status, transaction_time.
Чтобы получить все данные из этой таблицы:
SELECT *
FROM transactions;
Чтобы получить только идентификатор транзакции и сумму:
SELECT transaction_id, amount
FROM transactions;
Совет: Всегда начинайте с
SELECT *для новой таблицы, чтобы понять её структуру и доступные столбцы. Затем сужайте выборку до нужных данных.
Фильтрация данных: WHERE
Когда данных много, их нужно фильтровать по условиям. Для этого используем WHERE. Оно задаёт критерии, которым должны соответствовать строки для включения в результат.
Синтаксис:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
Примеры условий:
-
Равенство (
=):-- Выбрать все транзакции со статусом 'fraud' (мошенничество) SELECT * FROM transactions WHERE status = 'fraud'; -
Неравенство (
!=или<>):-- Выбрать все транзакции, которые НЕ являются 'success' (успешными) SELECT * FROM transactions WHERE status != 'success'; -
Больше/Меньше (
>,<,>=,<=):-- Выбрать транзакции на сумму более 10000 рублей SELECT * FROM transactions WHERE amount > 10000; -
Логические операторы (
AND,OR,NOT): Комбинируют несколько условий.-- Выбрать мошеннические транзакции на сумму более 5000 рублей SELECT * FROM transactions WHERE status = 'fraud' AND amount > 5000; -- Выбрать транзакции со статусом 'pending' (в ожидании) или 'failed' (неудачные) SELECT * FROM transactions WHERE status = 'pending' OR status = 'failed'; -- Выбрать все транзакции, кроме тех, что имеют статус 'success' и сумму менее 100 SELECT * FROM transactions WHERE NOT (status = 'success' AND amount < 100);
Поиск по шаблону: LIKE
Оператор LIKE ищет строки, соответствующие шаблону. Полезен, когда нужно найти частичные совпадения в текстовых полях, например, в email-адресах или именах.
Вместе с LIKE используйте подстановочные символы:
%(процент) – любая последовательность из нуля или более символов._(нижнее подчёркивание) – любой один символ.
Синтаксис:
SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE pattern;
Примеры:
-- Найти всех пользователей, чьи имена начинаются на 'Иван'
SELECT *
FROM users
WHERE name LIKE 'Иван%';
-- Найти все email-адреса в домене 'mail.ru'
SELECT *
FROM users
WHERE email LIKE '%@mail.ru';
-- Найти транзакции, в описании которых есть слово 'пополнение'
SELECT *
FROM transactions
WHERE description LIKE '%пополнение%';
-- Найти номера телефонов, которые начинаются с '79' и имеют ровно 11 цифр (например, 79XXXXXXXXX)
SELECT *
FROM users
WHERE phone_number LIKE '79_________'; -- 9 нижних подчеркиваний
Выбор из списка значений: IN
Оператор IN позволяет указать несколько возможных значений для столбца в условии WHERE. Это удобная альтернатива множеству операторов OR.
Синтаксис:
SELECT column1, column2, ...
FROM table_name
WHERE column_name IN (value1, value2, ...);
Пример:
-- Выбрать транзакции со статусом 'fraud', 'cancelled' (отменено) или 'refunded' (возвращено)
SELECT *
FROM transactions
WHERE status IN ('fraud', 'cancelled', 'refunded');
-- То же самое с использованием OR:
SELECT *
FROM transactions
WHERE status = 'fraud' OR status = 'cancelled' OR status = 'refunded';
Как видите, IN делает запрос читабельнее и короче, особенно при большом количестве значений.
Практическое задание
Представьте, вы работаете в крупном онлайн-магазине. Ваша задача: Найти все подозрительные транзакции за последний месяц, которые:
- Имеют статус "отклонено" (
declined) или "возврат" (refund). - Сумма транзакции превышает 5000 рублей.
- В описании транзакции (
description) встречается слово "подарок" или "бонус".
Используйте таблицу orders со столбцами: order_id, user_id, amount, status, description, order_date.
Попробуйте написать SQL-запрос, который выведет order_id, user_id и amount для таких транзакций.
-- Ваш SQL-запрос здесь
SELECT order_id, user_id, amount
FROM orders
WHERE (status IN ('declined', 'refund') AND amount > 5000)
AND (description LIKE '%подарок%' OR description LIKE '%бонус%');
Важно: В реальных базах данных названия столбцов и таблиц могут быть на русском языке или в другом формате. Всегда уточняйте схему базы данных, с которой работаете.
Вы только что освоили базовые, но крайне мощные инструменты для извлечения и фильтрации данных. Это первый шаг к тому, чтобы превратить сырые данные в полезную информацию для выявления мошенничества. Но что, если нам нужно не просто выбрать данные, а посчитать их количество, найти среднее значение или сумму? Об этом поговорим в следующем разделе, где освоим агрегацию данных.