-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBasic View, Procedure and Trigger.sql
More file actions
193 lines (161 loc) · 4.83 KB
/
Basic View, Procedure and Trigger.sql
File metadata and controls
193 lines (161 loc) · 4.83 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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
CREATE DATABASE db1;
USE db1;
-- Students Table
CREATE TABLE students (
student_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
department VARCHAR(50)
);
-- Courses Table
CREATE TABLE courses (
course_id INT PRIMARY KEY AUTO_INCREMENT,
course_name VARCHAR(50) NOT NULL,
credit_hours INT
);
-- Enrollments Table
CREATE TABLE enrollments (
enrollment_id INT PRIMARY KEY AUTO_INCREMENT,
student_id INT,
course_id INT,
enrollment_date DATE,
FOREIGN KEY (student_id) REFERENCES students(student_id),
FOREIGN KEY (course_id) REFERENCES courses(course_id)
);
-- Insert Sample Data
INSERT INTO students (name, email, department) VALUES
('Alice Johnson', 'alice@example.com', 'Computer Science'),
('Bob Smith', 'bob@example.com', 'Electrical Engineering'),
('Charlie Brown', 'charlie@example.com', 'Mathematics');
INSERT INTO courses (course_name, credit_hours) VALUES
('Database Systems', 3),
('Computer Networks', 3),
('Calculus', 4);
INSERT INTO enrollments (student_id, course_id, enrollment_date) VALUES
(1, 1, '2025-08-01'),
(1, 2, '2025-08-02'),
(2, 2, '2025-08-03'),
(3, 3, '2025-08-04');
-- VIEW
CREATE VIEW student_course_view AS
SELECT s.student_id, s.name AS student_name, c.course_name, e.enrollment_date
FROM students s
JOIN enrollments e ON s.student_id = e.student_id
JOIN courses c ON e.course_id = c.course_id;
SELECT * FROM student_course_view;
CREATE VIEW cs_students_view AS
SELECT s.name, c.course_name
FROM students s
JOIN enrollments e ON s.student_id = e.student_id
JOIN courses c ON e.course_id = c.course_id
WHERE s.department = 'Computer Science';
SELECT * FROM cs_students_view;
-- UPDATE VIEW
CREATE OR REPLACE VIEW cs_students_view AS
SELECT s.name, c.course_name, e.enrollment_date
FROM students s
JOIN enrollments e ON s.student_id = e.student_id
JOIN courses c ON e.course_id = c.course_id
WHERE s.department = 'Computer Science'
AND e.enrollment_date > '2025-08-01';
-- DROP VIEW
DROP VIEW cs_students_view;
-- STORED PROCEDURE
-- Show all students
DELIMITER $$
CREATE PROCEDURE get_all_students()
BEGIN
SELECT * FROM students;
END $$
DELIMITER ;
CALL get_all_students();
-- Find Student by id (IN Parameter)
DELIMITER //
CREATE PROCEDURE find_student(IN id INT)
BEGIN
SELECT * FROM students
WHERE student_id = id;
END //
DELIMITER ;
CALL find_student(2);
DROP PROCEDURE find_student;
-- Get courses for a specific student
DELIMITER //
CREATE PROCEDURE get_courses_by_student(IN studentName VARCHAR(50))
BEGIN
SELECT c.course_name, e.enrollment_date
FROM students s
JOIN enrollments e ON s.student_id = e.student_id
JOIN courses c ON e.course_id = c.course_id
WHERE s.name = studentName;
END //
DELIMITER ;
CALL get_courses_by_student('Alice Johnson');
-- Get total number of students (OUT Parameter)
DELIMITER %%
CREATE PROCEDURE count_students(OUT total INT)
BEGIN
SELECT COUNT(*) INTO total FROM students;
END %%
DELIMITER ;
CALL count_students(@total);
SELECT @total AS total_students;
-- Add a new enrollment
DELIMITER //
CREATE PROCEDURE add_enrollment(IN stu_id INT, IN course_id INT, IN enroll_date DATE)
BEGIN
INSERT INTO enrollments(student_id, course_id, enrollment_date)
VALUES (stu_id, course_id, enroll_date);
END //
DELIMITER ;
CALL add_enrollment(1, 3, '2025-08-05');
SELECT * FROM enrollments;
-- Count Students by Department (IN, OUT Parameter)
DELIMITER //
CREATE PROCEDURE disp_department(OUT total_students INT, IN dept_name VARCHAR(50))
BEGIN
SELECT COUNT(*) INTO total_students
FROM students
WHERE department = dept_name;
END //
DELIMITER ;
SET @total := 0;
CALL disp_department(@total, 'Electrical Engineering');
SELECT @total AS total_students_in_department;
-- Count Students by Course Name (INOUT Parameter)
DELIMITER //
CREATE PROCEDURE disp_course_students(INOUT total_students INT, IN courseName VARCHAR(100))
BEGIN
SELECT COUNT(e.student_id) INTO total_students
FROM courses c
LEFT JOIN enrollments e ON c.course_id = e.course_id
WHERE c.course_name = courseName;
END //
DELIMITER ;
SET @total := 0;
CALL disp_course_students(@total, 'Database Systems');
SELECT @total AS total_students_in_course;
-- TRIGGER
-- Create a log table
CREATE TABLE student_log (
log_id INT PRIMARY KEY AUTO_INCREMENT,
action VARCHAR(50),
student_name VARCHAR(50),
action_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Create Trigger (Log Student Insertions)
DELIMITER //
CREATE TRIGGER after_student_insert
AFTER INSERT ON students
FOR EACH ROW
BEGIN
INSERT INTO student_log (action, student_name)
VALUES ('INSERT', NEW.name);
END //
DELIMITER ;
-- Test Trigger
INSERT INTO students (name, email, department)
VALUES ('David Lee', 'david@example.com', 'Physics');
INSERT INTO students (name, email, department)
VALUES ('Supan Roy', 'roycss990@gmail.com', 'Chemistry');
SELECT * FROM student_log;