-- 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;