Создание таблицы Auto
CREATE TABLE auto( autoID int not null Primary key IDENTITY(1,1), regNumber char(6) UNIQUE, markID int, varv varchar(20), v_aasta int, kaigukastID int, km decimal(6,2) ); SELECT * FROM auto
Создание таблицы Mark и заполнение
CREATE TABLE mark( markID int not null Primary key IDENTITY(1,1), autoMark varchar(30) UNIQUE );

Создание таблицы kaigukast
CREATE TABLE kaigukast( kaigukastID int not null Primary key IDENTITY(1,1), kaigukast varchar(30) UNIQUE ); INSERT INTO kaigukast(kaigukast) VALUES ('Automaat'); INSERT INTO kaigukast(kaigukast) VALUES ('Manual'); SELECT * FROM kaigukast;

Добавление вторичных ключей
ALTER TABLE auto ADD FOREIGN KEY (markID) REFERENCES mark(markID); ALTER TABLE auto ADD FOREIGN KEY (kaigukastID) REFERENCES kaigukast(kaigukastID);
Создание таблицы клиент
CREATE TABLE klient( klientID int not null Primary key IDENTITY(1,1), kliemdiNimi varchar(50), telefon varchar(20), aadress varchar(50), soiduKogemus varchar(30),) SELECT * from klient;

Создание таблицы rendiLeping
CREATE TABLE rendiLeping( lepingID int not null Primary key IDENTITY(1,1), rendiAlgus date, rendiLopp date, klientID int, FOREIGN KEY (klientID) references klient (klientID), regNumber char(6), FOREIGN KEY (regNumber) references auto (regNumber), rendiKestvus int, hindKokku decimal(5,2), )
Создание таблицы rendiLeping
CREATE TABLE amet( ametID int not null Primary key IDENTITY(1,1), amet_nimi varchar(50), )
Создание таблицы tootaja
CREATE TABLE tootaja( tootajaID int not null Primary key IDENTITY(1,1), tootajaNimi varchar(50), ametID int, FOREIGN KEY (ametID) references amet(ametID), )
Добавление значений
INSERT INTO klient(kliemdiNimi,telefon,aadress,soiduKogemus) VALUES ('Oleksender','58583020','sõpruse pst 192,201','Väga hea'); INSERT INTO klient(kliemdiNimi,telefon,aadress,soiduKogemus) VALUES ('Oleksender','58583020','sõpruse pst 192,201','Väga hea'); INSERT INTO klient(kliemdiNimi,telefon,aadress,soiduKogemus) VALUES ('Oleksender','58583020','sõpruse pst 192,201','Väga hea'); INSERT INTO rendiLeping(rendiAlgus, rendiLopp, rendiKestvus, hindKokku) VALUES ('2005-04-12', '2005-06-15', 250, 23.5); INSERT INTO rendiLeping(rendiAlgus, rendiLopp, rendiKestvus, hindKokku) VALUES ('2023-01-22', '2023-02-23', 90, 203.5); INSERT INTO rendiLeping(rendiAlgus, rendiLopp, rendiKestvus, hindKokku) VALUES ('2023-01-25', '2023-02-28', 1, 26.3); INSERT INTO tootaja(tootajaNimi) VALUES ('Oleksander'); INSERT INTO tootaja(tootajaNimi) VALUES ('Timur'); INSERT INTO tootaja(tootajaNimi) VALUES ('Vanja'); INSERT INTO amet(amet_nimi) VALUES ('Timur');
SELECT – ЗАПРОСЫ
отображаем данные из трех таблиц с учетом вторичного ключа или связи между таблицами.
select * from auto, mark, kaigukast where mark.markID=auto.markID and kaigukast.kaigukastID=auto.kaigukastID

Покажи в какой машине – какая коробка передач.
SELECT auto.regNumber, kaigukast.kaigukast FROM auto, kaigukast Where kaigukast.kaigukastID=auto.kaigukastID

Покажи в какой машине – какая марка машины, используй INNER JOIN
SELECT auto.regNumber, mark.autoMark FROM auto INNER JOIN mark ON mark.markID=auto.markID

Отобрази по каждому клиенту все договора аренды машин и машины, которые были взяты в арендую
SELECT klient.kliemdiNimi, rendileping.lepingId, auto.regNumber FROM rendileping INNER JOIN klient ON rendileping.klientId=klient.klientId INNER JOIN auto ON rendileping.regNumber=auto.regNumber

Покажи сколько машин с автом коробкой, сколько с мануальной.
SELECT kaigukast.kaigukast, Count(auto.autoId) AS kogus FROM auto, kaigukast Where auto.kaigukastId=kaigukast.kaigukastId GROUP by kaigukast.kaigukast

Отобрази какие машины – какой работник отдал в аренду.
SELECT auto.regNumber, tootaja.tootajaNimi from auto, tootaja, rendileping where tootaja.tootajaId=rendileping.rendilepingID and rendileping.regNumber=auto.regNumber

Отобрази какие машины – какой работник отдал в аренду в выбранный промежуток времени.
SELECT auto.regNumber, tootaja.tootajaNimi from auto, tootaja, rendileping where tootaja.tootajaId=rendileping.lepingID and rendileping.regNumber=auto.regNumber and (rendileping.rendiAlgus between '2022-01-10' and '2022-03-12')

Отобрази по каждому клиенту все договора аренды машин и машины, которые были взяты в арендую
SELECT klient.kliemdiNimi, rendiLeping.lepingID, auto.regNumber FROM rendiLeping INNER JOIN klient ON rendiLeping.klientID=klient.klientID INNER JOIN auto ON rendiLeping.regNumber=auto.regNumber

Покажи сколько машин с автом коробкой, сколько с мануальной.
SELECT kaigukast.kaigukast, Count(auto.autoId) AS kogus FROM auto, kaigukast Where auto.kaigukastId=kaigukast.kaigukastId GROUP by kaigukast.kaigukast

Найди общее количество машин отданных в аренду в определенный промежуток времени и их суммарную стоимость.
SELECT COUNT(*) AS TotalCarsRented, SUM(hindKokku) AS TotalCost FROM rendiLeping WHERE rendiAlgus BETWEEN '1999-12-20' AND '2023-12-20';

Пользователь:
Создание пользователя tootaja и пароль 123456

Выдача прав
GRANT SELECT, INSERT ON Rendileping TO tootaja; GRANT SELECT ON auto TO tootaja; GRANT SELECT ON mark TO tootaja; GRANT SELECT ON kaigukast TO tootaja; GRANT SELECT ON klient TO tootaja;
Захожу в пользователя

Проверяю права

Проверяю добавилось ли значение (добавилось)

Протсыдуры:
Составь процедуру для добавления новых марок машин и новых клиентов.
CREATE PROCEDURE AddCarBrand @autoMark varchar(30) AS BEGIN INSERT INTO mark (autoMark) VALUES (@autoMark); END; Exec AddCarBrand @autoMark='Audi'
CREATE PROCEDURE AddClient @kliemdiNimi varchar(50), @telefon varchar(20), @aadress varchar(50), @soiduKogemus varchar(30) AS BEGIN INSERT INTO klient (kliemdiNimi, telefon, aadress, soiduKogemus) VALUES (@kliemdiNimi, @telefon, @aadress, @soiduKogemus); END;
Составь процедуру для удаления договора по его id.
CREATE PROCEDURE DeleteRentalAgreement @lepingID int AS BEGIN DELETE FROM rendiLeping WHERE lepingID = @lepingID; END;
Свою процедуру на действие, отличное от ранее созданных.
CREATE PROCEDURE UpdateRentalDuration @lepingID int, @rendiKestvus int AS BEGIN UPDATE rendiLeping SET rendiKestvus = @rendiKestvus WHERE lepingID = @lepingID; END;