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


Билет 1. База данных «Факультет»
1. Создание таблицы
CREATE TABLE Students (
   StudentID  INTEGER PRIMARY KEY AUTOINCREMENT,
   FirstName  VARCHAR(20) NOT NULL,
   LastName   VARCHAR(30) NOT NULL,
   BirthDate  DATE,
   GroupName  VARCHAR(10)
);
2. Заполнение таблицы данными (≥ 5 записей)
INSERT INTO Students (FirstName, LastName, BirthDate, GroupName) VALUES
('Иван',    'Петров',    '2001-05-12', 'ИС-21'),
('Анна',    'Сидорова',  '1999-11-23', 'ИС-21'),
('Олег',    'Кузнецов',  '2002-03-08', 'ИС-22'),
('Мария',   'Иванова',   '2000-07-19', 'ИС-22'),
('Дмитрий', 'Смирнов',   '2003-01-30', 'ИС-21');
3. SQL-запросы
Все студенты, родившиеся после 2000 года (только FirstName, LastName, BirthDate):
SELECT FirstName, LastName, BirthDate
FROM Students
WHERE BirthDate > '2000-12-31';
-- вернёт: Иван, Олег, Дмитрий
4. Изменение данных
-- Обновить группу у студента №3
UPDATE Students SET GroupName = 'ИС-23' WHERE StudentID = 3;
 
-- Удалить студента №4
DELETE FROM Students WHERE StudentID = 4;
5. Связанная таблица и связь 1:М
CREATE TABLE Grades (
   GradeID    INTEGER PRIMARY KEY AUTOINCREMENT,
   StudentID  INTEGER NOT NULL,
   Subject    VARCHAR(50) NOT NULL,
   Grade      INTEGER CHECK (Grade BETWEEN 0 AND 100),
   FOREIGN KEY (StudentID) REFERENCES Students(StudentID)
);
 

Билет 2. База данных «Библиотека»
1. Создание таблицы
CREATE TABLE Books (
   BookID  INTEGER PRIMARY KEY AUTOINCREMENT,
   Title   VARCHAR(50) NOT NULL,
   Author  VARCHAR(50) NOT NULL,
   Year    DATE,
   Genre   VARCHAR(20)
);
2. Заполнение таблицы данными (≥ 5 записей)
INSERT INTO Books (Title, Author, Year, Genre) VALUES
('Метро 2033',                       'Дмитрий Глуховский', '2002-01-01', 'Фантастика'),
('Метро 2034',                       'Дмитрий Глуховский', '2009-01-01', 'Фантастика'),
('1984',                             'Джордж Оруэлл',      '1949-01-01', 'Антиутопия'),
('Гарри Поттер и философский камень','Джоан Роулинг',      '1997-01-01', 'Фэнтези'),
('Зулейха открывает глаза',          'Гузель Яхина',       '2017-01-01', 'Роман');
3. SQL-запросы
Все книги, выпущенные после 2015 года:
SELECT * FROM Books
WHERE Year > '2015-12-31';
-- вернёт: «Зулейха открывает глаза»
Книги конкретного автора:
SELECT * FROM Books
WHERE Author = 'Дмитрий Глуховский';
-- вернёт: «Метро 2033», «Метро 2034»
4. Изменение данных
-- Обновить жанр книги №3
UPDATE Books SET Genre = 'Сатира' WHERE BookID = 3;
 
-- Удалить книгу №2
DELETE FROM Books WHERE BookID = 2;
5. Связанная таблица и связь 1:М
CREATE TABLE Readers (
   ReaderID    INTEGER PRIMARY KEY AUTOINCREMENT,
   BookID      INTEGER NOT NULL,
   BorrowDate  DATE,
   ReturnDate  DATE,
   FOREIGN KEY (BookID) REFERENCES Books(BookID)
);
 

Билет 3. База данных «Интернет-магазин»
1. Создание таблицы
CREATE TABLE Products (
   ProductID  INTEGER PRIMARY KEY AUTOINCREMENT,
   Name       VARCHAR(30) NOT NULL,
   Price      REAL,
   Category   VARCHAR(20),
   Stock      INTEGER
);
2. Заполнение таблицы данными (≥ 5 записей)
INSERT INTO Products (Name, Price, Category, Stock) VALUES
('Ноутбук ASUS',         55000, 'Электроника',      10),
('Наушники JBL',          2500, 'Электроника',       0),
('Кофеварка Bosch',       8500, 'Бытовая техника',   5),
('Чехол для телефона',      80, 'Аксессуары',        0),
('Книга «1984»',           450, 'Книги',            20);
3. SQL-запросы
Товары дороже 100:
SELECT * FROM Products
WHERE Price > 100;
-- исключит «Чехол для телефона» (80)
Названия товаров, отсутствующих на складе (Stock = 0):
SELECT Name FROM Products
WHERE Stock = 0;
-- вернёт: «Наушники JBL», «Чехол для телефона»
4. Изменение данных
-- Добавить новый товар
INSERT INTO Products (Name, Price, Category, Stock)
VALUES ('Powerbank Xiaomi', 1990, 'Электроника', 15);
 
-- Указать новое количество для товаров, закончившихся на складе
UPDATE Products SET Stock = 8 WHERE Stock = 0;
5. Связанная таблица и связь 1:М
CREATE TABLE Orders (
   OrderID    INTEGER PRIMARY KEY AUTOINCREMENT,
   ProductID  INTEGER NOT NULL,
   OrderDate  DATE,
   FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
);
 

Билет 4. База данных «Больница»
Примечание: В задании опечатка: таблица называется «Paсients» (или PacientID) — поле и таблицу можно так и оставить, преподаватель проверяет логику, а не орфографию.
1. Создание таблицы
CREATE TABLE Pacients (
   PacientID     INTEGER PRIMARY KEY AUTOINCREMENT,
   Name          VARCHAR(30) NOT NULL,
   Diagnosis     VARCHAR(20),
   Registration  DATE
);
2. Заполнение таблицы данными (≥ 5 записей)
INSERT INTO Pacients (Name, Diagnosis, Registration) VALUES
('Иванов Иван',       'ОРВИ',     '2023-01-15'),
('Петрова Анна',      'Гастрит',  '2023-03-10'),
('Сидоров Олег',      'ОРВИ',     '2023-02-20'),
('Кузнецова Мария',   'Перелом',  '2023-05-02'),
('Смирнов Дмитрий',   'Гастрит',  '2023-04-18');
3. SQL-запросы
Пациенты с определённым диагнозом (например, «ОРВИ»):
SELECT * FROM Pacients
WHERE Diagnosis = 'ОРВИ';
-- вернёт: Иванов Иван, Сидоров Олег
Имена пациентов, сортированные по дате регистрации от новых к старым:
SELECT Name FROM Pacients
ORDER BY Registration DESC;
4. Изменение данных
-- Добавить новое поле для возраста
ALTER TABLE Pacients ADD COLUMN Age INTEGER;
 
-- Заполнить поле данными
UPDATE Pacients SET Age = 34 WHERE PacientID = 1;
UPDATE Pacients SET Age = 27 WHERE PacientID = 2;
UPDATE Pacients SET Age = 45 WHERE PacientID = 3;
UPDATE Pacients SET Age = 19 WHERE PacientID = 4;
UPDATE Pacients SET Age = 52 WHERE PacientID = 5;
5. Связанная таблица и связь 1:М
CREATE TABLE Doctors (
   DoctorID   INTEGER PRIMARY KEY AUTOINCREMENT,
   PacientID  INTEGER NOT NULL,
   Name       VARCHAR(30) NOT NULL,
   Specialty  VARCHAR(20),
   FOREIGN KEY (PacientID) REFERENCES Pacients(PacientID)
);
 

Билет 5. База данных «Автосалон»
1. Создание таблицы
CREATE TABLE Cars (
   CarID  INTEGER PRIMARY KEY AUTOINCREMENT,
   Brand  VARCHAR(20) NOT NULL,
   Model  VARCHAR(20) NOT NULL,
   Year   DATE,
   Price  REAL
);
2. Заполнение таблицы данными (≥ 5 записей)
INSERT INTO Cars (Brand, Model, Year, Price) VALUES
('Toyota', 'Camry',     '2022-01-01', 2500000),
('Toyota', 'Corolla',   '2014-01-01', 1200000),
('BMW',    'X5',        '2023-01-01', 6500000),
('BMW',    '3-Series',  '2012-01-01', 1800000),
('Lada',   'Vesta',     '2020-01-01',  900000);
3. SQL-запросы
Автомобили с годом выпуска новее 5 лет (от текущей даты):
SELECT * FROM Cars
WHERE Year > date('now', '-5 years');
-- вернёт: Toyota Camry, BMW X5
Сумма цен всех автомобилей определённой марки:
SELECT Brand, SUM(Price) AS TotalPrice
FROM Cars
WHERE Brand = 'Toyota'
GROUP BY Brand;
4. Изменение данных
-- Скидка 10% для автомобилей старше 10 лет
UPDATE Cars
SET Price = Price * 0.9
WHERE Year < date('now', '-10 years');
5. Связанная таблица и связь 1:М
CREATE TABLE Sales (
   SaleID    INTEGER PRIMARY KEY AUTOINCREMENT,
   CarID     INTEGER NOT NULL,
   Customer  VARCHAR(30) NOT NULL,
   Date      DATE,
   FOREIGN KEY (CarID) REFERENCES Cars(CarID)
);
 

Билет 6. База данных «Школа»
1. Создание таблицы
CREATE TABLE Pupils (
   PupilID    INTEGER PRIMARY KEY AUTOINCREMENT,
   FirstName  VARCHAR(20) NOT NULL,
   LastName   VARCHAR(30) NOT NULL,
   BirthDate  DATE,
   Class      INTEGER
);
2. Заполнение таблицы данными (≥ 5 записей)
INSERT INTO Pupils (FirstName, LastName, BirthDate, Class) VALUES
('Иван',    'Петров',   '2010-04-12', 9),
('Анна',    'Сидорова', '2017-08-23', 2),
('Олег',    'Кузнецов', '2009-11-05', 11),
('Мария',   'Иванова',  '2010-02-15', 9),
('Дмитрий', 'Смирнов',  '2018-06-30', 1);
3. SQL-запросы
Все девятиклассники:
SELECT * FROM Pupils
WHERE Class = 9;
-- вернёт: Иван Петров, Мария Иванова
Имена всех учеников младше 10 лет:
SELECT FirstName, LastName FROM Pupils
WHERE BirthDate > date('now', '-10 years');
-- вернёт: Анна Сидорова, Дмитрий Смирнов
4. Изменение данных
-- Удалить одиннадцатиклассников
DELETE FROM Pupils WHERE Class = 11;
 
-- Увеличить все классы на единицу
UPDATE Pupils SET Class = Class + 1;
5. Связанная таблица и связь 1:М
CREATE TABLE Marks (
   MarkID   INTEGER PRIMARY KEY AUTOINCREMENT,
   PupilID  INTEGER NOT NULL,
   Subject  VARCHAR(20) NOT NULL,
   Mark     INTEGER,
   FOREIGN KEY (PupilID) REFERENCES Pupils(PupilID)
);
 

Билет 7. База данных «Отель»
1. Создание таблицы
CREATE TABLE Rooms (
   RoomID  INTEGER PRIMARY KEY AUTOINCREMENT,
   Number  INTEGER,
   Price   REAL,
   Type    INTEGER,
   Floor   INTEGER
);
2. Заполнение таблицы данными (≥ 5 записей)
INSERT INTO Rooms (Number, Price, Type, Floor) VALUES
(101, 3000, 1, 1),
(205, 4500, 2, 2),
(310, 5200, 2, 3),
(412, 7000, 3, 4),
(501, 9000, 3, 5),
(15,    80, 1, 1);
3. SQL-запросы
Все номера дороже 100:
SELECT * FROM Rooms
WHERE Price > 100;
-- исключит номер 15 (80)
Количество номеров между 2 и 4 этажами:
SELECT COUNT(*) AS RoomsCount FROM Rooms
WHERE Floor BETWEEN 2 AND 4;
-- вернёт: 3
4. Изменение данных
-- Увеличить цену номеров на 1 этаже на 10%
UPDATE Rooms SET Price = Price * 1.10 WHERE Floor = 1;
 
-- Уменьшить цену номеров выше 4 этажа на 5%
UPDATE Rooms SET Price = Price * 0.95 WHERE Floor > 4;
5. Связанная таблица и связь 1:М
CREATE TABLE Booking (
   BookingID  INTEGER PRIMARY KEY AUTOINCREMENT,
   RoomID     INTEGER NOT NULL,
   GuestName  VARCHAR(20) NOT NULL,
   Date       DATE,
   FOREIGN KEY (RoomID) REFERENCES Rooms(RoomID)
);
 

Билет 8. База данных «Ресторан»
Примечание: В задании поле названо «Quanity» (опечатка вместо Quantity) — в ответе оставлено так же, как в задании.
1. Создание таблицы
CREATE TABLE Menu (
   DishID    INTEGER PRIMARY KEY AUTOINCREMENT,
   DishName  VARCHAR(20) NOT NULL,
   Price     REAL,
   Category  VARCHAR(10)
);
2. Заполнение таблицы данными (≥ 5 записей)
INSERT INTO Menu (DishName, Price, Category) VALUES
('Борщ',             350, 'Супы'),
('Цезарь',           420, 'Салаты'),
('Стейк',           1200, 'Горячее'),
('Тирамису',         380, 'Десерты'),
('Греческий салат',  390, 'Салаты');
3. SQL-запросы
Названия всех блюд по убыванию цены:
SELECT DishName FROM Menu
ORDER BY Price DESC;
Блюда, сгруппированные по категориям:
SELECT Category, GROUP_CONCAT(DishName, ', ') AS Dishes
FROM Menu
GROUP BY Category;
4. Изменение данных
-- Обновить цены блюд определённой категории (+10%)
UPDATE Menu
SET Price = Price * 1.10
WHERE Category = 'Салаты';
5. Связанная таблица и связь 1:М
CREATE TABLE Orders (
   OrderID    INTEGER PRIMARY KEY AUTOINCREMENT,
   DishID     INTEGER NOT NULL,
   Quanity    INTEGER,
   OrderDate  DATE,
   FOREIGN KEY (DishID) REFERENCES Menu(DishID)
);
 

Билет 9. База данных «Музыка»
Примечание: В задании поле «PlaylistName (число)» — судя по смыслу, это опечатка (название плейлиста логично должно быть строкой), но тип оставлен по заданию (INTEGER), при необходимости на экзамене можно поставить VARCHAR(20).
1. Создание таблицы
CREATE TABLE Songs (
   SongID    INTEGER PRIMARY KEY AUTOINCREMENT,
   Title     VARCHAR(20) NOT NULL,
   Artist    VARCHAR(20),
   Album     VARCHAR(20),
   Duration  INTEGER
);
2. Заполнение таблицы данными (≥ 5 записей)
INSERT INTO Songs (Title, Artist, Album, Duration) VALUES
('Imagine',            'John Lennon', 'Imagine',               183),
('Yesterday',          'The Beatles', 'Help!',                 125),
('Let It Be',          'The Beatles', 'Let It Be',             243),
('Bohemian Rhapsody',  'Queen',       'A Night at the Opera',  355),
('Hey Jude',           'The Beatles', 'Hey Jude',              431);
3. SQL-запросы
Песни определённого исполнителя:
SELECT * FROM Songs
WHERE Artist = 'The Beatles';
-- вернёт: Yesterday, Let It Be, Hey Jude
Песни, сгруппированные по альбомам:
SELECT Album, GROUP_CONCAT(Title, ', ') AS Songs
FROM Songs
GROUP BY Album;
4. Изменение данных
-- Добавить новое поле Date (год выпуска)
ALTER TABLE Songs ADD COLUMN Date DATE;
 
-- Заполнить поле для всех существующих песен
UPDATE Songs SET Date = '1971-01-01' WHERE SongID = 1;
UPDATE Songs SET Date = '1965-01-01' WHERE SongID = 2;
UPDATE Songs SET Date = '1970-01-01' WHERE SongID = 3;
UPDATE Songs SET Date = '1975-01-01' WHERE SongID = 4;
UPDATE Songs SET Date = '1968-01-01' WHERE SongID = 5;
5. Связанная таблица и связь 1:М
CREATE TABLE Playlist (
   PlaylistID    INTEGER PRIMARY KEY AUTOINCREMENT,
   SongID        INTEGER NOT NULL,
   PlaylistName  INTEGER,
   AddedDate     DATE,
   FOREIGN KEY (SongID) REFERENCES Songs(SongID)
);
 

Билет 10. База данных «Банк» (вариант 1)
1. Создание таблицы
CREATE TABLE Clients (
   ClientID   INTEGER PRIMARY KEY AUTOINCREMENT,
   FirstName  VARCHAR(20) NOT NULL,
   LastName   VARCHAR(30) NOT NULL,
   BirthDate  DATE,
   Branch     INTEGER
);
2. Заполнение таблицы данными (≥ 5 записей)
INSERT INTO Clients (FirstName, LastName, BirthDate, Branch) VALUES
('Иван',    'Петров',   '1985-04-12', 1),
('Анна',    'Сидорова', '1990-11-23', 2),
('Олег',    'Кузнецов', '1978-03-08', 1),
('Мария',   'Иванова',  '1995-07-19', 3),
('Дмитрий', 'Смирнов',  '1988-01-30', 2);
3. SQL-запросы
Количество клиентов определённого филиала:
SELECT COUNT(*) AS ClientsCount
FROM Clients
WHERE Branch = 1;
-- вернёт: 2
Клиенты, сгруппированные по филиалам:
SELECT Branch, GROUP_CONCAT(FirstName || ' ' || LastName, ', ') AS Clients
FROM Clients
GROUP BY Branch;
4. Изменение данных
-- Перенаправить клиентов филиала 1 в филиал 4
UPDATE Clients SET Branch = 4 WHERE Branch = 1;
 
-- Добавить новое поле Work (место работы)
ALTER TABLE Clients ADD COLUMN Work VARCHAR(30);
 
-- Заполнить поле данными
UPDATE Clients SET Work = 'ООО «Ромашка»'     WHERE ClientID = 1;
UPDATE Clients SET Work = 'ИП Сидорова'        WHERE ClientID = 2;
UPDATE Clients SET Work = 'АО «СтройИнвест»'   WHERE ClientID = 3;
UPDATE Clients SET Work = 'Школа №5'            WHERE ClientID = 4;
UPDATE Clients SET Work = 'ООО «ТехСервис»'     WHERE ClientID = 5;
5. Связанная таблица и связь 1:М
CREATE TABLE Accounts (
   AccountID  INTEGER PRIMARY KEY AUTOINCREMENT,
   ClientID   INTEGER NOT NULL,
   Balance    REAL,
   OpenDate   DATE,
   Status     BOOLEAN,
   FOREIGN KEY (ClientID) REFERENCES Clients(ClientID)
);
 

Билет 11. База данных «Социальная сеть»
1. Создание таблицы
CREATE TABLE Users (
   UserID            INTEGER PRIMARY KEY AUTOINCREMENT,
   Username          VARCHAR(20) NOT NULL,
   Email             VARCHAR(30),
   BirthDate         DATE,
   RegistrationDate  DATE
);
2. Заполнение таблицы данными (≥ 5 записей)
INSERT INTO Users (Username, Email, BirthDate, RegistrationDate) VALUES
('user1', 'user1@mail.ru', '1995-05-01', '2020-01-10'),
('user2', 'user2@mail.ru', '2010-09-15', '2023-06-01'),
('user3', 'user3@mail.ru', '1988-02-20', '2019-03-15'),
('user4', 'user4@mail.ru', '2012-12-01', '2024-01-01'),
('user5', 'user5@mail.ru', '1999-07-07', '2021-09-20');
3. SQL-запросы
Пользователи старше 25 лет:
SELECT * FROM Users
WHERE BirthDate < date('now', '-25 years');
-- вернёт: user1, user3, user5
Имена пользователей, отсортированные по дате регистрации от старых к новым:
SELECT Username FROM Users
ORDER BY RegistrationDate ASC;
4. Изменение данных
-- Удалить пользователей младше 18 лет
DELETE FROM Users
WHERE BirthDate > date('now', '-18 years');
 
-- Изменить дату регистрации всех (оставшихся) пользователей на сегодняшнюю
UPDATE Users SET RegistrationDate = date('now');
5. Связанная таблица и связь 1:М
CREATE TABLE Friends (
   FriendID    INTEGER PRIMARY KEY AUTOINCREMENT,
   UserID      INTEGER NOT NULL,
   FriendName  VARCHAR(20) NOT NULL,
   Date        DATE,
   FOREIGN KEY (UserID) REFERENCES Users(UserID)
);
 

Билет 12. База данных «Корпорация»
Примечание: В задании опечатка: «FisrtName» вместо «FirstName» — оставлено как в задании.
1. Создание таблицы
CREATE TABLE Employees (
   EmployeeID  INTEGER PRIMARY KEY AUTOINCREMENT,
   FisrtName   VARCHAR(20) NOT NULL,
   LastName    VARCHAR(30) NOT NULL,
   BirthDate   DATE
);
 
CREATE TABLE Staff (
   StaffID     INTEGER PRIMARY KEY AUTOINCREMENT,
   EmployeeID  INTEGER NOT NULL,
   JobTitle    VARCHAR(20),
   Department  VARCHAR(10),
   Salary      REAL,
   FOREIGN KEY (EmployeeID) REFERENCES Employees(EmployeeID)
);
2. Заполнение таблицы данными (≥ 5 записей)
INSERT INTO Employees (FisrtName, LastName, BirthDate) VALUES
('Иван',    'Петров',   '1985-03-10'),
('Анна',    'Сидорова', '2000-07-22'),
('Олег',    'Кузнецов', '1979-11-05'),
('Мария',   'Иванова',  '1998-02-14'),
('Дмитрий', 'Смирнов',  '1990-09-30');
 
INSERT INTO Staff (EmployeeID, JobTitle, Department, Salary) VALUES
(1, 'Менеджер',     'Продажи', 800),
(2, 'Аналитик',     'IT',      600),
(3, 'Директор',     'Продажи', 1500),
(4, 'Бухгалтер',    'Финансы', 450),
(5, 'Программист',  'IT',      900);
3. SQL-запросы
Сотрудники старше 30 лет:
SELECT * FROM Employees
WHERE BirthDate < date('now', '-30 years');
Названия должностей, сгруппированные по отделам:
SELECT Department, GROUP_CONCAT(JobTitle, ', ') AS Jobs
FROM Staff
GROUP BY Department;
4. Изменение данных
-- Запрос 1: сотрудники с зарплатой выше 500 (связанные таблицы)
SELECT e.FisrtName, e.LastName, s.Salary
FROM Employees e
JOIN Staff s ON e.EmployeeID = s.EmployeeID
WHERE s.Salary > 500;
 
-- Запрос 2: объединённая таблица должностей и сотрудников
SELECT e.FisrtName, e.LastName, s.JobTitle, s.Department, s.Salary
FROM Employees e
JOIN Staff s ON e.EmployeeID = s.EmployeeID;
 

Билет 13. База данных «Экзамен»
Примечание: В задании опечатка: «FisrtName» вместо «FirstName» — оставлено как в задании.
1. Создание таблицы
CREATE TABLE Students (
   StudentID  INTEGER PRIMARY KEY AUTOINCREMENT,
   FisrtName  VARCHAR(20) NOT NULL,
   LastName   VARCHAR(30) NOT NULL,
   GroupName  VARCHAR(10)
);
 
CREATE TABLE Subjects (
   SubjectID    INTEGER PRIMARY KEY AUTOINCREMENT,
   SubjectName  VARCHAR(20) NOT NULL,
   Credits      INTEGER
);
2. Заполнение таблицы данными (≥ 5 записей)
INSERT INTO Students (FisrtName, LastName, GroupName) VALUES
('Иван',    'Петров',   'ИС-21'),
('Анна',    'Сидорова', 'ИС-21'),
('Олег',    'Кузнецов', 'ИС-22'),
('Мария',   'Иванова',  'ИС-22'),
('Дмитрий', 'Смирнов',  'ИС-21');
 
INSERT INTO Subjects (SubjectName, Credits) VALUES
('Базы данных',       4),
('Программирование',  5),
('Математика',        3),
('Английский язык',   2),
('Сети',              3);
3. SQL-запросы
Студенты-отличники (результат экзамена ≥ 90):
SELECT s.FisrtName, s.LastName, e.Result
FROM Students s
JOIN Exams e ON s.StudentID = e.StudentID
WHERE e.Result >= 90;
Студенты и результаты экзаменов, сгруппированные по предметам:
SELECT sub.SubjectName, st.FisrtName, st.LastName, e.Result
FROM Exams e
JOIN Students st ON e.StudentID = st.StudentID
JOIN Subjects sub ON e.SubjectID = sub.SubjectID
ORDER BY sub.SubjectName;
5. Связанная таблица и связь 1:М
CREATE TABLE Exams (
   ExamID     INTEGER PRIMARY KEY AUTOINCREMENT,
   StudentID  INTEGER NOT NULL,
   SubjectID  INTEGER NOT NULL,
   Date       DATE,
   Result     INTEGER,
   FOREIGN KEY (StudentID) REFERENCES Students(StudentID),
   FOREIGN KEY (SubjectID) REFERENCES Subjects(SubjectID)
);
 
INSERT INTO Exams (StudentID, SubjectID, Date, Result) VALUES
(1, 1, '2026-01-15', 95),
(2, 1, '2026-01-15', 72),
(3, 2, '2026-01-16', 88),
(4, 2, '2026-01-16', 91),
(5, 3, '2026-01-17', 65);
 

Билет 14. База данных «Банк» (вариант 2, с транзакцией)
1. Создание таблицы
CREATE TABLE Clients (
   ClientID   INTEGER PRIMARY KEY AUTOINCREMENT,
   FirstName  VARCHAR(20) NOT NULL,
   LastName   VARCHAR(30) NOT NULL,
   BirthDate  DATE,
   Branch     INTEGER
);
 
CREATE TABLE Accounts (
   AccountID  INTEGER PRIMARY KEY AUTOINCREMENT,
   ClientID   INTEGER NOT NULL,
   Balance    REAL,
   OpenDate   DATE,
   Status     BOOLEAN,
   FOREIGN KEY (ClientID) REFERENCES Clients(ClientID)
);
2. Заполнение таблицы данными (≥ 5 записей)
INSERT INTO Clients (FirstName, LastName, BirthDate, Branch) VALUES
('Сергей',  'Орлов',    '1980-06-01', 1),
('Елена',   'Волкова',  '1992-09-12', 2),
('Андрей',  'Морозов',  '1975-12-25', 1),
('Татьяна', 'Лебедева', '1988-04-04', 3),
('Павел',   'Соколов',  '1999-10-10', 2);
 
INSERT INTO Accounts (ClientID, Balance, OpenDate, Status) VALUES
(1, 15000, '2015-01-10', 1),
(2,  5000, '2018-05-22', 1),
(3,     0, '2010-03-15', 0),
(4,  2000, '2020-07-19', 1),
(5,     0, '2012-11-30', 0);
3. SQL-запросы
Количество клиентов определённого филиала:
SELECT Branch, COUNT(*) AS ClientsCount
FROM Clients
WHERE Branch = 1
GROUP BY Branch;
Клиенты, у которых есть неактивные счета (Status = 0):
SELECT c.FirstName, c.LastName
FROM Clients c
JOIN Accounts a ON c.ClientID = a.ClientID
WHERE a.Status = 0;
-- вернёт: Андрей Морозов, Павел Соколов
4. Изменение данных
-- Транзакция: перевод 1000 со счёта №1 на счёт №2
BEGIN TRANSACTION;
 
UPDATE Accounts SET Balance = Balance - 1000 WHERE AccountID = 1;
UPDATE Accounts SET Balance = Balance + 1000 WHERE AccountID = 2;
 
COMMIT;
 

Билет 15. База данных «Маркет»
Примечание: В задании поле названо «Quanity» (опечатка вместо Quantity) — в ответе оставлено так же, как в задании.
1. Создание таблицы
CREATE TABLE Goods (
   ProductID    INTEGER PRIMARY KEY AUTOINCREMENT,
   ProductName  VARCHAR(20) NOT NULL,
   Price        REAL,
   Stock        INTEGER
);
2. Заполнение таблицы данными (≥ 5 записей)
INSERT INTO Goods (ProductName, Price, Stock) VALUES
('Хлеб',     45, 50),
('Молоко',   80, 30),
('Сыр',     350, 15),
('Конфеты', 250, 20),
('Кофе',    600, 10);
3. SQL-запросы
Список продуктов по убыванию цены:
SELECT ProductName FROM Goods
ORDER BY Price DESC;
Стоимость всех товаров (цена × количество):
SELECT ProductName, Price * Stock AS TotalValue
FROM Goods;
4. Изменение данных
-- Добавить поле Discount со значением по умолчанию 0
ALTER TABLE Goods ADD COLUMN Discount REAL DEFAULT 0;
 
-- Скидка 5% для товаров дороже 100
UPDATE Goods SET Discount = 5 WHERE Price > 100;
5. Связанная таблица и связь 1:М
CREATE TABLE Sales (
   SaleID     INTEGER PRIMARY KEY AUTOINCREMENT,
   ProductID  INTEGER NOT NULL,
   Quanity    INTEGER,
   Date       DATE,
   FOREIGN KEY (ProductID) REFERENCES Goods(ProductID)
);