SELECT, WHERE, LIKE, ORDER BY, LIMIT — первые настоящие запросы

Когда понятно, из чего состоит база данных — таблицы, первичные и внешние ключи, типы данных, — можно не просто читать схему, а реально доставать из базы нужные данные: писать 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 = «и»: должны выполниться оба условия
-- если строка есть в результате -> запись прошла успешно
-- если результат пустой -> записи в базе нет, баг подтверждён
Интерфейс SQL-клиента: слева дерево таблиц (users, enrollments, courses), в редакторе запрос SELECT с WHERE и ORDER BY, снизу таблица результатов

Итог:
— SELECT выбирает столбцы (звёздочка — все столбцы, либо перечисление конкретных);
— WHERE фильтрует строки по условию;
— LIKE ищет по текстовому шаблону, знак % — любое количество любых символов;
— ORDER BY сортирует (по умолчанию ASC — по возрастанию, DESC — по убыванию);
— LIMIT ограничивает число возвращаемых строк.

Контрольный вопрос. Что вернёт запрос SELECT * FROM users;?

АТолько столбец id из таблицы users
БВсе столбцы всех строк таблицы users
ВТолько одну, первую строку таблицы users

Подсказка: Звёздочка после SELECT — вспомни, что она означает.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Зачем в запросе нужен WHERE?

АЧтобы оставить в результате только строки, соответствующие условию
БЧтобы ограничить число возвращаемых строк
ВЧтобы отсортировать результат по указанному столбцу

Подсказка: В уроке прямо сказано, что без этого ключевого слова вернутся все строки таблицы.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Что означает знак % в шаблоне LIKE?

АОбозначает начало строки в шаблоне поиска текста
БЛюбое количество символов, в том числе ноль
ВРовно один любой символ в этом месте строки

Подсказка: В уроке это объясняется прямо перед примером с ‘%Python%’.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Какая сортировка применяется по умолчанию в ORDER BY, если не указать DESC?

АПо возрастанию (ASC)
БПо убыванию (DESC)
ВСлучайная, каждый раз разная

Подсказка: В уроке прямо сказано, что подразумевается по умолчанию.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Дан запрос: SELECT * FROM users ORDER BY id DESC LIMIT 5; Какие из утверждений про него верны (выбери все подходящие)?

Выберите все верные варианты.

АЗапрос вернёт не больше 5 строк
БЕсли в таблице меньше 5 пользователей, запрос вернёт ошибку из-за LIMIT 5
ВСтроки будут отсортированы от самого большого id к самому маленькому
ГВернутся только столбцы id и name, остальные будут отброшены
ДLIMIT 5 отбирает 5 строк до сортировки, поэтому их порядок в результате случайный
ЕЭто будут 5 пользователей с самым большим id — то есть последние зарегистрированные

Подсказка: Проверь каждое утверждение отдельно: одно из четырёх путает звёздочку с перечислением конкретных столбцов.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Какое ключевое слово ограничивает количество строк, возвращаемых запросом? Ответь одним словом по-английски, как в уроке.

Подсказка: Посмотри на последний из пяти разобранных в уроке операторов.

Онлайн-проверка ответа появится позже

Задание. Нужно найти в таблице 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 в нём стоит последним.

Подсказка: Сначала отбери нужные строки, затем расставь их по порядку и только потом отрежь нужное количество — ключевые слова в запросе идут в этом же порядке.

✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.

Онлайн-проверка ответа появится позже

Что дальше

Теперь вы умеете писать базовые запросы на выборку данных. Дальше — новые приёмы работы с данными.

← Назад  ·  ↑ В начало урока  ·  ⌂ В начало курса  ·  Вперёд →

Школа Виктора Комлева