JavaRush /Курсы /SQL SELF /Построение простых запросов с SELECT, WHERE и ORDER BY

Построение простых запросов с SELECT, WHERE и ORDER BY

SQL SELF
3 уровень , 2 лекция
Открыта

Теперь пришло время объединить всё это в единое целое и научиться строить простые, но полезные запросы с использованием комбинации SELECT, WHERE и ORDER BY. Этот навык пригодится вам для множества задач, начиная от получения списков пользователей до составления небольших отчетов.

Прежде чем мы начнем, напомним, как выглядит структура простого SQL-запроса:

SELECT колонка1, колонка2, колонка3
FROM таблица
WHERE условие
ORDER BY колонка ASC
LIMIT количество_строк
OFFSET количество_строк;

Если SQL был бы литературным произведением, то SELECT — это заголовок главы, FROM — её содержание, а WHERE — объяснение сюжета. Ну а ORDER BY добавляет порядок, чтобы читать было интереснее!

Порядок операторов строго фиксирован. Опускать (не указывать) некоторые из них можно, менять порядок - нельзя.

Пример 1: Выбор имен студентов с отличными оценками

Представим, что у нас есть таблица students со следующей структурой и данными:

id name age grade
1 Otto 21 A
2 Maria 22 B
3 Alex 20 A
4 Nat 23 C
5 Dan 25 B

Вам нужно получить список всех студентов с отличной оценкой (то есть grade = 'A'), отсортированный по имени. Вот как мы это сделаем:

SELECT name
FROM students
WHERE grade = 'A'
ORDER BY name ASC;

Результат:

name
Alex
Otto

Объяснение:

  1. SELECT name — мы выбираем только имя. Незачем тратить ресурсы на извлечение данных, которые нам не нужны.
  2. WHERE grade = 'A' — фильтруем только тех, у кого отличная оценка.
  3. ORDER BY name ASC — сортируем имена студентов в алфавитном порядке.

Пример 2: Поиск товаров по цене

Теперь представим, что у нас есть таблица products с информацией о товарах:

id product_name category price
1 Смартфон Electronics 30000
2 Телевизор Electronics 45000
3 Холодильник Appliances 50000
4 Пылесос Appliances 15000
5 Лампочка Lighting 500

Наша задача — получить список товаров из категории "Electronics", отсортировав их по убыванию цены. Запрос будет выглядеть так:

SELECT product_name, price
FROM products
WHERE category = 'Electronics'
ORDER BY price DESC;

Результат:

product_name price
Телевизор 45000
Смартфон 30000

Объяснение:

  1. SELECT product_name, price — выбираем название товара и его цену.
  2. WHERE category = 'Electronics' — фильтруем только товары из категории "Electronics".
  3. ORDER BY price DESC — сортируем результаты по убыванию цены (самый дорогой товар будет первым).

Пример 3: Сложные фильтры с логикой

Используем ту же таблицу students. Допустим, нам нужно найти всех студентов старше 21 года, у которых оценка B или C, и отсортировать их по возрасту. Здесь мы комбинируем несколько условий:

SELECT name, age, grade
FROM students
WHERE age > 21 AND (grade = 'B' OR grade = 'C')
ORDER BY age ASC;

Результат:

name age grade
Maria 22 B
Nat 23 C
Dan 25 B

Объяснение:

  1. WHERE age > 21 — выбираем только студентов старше 21 года.
  2. AND (grade = 'B' OR grade = 'C') — фильтруем тех, у кого оценка либо B, либо C. Круглые скобки используются для группировки условий.
  3. ORDER BY age ASC — сортируем результат по возрасту, начиная с самого молодого.

Пример 4: Комбинирование сортировки и фильтрации

Возвращаемся к таблице products. Мы хотим найти товары дешевле 50 000, упорядочить их по категории, а внутри каждой категории — по цене (от самой низкой к самой высокой).

SELECT product_name, category, price
FROM products
WHERE price < 50000
ORDER BY category ASC, price ASC;

Результат:

product_name category price
Пылесос Appliances 15000
Смартфон Electronics 30000
Телевизор Electronics 45000
Лампочка Lighting 500

Объяснение:

  1. WHERE price < 50000 — сначала фильтруем товары, оставляя только те, которые дешевле 50 000.
  2. ORDER BY category ASC, price ASC — сортируем по категориям (в алфавитном порядке), а внутри каждой категории сортируем по возрастанию цены.

Пример 5: Частая ошибка — пропуск условий

Теперь посмотрим, что может пойти не так. Что если мы забудем поставить группировку условий, как в случае с логическими операторами?

Неправильный запрос:

SELECT name, age, grade
FROM students
WHERE age > 21 AND grade = 'B' OR grade = 'C'
ORDER BY age ASC;

Здесь OR grade = 'C' выполнится без учёта AND age > 21, и запрос вернёт не тот результат. Мы получим вывод всех, кто имеет оценку C, даже если они младше 21 года.

Поэтому всегда используйте скобки для ясности:

WHERE age > 21 AND (grade = 'B' OR grade = 'C')
2
Задача
SQL SELF, 3 уровень, 2 лекция
Недоступна
Фильтр и сортировка товаров
Фильтр и сортировка товаров
2
Задача
SQL SELF, 3 уровень, 2 лекция
Недоступна
Сложный фильтр студентов
Сложный фильтр студентов
Комментарии (3)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Вячеслав К. Уровень 4
6 октября 2025
Список полей можно посмотреть на вкладке init.sql
t0dzi Уровень 11
3 сентября 2025
😏
Anemon Уровень 13 Expert
24 июля 2025
🤓