В прошлом уроке мы разобрали, из чего состоит база данных: таблицы, первичные и внешние ключи, типы данных. Теперь пора не просто читать схему, а реально доставать из базы нужные данные — писать SQL-запросы.
Чему научишься за этот урок:
— выбирать нужные столбцы и все столбцы через SELECT;
— фильтровать строки по условию через WHERE;
— искать по текстовому шаблону через LIKE;
— сортировать результат через ORDER BY;
— ограничивать число строк через LIMIT.
SELECT — выбрать данные
SELECT — команда, с которой начинается почти любой запрос на чтение данных. Она говорит базе: «выбери мне такие-то столбцы из такой-то таблицы».
Возьмём знакомую схему из прошлого урока: users(id, name), enrollments(id, user_id, course_id), courses(id, title). Для этого урока добавим в courses столбец price (цена курса), а в users — столбцы created_at (дата регистрации) и email (адрес электронной почты).
SELECT * FROM users; -- звёздочка означает: взять ВСЕ столбцы таблицы SELECT name, email FROM users; -- перечислены конкретные столбцы -> вернутся только они
Звёздочка * — «все столбцы». Если нужны не все, а только конкретные — перечисляем их через запятую после SELECT, до FROM.
WHERE — фильтрация по условию
WHERE — условие, которое оставляет только те строки, что ему соответствуют. Без WHERE запрос вернёт ВСЕ строки таблицы, что на реальной базе с тысячами записей почти всегда бесполезно.
SELECT * FROM users WHERE id = 5; -- вернёт только строку с id, равным 5 (или ни одной, если такого id нет)
LIKE — поиск по текстовому шаблону
LIKE — поиск по шаблону внутри текстового столбца. Знак % в шаблоне означает «любое количество любых символов» (в том числе ноль символов).
SELECT * FROM courses WHERE title LIKE '%Python%'; -- найдёт все курсы, где слово Python встречается в НАЗВАНИИ в любом месте: -- 'Python для начинающих', 'Основы Python', 'Курс по Python и Django'
ORDER BY — сортировка
ORDER BY — сортирует результат по указанному столбцу. По умолчанию сортировка по возрастанию (ASC), для сортировки по убыванию нужно явно указать DESC.
SELECT * FROM courses ORDER BY price DESC; -- курсы отсортированы от самого дорогого к самому дешёвому SELECT * FROM courses ORDER BY price; -- то же самое, но по возрастанию (ASC подразумевается по умолчанию)
LIMIT — ограничение числа строк
LIMIT — ограничивает, сколько строк вернёт запрос. Полезно, когда нужны не все данные, а, например, только несколько последних записей.
SELECT * FROM users ORDER BY id DESC LIMIT 5; -- 5 пользователей с самым большим id -> последние 5 зарегистрированных
Практический пример тестировщика
Тестировщик проверяет сценарий «пользователь записался на курс» и хочет подтвердить это напрямую в базе, не доверяя только ответу API (как обсуждали в прошлом уроке):
SELECT * FROM enrollments WHERE user_id = 123 AND course_id = 45; -- если строка есть в результате -> запись прошла успешно -- если результат пустой -> записи в базе нет, баг подтверждён

Итог:
— SELECT выбирает столбцы (звёздочка — все столбцы, либо перечисление конкретных);
— WHERE фильтрует строки по условию;
— LIKE ищет по текстовому шаблону, знак % — любое количество любых символов;
— ORDER BY сортирует (по умолчанию ASC — по возрастанию, DESC — по убыванию);
— LIMIT ограничивает число возвращаемых строк.
Контрольный вопрос. Что вернёт запрос SELECT * FROM users;?
Подсказка: Звёздочка после SELECT — вспомни, что она означает.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Зачем в запросе нужен WHERE?
Подсказка: В уроке прямо сказано, что без этого ключевого слова вернутся все строки таблицы.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Что означает знак % в шаблоне LIKE?
Подсказка: В уроке это объясняется прямо перед примером с ‘%Python%’.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Какая сортировка применяется по умолчанию в ORDER BY, если не указать DESC?
Подсказка: В уроке прямо сказано, что подразумевается по умолчанию.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Дан запрос: SELECT * FROM users ORDER BY id DESC LIMIT 5; Какие из утверждений про него верны (выбери все подходящие)?
Выберите все верные варианты.
Подсказка: Проверь каждое утверждение отдельно: одно из четырёх путает звёздочку с перечислением конкретных столбцов.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Какое ключевое слово ограничивает количество строк, возвращаемых запросом? Ответь одним словом по-английски, как в уроке.
Подсказка: Посмотри на последний из пяти разобранных в уроке операторов.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Задание. Нужно найти в таблице courses все курсы, где в названии есть слово «тест» в любом месте строки. Как называется оператор поиска по текстовому шаблону, который для этого нужен вместо обычного равенства в WHERE? Ответь одним словом.
Подсказка: Обычное равенство ищет точное совпадение всей строки, а не вхождение слова внутри неё.
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Задание. Дан запрос: SELECT * FROM courses ORDER BY price DESC LIMIT 1; Он должен вернуть один курс. Как описать цену этого курса по сравнению с остальными в таблице? Ответь коротко (одна-две фразы).
Подсказка: DESC — сортировка по убыванию, а LIMIT 1 оставляет только первую строку результата.
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Задание. Тестировщик хочет проверить сценарий: пользователь с id=7 записался на курс с id=12. Напиши SQL-запрос к таблице enrollments, который подтвердит или опровергнет этот факт, и объясни в 1-2 предложениях, как читать результат (пустой результат vs непустой).
Критерий приёмки: запрос вида SELECT * FROM enrollments WHERE user_id = 7 AND course_id = 12; (или эквивалентный по смыслу с этими двумя условиями через WHERE); объяснено, что непустой результат подтверждает наличие записи, а пустой — говорит о том, что записи в базе нет.
Подсказка: Это тот же практический пример, что и в уроке, просто с другими числами — используй WHERE с двумя условиями через AND.
✅ Готово, если: ответ раскрывает то, что просит критерий приёмки в задании выше.
Онлайн-проверка ответа появится позже
Задание. Тестировщику нужно получить из таблицы users трёх пользователей с email, содержащим ‘gmail’, отсортированных по дате регистрации (created_at) от самых новых к самым старым, и вернуть только первых трёх из них. Напиши один SQL-запрос, который решает эту задачу целиком, используя WHERE с LIKE, ORDER BY и LIMIT вместе, и кратко (1-2 предложения) объясни, зачем в этом запросе нужен именно такой порядок операторов.
Критерий приёмки: запрос вида SELECT * FROM users WHERE email LIKE ‘%gmail%’ ORDER BY created_at DESC LIMIT 3; (WHERE с LIKE и шаблоном ‘%gmail%’, ORDER BY created_at DESC, LIMIT 3 — все три условия присутствуют и в правильном по смыслу порядке); объяснено, что сначала данные фильтруются по условию, затем сортируются, и только потом обрезаются до нужного числа строк.
Подсказка: Задача требует объединить все пять операторов урока в одном запросе — начни с фильтрации по LIKE, затем добавь сортировку, затем ограничение числа строк.
✅ Готово, если: ответ раскрывает то, что просит критерий приёмки в задании выше.
Онлайн-проверка ответа появится позже
Что дальше
Теперь вы умеете писать базовые запросы на выборку данных. В следующем уроке разберём функции для работы со строками и датами — они помогают отфильтровать записи за нужный период и не попасться на «глючные» проверки из-за регистра букв или лишних пробелов.
