Загрузка данных


-- 1. Удаляем старые таблицы, если вдруг уже созданы (чтобы не было ошибок)
DROP TABLE IF EXISTS enrollments;
DROP TABLE IF EXISTS students;
DROP TABLE IF EXISTS courses;

-- 2. Создаем таблицу студентов
CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL
);

-- 3. Создаем таблицу курсов
CREATE TABLE courses (
    id SERIAL PRIMARY KEY,
    title VARCHAR(100) NOT NULL,
    price DECIMAL(10, 2) NOT NULL
);

-- 4. Создаем связующую таблицу (отношение многие-ко-многим)
CREATE TABLE enrollments (
    student_id INT NOT NULL,
    course_id INT NOT NULL,
    enrollment_date DATE DEFAULT CURRENT_DATE,
    PRIMARY KEY (student_id, course_id),
    FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE,
    FOREIGN KEY (course_id) REFERENCES courses(id) ON DELETE CASCADE
);

-- 5. ЗАПОЛНЯЕМ таблицу студентов
INSERT INTO students (first_name, last_name, email) VALUES 
('Иван', 'Иванов', 'ivan@mail.ru'),
('Мария', 'Петрова', 'maria@mail.ru'),
('Алексей', 'Сидоров', 'alex@mail.ru'),
('Елена', 'Смирнова', 'elena@mail.ru');

-- 6. ЗАПОЛНЯЕМ таблицу курсов
INSERT INTO courses (title, price) VALUES 
('SQL для начинающих', 5000.00),
('Python-разработчик', 15000.00),
('Веб-дизайн', 8000.00),
('Java с нуля', 12000.00);

-- 7. ЗАПОЛНЯЕМ связующую таблицу (кто на какой курс записался)
INSERT INTO enrollments (student_id, course_id) VALUES 
(1, 1), -- Иван записался на SQL
(1, 2), -- Иван записался на Python
(2, 1), -- Мария записалась на SQL
(2, 3), -- Мария записалась на Веб-дизайн
(3, 4), -- Алексей записался на Java
(4, 2), -- Елена записалась на Python
(4, 3); -- Елена записалась на Веб-дизайн

-- 8. ПРОВЕРКА: Выводим список, кто на какие курсы записан
SELECT 
    s.first_name AS Имя,
    s.last_name AS Фамилия,
    c.title AS Курс,
    c.price AS Цена,
    e.enrollment_date AS Дата_записи
FROM enrollments e
JOIN students s ON e.student_id = s.id
JOIN courses c ON e.course_id = c.id
ORDER BY s.last_name;