-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcode.sql
More file actions
155 lines (131 loc) · 3.58 KB
/
Copy pathcode.sql
File metadata and controls
155 lines (131 loc) · 3.58 KB
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
150
151
152
153
154
155
-- Create Database
CREATE DATABASE library_db;
USE library_db;
-- ========================
-- TABLE: Branch
-- ========================
CREATE TABLE Branch (
branch_id VARCHAR(10) PRIMARY KEY,
manager_id VARCHAR(10),
address VARCHAR(50),
phone VARCHAR(15)
);
-- ========================
-- TABLE: Employee
-- ========================
CREATE TABLE Employee (
emp_id VARCHAR(10) PRIMARY KEY,
name VARCHAR(40),
role VARCHAR(30),
salary DECIMAL(10,2),
branch_id VARCHAR(10),
FOREIGN KEY (branch_id) REFERENCES Branch(branch_id)
);
-- ========================
-- TABLE: Customer
-- ========================
CREATE TABLE Customer (
cust_id VARCHAR(10) PRIMARY KEY,
name VARCHAR(40),
address VARCHAR(50),
registered_on DATE
);
-- ========================
-- TABLE: Books
-- ========================
CREATE TABLE Books (
isbn VARCHAR(25) PRIMARY KEY,
title VARCHAR(80),
category VARCHAR(30),
price DECIMAL(10,2),
availability ENUM('Available','Issued'),
author VARCHAR(40),
publisher VARCHAR(40)
);
-- ========================
-- TABLE: Issue Records
-- ========================
CREATE TABLE Issue (
issue_id VARCHAR(10) PRIMARY KEY,
cust_id VARCHAR(10),
isbn VARCHAR(25),
issue_date DATE,
FOREIGN KEY (cust_id) REFERENCES Customer(cust_id) ON DELETE CASCADE,
FOREIGN KEY (isbn) REFERENCES Books(isbn) ON DELETE CASCADE
);
-- ========================
-- TABLE: Return Records
-- ========================
CREATE TABLE ReturnLog (
return_id VARCHAR(10) PRIMARY KEY,
cust_id VARCHAR(10),
isbn VARCHAR(25),
return_date DATE,
FOREIGN KEY (isbn) REFERENCES Books(isbn) ON DELETE CASCADE
);
-- ========================
-- SAMPLE DATA INSERTION
-- ========================
INSERT INTO Branch VALUES
('B01','M101','Main Street','9990001111'),
('B02','M102','Elm Street','9990001112');
INSERT INTO Employee VALUES
('E01','John Doe','Manager',60000,'B01'),
('E02','Jane Smith','Clerk',45000,'B01'),
('E03','Mike','Librarian',55000,'B02');
INSERT INTO Customer VALUES
('C01','Alice','City A','2021-05-10'),
('C02','Bob','City B','2022-01-15');
INSERT INTO Books VALUES
('ISBN1','Book A','Fiction',500,'Available','Author A','Pub A'),
('ISBN2','Book B','History',600,'Issued','Author B','Pub B');
INSERT INTO Issue VALUES
('I01','C01','ISBN2','2023-05-01');
INSERT INTO ReturnLog VALUES
('R01','C01','ISBN2','2023-06-01');
-- ========================
-- QUERIES
-- ========================
-- 1. Available books
SELECT title, category, price
FROM Books
WHERE availability = 'Available';
-- 2. Employees sorted by salary
SELECT name, salary
FROM Employee
ORDER BY salary DESC;
-- 3. Issued books with customer names
SELECT b.title, c.name
FROM Issue i
JOIN Books b ON i.isbn = b.isbn
JOIN Customer c ON i.cust_id = c.cust_id;
-- 4. Book count per category
SELECT category, COUNT(*) AS total
FROM Books
GROUP BY category;
-- 5. Employees earning > 50000
SELECT name, role
FROM Employee
WHERE salary > 50000;
-- 6. Customers with no issued books
SELECT name
FROM Customer
WHERE cust_id NOT IN (SELECT cust_id FROM Issue);
-- 7. Employee count per branch
SELECT branch_id, COUNT(*) AS total_staff
FROM Employee
GROUP BY branch_id;
-- 8. Customers who issued books in June 2023
SELECT DISTINCT c.name
FROM Customer c
JOIN Issue i ON c.cust_id = i.cust_id
WHERE i.issue_date BETWEEN '2023-06-01' AND '2023-06-30';
-- 9. Books in History category
SELECT title
FROM Books
WHERE category = 'History';
-- 10. Branches with more than 2 employees
SELECT branch_id, COUNT(*) AS total
FROM Employee
GROUP BY branch_id
HAVING COUNT(*) > 2;