AUTORENT

Создание таблицы 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;