Skip to content

Commit 89884bd

Browse files
committed
cleaned files, added exam files
1 parent baa4962 commit 89884bd

File tree

8 files changed

+397
-1
lines changed

8 files changed

+397
-1
lines changed

exam-practice.sql

Lines changed: 328 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,328 @@
1+
USE library;
2+
3+
4+
-- 1. Wypisz wszystkich członków biblioteki z adresami i info czy jest dzieckiem czy nie i
5+
-- ilość wypożyczeń w poszczególnych latach i miesiącach.
6+
7+
SELECT firstname + ' ' + lastname as 'name',
8+
ISNULL((SELECT TOP 1 'n' FROM juvenile j WHERE m.member_no = j.adult_member_no), 'y') as 'is kid',
9+
MONTH(out_date) as 'month',
10+
YEAR(out_date) as 'year',
11+
COUNT(l.title_no) as 'cnt',
12+
m.member_no
13+
FROM member m
14+
INNER JOIN loanhist l on m.member_no = l.member_no
15+
GROUP BY m.member_no, firstname + ' ' + lastname, MONTH(out_date), YEAR(out_date)
16+
17+
18+
USE Northwind
19+
20+
-- 2. Zamówienia z Freight większym niż AVG danego roku.
21+
22+
SELECT OrderID,
23+
Freight,
24+
(SELECT AVG(Freight)
25+
FROM Orders o2
26+
WHERE Year(o2.OrderDate) = YEAR(o.OrderDate)) as 'avg',
27+
YEAR(OrderDate) as 'year'
28+
FROM Orders o
29+
WHERE (SELECT AVG(Freight)
30+
FROM Orders o2
31+
WHERE Year(o2.OrderDate) = YEAR(o.OrderDate)) < o.Freight
32+
33+
34+
-- 3. Klienci, którzy nie zamówili nigdy nic z kategorii 'Seafood' w trzech wersjach.
35+
USE Northwind
36+
SELECT CustomerID
37+
FROM CUSTOMERS
38+
WHERE CustomerID NOT IN (SELECT C.CustomerID
39+
FROM Customers C
40+
LEFT JOIN Orders O on C.CustomerID = O.CustomerID
41+
LEFT JOIN [Order Details] OD on O.OrderID = OD.OrderID
42+
LEFT JOIN Products P on OD.ProductID = P.ProductID
43+
LEFT JOIN Categories C2 on P.CategoryID = C2.CategoryID
44+
WHERE C2.CategoryName = 'Seafood')
45+
46+
47+
SELECT CustomerID
48+
FROM Customers Ci
49+
WHERE NOT EXISTS(SELECT C.CustomerID
50+
FROM Customers C
51+
LEFT JOIN Orders O on C.CustomerID = O.CustomerID
52+
LEFT JOIN [Order Details] OD on O.OrderID = OD.OrderID
53+
LEFT JOIN Products P on OD.ProductID = P.ProductID
54+
LEFT JOIN Categories C2 on P.CategoryID = C2.CategoryID
55+
WHERE C2.CategoryName = 'Seafood'
56+
AND Ci.CustomerID = C.CustomerID)
57+
58+
59+
-- 4. Dla każdego klienta najczęściej zamawianą kategorię w dwóch wersjach.
60+
USE Northwind
61+
SELECT CI.CustomerID,
62+
(SELECT TOP 1 C2.CategoryName
63+
FROM Customers C
64+
LEFT JOIN Orders O on C.CustomerID = O.CustomerID
65+
LEFT JOIN [Order Details] OD on O.OrderID = OD.OrderID
66+
LEFT JOIN Products P on OD.ProductID = P.ProductID
67+
LEFT JOIN Categories C2 on P.CategoryID = C2.CategoryID
68+
WHERE C.CustomerID = CI.CustomerID
69+
GROUP BY C.CustomerID, C2.CategoryName
70+
ORDER BY COUNT(P.CategoryID) DESC) as 'best_category'
71+
FROM Customers CI
72+
73+
74+
-- 1. Podział na company, year month i suma freight
75+
76+
77+
SELECT S.CompanyName,
78+
MONTH(OrderDate),
79+
YEAR(OrderDate),
80+
SUM(Freight)
81+
FROM Shippers S
82+
LEFT JOIN Orders O on S.ShipperID = O.ShipVia
83+
GROUP BY S.CompanyName,
84+
MONTH(OrderDate),
85+
YEAR(OrderDate)
86+
87+
-- 2. Wypisać wszystkich czytelników, którzy nigdy nie wypożyczyli książki dane
88+
-- adresowe i podział czy ta osoba jest dzieckiem (joiny, in, exists)
89+
90+
USE library
91+
92+
SELECT DISTINCT m.firstname,
93+
m.lastname,
94+
m.member_no,
95+
ISNULL((SELECT 0 FROM adult a WHERE m.member_no = a.member_no), 1) as 'kid',
96+
(SELECT street
97+
FROM juvenile j
98+
INNER JOIN member mi2 on j.member_no = mi2.member_no
99+
INNER JOIN adult a on a.member_no = j.adult_member_no
100+
WHERE j.member_no = m.member_no
101+
UNION
102+
SELECT street
103+
FROM member mi
104+
INNER JOIN adult a on a.member_no = mi.member_no
105+
WHERE mi.member_no = m.member_no) as 'address'
106+
107+
FROM member m
108+
WHERE m.member_no NOT IN (SELECT l.member_no FROM loanhist l)
109+
110+
SELECT *
111+
FROM loanhist
112+
WHERE member_no = 2
113+
-- adresy wszystkich memberow w LIBRARY
114+
SELECT street
115+
FROM juvenile j
116+
INNER JOIN member mi2 on j.member_no = mi2.member_no
117+
INNER JOIN adult a on a.member_no = j.adult_member_no
118+
WHERE j.member_no = 13
119+
UNION
120+
SELECT street
121+
FROM member mi1
122+
INNER JOIN adult a on a.member_no = mi1.member_no
123+
WHERE mi1.member_no = 13
124+
125+
126+
-- 3. Najczęściej wybierana kategoria w 1997 dla każdego klienta
127+
128+
USE Northwind;
129+
130+
131+
SELECT CI.CustomerID,
132+
(SELECT TOP 1 C2.CategoryName
133+
FROM Customers C
134+
LEFT JOIN Orders O on C.CustomerID = O.CustomerID
135+
LEFT JOIN [Order Details] OD on O.OrderID = OD.OrderID
136+
LEFT JOIN Products P on OD.ProductID = P.ProductID
137+
LEFT JOIN Categories C2 on P.CategoryID = C2.CategoryID
138+
WHERE C.CustomerID = CI.CustomerID
139+
AND YEAR(O.OrderDate) = 1997
140+
GROUP BY C.CustomerID, C2.CategoryName
141+
ORDER BY COUNT(P.CategoryID) DESC)
142+
FROM Customers CI
143+
144+
145+
-- 4. Dla każdego czytelnika imię nazwisko, suma książek wypożyczony przez tą osobę i
146+
-- jej dzieci, który żyje w Arizona ma mieć więcej niż 2 dzieci lub kto żyje w Kalifornii
147+
-- ma mieć więcej niż 3 dzieci
148+
149+
USE library
150+
151+
SELECT a.member_no,
152+
firstname,
153+
lastname,
154+
(SELECT COUNT(*) FROM loanhist l WHERE l.member_no = a.member_no) as 'books_parent',
155+
(SELECT COUNT(*)
156+
FROM juvenile j
157+
INNER JOIN loanhist l2 on j.member_no = l2.member_no
158+
WHERE j.adult_member_no = a.member_no) as 'books_kids'
159+
FROM adult a
160+
LEFT JOIN member m on a.member_no = m.member_no
161+
WHERE (a.state = 'AZ' AND (SELECT COUNT(*) from juvenile j2 WHERE j2.adult_member_no = a.member_no) > 2)
162+
OR (a.state = 'CA' AND (SELECT COUNT(*) from juvenile j2 WHERE j2.adult_member_no = a.member_no) > 3)
163+
164+
165+
-- 1. Jaki był najpopularniejszy autor wśród dzieci w Arizonie w 2001
166+
167+
SELECT TOP 1 author
168+
FROM juvenile j
169+
INNER JOIN loanhist l on j.member_no = l.member_no
170+
INNER JOIN title t on l.title_no = t.title_no
171+
WHERE YEAR(l.out_date) = 2001
172+
GROUP BY author
173+
ORDER BY COUNT(author) DESC;
174+
175+
176+
-- 2. Dla każdego dziecka wybierz jego imię nazwisko, adres, imię i nazwisko rodzica i
177+
-- ilość książek, które oboje przeczytali w 2001
178+
179+
180+
SELECT m.firstname,
181+
m.lastname,
182+
(SELECT street + '' + state
183+
FROM adult
184+
INNER JOIN juvenile j2 on adult.member_no = j2.adult_member_no
185+
WHERE j2.member_no = j.member_no) address,
186+
(SELECT firstname FROM member WHERE j.adult_member_no = member.member_no) parent,
187+
(SELECT lastname FROM member WHERE j.adult_member_no = member.member_no) parent2,
188+
(SELECT COUNT(*) FROM loanhist l WHERE l.member_no = j.member_no AND YEAR(in_date) = 2001) +
189+
(SELECT COUNT(*) FROM loanhist l where l.member_no = j.adult_member_no AND YEAR(in_date) = 2001) books
190+
FROM juvenile j
191+
INNER JOIN member m on j.member_no = m.member_no
192+
193+
194+
-- 3. Kategorie które w roku 1997 grudzień były obsłużone wyłącznie przez ‘United
195+
-- Package’
196+
197+
USE Northwind
198+
199+
SELECT DISTINCT CategoryName
200+
FROM Categories
201+
INNER JOIN Products P on Categories.CategoryID = P.CategoryID
202+
INNER JOIN [Order Details] [O D] on P.ProductID = [O D].ProductID
203+
INNER JOIN Orders O on [O D].OrderID = O.OrderID
204+
INNER JOIN Shippers S2 on O.ShipVia = S2.ShipperID
205+
WHERE S2.CompanyName = 'United Package'
206+
AND YEAR(ShippedDate) = 1997
207+
208+
209+
-- 4. Wybierz klientów, którzy kupili przedmioty wyłącznie z jednej kategorii w marcu
210+
-- 1997 i wypisz nazwę tej kategorii
211+
212+
213+
SELECT C.CustomerID,
214+
(SELECT COUNT(DISTINCT C2.CategoryID)
215+
FROM Categories C2
216+
INNER JOIN Products P on C2.CategoryID = P.CategoryID
217+
INNER JOIN [Order Details] [O D] on P.ProductID = [O D].ProductID
218+
INNER JOIN Orders O on [O D].OrderID = O.OrderID
219+
WHERE C.CustomerID = O.CustomerID
220+
AND (YEAR(OrderDate) = 1997 AND MONTH(OrderDate) = 3)),
221+
(SELECT TOP 1 C2.CategoryName
222+
FROM Categories C2
223+
INNER JOIN Products P on C2.CategoryID = P.CategoryID
224+
INNER JOIN [Order Details] [O D] on P.ProductID = [O D].ProductID
225+
INNER JOIN Orders O on [O D].OrderID = O.OrderID
226+
WHERE C.CustomerID = O.CustomerID
227+
AND (YEAR(OrderDate) = 1997 AND MONTH(OrderDate) = 3))
228+
FROM Customers C
229+
WHERE (SELECT COUNT(DISTINCT C2.CategoryID)
230+
FROM Categories C2
231+
INNER JOIN Products P on C2.CategoryID = P.CategoryID
232+
INNER JOIN [Order Details] [O D] on P.ProductID = [O D].ProductID
233+
INNER JOIN Orders O on [O D].OrderID = O.OrderID
234+
WHERE C.CustomerID = O.CustomerID
235+
AND (YEAR(OrderDate) = 1997 AND MONTH(OrderDate) = 3)) = 1
236+
237+
-- 1. Wybierz dzieci wraz z adresem, które nie wypożyczyły książek w lipcu 2001
238+
-- autorstwa ‘Jane Austin
239+
240+
USE library
241+
242+
243+
SELECT DISTINCT j.member_no, street, firstname, lastname
244+
FROM juvenile j
245+
INNER JOIN adult a on j.adult_member_no = a.member_no
246+
INNER JOIN member m on m.member_no = j.member_no
247+
INNER JOIN loanhist l on j.member_no = l.member_no
248+
WHERE j.member_no NOT IN (SELECT member_no
249+
FROM loanhist
250+
INNER JOIN title t on t.title_no = loanhist.title_no
251+
WHERE YEAR(out_date) = 2001
252+
AND MONTH(out_date) = 7
253+
AND author = 'Jane Austin')
254+
255+
256+
-- 2. Wybierz kategorię, która w danym roku 1997 najwięcej zarobiła, podział na miesiące
257+
258+
USE Northwind
259+
260+
261+
SELECT CategoryName,
262+
MONTH(OrderDate) month,
263+
SUM(Quantity * [O D].UnitPrice * (1 - Discount))
264+
FROM Categories
265+
INNER JOIN Products P on Categories.CategoryID = P.CategoryID
266+
INNER JOIN [Order Details] [O D] on P.ProductID = [O D].ProductID
267+
INNER JOIN Orders O on [O D].OrderID = O.OrderID
268+
WHERE YEAR(OrderDate) = 1997
269+
GROUP BY CategoryName, MONTH(OrderDate)
270+
ORDER BY 1 DESC;
271+
272+
273+
274+
-- 3. Dane pracownika i najczęstszy dostawca pracowników bez podwładnych
275+
276+
--bez podwladnych
277+
SELECT EmployeeID
278+
FROM Employees E
279+
WHERE NOT EXISTS(SELECT E2.EmployeeID FROM Employees E2 WHERE E2.Reportsto = E.EmployeeID)
280+
281+
--z podwladnymi
282+
SELECT EmployeeID
283+
FROM Employees E
284+
WHERE EXISTS(SELECT E2.EmployeeID FROM Employees E2 WHERE E2.Reportsto = E.EmployeeID)
285+
286+
287+
SELECT DISTINCT E.EmployeeID,
288+
(SELECT TOP 1 Shippers.CompanyName
289+
FROM Orders
290+
INNER JOIN Employees E3 on Orders.EmployeeID = E3.EmployeeID
291+
INNER JOIN Shippers ON Orders.ShipVia = Shippers.ShipperID
292+
WHERE E3.EmployeeID = E.EmployeeID
293+
GROUP BY Shippers.CompanyName
294+
ORDER BY COUNT(ShipVia) DESC) BestShipper
295+
FROM Employees E
296+
INNER JOIN Orders O on E.EmployeeID = O.EmployeeID
297+
WHERE NOT EXISTS(SELECT E2.EmployeeID FROM Employees E2 WHERE E2.Reportsto = E.EmployeeID)
298+
GROUP BY E.EmployeeID, ShipVia
299+
300+
301+
-- 4. Wybierz tytuły książek, gdzie ilość wypożyczeń książki jest większa od średniej ilości
302+
-- wypożyczeń książek tego samego autora.
303+
304+
305+
USE library
306+
307+
308+
SELECT title,
309+
(SELECT COUNT(*) FROM loanhist l2 WHERE l2.title_no = t.title_no),
310+
(SELECT AVG(cnt)
311+
FROM (
312+
SELECT COUNT(title) cnt
313+
FROM loanhist
314+
INNER JOIN title ON loanhist.title_no = title.title_no
315+
WHERE author = t.author
316+
GROUP BY title
317+
) as cnts)
318+
FROM title t
319+
INNER JOIN loanhist l on t.title_no = l.title_no
320+
WHERE (SELECT COUNT(*) FROM loanhist l2 WHERE l2.title_no = t.title_no) >
321+
(SELECT AVG(cnt)
322+
FROM (
323+
SELECT COUNT(title) cnt
324+
FROM loanhist
325+
INNER JOIN title ON loanhist.title_no = title.title_no
326+
WHERE author = t.author
327+
GROUP BY title
328+
) as cnts)

exam.sql

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
-- Zad 1.
2+
3+
USE library
4+
SELECT j.member_no,
5+
m.firstname,
6+
m.lastname
7+
FROM juvenile j
8+
INNER JOIN loanhist l on j.member_no = l.member_no
9+
INNER JOIN title t on l.title_no = t.title_no
10+
INNER JOIN member m on j.member_no = m.member_no
11+
WHERE YEAR(l.in_date) = 2001
12+
AND MONTH(l.in_date) = 12
13+
AND DAY(l.in_date) = 14
14+
AND title = 'Walking'
15+
16+
17+
-- Zad 2.
18+
19+
USE Northwind
20+
SELECT DISTINCT P.ProductName as 'product name',
21+
CompanyName as 'company name',
22+
C.CategoryName as 'category name'
23+
FROM PRODUCTS P
24+
INNER JOIN Categories C on P.CategoryID = C.CategoryID
25+
INNER JOIN [Order Details] on P.ProductID = [Order Details].ProductID
26+
INNER JOIN Orders O on [Order Details].OrderID = O.OrderID
27+
INNER JOIN Shippers S on O.ShipVia = S.ShipperID
28+
WHERE OrderDate NOT BETWEEN '1997-02-20' AND '1997-02-25'
29+
AND CategoryName = 'Beverages'
30+
31+
32+
-- Zad 3.
33+
34+
USE Northwind
35+
SELECT [imie i naziwsko],
36+
SUM([ilosc zamowien]) as 'ilosc zamowien',
37+
SUM([wartosc zamowien]) as 'wartosc zamowien'
38+
FROM (
39+
SELECT E.FirstName + ' ' + E.LastName as 'imie i naziwsko',
40+
ISNULL(SUM((UnitPrice * Quantity * (1 - Discount))) + O.Freight, 0) as 'wartosc zamowien',
41+
COUNT(O.OrderID) as 'ilosc zamowien'
42+
FROM Employees E
43+
LEFT JOIN Orders O
44+
on E.EmployeeID = O.EmployeeID AND (YEAR(OrderDate) = 1997 AND MONTH(OrderDate) = 2)
45+
LEFT JOIN [Order Details] OD on O.OrderID = OD.OrderID
46+
GROUP BY E.FirstName + ' ' + E.LastName, Freight) as main
47+
GROUP BY [imie i naziwsko]
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
RESTORE DATABASE joindb
32
FROM DISK = 'C:\Users\WLGS\Desktop\joindb2012.bak'
43
WITH REPLACE

0 commit comments

Comments
 (0)