Загрузка данных
Билет 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)
);