CREATE TABLE Залы (
id SERIAL PRIMARY KEY, -- SERIAL для автоматического увеличения id
название VARCHAR(255) NOT NULL,
описание TEXT,
этаж INT
);
-- Создание таблицы "Экспонаты"
CREATE TABLE Экспонаты (
id SERIAL PRIMARY KEY, -- SERIAL для автоматического увеличения id
название VARCHAR(255) NOT NULL,
описание TEXT,
год_создания INT, -- YEAR в PostgreSQL нет, используем INT
автор VARCHAR(255),
зал_id INT,
FOREIGN KEY (зал_id) REFERENCES Залы(id)
);
-- Добавление данных в таблицу "Залы"
INSERT INTO Залы (название, описание, этаж)
VALUES
('Зал древностей', 'Экспонаты древних цивилизаций', 1),
('Зал живописи', 'Картины известных художников', 2),
('Зал скульптур', 'Скульптуры разных эпох', 1);
-- Добавление данных в таблицу "Экспонаты"
INSERT INTO Экспонаты (название, описание, год_создания, автор, зал_id)
VALUES
('Статуя Зевса', 'Древнегреческая статуя', -500, 'Фидий', 1),
('Мона Лиза', 'Портрет женщины', 1503, 'Леонардо да Винчи', 2),
('Венера Милосская', 'Античная скульптура', -100, 'Неизвестен', 3);
-- Примеры запросов
-- 1. Получить все экспонаты с указанием зала
SELECT Экспонаты.название, Экспонаты.описание, Залы.название AS зал
FROM Экспонаты
JOIN Залы ON Экспонаты.зал_id = Залы.id;
-- 2. Получить все экспонаты в конкретном зале (например, зал с id = 1)
SELECT * FROM Экспонаты
WHERE зал_id = 1;
-- 3. Переместить экспонат в другой зал (например, экспонат с id = 1 в зал с id = 2)
UPDATE Экспонаты
SET зал_id = 2
WHERE id = 1;
-- 4. Удалить экспонат (например, экспонат с id = 3)
DELETE FROM Экспонаты
WHERE id = 3;
-- 5. Получить список всех залов
SELECT * FROM Залы;
-- 6. Получить количество экспонатов в каждом зале
SELECT Залы.название, COUNT(Экспонаты.id) AS количество_экспонатов
FROM Залы
LEFT JOIN Экспонаты ON Залы.id = Экспонаты.зал_id
GROUP BY Залы.id;