Когда понятно, из чего состоит база данных — таблицы, первичные и внешние ключи, типы данных, — можно не просто читать схему, а реально доставать из базы нужные данные: писать 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 (адрес электронной почты). Все эти столбцы уже есть в готовом скрипте-песочнице из темы «Зачем тестировщику SQL. Таблицы, ключи, связи, типы данных».
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 (ответ API ещё не доказывает, что запись сохранилась в базе):
SELECT * FROM enrollments WHERE user_id = 123 AND course_id = 45; -- AND = «и»: должны выполниться оба условия -- если строка есть в результате -> запись прошла успешно -- если результат пустой -> записи в базе нет, баг подтверждён

Итог:
— 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 непустой).
Подсказка: Это тот же практический пример, что и в уроке, просто с другими числами — используй WHERE с двумя условиями через AND.
✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.
Онлайн-проверка ответа появится позже
Задание. Найди в таблице users пользователей, у которых в email есть ‘gmail’, отсортируй их от новых к старым по дате регистрации (created_at) и оставь первых трёх. Напиши один SQL-запрос и в 1–2 предложениях объясни, почему LIMIT в нём стоит последним.
Подсказка: Сначала отбери нужные строки, затем расставь их по порядку и только потом отрежь нужное количество — ключевые слова в запросе идут в этом же порядке.
✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.
Онлайн-проверка ответа появится позже
Что дальше
Теперь вы умеете писать базовые запросы на выборку данных. Дальше — новые приёмы работы с данными.
