Загрузка данных
-- =====================================================
-- ЗАДАНИЯ 1-5 (единый скрипт)
-- =====================================================
-- ЗАДАНИЕ 1: Добавление нового курса и запись студентов (CRUD)
-- =====================================================
-- Добавление нового курса
INSERT INTO courses (title, instructor_id, price, duration_hours)
VALUES ('Введение в Data Science', 3, 15000.00, 30);
-- Запись первого студента
INSERT INTO enrollments (student_id, course_id, enroll_date)
VALUES (
(SELECT id FROM students WHERE email = 'ivan@example.com'),
(SELECT id FROM courses WHERE title = 'Введение в Data Science'),
CURRENT_DATE
);
-- Запись второго студента
INSERT INTO enrollments (student_id, course_id, enroll_date)
VALUES (
(SELECT id FROM students WHERE email = 'elena@example.com'),
(SELECT id FROM courses WHERE title = 'Введение в Data Science'),
CURRENT_DATE
);
-- Проверка задания 1
SELECT 'ЗАДАНИЕ 1: Проверка добавленного курса' AS task;
SELECT * FROM courses WHERE title = 'Введение в Data Science';
SELECT 'ЗАДАНИЕ 1: Проверка записей студентов на новый курс' AS task;
SELECT
s.full_name AS student_name,
c.title AS course_title,
e.enroll_date
FROM enrollments e
JOIN students s ON e.student_id = s.id
JOIN courses c ON e.course_id = c.id
WHERE c.title = 'Введение в Data Science';
-- =====================================================
-- ЗАДАНИЕ 2: Список студентов и их курсов (JOIN)
-- =====================================================
SELECT 'ЗАДАНИЕ 2: Студенты и курсы, на которые они записаны' AS task;
SELECT
s.full_name AS student_name,
c.title AS course_title,
e.enroll_date
FROM enrollments e
JOIN students s ON e.student_id = s.id
JOIN courses c ON e.course_id = c.id
ORDER BY s.full_name, e.enroll_date;
-- Проверка задания 2
SELECT 'ЗАДАНИЕ 2: Проверка - общее количество записей' AS task;
SELECT COUNT(*) AS total_enrollments FROM enrollments;
SELECT 'ЗАДАНИЕ 2: Проверка - количество студентов с курсами' AS task;
SELECT COUNT(DISTINCT student_id) AS students_with_courses FROM enrollments;
-- =====================================================
-- ЗАДАНИЕ 3: Средняя оценка по курсам (Агрегация)
-- =====================================================
SELECT 'ЗАДАНИЕ 3: Средняя оценка по курсам (только завершённые)' AS task;
SELECT
c.title AS course_title,
ROUND(AVG(e.final_grade), 2) AS average_grade,
COUNT(e.id) AS completed_students
FROM enrollments e
JOIN courses c ON e.course_id = c.id
WHERE e.final_grade IS NOT NULL
GROUP BY c.id, c.title
ORDER BY average_grade DESC;
-- Проверка задания 3
SELECT 'ЗАДАНИЕ 3: Проверка - оценки по курсу Основы SQL' AS task;
SELECT
s.full_name,
e.final_grade
FROM enrollments e
JOIN students s ON e.student_id = s.id
JOIN courses c ON e.course_id = c.id
WHERE c.title = 'Основы SQL'
AND e.final_grade IS NOT NULL;
SELECT 'ЗАДАНИЕ 3: Проверка - оценки по курсу Анализ данных в Excel' AS task;
SELECT
s.full_name,
e.final_grade
FROM enrollments e
JOIN students s ON e.student_id = s.id
JOIN courses c ON e.course_id = c.id
WHERE c.title = 'Анализ данных в Excel'
AND e.final_grade IS NOT NULL;
-- =====================================================
-- ЗАДАНИЕ 4: Курсы дороже среднего (Фильтрация с подзапросом)
-- =====================================================
SELECT 'ЗАДАНИЕ 4: Курсы дороже среднего' AS task;
SELECT
title,
price,
duration_hours
FROM courses
WHERE price > (SELECT AVG(price) FROM courses)
ORDER BY price DESC;
-- Проверка задания 4
SELECT 'ЗАДАНИЕ 4: Проверка - средняя цена всех курсов' AS task;
SELECT AVG(price) AS average_price FROM courses;
SELECT 'ЗАДАНИЕ 4: Проверка - все курсы с ценами' AS task;
SELECT title, price FROM courses ORDER BY price DESC;
-- =====================================================
-- ЗАДАНИЕ 5: Сортировка инструкторов по рейтингу
-- =====================================================
SELECT 'ЗАДАНИЕ 5: Инструкторы по убыванию рейтинга' AS task;
SELECT
full_name,
rating
FROM instructors
ORDER BY rating DESC;
-- Проверка задания 5
SELECT 'ЗАДАНИЕ 5: Проверка - инструктор с максимальным рейтингом' AS task;
SELECT full_name, rating
FROM instructors
WHERE rating = (SELECT MAX(rating) FROM instructors);
SELECT 'ЗАДАНИЕ 5: Проверка - инструктор с минимальным рейтингом' AS task;
SELECT full_name, rating
FROM instructors
WHERE rating = (SELECT MIN(rating) FROM instructors);