208 lines
6.4 KiB
Transact-SQL
208 lines
6.4 KiB
Transact-SQL
/*
|
|
===================================================
|
|
KONCEPCJA PROJEKTU BAZY DANYCH
|
|
===================================================
|
|
|
|
---------------------------------------------------
|
|
1. Nazwa bazy danych:
|
|
---------------------------------------------------
|
|
- Ksiegarnia
|
|
|
|
---------------------------------------------------
|
|
2. Nazwa tabeli transakcyjnej
|
|
---------------------------------------------------
|
|
- sprzedaż - rejestracja sprzedarzy oraz wysyłek
|
|
(id_sprzedazy, id_klienta, status[czeka,wysłana,dostarczona], łączny_koszt)
|
|
|
|
---------------------------------------------------
|
|
3. Nazwy pozostałych tabel (co najmniej czterech):
|
|
----------------------------------------------------
|
|
- Kupujący (id_klienta, imie, miasto, nazwisko, ulica, nr domu, kod pocztowy)
|
|
- Książki(id_książki, tytuł, gatunek, ilosc stron, autor, ilość sztuk w magazynie, cena)
|
|
- sprzedane_książki(id_sprzedazy, id_klienta, id_książki)
|
|
|
|
-----------------------------------------------------------------
|
|
4. Nazwy pięciu raportów zbudowanych na tabeli transakcyjnej
|
|
|
|
------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
USE master
|
|
GO
|
|
|
|
if DB_ID('Ksiegarnia') IS NULL
|
|
CREATE DATABASE Ksiegarnia
|
|
GO
|
|
|
|
USE Ksiegarnia
|
|
|
|
IF OBJECT_ID('sprzedane_ksiazki') IS NOT NULL
|
|
DROP TABLE sprzedane_ksiazki
|
|
|
|
IF OBJECT_ID('ksiazki') IS NOT NULL
|
|
DROP TABLE ksiazki
|
|
|
|
IF OBJECT_ID('sprzedaz') IS NOT NULL
|
|
DROP TABLE sprzedaz
|
|
|
|
IF OBJECT_ID('kupujacy') IS NOT NULL
|
|
DROP TABLE kupujacy
|
|
|
|
|
|
IF OBJECT_ID('kupujacy') IS NULL
|
|
CREATE TABLE kupujacy(
|
|
id_klienta INT IDENTITY(1,1) PRIMARY KEY,
|
|
imie VARCHAR(20),
|
|
nazwisko VARCHAR(20),
|
|
miasto VARCHAR(20),
|
|
ulica VARCHAR(20),
|
|
nr_domu INT,
|
|
kod_pocztowy VARCHAR(6)
|
|
)
|
|
|
|
IF OBJECT_ID('sprzedaz') IS NULL
|
|
CREATE TABLE sprzedaz(
|
|
id_sprzedazy INT IDENTITY(1,1) PRIMARY KEY,
|
|
id_klienta INT FOREIGN KEY REFERENCES kupujacy(id_klienta),
|
|
status_wysylki VARCHAR(11) CHECK(status_wysylki in ('czeka','wyslana','dostarczona')),
|
|
data_sprzedania DATE
|
|
|
|
)
|
|
|
|
|
|
IF OBJECT_ID('ksiazki') IS NULL
|
|
CREATE TABLE ksiazki(
|
|
id_ksiazki INT IDENTITY(1,1) PRIMARY KEY ,
|
|
tytul VARCHAR(20),
|
|
gatunek VARCHAR(30),
|
|
autor VARCHAR(30),
|
|
ile_w_magazynie INT,
|
|
cena INT
|
|
)
|
|
|
|
IF OBJECT_ID('sprzedane_ksiazki') IS NULL
|
|
CREATE TABLE sprzedane_ksiazki(
|
|
id_sprzedazy INT FOREIGN KEY REFERENCES kupujacy(id_klienta),
|
|
id_ksiazki INT FOREIGN KEY REFERENCES ksiazki(id_ksiazki),
|
|
ile_sztuk INT,
|
|
)
|
|
|
|
INSERT INTO kupujacy (imie, nazwisko, miasto, ulica, nr_domu, kod_pocztowy) VALUES
|
|
('Roman','Makłowicz','Lublin','Szkolna',17,'21-102'),
|
|
('Robert','Lewandowski','Warszawa','Kwiatowa',12,'45-100'),
|
|
('Renata','Nowak','Poznań','Wojaka',42, '21-241'),
|
|
('Kamil', 'Stary','Warszawa','Harnasia',89,'12-875'),
|
|
('Stachu', 'Stach','Wrocław','Jana Pawła II',2,'53-023'),
|
|
('Justyna', 'Zeszyt','Warszawa','Wyzwolenia',123,'21-370'),
|
|
('Maciej', 'Nowak','Gdańsk','Półwiejska',232,'23-689'),
|
|
('Jakub', 'Kaczor', 'Kraków','Wrocławska',897,'89-898'),
|
|
('Bartosz','Pawlik','Poznań','Polska',34, '25-567'),
|
|
('Roman','Makłowicz','Lublin','Szkolna',17,'21-102'),
|
|
('Robert','Lewandowski','Warszawa','Kwiatowa',12,'45-100'),
|
|
('Renata','Nowak','Poznań','Wojaka',42, '21-241'),
|
|
('Kamil', 'Stary','Warszawa','Harnasia',89,'12-875'),
|
|
('Stachu', 'Stach','Wrocław','Jana Pawła II',2,'53-023'),
|
|
('Justyna', 'Zeszyt','Warszawa','Wyzwolenia',123,'21-370'),
|
|
('Maciej', 'Nowak','Gdańsk','Półwiejska',232,'23-689'),
|
|
('Jakub', 'Kaczor', 'Kraków','Wrocławska',897,'89-898'),
|
|
('Bartosz','Pawlik','Poznań','Polska',34, '25-567'),
|
|
('Roman','Makłowicz','Lublin','Szkolna',17,'21-102'),
|
|
('Robert','Lewandowski','Warszawa','Kwiatowa',12,'45-100'),
|
|
('Renata','Nowak','Poznań','Wojaka',42, '21-241'),
|
|
('Kamil', 'Stary','Warszawa','Harnasia',89,'12-875'),
|
|
('Stachu', 'Stach','Wrocław','Jana Pawła II',2,'53-023'),
|
|
('Justyna', 'Zeszyt','Warszawa','Wyzwolenia',123,'21-370'),
|
|
('Maciej', 'Nowak','Gdańsk','Półwiejska',232,'23-689'),
|
|
('Jakub', 'Kaczor', 'Kraków','Wrocławska',897,'89-898'),
|
|
('Bartosz','Pawlik','Poznań','Polska',34, '25-567')
|
|
|
|
|
|
INSERT INTO sprzedaz(id_klienta, status_wysylki, data_sprzedania) VALUES
|
|
(1, 'czeka','2022-01-31'),
|
|
(5, 'dostarczona','2022-01-31'),
|
|
(7, 'wyslana','2022-01-31'),
|
|
(2, 'czeka','2022-01-23'),
|
|
(3, 'dostarczona','2022-01-29'),
|
|
(6, 'wyslana','2022-02-28'),
|
|
(1, 'czeka','2022-01-31'),
|
|
(5, 'dostarczona','2022-01-31'),
|
|
(7, 'wyslana','2022-01-31'),
|
|
(2, 'czeka','2022-01-23'),
|
|
(3, 'dostarczona','2022-01-29'),
|
|
(6, 'wyslana','2022-02-28')
|
|
|
|
INSERT INTO ksiazki(tytul, gatunek, autor, ile_w_magazynie, cena) VALUES
|
|
('System operacyjne', 'Nauka i technika', 'William Stallings', 50,79.99),
|
|
('Lśnienie', 'Horror', 'Stephen King', 272, 12.99),
|
|
('Pamięć nieulotna', 'Autobiografia', 'Edward Snowden', 87, 39.99),
|
|
('Metro 2033', 'sci-fy', 'Dimytry Glukhovsky', 52, 29.99),
|
|
('Uciekinier', 'Horror', 'Stephen King', 126, 15.99),
|
|
('Prymityw', 'Autobiografia','Jarosław Komputer', 666, 9.99)
|
|
|
|
|
|
|
|
INSERT INTO sprzedane_ksiazki(id_sprzedazy, id_ksiazki, ile_sztuk) VALUES
|
|
(2,2,2),
|
|
(2,3,1),
|
|
(2,1,1),
|
|
(1,3,1),
|
|
(3,2,1),
|
|
(4,4,1),
|
|
(5,3,4),
|
|
(5,5,3),
|
|
(6,5,1),
|
|
(2,2,2),
|
|
(2,3,1),
|
|
(2,1,1),
|
|
(1,3,1),
|
|
(3,2,1),
|
|
(4,4,1),
|
|
(5,3,4),
|
|
(5,5,3),
|
|
(6,5,1),
|
|
(2,2,2),
|
|
(2,3,1),
|
|
(2,1,1),
|
|
(1,3,1),
|
|
(3,2,1),
|
|
(4,4,1),
|
|
(5,3,4),
|
|
(5,5,3),
|
|
(6,5,1)
|
|
|
|
|
|
IF OBJECT_ID('filtr_gatunki','P') IS NOT NULL
|
|
DROP PROCEDURE filtr_gatunki
|
|
GO
|
|
|
|
CREATE PROCEDURE filtr_gatunki (@gatunek VARCHAR(30)) AS
|
|
SELECT tytul, autor FROM ksiazki
|
|
WHERE gatunek = @gatunek
|
|
GO
|
|
|
|
EXEC filtr_gatunki Autobiografia
|
|
|
|
IF OBJECT_ID('szczeguly_klienta','P') IS NOT NULL
|
|
DROP PROCEDURE szczeguly_klienta
|
|
GO
|
|
|
|
CREATE PROCEDURE szczeguly_klienta (@nazwisko VARCHAR(20), @imie VARCHAR(20)) AS
|
|
SELECT kupujacy.*, ksiazki.tytul, sprzedaz.data_sprzedania, sprzedaz.status_wysylki, sprzedane_ksiazki.ile_sztuk FROM kupujacy
|
|
INNER JOIN sprzedaz ON kupujacy.id_klienta = sprzedaz.id_klienta
|
|
INNER JOIN sprzedane_ksiazki ON sprzedane_ksiazki.id_sprzedazy = sprzedaz.id_sprzedazy
|
|
INNER JOIN ksiazki ON ksiazki.id_ksiazki = sprzedane_ksiazki.id_ksiazki
|
|
WHERE nazwisko = @nazwisko AND imie = @imie
|
|
GO
|
|
|
|
EXEC szczeguly_klienta Nowak, Maciej
|
|
|
|
IF OBJECT_ID('bestselery','V') IS NOT NULL
|
|
DROP PROCEDURE bestselery
|
|
GO
|
|
SELECT DISTINCT TOP 5 ksiazki.tytul, SUM(sprzedane_ksiazki.ile_sztuk) AS ilosc_sprzedanych_ksiazek FROM ksiazki
|
|
INNER JOIN sprzedane_ksiazki ON ksiazki.id_ksiazki = sprzedane_ksiazki.id_ksiazki
|
|
GROUP BY tytul
|
|
ORDER BY ilosc_sprzedanych_ksiazek DESC
|
|
|