Update page 'Księgarnia'

Jakub Stefko 2017-11-15 19:11:25 +00:00
commit 98abb046ef

164
Księgarnia.md Normal file

@ -0,0 +1,164 @@
--DROP DATABASE Ksiegarnia;
--GO
--CREATE DATABASE Ksiegarnia;
--GO
--USE Ksiegarnia;
--GO
-------- USUŃ TABELE
IF OBJECT_ID('Ksiazki', 'U') IS NOT NULL
DROP TABLE Ksiazki;
IF OBJECT_ID('Autorzy', 'U') IS NOT NULL
DROP TABLE Autorzy;
--------- CREATE - UTWÓRZ TABELE I POWIĄZANIA
CREATE TABLE Autorzy
(
id_autor INT PRIMARY KEY,
nazwisko VARCHAR(30),
kraj VARCHAR(10)
);
CREATE TABLE Ksiazki
(
id_ksiazki INT PRIMARY KEY IDENTITY(1,1),
autor INT REFERENCES Autorzy(id_autor),
tytul VARCHAR(50),
cena FLOAT,
rok_wydania INT,
dzial VARCHAR(30)
);
---------- INSERT - WSTAW DANE
INSERT INTO Autorzy VALUES(1, 'Abiteboul', 'USA');
INSERT INTO Autorzy VALUES(2, 'Szekspir', 'Anglia');
INSERT INTO Autorzy VALUES(3, 'Sapkowski', 'Polska');
INSERT INTO Autorzy VALUES(4, 'Yen', 'USA');
INSERT INTO Autorzy VALUES(5, 'Cervantes', 'Hiszpania');
INSERT INTO Ksiazki VALUES(1, 'Quering XML', 60, 1997, 'informatyka');
INSERT INTO Ksiazki VALUES(1, 'Data on the web', 75, 2000, 'informatyka');
INSERT INTO Ksiazki VALUES(2, 'Poskromienie złośnicy', 32, 1999, 'dramat');
---
INSERT INTO Ksiazki VALUES(1, 'Poskromienie złośnicy', 32, 1999, 'dramat');
INSERT INTO Ksiazki VALUES(1, 'Poskromienie złośnicy', 32, 1999, 'sf');
---
INSERT INTO Ksiazki VALUES(3, 'Ostatnie życzenie', 25, 1993 ,'sf');
INSERT INTO Ksiazki VALUES(3, 'Wieża jaskółki', 30, 1997, 'sf');
INSERT INTO Ksiazki VALUES(3, 'Narrenturm', 20, 2002, 'sf');
INSERT INTO Ksiazki VALUES(4, 'Fuzzy Logic', 55, 1999, 'informatyka');
------------ SELECT
SELECT * FROM Autorzy;
SELECT * FROM Ksiazki;
--Podaj autorów spoza Polski; uporządkuj alfabetycznie według nazwisk [nazwisko, kraj].
SELECT nazwisko, kraj FROM Autorzy
WHERE kraj !='Polska'
ORDER BY nazwisko;
--Podaj książki zawierające ciąg XML w tytule [tytul].
SELECT tytul FROM Ksiazki WHERE tytul LIKE '%XML%';
--Znajdź książki droższe od Fuzzy Logic A)złączenie
SELECT B.tytul FROM Ksiazki A
JOIN Ksiazki B
ON A.tytul='Fuzzy Logic'
AND B.cena>A.cena;
--Znajdź książki droższe od Fuzzy Logic B)podzapytanie
SELECT tytul FROM Ksiazki
WHERE cena > (SELECT cena from ksiazki
WHERE tytul='Fuzzy Logic');
--Podaj autorów książek z informatyki A)złączenie
SELECT DISTINCT nazwisko FROM Autorzy A
INNER JOIN Ksiazki B
ON A.id_autor = B.autor
WHERE dzial='informatyka';
--Podaj autorów książek z informatyki A)podzapytanie
SELECT DISTINCT nazwisko FROM Autorzy A
WHERE id_autor IN (SELECT autor FROM Ksiazki WHERE dzial='informatyka');
--Znajdź autorów piszących książki z tego samego działu co Yen [nazwisko] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SELECT DISTINCT A.nazwisko FROM Autorzy A
JOIN Ksiazki B ON A.id_autor=B.autor
WHERE B.dzial IN (SELECT C.dzial FROM Ksiazki C
JOIN Autorzy D ON D.id_autor=A.id_autor
WHERE nazwisko='Yen')
AND A.nazwisko != 'Yen';
SELECT * FROM Autorzy;
SELECT * FROM Ksiazki;
--Podaj liczbę książek w każdym z działów [dzial, ile]
SELECT dzial, COUNT(*) 'ile'
FROM Ksiazki
GROUP BY dzial;
--Podaj średnią cenę książek Sapkowskiego [srednia]
SELECT AVG(cena) FROM Ksiazki
WHERE autor=(SELECT id_autor FROM Autorzy WHERE nazwisko='Sapkowski');
--Podaj tytuł najtańszej książki z informatyki [tytul]. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SELECT TOP 1 tytul FROM Ksiazki
ORDER BY cena ASC;
--Podaj tytuł najtańszej książki dla każdego z działów [dzial, tytul] (podzapytanie skorelowane).
SELECT DISTINCT dzial, tytul FROM Ksiazki A
WHERE cena = (SELECT MIN(cena) FROM Ksiazki B
WHERE A.dzial=B.dzial);
--Podaj autorów, którzy napisali przynajmniej dwie książki po roku 1996 [nazwisko, ile].
SELECT A.nazwisko, COUNT(*) 'ile' FROM Autorzy A
INNER JOIN Ksiazki B
ON A.id_autor=B.autor
WHERE rok_wydania > 1996
GROUP BY nazwisko
HAVING COUNT(nazwisko) >= 2;
--Znajdź dział, do którego pisze więcej niż jeden autor [dzial, licz_autorow].
SELECT dzial, COUNT(DISTINCT autor) 'licz_autorow' FROM Ksiazki
GROUP BY dzial
HAVING COUNT(DISTINCT autor)>1;
--Znajdź dział o największej liczbie książek [dzial]. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SELECT TOP 1 dzial FROM Ksiazki
ORDER BY (SELECT TOP 1 COUNT(*) FROM Ksiazki GROUP BY dzial);
--Znajdź dział o największej liczbie książek [dzial]. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SELECT dzial FROM Ksiazki A
GROUP BY dzial
HAVING (SELECT COUNT(id_ksiazki) FROM Ksiazki B WHERE B.dzial=A.dzial) IN (SELECT TOP 1 COUNT(id_ksiazki) FROM Ksiazki C WHERE C.dzial=A.dzial);
--Sprawdź czy istnieje autor piszący książki do każdego z działów [nazwisko] (podzielenie relacji).
SELECT DISTINCT nazwisko FROM Autorzy A
WHERE NOT EXISTS (SELECT * FROM Ksiazki B WHERE NOT EXISTS(
SELECT * FROM Ksiazki C WHERE
C.dzial=B.dzial
AND C.autor=A.id_autor));
--Podaj autora, którego książek nie ma w bazie [nazwisko] a) JOIN
SELECT A.nazwisko FROM Autorzy A
LEFT OUTER JOIN Ksiazki B ON A.id_autor=B.autor
WHERE id_ksiazki IS NULL;
--Podaj autora, którego książek nie ma w bazie [nazwisko] b) subquery
SELECT nazwisko FROM Autorzy
WHERE id_autor NOT IN (SELECT autor FROM Ksiazki);
--Podaj autora, którego książek nie ma w bazie [nazwisko] c) EXISTS
SELECT nazwisko FROM Autorzy A
WHERE NOT EXISTS (SELECT * FROM Ksiazki WHERE A.id_autor = autor);
--Podaj tytuły książek droższych niż wynosi średnia cena książki w ich dziale [tytul].
SELECT tytul FROM Ksiazki A
WHERE cena > (SELECT AVG(cena) FROM Ksiazki B WHERE B.dzial=A.dzial);