Добавил:
ИВТ (советую зайти в "Несортированное") Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
13
Добавлен:
20.11.2024
Размер:
97.12 Кб
Скачать

Код

-- Создание таблиц

CREATE TABLE Categories (

category_id SERIAL PRIMARY KEY,

name VARCHAR(50) UNIQUE NOT NULL

);

CREATE TABLE Locations (

location_id SERIAL PRIMARY KEY,

name VARCHAR(100) NOT NULL

);

CREATE TABLE Status (

status_id SERIAL PRIMARY KEY,

status_name VARCHAR(50) UNIQUE NOT NULL

);

CREATE TABLE Employees (

employee_id SERIAL PRIMARY KEY,

name VARCHAR(100) NOT NULL

);

CREATE TABLE Items (

item_id SERIAL PRIMARY KEY,

description TEXT NOT NULL,

found_date DATE NOT NULL,

location_id INT REFERENCES Locations(location_id),

category_id INT REFERENCES Categories(category_id),

days_since_found INT

);

CREATE TABLE Reports (

report_id SERIAL PRIMARY KEY,

item_id INT REFERENCES Items(item_id),

employee_id INT REFERENCES Employees(employee_id),

status_id INT REFERENCES Status(status_id),

report_date DATE NOT NULL

);

-- Заполнение таблиц данными

-- Таблица Categories

INSERT INTO Categories (name) VALUES

('Одежда'),

('Электроника'),

('Документы'),

('Аксессуары'),

('Игрушки'),

('Прочее');

-- Таблица Locations

INSERT INTO Locations (name) VALUES

('Аэропорт'),

('Железнодорожный вокзал'),

('Торговый центр'),

('Парк'),

('Автовокзал'),

('Станция метро'),

('Автобусная остановка'),

('Стадион'),

('Библиотека'),

('Музей');

-- Таблица Status

INSERT INTO Status (status_name) VALUES

('Найдено'),

('В процессе возврата'),

('Возвращено владельцу'),

('Утеряно'),

('Передано в полицию');

-- Таблица Employees

INSERT INTO Employees (name) VALUES

('Иван Иванов'),

('Анна Петрова'),

('Ольга Смирнова'),

('Петр Сергеев'),

('Мария Кузнецова'),

('Виктор Соколов'),

('Юлия Федорова'),

('Алексей Морозов'),

('Екатерина Белова'),

('Дмитрий Громов');

-- Таблица Items

INSERT INTO Items (description, found_date, location_id, category_id) VALUES

('Черный зонт', '2023-10-01', 1, 4),

('Смартфон Samsung', '2023-10-02', 2, 2),

('Кошелек с документами', '2023-10-03', 3, 3),

('Серебряное кольцо', '2023-10-04', 4, 4),

('Игрушечная машинка', '2023-10-05', 5, 5),

('Сумка с одеждой', '2023-10-06', 6, 1),

('Ноутбук HP', '2023-10-07', 7, 2),

('Паспорт', '2023-10-08', 8, 3),

('Солнцезащитные очки', '2023-10-09', 9, 4),

('Книга', '2023-10-10', 10, 6);

-- Таблица Reports

INSERT INTO Reports (item_id, employee_id, status_id, report_date) VALUES

(1, 1, 1, '2023-10-01'),

(2, 2, 2, '2023-10-02'),

(3, 3, 1, '2023-10-03'),

(4, 4, 3, '2023-10-04'),

(5, 5, 1, '2023-10-05'),

(6, 6, 4, '2023-10-06'),

(7, 7, 1, '2023-10-07'),

(8, 8, 2, '2023-10-08'),

(9, 9, 1, '2023-10-09'),

(10, 10, 3, '2023-10-10');

Запросы

1. Получение всех найденных вещей с указанием места и категории.

SELECT Items.description, Locations.name AS location, Categories.name AS category

FROM Items

JOIN Locations ON Items.location_id = Locations.location_id

JOIN Categories ON Items.category_id = Categories.category_id;

2. Поиск вещей, которые найдены на станции метро.

SELECT description

FROM Items

JOIN Locations ON Items.location_id = Locations.location_id

WHERE Locations.name = 'Станция метро';

3. Получение всех отчетов с указанием вещи, статуса и сотрудника.

SELECT Reports.report_id, Items.description, Status.status_name, Employees.name AS employee, Reports.report_date

FROM Reports

JOIN Items ON Reports.item_id = Items.item_id

JOIN Status ON Reports.status_id = Status.status_id

JOIN Employees ON Reports.employee_id = Employees.employee_id;

4. Подсчет общего количества забытых вещей в каждой категории.

SELECT Categories.name, COUNT(Items.item_id) AS total_items

FROM Items

JOIN Categories ON Items.category_id = Categories.category_id

GROUP BY Categories.name;

5. Получение списка сотрудников и количества отчетов, созданных каждым из них.

SELECT Employees.name, COUNT(Reports.report_id) AS reports_count

FROM Employees

JOIN Reports ON Employees.employee_id = Reports.employee_id

GROUP BY Employees.name;

6. Список вещей, которые возвращены владельцам.

SELECT Items.description

FROM Items

JOIN Reports ON Items.item_id = Reports.item_id

JOIN Status ON Reports.status_id = Status.status_id

WHERE Status.status_name = 'Возвращено владельцу';

7. Поиск вещей, которые были найдены за последние 7 дней.

SELECT description

FROM Items

WHERE found_date >= CURRENT_DATE - INTERVAL '7 days';

8. Создание представления для всех вещей, найденных в аэропорту.

CREATE VIEW AirportFoundItems AS

SELECT description, found_date

FROM Items

JOIN Locations ON Items.location_id = Locations.location_id

WHERE Locations.name = 'Аэропорт';

9. Список всех вещей и количество дней с момента нахождения.

SELECT description, days_since_found

FROM Items;

10. Список всех статусов и количество вещей в каждом статусе.

SELECT Status.status_name, COUNT(Reports.report_id) AS count

FROM Reports

JOIN Status ON Reports.status_id = Status.status_id

GROUP BY Status.status_name;

11. Поиск всех вещей, которые были найдены сотрудником "Иван Иванов".

SELECT Items.description

FROM Items

JOIN Reports ON Items.item_id = Reports.item_id

JOIN Employees ON Reports.employee_id = Employees.employee_id

WHERE Employees.name = 'Иван Иванов';

12. Список всех вещей с указанием сотрудника, который их нашел.

SELECT Items.description, Employees.name AS employee

FROM Items

JOIN Reports ON Items.item_id = Reports.item_id

JOIN Employees ON Reports.employee_id = Employees.employee_id;

13. Список всех вещей, найденных в торговом центре.

SELECT description

FROM Items

JOIN Locations ON Items.location_id = Locations.location_id

WHERE Locations.name = 'Торговый центр';

14. Поиск всех вещей, которые еще не возвращены владельцам.

SELECT Items.description

FROM Items

JOIN Reports ON Items.item_id = Reports.item_id

JOIN Status ON Reports.status_id = Status.status_id

WHERE Status.status_name != 'Возвращено владельцу';

15. Получение списка вещей, отсортированных по дате нахождения (от новых к старым).

SELECT description, found_date

FROM Items

ORDER BY found_date DESC;

16. Выбор всех вещей, найденных в октябре 2023 года.

SELECT description

FROM Items

WHERE found_date BETWEEN '2023-10-01' AND '2023-10-31';

17. Получение всех отчетов с указанием текущего статуса.

SELECT Reports.report_id, Items.description, Status.status_name

FROM Reports

JOIN Items ON Reports.item_id = Items.item_id

JOIN Status ON Reports.status_id = Status.status_id;

18. Выбор всех вещей, у которых категория "Одежда".

SELECT description

FROM Items

JOIN Categories ON Items.category_id = Categories.category_id

WHERE Categories.name = 'Одежда';

19. Список всех уникальных категорий вещей.

SELECT DISTINCT name

FROM Categories;

20. Вывод списка всех мест и количество вещей, найденных в каждом из них.

SELECT Locations.name, COUNT(Items.item_id) AS item_count

FROM Locations

JOIN Items ON Locations.location_id = Items.location_id

GROUP BY Locations.name;

Соседние файлы в папке проект (утерянные вещи)