# π HW 6 DB HSE
## by Anna Sibirtseva BSE206
**17.10.2022**
### β Task 1
> ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ SQL-Π·Π°ΠΏΡΠΎΡΡ:
#### πΈ task 1.1 ΠΠΎΠΊΠ°Π·Π°ΡΡ Π²ΡΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΊΠ½ΠΈΠ³ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΈΠ·Π΄Π°ΡΠ΅Π»Π΅ΠΉ.
```sql
SELECT Title, PubName
FROM Book
```
#### πΈ task 1.2 Π ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠ°Π½ΠΈΡ?
```sql
SELECT Title, Author
FROM Book
ORDER BY PagesNum DESC
LIMIT 1
```
#### πΈ task 1.3 ΠΠ°ΠΊΠΈΠ΅ Π°Π²ΡΠΎΡΡ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ Π±ΠΎΠ»Π΅Π΅ 5 ΠΊΠ½ΠΈΠ³?
```sql
SELECT Author
FROM Book
GROUP BY Author
HAVING COUNT(*) > 5
```
#### πΈ task 1.4 Π ΠΊΠ°ΠΊΠΈΡ
ΠΊΠ½ΠΈΠ³Π°Ρ
Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π² Π΄Π²Π° ΡΠ°Π·Π° Π±ΠΎΠ»ΡΡΠ΅ ΡΡΡΠ°Π½ΠΈΡ, ΡΠ΅ΠΌ ΡΡΠ΅Π΄Π½Π΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠ°Π½ΠΈΡ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΠΊΠ½ΠΈΠ³?
```sql
SELECT Title, Author
FROM Book
WHERE PagesNum > (SELECT AVG(PagesNum) * 2
FROM Book)
```
#### πΈ task 1.5 ΠΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΏΠΎΠ΄ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ?
```sql
SELECT ParentCat
FROM Category
WHERE ParentCat IS NOT NULL
AND CategoryName IS NOT NULL
```
#### πΈ task 1.6 Π£ ΠΊΠ°ΠΊΠΎΠ³ΠΎ Π°Π²ΡΠΎΡΠ° (ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π° Π°Π²ΡΠΎΡΠΎΠ² ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½Ρ) Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠ½ΠΈΠ³?
```sql
SELECT Author
FROM Book
GROUP BY Author
ORDER BY COUNT(*) DESC
LIMIT 1
```
#### πΈ task 1.7 ΠΠ°ΠΊΠΈΠ΅ ΡΠΈΡΠ°ΡΠ΅Π»ΠΈ Π·Π°Π±ΡΠΎΠ½ΠΈΡΠΎΠ²Π°Π»ΠΈ Π²ΡΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ (Π½Π΅ ΠΊΠΎΠΏΠΈΠΈ), Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ "ΠΠ°ΡΠΊΠΎΠΌ Π’Π²Π΅Π½ΠΎΠΌ"?
```sql
SELECT FirstName, lastname
FROM Reader
JOIN Borrowing ON Reader.ID = Borrowing.ReaderNr
JOIN Book ON Borrowing.ISBN = Book.isbn
WHERE Author = 'ΠΠ°ΡΠΊ Π’Π²Π΅Π½'
GROUP BY ID
HAVING COUNT(DISTINCT Book.isbn) =
(SELECT COUNT(*)
FROM Book
WHERE Author = 'ΠΠ°ΡΠΊ Π’Π²Π΅Π½')
```
#### πΈ task 1.8 ΠΠ°ΠΊΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΈΠΌΠ΅ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ?
```sql
SELECT Title, Author
FROM Book
WHERE isbn in(SELECT isbn
FROM Copy
GROUP BY isbn
HAVING COUNT(*) > 1)
```
#### πΈ task 1.9 Π’ΠΠ 10 ΡΠ°ΠΌΡΡ
ΡΡΠ°ΡΡΡ
ΠΊΠ½ΠΈΠ³
```sql
SELECT Title, Author
FROM Book
ORDER BY PubYear
LIMIT 10
```
#### πΈ task 1.10 ΠΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΡΠ΅ Π²ΡΠ΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ Π² ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ βΠ‘ΠΏΠΎΡΡβ (Ρ Π»ΡΠ±ΡΠΌ ΡΡΠΎΠ²Π½Π΅ΠΌ Π²Π»ΠΎΠΆΠ΅Π½ΠΎΡΡΠΈ).
```sql
WITH RECURSIVE SportCategory AS
(SELECT CategoryName
FROM Category
WHERE ParentCat = 'Π‘ΠΏΠΎΡΡ'
UNION
SELECT CategoryName
FROM Category
JOIN SportCategory ON Category.ParentCat = SportCategory.CategName)
SELECT DISTINCT CategoryName
FROM SportCategory
```
### β Task 2
> ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ SQL-Π·Π°ΠΏΡΠΎΡΡ Π΄Π»Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ:
#### πΈ task 2.1 ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π·Π°ΠΏΠΈΡΡ ΠΎ Π±ΡΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΈΡΠ°ΡΠ΅Π»Π΅ΠΌ βΠΠ°ΡΠΈΠ»Π΅Π΅ΠΌ ΠΠ΅ΡΡΠΎΠ²ΡΠΌβ ΠΊΠ½ΠΈΠ³ΠΈ Ρ ISBN 123456 ΠΈ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ ΠΊΠΎΠΏΠΈΠΈ 4.
```sql
INSERT INTO Borrowing (ReaderNr, ISBN, CopyNumber, ReturnDate)
VALUES
((SELECT ID,
FROM Reader
WHERE FirstName = 'ΠΠ°ΡΠΈΠ»ΠΈΠΉ' AND LastName = 'ΠΠ΅ΡΡΠΎΠ²'), '123456', 4, CURRENT_TIMESTAMP)
```
#### πΈ task 2.2 Π£Π΄Π°Π»ΠΈΡΡ Π²ΡΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ, Π³ΠΎΠ΄ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠΎΡΠΎΡΡΡ
ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ 2000 Π³ΠΎΠ΄.
```sql
DELETE
FROM Book
WHERE (EXTRACT(YEAR FROM PubYear) > 2000);
```
#### πΈ task 2.3 ΠΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ Π΄Π°ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° Π΄Π»Ρ Π²ΡΠ΅Ρ
ΠΊΠ½ΠΈΠ³ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ "ΠΠ°Π·Ρ Π΄Π°Π½Π½ΡΡ
", Π½Π°ΡΠΈΠ½Π°Ρ Ρ 01.01.2016, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ Π² Π·Π°ΠΈΠΌΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° 30 Π΄Π½Π΅ΠΉ Π΄ΠΎΠ»ΡΡΠ΅ (ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Π² SQL ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠΈΡΠ»Π° ΠΊ Π΄Π°ΡΠ°ΠΌ).
```sql
UPDATE Borrowing
SET ReturnDate = ReturnDate + interval '30 day'
WHERE ReturnDate > '2016-01-01 00:00:00'
AND ISBN in (SELECT ISBN
FROM BookCat
WHERE CategoryName = 'ΠΠ°Π·Ρ Π΄Π°Π½Π½ΡΡ
')
```
### β Task 3
> ΠΠΏΠΈΡΠΈΡΠ΅ Π½Π° ΡΡΡΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ²:
#### πΈ task 3.1
```sql
SELECT s.Name, s.MatrNr FROM Student s
WHERE NOT EXISTS
(SELECT * FROM Check c WHERE c.MatrNr = s.MatrNr AND c.Note >= 4.0 ) ;
```
**ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅:** ΠΠ°ΠΉΡΠΈ Π²ΡΠ΅Ρ
ΡΡΡΠ΄Π΅Π½ΡΠΎΠ² (ΠΠΌΡ ΠΈ ID), Ρ ΠΊΠΎΡΠΎΡΡΡ
Π΅ΡΡΡ Ρ
ΠΎΡΡ Π±Ρ ΠΎΠ΄Π½Π° Π½Π΅ΡΠ΄Π²ΠΎΠ»Π΅ΡΠ²ΠΎΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ (ΠΌΠ΅Π½ΡΡΠ΅ 4) ΠΎΡΠ΅Π½ΠΊΠ° Π·Π° Π»Π΅ΠΊΡΠΈΡ ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅Ρ ΠΎΡΠ΅Π½ΠΊΠΈ.
#### πΈ task 3.2
```sql
( SELECT p.ProfNr, p.Name, sum(lec.Credit)
FROM Professor p, Lecture lec
WHERE p.ProfNr = lec.ProfNr
GROUP BY p.ProfNr, p.Name)
UNION
( SELECT p.ProfNr, p.Name, 0
FROM Professor p
WHERE NOT EXISTS (
SELECT * FROM Lecture lec WHERE lec.ProfNr = p.ProfNr ));
```
**ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅:** ΠΠ°ΠΉΡΠΈ ΠΈ Π²ΡΠ²Π΅ΡΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΡΠΎΡΡΠ΅ΡΡΠΎΡΠ΅ (Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ, ΠΈΠΌΡ ΠΈ ΡΡΠΌΠΌΡ Π·Π°ΡΠ΅ΡΠ½ΡΡ
ΡΠ°ΡΠΎΠ²(ΠΊΡΠ΅Π΄ΠΈΡΠΎΠ²) Π·Π° Π»Π΅ΠΊΡΠΈΠΈ), Π΅ΡΠ»ΠΈ ΠΎΠ½ Π²Π΅Π΄Π΅Ρ Ρ
ΠΎΡΡ Π±Ρ ΠΎΠ΄Π½Ρ Π»Π΅ΠΊΡΠΈΡ ΠΈ 0, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΡΠ΅ΡΡΠΎΡ Π½Π΅ Π²ΡΠ»Π΅ΡΡΡ Π»Π΅ΠΊΡΠΎΡΠΎΠΌ.
#### πΈ task 3.3
```sql
SELECT s.Name, p.Note
FROM Student s, Lecture lec, Check c
WHERE s.MatrNr = c.MatrNr AND lec.LectNr = c.LectNr AND c.Note >= 4
AND c.Note >= ALL (
SELECT c1.Note FROM Check c1 WHERE c1.MatrNr = c.MatrNr )
```
**ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅:** ΠΠ°ΠΉΡΠΈ ΠΈ Π²ΡΠ²Π΅ΡΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΡΡΠ΄Π΅Π½ΡΠ°Ρ
(ΠΈΡ
ΠΈΠΌΠ΅Π½Π° ΠΈ ΠΎΡΠ΅Π½ΠΊΠΈ), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π·Π° Π»Π΅ΠΊΡΠΈΠΈ ΠΎΡΠΌΠ΅ΡΠΊΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π»ΠΈΠ±ΠΎ ΡΠ°Π²Π½ΡΠ΅ ΡΠ΅ΡΡΡΠ΅ΠΌ ΠΈ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π²Π½Ρ ΠΈΡ
Π½Π°ΠΈΠ²ΡΡΡΠ΅ΠΉ ΠΎΡΠΌΠ΅ΡΠΊΠ΅.