-
Notifications
You must be signed in to change notification settings - Fork 551
/
Copy pathLibraryChallenges.sql
149 lines (123 loc) · 4.44 KB
/
LibraryChallenges.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/******************* In the Library *********************/
/*******************************************************/
/* find the number of availalbe copies of Dracula */
/*******************************************************/
/* check total copies of the book */
SELECT *, COUNT(BookID) AS TotalCopies
FROM Books
WHERE Title LIKE '%Dracula%';
/* current total loans of the book */
SELECT *, COUNT(LoanID) AS TotalLoans
FROM Loans
WHERE BookID IN (
SELECT BookID FROM Books WHERE Title LIKE '%Dracula%'
)
AND ReturnedDate IS NULL;
/* total available book */
SELECT
(SELECT COUNT(BookID) AS TotalCopies
FROM Books
WHERE Title LIKE '%Dracula%')
-
(SELECT COUNT(LoanID) AS TotalLoans
FROM Loans
WHERE BookID IN (
SELECT BookID FROM Books WHERE Title LIKE '%Dracula%'
)
AND ReturnedDate IS NULL)
AS AvailableBooks;
/*******************************************************/
/* Add new books to the library */
/*******************************************************/
INSERT INTO Books(Title, Author, Published, Barcode)
VALUES
('Dracula', 'Bram Stoker', 1897, 4819277482),
('Gulliver''s Travel', 'Johnathan Swift',1729,4899254401);
/*******************************************************/
/* Check out Books */
/*******************************************************/
INSERT INTO Loans(BookID, PatronID, LoanDate, DueDate)
VALUES
(
(SELECT BookID FROM Books WHERE Barcode = 4043822646),
(SELECT PatronID FROM Patrons WHERE Email LIKE '[email protected]'),
'2020-08-25',
'2020-09-08'
),
(
(SELECT BookID FROM Books WHERE Barcode = 2855934983),
(SELECT PatronID FROM Patrons WHERE Email LIKE '[email protected]'),
'2020-08-25',
'2020-09-08'
);
SELECT * FROM Loans
ORDER BY LoanID DESC
LIMIT 5;
/********************************************************/
/* Check books for Due back */
/* generate a report of books due back on July 13, 2020 */
/* with patron contact information */
/********************************************************/
SELECT p.FirstName, p.LastName, p.Email, b.Title, l.LoanDate, l.DueDate
FROM Loans l
JOIN Books b ON l.BookID = b.BookID
JOIN Patrons p ON l.PatronID = p.PatronID
WHERE l.DueDate = '2020-07-13'
AND ReturnedDate IS NULL;
/*******************************************************/
/* Return books to the library */
/*******************************************************/
SELECT * FROM Loans
WHERE BookID IN (SELECT BookID FROM Books
WHERE Barcode = 6435968624)
AND ReturnedDate IS NULL;
UPDATE Loans
SET ReturnedDate = '2020-07-05'
WHERE BookID IN
(SELECT BookID FROM Books WHERE Barcode = 6435968624)
AND ReturnedDate IS NULL;
/*******************************************************/
/* Encourage Patrons to check out books */
/* generate a report of showing 10 patrons who have
checked out the fewest books. */
/*******************************************************/
SELECT p.FirstName, p.LastName, p.Email, COUNT(p.PatronID) AS Total_Loans
FROM Patrons p
LEFT JOIN Loans l
ON p.PatronID = l.PatronID
GROUP BY p.PatronID
ORDER BY 4 ASC
LIMIT 10;
/*******************************************************/
/* Find books to feature for an event
create a list of books from 1890s that are
currently available */
/*******************************************************/
SELECT b.BookID, b.Title, b.Author, b.Published, COUNT(b.BookID) AS TotalAvailableBooks
FROM Books b
LEFT JOIN Loans l
ON b.BookID = l.BookID
WHERE ReturnedDate IS NOT NULL
AND b.Published BETWEEN 1890 AND 1899
GROUP BY b.BookID
ORDER BY b.BookID;
/*******************************************************/
/* Book Statistics
/* create a report to show how many books were
published each year. */
/*******************************************************/
SELECT Published, COUNT(DISTINCT(Title)) AS TotalNumberOfPublishedBooks
FROM Books
GROUP BY Published
ORDER BY TotalNumberOfPublishedBooks DESC;
/*************************************************************/
/* Book Statistics */
/* create a report to show 5 most popular Books to check out */
/*************************************************************/
SELECT b.Title, b.Author, b.Published, COUNT(b.Title) AS TotalTimesOfLoans
FROM Books b
JOIN Loans l
ON b.BookID = l.BookID
GROUP BY b.Title
ORDER BY 4 DESC
LIMIT 5;