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: сохранённые запросы
  • Функции, процедуры, триггеры
  • Пользователи, права и резервные копии
Учёба/Соединение таблиц

Несколько таблиц и self join

138 мин

Многие вопросы требуют не двух, а трёх-четырёх таблиц. А иногда таблицу нужно соединить с ней самой.

JOIN по цепочке

Каждый JOIN добавляет к результату ещё одну таблицу. Студент → группа → факультет:

university· Попробуйте изменить
SELECT s.first_name, s.last_name, g.name AS group_name, f.name AS faculty
FROM students s
JOIN study_groups g ON g.id = s.group_id
JOIN faculties f ON f.id = g.faculty_id
LIMIT 8;

Через промежуточную таблицу (M:N) — студент, предмет и оценка:

university· Попробуйте изменить
SELECT s.first_name, sub.name AS subject, gr.score
FROM grades gr
JOIN students s ON s.id = gr.student_id
JOIN subjects sub ON sub.id = gr.subject_id
ORDER BY gr.score DESC
LIMIT 8;

Для каждого JOIN пишется свой ON. Стройте цепочку по схеме: каждая следующая таблица должна соединяться с уже подключёнными.

Self join — таблица сама с собой

В базе company руководитель сотрудника хранится в той же таблице employees (manager_id). Чтобы увидеть сотрудника и его руководителя рядом, берём таблицу дважды с разными псевдонимами:

company· Попробуйте изменить
SELECT e.first_name AS employee, m.first_name AS manager
FROM employees e
JOIN employees m ON m.id = e.manager_id
LIMIT 8;

e — в роли сотрудника, m — в роли руководителя. Без псевдонимов такой запрос не написать.

Расчёт по нескольким таблицам

Четыре таблицы: строки заказов → заказы → товары → категории. Выручка каждой категории по доставленным заказам:

shop· Попробуйте изменить
SELECT c.name AS category, SUM(oi.quantity * oi.unit_price) AS revenue
FROM order_items oi
JOIN orders o ON o.id = oi.order_id
JOIN products p ON p.id = oi.product_id
JOIN categories c ON c.id = p.category_id
WHERE o.status = 'delivered'
GROUP BY c.name
ORDER BY revenue DESC;
1Упражнение

Выведите для каждой оценки значение score, first_name студента и название предмета (subjects.name).


2Упражнение

Для каждого сотрудника выведите его first_name и first_name его руководителя (для сотрудников, у которых он есть).


3Упражнение

Для каждой завершённой поездки выведите first_name водителя, model машины и fare.


Запомните

  • Каждая дополнительная таблица — ещё один JOIN … ON ….
  • Self join: одна таблица, два разных псевдонима.
  • Прежде чем писать запрос, найдите «путь» по схеме.
Предыдущий урокLEFT JOIN и строки без парыСледующий урокПодзапросы

Содержание

  • JOIN по цепочке
  • Self join — таблица сама с собой
  • Расчёт по нескольким таблицам
  • Запомните
УчёбаПрактикаЗадачиАренаРейтинг

SQLab