-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprocedure_functions.sql
100 lines (81 loc) · 2.24 KB
/
procedure_functions.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
USE SCHOOL;
DROP FUNCTION IF EXISTS addStudent;
DELIMITER $$
CREATE FUNCTION addStudent(
first_name VARCHAR(50),
last_name VARCHAR(50),
email_address VARCHAR(100),
date_of_Birth DATE,
student_grade VARCHAR(1)
)
RETURNS VARCHAR(50)
DETERMINISTIC
BEGIN
INSERT INTO Student(first_name, last_name, email_address, date_of_Birth, student_grade)
VALUES (first_name, last_name, email_address, date_of_Birth, student_grade);
RETURN first_name;
END$$
DELIMITER ;
-- Drop the getTeacherId function if it exists
DROP FUNCTION IF EXISTS getTeacherId;
DELIMITER $$
CREATE FUNCTION getTeacherId(
first_name VARCHAR(50),
last_name VARCHAR(50)
)
RETURNS INT
DETERMINISTIC
BEGIN
DECLARE id INT;
SELECT teacher_id INTO id
FROM Teacher
WHERE LOWER(teacher_first_name) = LOWER(first_name)
AND LOWER(teacher_last_name) = LOWER(last_name);
RETURN id;
END$$
DELIMITER ;
DROP PROCEDURE IF EXISTS
getAllStudents;
DELIMITER $$
CREATE PROCEDURE
getAllStudents()
BEGIN
SELECT *
FROM student;
END$$
DELIMITER ;
DROP PROCEDURE IF EXISTS getTeacherStudents;
DELIMITER $$
CREATE PROCEDURE getTeacherStudents(
first_name VARCHAR(50),
last_name VARCHAR(50)
)
BEGIN
DECLARE teacher_id INT;
SELECT getTeacherId(first_name, last_name) INTO teacher_id;
SELECT s.first_name, s.last_name
FROM Teacher AS t
INNER JOIN Classes AS c ON t.teacher_id = c.teacher_id
INNER JOIN ClassEnrollment AS cl ON c.Class_id = cl.Class_id
INNER JOIN Student AS s ON cl.ID = s.ID
WHERE t.teacher_id = teacher_id;
END$$
DELIMITER ;
DROP PROCEDURE IF EXISTS TeacherStudents;
DELIMITER $$
CREATE PROCEDURE TeacherStudents()
BEGIN
SELECT
s.first_name AS student_first_name,
s.last_name AS student_last_name,
t.teacher_first_name AS teacher_first_name,
t.teacher_last_name as teacher_last_name,
c.subject,
s.student_grade
FROM
Student AS s
INNER JOIN ClassEnrollment AS cl ON s.ID = cl.ID
INNER JOIN Classes AS c ON cl.class_id = c.class_id
INNER JOIN Teacher AS t ON c.teacher_id = t.teacher_id;
END $$
DELIMITER ;