SQLab
УчёбаПрактикаЗадачиАренаРейтинг
© 2026 SQLab · Ташкент
SQLab

Учите SQL прямо в браузере — ничего не нужно устанавливать.

Платформа

  • Учёба
  • Практика
  • Задачи
  • Арена
  • Рейтинг

Для кого

  • Студентам
  • Преподавателям
  • Университетам
© 2026 SQLab. Все права защищены.Сделано в Узбекистане для студентов.
УчёбаПрактикаЗадачиАренаРейтинг
0/26

Основы

  • Что такое база данных?
  • Первый SELECT
  • WHERE: отбор нужных строк
  • IN, BETWEEN, LIKE и NULL
  • Сортировка, LIMIT и DISTINCT

Вычисления

  • Выражения, функции и CASE
  • Работа с датами
  • COUNT, SUM, AVG, MIN, MAX
  • GROUP BY и HAVING

Соединение таблиц

  • Ключи и связи
  • INNER JOIN
  • LEFT JOIN и строки без пары
  • Несколько таблиц и self join

Сложные запросы

  • Подзапросы
  • UNION, INTERSECT, EXCEPT
  • WITH: именованные запросы
  • Оконные функции

Создание и изменение таблиц

  • CREATE TABLE: типы и ограничения
  • INSERT, UPDATE, DELETE
  • ALTER, DROP, TRUNCATE
  • Как правильно спроектировать базу

Профессиональный уровень

  • Индексы и EXPLAIN
  • Транзакции и ACID
  • VIEW: сохранённые запросы
  • Функции, процедуры, триггеры
  • Пользователи, права и резервные копии
Учёба/Сложные запросы

Подзапросы

1410 мин

Подзапрос (subquery) — запрос, записанный в скобках внутри другого запроса. Он выполняется первым и отдаёт результат внешнему запросу.

Подзапрос, возвращающий одно значение

«Преподаватели с зарплатой выше средней» — среднюю мы заранее не знаем, но база может её посчитать:

university· Попробуйте изменить
SELECT first_name, last_name, salary
FROM teachers
WHERE salary > (SELECT AVG(salary) FROM teachers)
ORDER BY salary DESC;

Подзапрос возвращает одно число, внешний запрос сравнивает с ним.

Подзапрос, возвращающий список: IN

«Студенты, получившие хотя бы одну оценку 95+»:

university· Попробуйте изменить
SELECT first_name, last_name
FROM students
WHERE id IN (SELECT student_id FROM grades WHERE score >= 95);

Если подзапрос возвращает несколько строк, используйте IN, а не =. С = база выдаст ошибку «subquery returns more than one row».

EXISTS — «есть ли?»

EXISTS истинно, если подзапрос вернул хотя бы одну строку. Обычно он ссылается на внешнюю строку:

shop· Попробуйте изменить
SELECT p.name
FROM products p
WHERE NOT EXISTS (SELECT 1 FROM order_items oi WHERE oi.product_id = p.id);

Товары, которые ни разу не продавались. SELECT 1 — неважно, что вернётся, важно лишь, есть ли строки.

Коррелированный подзапрос

Подзапрос использует значение внешней строки и выполняется заново для каждой строки. «Товары дороже средней цены в своей категории»:

shop· Попробуйте изменить
SELECT p.name, p.price
FROM products p
WHERE p.price > (SELECT AVG(x.price) FROM products x WHERE x.category_id = p.category_id);

Подзапрос во FROM

Результат можно использовать как временную таблицу. Ей обязательно даётся псевдоним:

shop· Попробуйте изменить
SELECT AVG(n) AS avg_orders
FROM (SELECT customer_id, COUNT(*) AS n FROM orders GROUP BY customer_id) t;
1Упражнение

Выведите name и credits предметов, у которых кредитов больше среднего.


2Упражнение

Сколько пассажиров совершили хотя бы одну поездку? Используйте IN или EXISTS.


Запомните

  • Одно значение — сравнение через =, >; список — через IN.
  • EXISTS / NOT EXISTS проверяют наличие строк.
  • Подзапросу во FROM обязательно нужен псевдоним.
Предыдущий урокНесколько таблиц и self joinСледующий урокUNION, INTERSECT, EXCEPT

Содержание

  • Подзапрос, возвращающий одно значение
  • Подзапрос, возвращающий список: IN
  • EXISTS — «есть ли?»
  • Коррелированный подзапрос
  • Подзапрос во FROM
  • Запомните
УчёбаПрактикаЗадачиАренаРейтинг

SQLab