AUTORENT andmebaas

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

Создал таблицу auto

CREATE TABLE mark(
markID int not null Primary key IDENTITY(1,1),
autoMark varchar(30) UNIQUE
);

SELECT * FROM mark;

Создал таблицу mark

INSERT INTO mark(autoMark)
VALUES ('Ziguli');
INSERT INTO mark(autoMark)
VALUES ('Lambordzini');
INSERT INTO mark(autoMark)
VALUES ('BMW');
SELECT * FROM mark;

Заполнил таблицу mark

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;

Создал таблицу kaigukast и заполнил его

ALTER TABLE auto
ADD FOREIGN KEY (markID) REFERENCES mark(markID);
ALTER TABLE auto
ADD FOREIGN KEY (kaigukastID) REFERENCES kaigukast(kaigukastID);

Создал вторичные ключи для таблиц auto – mark и auto – kaigukast

CREATE TABLE klient(
klientID int not null PRIMARY KEY IDENTITY(1,1),
kliendiNimi varchar(50),
telefon varchar(20),
aadress varchar(50),
soiduKogemus varchar(30)
);

Создал таблицу klient

CREATE TABLE amet(
ametID int not null PRIMARY KEY IDENTITY(1,1),
ametNimi varchar(50))

Создал таблицу amet

CREATE TABLE tootaja(
tootajaID int not null PRIMARY KEY IDENTITY(1,1),
tootajaNimi varchar(50),
ametID int,
FOREIGN KEY (ametID) REFERENCES amet(ametID)
);

Создал таблицу tootaja с вторичным ключом amet(ametID)

CREATE TABLE rendLeping(
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),
tootajaID int,
FOREIGN KEY (tootajaID) REFERENCES tootaja(tootajaID)
);

Создал таблицу rendLeping с вторичными ключами klient(klientID), auto(regNumber), tootaja(tootajaID)

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

Покажи в какой машине – какая коробка передач.

SELECT auto.regNumber, mark.autoMark
FROM auto

INNER JOIN mark ON mark.markID=auto.markID

Покажи в какой машине – какая марка машины, используй INNER JOIN

SELECT klient.kliendiNimi, rendLeping.lepingId, auto.regNumber
FROM rendLeping
INNER JOIN klient ON rendLeping.klientId=klient.klientId
INNER JOIN auto ON rendLeping.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, rendLeping
where tootaja.tootajaId=rendLeping.tootajaId and rendLeping.regNumber=auto.regNumber

Отобрази какие машины – какой работник отдал в аренду.

SELECT auto.regNumber, tootaja.tootajaNimi 
from auto, tootaja, rendLeping
where tootaja.tootajaId=rendLeping.tootajaId and rendLeping.regNumber=auto.regNumber
and (rendLeping.rendiAlgus between '2022-01-10' and '2022-03-12')

Отобрази какие машины – какой работник отдал в аренду в выбранный промежуток времени.

Создал пользователя

grant select to tootaja;
grant insert on object::rendLeping to tootaja;
select * from amet;
insert into rendLeping(rendiAlgus,rendiLopp,klientID,regNumber,rendiKestvus,hindKokku,tootajaID)
values('2023-1-1','2023-2-2',1,'123aAA',1,1,1);
create table test(
test int);

проверяю права пользователя

--
USE autorentDenisenko 
go
CREATE PROCEDURE liza_mark_klient
@mark varchar(30),
@kliendinimi varchar(50),
@telefon varchar(20),
@aadress varchar(50),
@soiduKogemus varchar(30)
AS
BEGIN
INSERT INTO mark(autoMark)
VALUES (@mark);
SELECT * FROM mark;
INSERT INTO klient(kliendiNimi,telefon,aadress,soiduKogemus)
values(@kliendinimi,@telefon,@aadress,@soiduKogemus);
SELECT * FROM klient;
END
--
EXEC liza_mark_klient @mark='a',@kliendinimi='a',@telefon='a',@aadress='a',@soiduKogemus='a';

создал процедуру для добавления новых марок машин и новых клиентов.

// клиент немного залагал

USE autorentDenisenko 
go
CREATE PROCEDURE kustutamine_dogovor
@kustutaId int
AS
BEGIN
SELECT * FROM rendLeping ;
DELETE FROM rendLeping 
WHERE lepingID=@kustutaId;
SELECT * FROM rendLeping;
END
--
EXEC kustutamine_dogovor 1

создал процедуру для удаления договора по его id.

--
USE autorentDenisenko 
go
CREATE PROCEDURE otsing_klient
@taht char(1)
AS
BEGIN
SELECT * FROM klient
WHERE kliendiNimi LIKE @taht+'%';
END
--
EXEC otsing_klient '1'

Создал свою процедуру для поиска клиентов по первой букве их имени.