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 (адрес электронной почты).

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;
-- если строка есть в результате -> запись прошла успешно
-- если результат пустой -> записи в базе нет, баг подтверждён
Интерфейс SQL-клиента: слева дерево таблиц (users, enrollments, courses), в редакторе запрос SELECT с WHERE и ORDER BY, снизу таблица результатов

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

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

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

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

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

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

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

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

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

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

АЛюбое количество любых символов, в том числе ноль
БРовно один любой символ
ВНачало строки

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

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

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

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

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

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

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

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

АЗапрос вернёт не больше 5 строк
БСтроки будут отсортированы от самого большого id к самому маленькому
ВВернутся только столбцы id и name, остальные будут отброшены
ГЭто будут 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 непустой).

Критерий приёмки: запрос вида 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, затем добавь сортировку, затем ограничение числа строк.

✅ Готово, если: ответ раскрывает то, что просит критерий приёмки в задании выше.

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

Что дальше

Теперь вы умеете писать базовые запросы на выборку данных. В следующем уроке разберём функции для работы со строками и датами — они помогают отфильтровать записи за нужный период и не попасться на «глючные» проверки из-за регистра букв или лишних пробелов.

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

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