From 247d0b6d008652e74de08d58a9c000491f3f10a9 Mon Sep 17 00:00:00 2001 From: "github-classroom[bot]" <66690702+github-classroom[bot]@users.noreply.github.com> Date: Fri, 26 May 2023 04:06:08 +0000 Subject: [PATCH 01/10] Setting up GitHub Classroom Feedback From 6aaeb9690a4f2617587a7c187a3eb5cb1cdfe86c Mon Sep 17 00:00:00 2001 From: "Md. Mubtashim Abrar Nihal" <134641466+nihal07010@users.noreply.github.com> Date: Wed, 31 May 2023 10:56:54 +0600 Subject: [PATCH 02/10] Add files via upload --- DDL.sql | 68 ++++++++++++++++ DML.sql | 232 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ Query.sql | 211 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 511 insertions(+) create mode 100644 DDL.sql create mode 100644 DML.sql create mode 100644 Query.sql diff --git a/DDL.sql b/DDL.sql new file mode 100644 index 0000000..0307a33 --- /dev/null +++ b/DDL.sql @@ -0,0 +1,68 @@ +drop table advisor; +drop table takes; +drop table teaches; +drop table course; +drop table instructor; +drop table student; +drop table department; + +create table department( + dept_name varchar(5), + no_of_classrooms number(2, 0) check (no_of_classrooms > 0), + faculty varchar(5) check(faculty in ('CE', 'EEE', 'ME')), + primary key(dept_name) +); + +create table student( + id varchar(5), + name varchar(40) not null, + dept_name varchar(5), + tot_cred number(5, 2) check(tot_cred >= 0), + primary key(id), + foreign key(dept_name) references department(dept_name) on delete set null +); + +create table instructor( + id varchar(5), + name varchar(40) not null, + dept_name varchar(5), + salary number(8, 2) check(salary >= 20000), + primary key(id), + foreign key(dept_name) references department(dept_name) on delete set null +); + +create table course( + course_id varchar(10), + title varchar(60) not null, + dept_name varchar(5), + credit number(3, 2) check (credit >= 0.75), + semester varchar(3) check (semester in ('1st', '2nd')), + year varchar(3) check (year in ('1st', '2nd', '3rd', '4th')), + primary key(course_id), + foreign key(dept_name) references department(dept_name) on delete set null +); + +create table teaches( + id varchar(5), + course_id varchar(10), + primary key(id, course_id), + foreign key(id) references instructor(id) on delete cascade, + foreign key(course_id) references course(course_id) on delete cascade +); + +create table takes( + id varchar(5), + course_id varchar(10), + grade varchar(1) check (grade in ('A', 'B', 'C', 'D', 'F')), + primary key(id, course_id), + foreign key(id) references student(id) on delete cascade, + foreign key(course_id) references course(course_id) on delete cascade +); + +create table advisor( + s_id varchar(5), + i_id varchar(5), + primary key(s_id), + foreign key(s_id) references student(id) on delete cascade, + foreign key(i_id) references instructor(id) on delete set null +); \ No newline at end of file diff --git a/DML.sql b/DML.sql new file mode 100644 index 0000000..71c0ebf --- /dev/null +++ b/DML.sql @@ -0,0 +1,232 @@ +insert into department values('CE', 24, 'CE'); +insert into department values('URP', 16, 'CE'); +insert into department values('BECM', 16, 'CE'); +insert into department values('EEE', 24, 'EEE'); +insert into department values('CSE', 20, 'EEE'); +insert into department values('ECE', 16, 'EEE'); +insert into department values('ME', 24, 'ME'); +insert into department values('IEM', 16, 'ME'); +insert into department values('MTE', 12, 'ME'); + +insert into student values('19101', 'Rayhanul Islam Chowdhury', 'CE', 22.00); +insert into student values('19401', 'Kamrul Hasan Kallol', 'URP', 20.00); +insert into student values('19701', 'Sanad Das Pranto', 'BECM', 20.00); +insert into student values('19201', 'Nakkhatra Roy Shuvo', 'EEE', 22.00); +insert into student values('19501', 'Samiul Islam Shoaib', 'CSE', 21.00); +insert into student values('19801', 'Adham Abhi', 'ECE', 20.50); +insert into student values('19301', 'Nishat Tasnim Zinia', 'ME', 22.00); +insert into student values('19601', 'Progga Paromita Adrita', 'IEM', 20.00); +insert into student values('19901', 'Sumaya Islam Shoitee', 'MTE', 19.50); +insert into student values('19102', 'Sabbir Rahman', 'CE', 22.00); +insert into student values('19402', 'Shohanur Rahman Shaikat', 'URP', 20.00); +insert into student values('19702', 'Nazmul Islam Sadee', 'BECM', 20.00); +insert into student values('19202', 'Jahidul Islam Joy', 'EEE', 22.00); +insert into student values('19502', 'Sabbir Ahmed', 'CSE', 21.00); +insert into student values('19802', 'Shoumik Ahmed Siam', 'ECE', 20.50); +insert into student values('19302', 'Mubtashim Abrar Nihal', 'ME', 22.00); +insert into student values('19602', 'Mihrab Hossain Mafi', 'IEM', 20.00); +insert into student values('19902', 'Abu Taher', 'MTE', 19.50); +--03 +insert into student values('19103', 'Shaikh Mahmud', 'CE', 19.50); +insert into student values('19403', 'Mohammad Al Fahad', 'URP', 22.00); +insert into student values('19703', 'Imtiaj Hossain', 'BECM', 21.00); +insert into student values('19203', 'Tanoy Bhuiyan', 'EEE', 20.00); +insert into student values('19503', 'Jahidul Islam', 'CSE', 20.50); +insert into student values('19803', 'Mirajul Islam', 'ECE', 21.50); +insert into student values('19303', 'Tanvir Bhuiyan', 'ME', 21.00); +insert into student values('19603', 'Athar Ishrak', 'IEM', 22.00); +insert into student values('19903', 'Shahadat Hossain', 'MTE', 20.00); +--04 +insert into student values('19104', 'Shaikh Mahmud', 'CE', 19.50); +insert into student values('19404', 'Mohammad Al Fahad', 'URP', 22.00); +insert into student values('19704', 'Imtiaj Hossain', 'BECM', 21.00); +insert into student values('19204', 'Tanoy Bhuiyan', 'EEE', 20.00); +insert into student values('19504', 'Jahidul Islam', 'CSE', 20.50); +insert into student values('19804', 'Mirajul Islam', 'ECE', 21.50); +insert into student values('19304', 'Tanvir Bhuiyan', 'ME', 21.00); +insert into student values('19604', 'Athar Ishrak', 'IEM', 22.00); +insert into student values('19904', 'Shahadat Hossain', 'MTE', 20.00); + + +insert into instructor values('11101', 'Dr. Muhammed Alamgir', 'CE', 120000); +insert into instructor values('11102', 'Dr. Quazi Hamidul Bari', 'CE', 110000); +insert into instructor values('22201', 'Dr. Md. Nurunnabi Mollah', 'EEE', 120000); +insert into instructor values('22202', 'Dr. Md. Rafiqul Islam', 'EEE', 110000); +insert into instructor values('33301', 'Dr. Md. Kutub Uddin', 'ME', 120000); +insert into instructor values('33302', 'Dr. Khandkar Aftab Hossain', 'ME', 110000); +insert into instructor values('44401', 'Dr. Md. Mustafa Saroar', 'URP', 100000); +insert into instructor values('44402', 'Tusar Kanti Roy', 'URP', 90000); +insert into instructor values('55501', 'Dr. M. M. A. Hashem', 'CSE', 100000); +insert into instructor values('55502', 'Dr. K. M. Azharul Hasan', 'CSE', 90000); +insert into instructor values('66601', 'Dr. Subrata Talapatra', 'IEM', 100000); +insert into instructor values('66602', 'Dr. Md. Rafiquzzaman', 'IEM', 90000); +insert into instructor values('77701', 'Md. Ikramul Hoque', 'BECM', 80000); +insert into instructor values('77702', 'Jhumana Akter', 'BECM', 70000); +insert into instructor values('88801', 'Dr. Md. Mostafizur Rahman', 'ECE', 80000); +insert into instructor values('88802', 'Dr. Md. Rafuque Hossain', 'ECE', 70000); +insert into instructor values('99901', 'Sourav Roy', 'MTE', 60000); +insert into instructor values('99902', 'Dr. Asief Javed', 'MTE', 50000); + +insert into course values('CE3161', 'Engineering Hydraulics', 'CE', 4.00, '1st', '3rd'); +insert into course values('CE3141', 'Environmental Engineering-I', 'CE', 3.00, '1st', '3rd'); +insert into course values('URP3161', 'Housing and Real Estate Development', 'URP', 3.00, '1st', '3rd'); +insert into course values('URP3107', 'Elements of Solid Mechanics', 'URP', 3.00, '1st', '3rd'); +insert into course values('BECM3107', 'Construction Contract and Law', 'BECM', 4.00, '1st', '3rd'); +insert into course values('BECM3115', 'Climate and Architectural Design', 'BECM', 2.00, '1st', '3rd'); +insert into course values('EEE3113', 'Digital Electronics and Logic Design', 'EEE', 3.00, '1st', '3rd'); +insert into course values('EEE3116', 'Sessional on Electrical Measurement and Instrumentation', 'EEE', 0.75, '1st', '3rd'); +insert into course values('CSE3100', 'Web Programming Laboratory', 'CSE', 1.50, '1st', '3rd'); +insert into course values('CSE3101', 'Operating Systems', 'CSE', 3.00, '1st', '3rd'); +insert into course values('ECE3100', 'Internet Programming Laboratory', 'ECE', 1.50, '1st', '3rd'); +insert into course values('ECE3109', 'Numerical Analysis', 'ECE', 3.00, '1st', '3rd'); +insert into course values('ME3100', 'Special Studies', 'ME', 0.75, '1st', '3rd'); +insert into course values('ME3119', 'Statistics &. Quality Control', 'ME', 4.00, '1st', '3rd'); +insert into course values('IPE3103', 'Engineering Metallurgy', 'IEM', 3.00, '1st', '3rd'); +insert into course values('IPE3115', 'Engineering Economy', 'IEM', 3.00, '1st', '3rd'); +insert into course values('MTE3100', 'Seminar and Scientific Writing', 'MTE', 0.75, '1st', '3rd'); +insert into course values('MTE3103', 'Microprocessor, Microcontroller and Interfacing', 'MTE', 3.00, '1st', '3rd'); + +insert into teaches values('11101', 'CE3161'); +insert into teaches values('11102', 'CE3141'); +insert into teaches values('22201', 'EEE3113'); +insert into teaches values('22202', 'EEE3116'); +insert into teaches values('33301', 'ME3100'); +insert into teaches values('33302', 'ME3119'); +insert into teaches values('44401', 'URP3161'); +insert into teaches values('44402', 'URP3107'); +insert into teaches values('55501', 'CSE3100'); +insert into teaches values('55502', 'CSE3101'); +insert into teaches values('66601', 'IPE3103'); +insert into teaches values('66602', 'IPE3115'); +insert into teaches values('77701', 'BECM3107'); +insert into teaches values('77702', 'BECM3115'); +insert into teaches values('88801', 'ECE3100'); +insert into teaches values('88802', 'ECE3109'); +insert into teaches values('99901', 'MTE3100'); +insert into teaches values('99902', 'MTE3103'); + +insert into takes values('19101', 'CE3161', 'A'); +insert into takes values('19101', 'CE3141', 'B'); +insert into takes values('19102', 'CE3161', 'C'); +insert into takes values('19102', 'CE3141', 'D'); +insert into takes values('19103', 'CE3161', 'D'); +insert into takes values('19103', 'CE3141', 'C'); +insert into takes values('19104', 'CE3161', 'B'); +insert into takes values('19104', 'CE3141', 'A'); + +insert into takes values('19201', 'EEE3113', 'B'); +insert into takes values('19201', 'EEE3116', 'C'); +insert into takes values('19202', 'EEE3113', 'D'); +insert into takes values('19202', 'EEE3116', 'A'); +insert into takes values('19203', 'EEE3113', 'A'); +insert into takes values('19203', 'EEE3116', 'D'); +insert into takes values('19204', 'EEE3113', 'C'); +insert into takes values('19204', 'EEE3116', 'B'); + +insert into takes values('19301', 'ME3100', 'C'); +insert into takes values('19301', 'ME3119', 'D'); +insert into takes values('19302', 'ME3100', 'A'); +insert into takes values('19302', 'ME3119', 'B'); +insert into takes values('19303', 'ME3100', 'B'); +insert into takes values('19303', 'ME3119', 'A'); +insert into takes values('19304', 'ME3100', 'D'); +insert into takes values('19304', 'ME3119', 'C'); + +insert into takes values('19401', 'URP3161', 'D'); +insert into takes values('19401', 'URP3107', 'A'); +insert into takes values('19402', 'URP3161', 'B'); +insert into takes values('19402', 'URP3107', 'C'); +insert into takes values('19403', 'URP3161', 'C'); +insert into takes values('19403', 'URP3107', 'B'); +insert into takes values('19404', 'URP3161', 'A'); +insert into takes values('19404', 'URP3107', 'D'); + +insert into takes values('19501', 'CSE3100', 'A'); +insert into takes values('19501', 'CSE3101', 'B'); +insert into takes values('19502', 'CSE3100', 'C'); +insert into takes values('19502', 'CSE3101', 'D'); +insert into takes values('19503', 'CSE3100', 'D'); +insert into takes values('19503', 'CSE3101', 'C'); +insert into takes values('19504', 'CSE3100', 'B'); +insert into takes values('19504', 'CSE3101', 'A'); + +insert into takes values('19601', 'IPE3103', 'B'); +insert into takes values('19601', 'IPE3115', 'C'); +insert into takes values('19602', 'IPE3103', 'D'); +insert into takes values('19602', 'IPE3115', 'A'); +insert into takes values('19603', 'IPE3103', 'A'); +insert into takes values('19603', 'IPE3115', 'D'); +insert into takes values('19604', 'IPE3103', 'C'); +insert into takes values('19604', 'IPE3115', 'B'); + +insert into takes values('19701', 'BECM3107', 'C'); +insert into takes values('19701', 'BECM3115', 'D'); +insert into takes values('19702', 'BECM3107', 'A'); +insert into takes values('19702', 'BECM3115', 'B'); +insert into takes values('19703', 'BECM3107', 'B'); +insert into takes values('19703', 'BECM3115', 'A'); +insert into takes values('19704', 'BECM3107', 'D'); +insert into takes values('19704', 'BECM3115', 'C'); + +insert into takes values('19801', 'ECE3100', 'D'); +insert into takes values('19801', 'ECE3109', 'A'); +insert into takes values('19802', 'ECE3100', 'B'); +insert into takes values('19802', 'ECE3109', 'C'); +insert into takes values('19803', 'ECE3100', 'C'); +insert into takes values('19803', 'ECE3109', 'B'); +insert into takes values('19804', 'ECE3100', 'C'); +insert into takes values('19804', 'ECE3109', 'D'); + +insert into takes values('19901', 'MTE3100', 'A'); +insert into takes values('19901', 'MTE3103', 'B'); +insert into takes values('19902', 'MTE3100', 'C'); +insert into takes values('19902', 'MTE3103', 'D'); +insert into takes values('19903', 'MTE3100', 'D'); +insert into takes values('19903', 'MTE3103', 'C'); +insert into takes values('19904', 'MTE3100', 'D'); +insert into takes values('19904', 'MTE3103', 'A'); + +insert into advisor values ('19101', '11101'); +insert into advisor values ('19102', '11101'); +insert into advisor values ('19103', '11101'); +insert into advisor values ('19104', '11101'); + +insert into advisor values ('19201', '22201'); +insert into advisor values ('19202', '22201'); +insert into advisor values ('19203', '22201'); +insert into advisor values ('19204', '22201'); + +insert into advisor values ('19301', '33301'); +insert into advisor values ('19302', '33301'); +insert into advisor values ('19303', '33301'); +insert into advisor values ('19304', '33301'); + +insert into advisor values ('19401', '44401'); +insert into advisor values ('19402', '44401'); +insert into advisor values ('19403', '44401'); +insert into advisor values ('19404', '44401'); + +insert into advisor values ('19501', '55501'); +insert into advisor values ('19502', '55501'); +insert into advisor values ('19503', '55501'); +insert into advisor values ('19504', '55501'); + +insert into advisor values ('19601', '66601'); +insert into advisor values ('19602', '66601'); +insert into advisor values ('19603', '66601'); +insert into advisor values ('19604', '66601'); + +insert into advisor values ('19701', '77701'); +insert into advisor values ('19702', '77701'); +insert into advisor values ('19703', '77701'); +insert into advisor values ('19704', '77701'); + +insert into advisor values ('19801', '88801'); +insert into advisor values ('19802', '88801'); +insert into advisor values ('19803', '88801'); +insert into advisor values ('19804', '88801'); + +insert into advisor values ('19901', '99901'); +insert into advisor values ('19902', '99901'); +insert into advisor values ('19903', '99901'); +insert into advisor values ('19904', '99901'); \ No newline at end of file diff --git a/Query.sql b/Query.sql new file mode 100644 index 0000000..9b4de2c --- /dev/null +++ b/Query.sql @@ -0,0 +1,211 @@ +-- Aggregate Functions(count, sum, avg, min, max) with having +-- Total no. of classrooms in each faculty +select faculty, sum(no_of_classrooms) as Total_no_of_classrooms from department group by faculty; +-- Average salary of teachers in each department +select dept_name, avg(salary) as Average_salary from instructor group by dept_name; +-- Total no. of students in each department +select dept_name, count(*) as Total_no_of_students from student group by dept_name; +-- Minimum salary of teachers in each department +select dept_name, min(salary) as Minimum_salary from instructor group by dept_name; +-- Maximum salary of teachers in each department +select dept_name, max(salary) as Maximum_salary from instructor group by dept_name; +-- Name of faculty having more than 55 classrooms with no. of classrooms and no. of departments +select faculty, sum(no_of_classrooms) as Total_no_of_classrooms, count(dept_name) as Number_of_departments from department group by faculty having sum(no_of_classrooms) > 55; + +-- String +-- Name of the 1st boy/girl in each department +select dept_name, name from student where id like '____1'; + +-- Union, Intersection, Except +-- Name of dept having at least one student with total credit more than 20 or having more than 15 classrooms +(select dept_name from student where tot_cred > 20) union (select dept_name from department where no_of_classrooms > 20); +-- Name of courses having credit greater than or equal to 3.0 and at least one student has got A on that course +(select course_id from course where credit >= 3.0) intersect (select course_id from takes where grade like 'A'); +-- Name of courses having credit equal to 4.00 and students taking that course has got less than 'A' +(select course_id from course where credit = 4.0) except (select course_id from takes where grade like 'A'); + +-- In, Not in +-- Name of students who have taken courses taught by instructor with id = '11101'; +select name from student where id in (select id from takes where course_id in (select course_id from teaches where id like '11101')); +-- Titles of courses that are taught in 3rd year but not in 'ME' faculty +select title from course where year like '3rd' and dept_name not in (select dept_name from department where faculty like 'ME'); + +-- And, Or, Not +-- Title of all course taught in 3rd year in 'CSE' dept +select title from course where dept_name like 'CSE' and year like '3rd'; +-- Title of all courses taught in 'CSE' dept or 'EEE' dept +select title from course where dept_name like 'CSE' or dept_name like 'EEE'; +-- Name of instructors who are not in 'CSE' dept; +select name from instructor where not dept_name like 'CSE'; + +-- Some, All, Exist, Distinct +-- Name of students who have got D in some courses +select id from student where id = some(select id from takes where grade like 'D'); +-- Name of instructors in each faculty having highest salary +select name from instructor where salary >= all (select salary from instructor); +-- Name of students who have got A in some courses +select name from student where exists (select * from takes where grade like 'A' and student.id = takes.id); +-- Name of all faculty +select distinct faculty from department; + +-- Join +-- List of all advisors and their advisees of 'EEE' faculty +select i.name as Advisor, s.name as Advisee from student s join advisor a on s.id = a.s_id join instructor i on i.id = a.i_id where s.dept_name in (select dept_name from department where faculty like 'EEE'); + +-- View +-- Find Top 3 students of 'EEE' faculty +create or replace view results as select name, fCgpa(id) as cgpa from student where dept_name in (select dept_name from department where faculty like 'EEE') order by cgpa desc; +select * from results fetch next 3 rows only; + +-- With +-- List of faculty which has the maximum average salary +with avg_salary(faculty, avg_sal) as (select faculty, avg(salary) from instructor i join department d on i.dept_name = d.dept_name group by faculty) +select faculty, avg_sal from avg_salary where avg_sal = (select max(avg_sal) from avg_salary); + +-- PL/SQL +-- Find the salary of the advisor of student having ID = '19101' +set serveroutput on +declare +name instructor.name%type; +salary instructor.salary%type; +begin +select name, salary into name, salary from instructor where id = (select i_id from advisor where s_id = '19101'); +dbms_output.put_line('Salary of ' || name || ': ' || salary); +end; +/ +-- Find information of all 4 credit courses +set serveroutput on +declare +cursor c is select * from course where credit = 4.0; +course_info course%rowtype; +begin +open c; +fetch c into course_info.course_id, course_info.title, course_info.dept_name, course_info.credit, course_info.semester, course_info.year; +while c%found loop +dbms_output.put_line('Course ID: ' || course_info.course_id || ', Title: ' || course_info.title || ', Dept. Name: ' || course_info.dept_name || ', Year: ' || course_info.year || ', Semester: ' || course_info.semester); +fetch c into course_info.course_id, course_info.title, course_info.dept_name, course_info.credit, course_info.semester, course_info.year; +end loop; +close c; +end; +/ +-- Find the name of the students who are of 'EEE' faculty and got A in any course +set serveroutput on +declare +cursor c is select name from student where dept_name in (select dept_name from department where faculty like 'EEE') and id in (select id from takes where grade like 'A'); +type namearray is varray(20) of student.name%type; +names namearray := namearray(); +cnt number := 0; +begin + for info in c loop + names.extend; + cnt := cnt + 1; + names(cnt) := info.name; + end loop; + for i in 1 .. cnt loop + dbms_output.put_line('Name: ' || names(i)); + end loop; +end; +/ +-- Show the faculty name of each student +set serveroutput on +declare +cursor c is select * from student; +begin + for info in c loop + if info.id like '__1%' or info.id like '__4%' or info.id like '__7%' + then + dbms_output.put_line('Name: ' || info.name || ', Faculty: CE'); + elsif info.id like '__2%' or info.id like '__5%' or info.id like '__8%' + then + dbms_output.put_line('Name: ' || info.name || ', Faculty: EEE'); + else + dbms_output.put_line('Name: ' || info.name || ', Faculty: ME'); + end if; + end loop; +end; +/ + +-- Procedure +-- Find all information of a student by a given ID +create or replace procedure fInfoProc(varId in student.id%type) as +cursor c is select * from takes where id = varId; +type courseIdArray is varray(10) of course.title%type; +type gradeArray is varray(10) of takes.grade%type; +info1 student%rowtype; +info2 instructor.name%type; +info3 takes%rowtype; +courses courseIdArray := courseIdArray(); +grades gradeArray := gradeArray(); +cnt integer := 0; +begin + select name, dept_name, tot_cred into info1.name, info1.dept_name, info1.tot_cred from student where id = varId; + select name into info2 from instructor where id = (select i_id from advisor where s_id = varId); + for info in c loop + courses.extend; + grades.extend; + cnt := cnt + 1; + select title into courses(cnt) from course where course_id = info.course_id; + grades(cnt) := info.grade; + end loop; + dbms_output.put_line('Name: ' || info1.name); + dbms_output.put_line('Dept. Name: ' || info1.dept_name); + dbms_output.put_line('Total Credit: ' || info1.tot_cred); + dbms_output.put_line('Advisor Name: ' || info2); + dbms_output.put_line('---<< Course Title with Grades >>---'); + for i in 1 .. cnt loop + dbms_output.put_line('Course: ' || courses(i) || ', Grade: ' || grades(i)); + end loop; +end; +/ +begin +finfoproc(19101); +end; +/ + +-- Function +-- Find the result of student by a given ID +create or replace function fCgpa(varId in student.id%type) return number as +cursor c is select * from takes where id = varId; +grad numeric(2, 1); +cred numeric(2, 1); +tot_grad numeric(4, 2) := 0; +tot_cred numeric(4, 2) := 0; +cgpa numeric(4, 2) := 0; +begin +for info in c loop + if info.grade like 'A' + then + grad := 4.0; + elsif info.grade like 'B' + then + grad := 3.5; + elsif info.grade like 'C' + then + grad := 3.0; + elsif info.grade like 'D' + then + grad := 2.5; + else + grad := 0; + end if; + select credit into cred from course where info.course_id like course.course_id; + tot_grad := tot_grad + cred * grad; + tot_cred := tot_cred + cred; +end loop; +cgpa := tot_grad / tot_cred; +return cgpa; +end; +/ +declare +vId student.id%type := 19101; +cgpa numeric(4, 2) := 0; +name student.name%type; +begin +select name into name from student where id = vId; +cgpa := fCgpa(vId); +dbms_output.put_line('Name: ' || name || ', CGPA: ' || cgpa); +end; +/ + + + From d88122cc0856783c871596c5fade2a7daacb07cb Mon Sep 17 00:00:00 2001 From: "Md. Mubtashim Abrar Nihal" <134641466+nihal07010@users.noreply.github.com> Date: Wed, 31 May 2023 12:25:06 +0600 Subject: [PATCH 03/10] Delete DDL.sql --- DDL.sql | 68 --------------------------------------------------------- 1 file changed, 68 deletions(-) delete mode 100644 DDL.sql diff --git a/DDL.sql b/DDL.sql deleted file mode 100644 index 0307a33..0000000 --- a/DDL.sql +++ /dev/null @@ -1,68 +0,0 @@ -drop table advisor; -drop table takes; -drop table teaches; -drop table course; -drop table instructor; -drop table student; -drop table department; - -create table department( - dept_name varchar(5), - no_of_classrooms number(2, 0) check (no_of_classrooms > 0), - faculty varchar(5) check(faculty in ('CE', 'EEE', 'ME')), - primary key(dept_name) -); - -create table student( - id varchar(5), - name varchar(40) not null, - dept_name varchar(5), - tot_cred number(5, 2) check(tot_cred >= 0), - primary key(id), - foreign key(dept_name) references department(dept_name) on delete set null -); - -create table instructor( - id varchar(5), - name varchar(40) not null, - dept_name varchar(5), - salary number(8, 2) check(salary >= 20000), - primary key(id), - foreign key(dept_name) references department(dept_name) on delete set null -); - -create table course( - course_id varchar(10), - title varchar(60) not null, - dept_name varchar(5), - credit number(3, 2) check (credit >= 0.75), - semester varchar(3) check (semester in ('1st', '2nd')), - year varchar(3) check (year in ('1st', '2nd', '3rd', '4th')), - primary key(course_id), - foreign key(dept_name) references department(dept_name) on delete set null -); - -create table teaches( - id varchar(5), - course_id varchar(10), - primary key(id, course_id), - foreign key(id) references instructor(id) on delete cascade, - foreign key(course_id) references course(course_id) on delete cascade -); - -create table takes( - id varchar(5), - course_id varchar(10), - grade varchar(1) check (grade in ('A', 'B', 'C', 'D', 'F')), - primary key(id, course_id), - foreign key(id) references student(id) on delete cascade, - foreign key(course_id) references course(course_id) on delete cascade -); - -create table advisor( - s_id varchar(5), - i_id varchar(5), - primary key(s_id), - foreign key(s_id) references student(id) on delete cascade, - foreign key(i_id) references instructor(id) on delete set null -); \ No newline at end of file From 2b004419d61b1c93a187ded182d7c07f0fd1a2c7 Mon Sep 17 00:00:00 2001 From: "Md. Mubtashim Abrar Nihal" <134641466+nihal07010@users.noreply.github.com> Date: Wed, 31 May 2023 12:25:21 +0600 Subject: [PATCH 04/10] Delete DML.sql --- DML.sql | 232 -------------------------------------------------------- 1 file changed, 232 deletions(-) delete mode 100644 DML.sql diff --git a/DML.sql b/DML.sql deleted file mode 100644 index 71c0ebf..0000000 --- a/DML.sql +++ /dev/null @@ -1,232 +0,0 @@ -insert into department values('CE', 24, 'CE'); -insert into department values('URP', 16, 'CE'); -insert into department values('BECM', 16, 'CE'); -insert into department values('EEE', 24, 'EEE'); -insert into department values('CSE', 20, 'EEE'); -insert into department values('ECE', 16, 'EEE'); -insert into department values('ME', 24, 'ME'); -insert into department values('IEM', 16, 'ME'); -insert into department values('MTE', 12, 'ME'); - -insert into student values('19101', 'Rayhanul Islam Chowdhury', 'CE', 22.00); -insert into student values('19401', 'Kamrul Hasan Kallol', 'URP', 20.00); -insert into student values('19701', 'Sanad Das Pranto', 'BECM', 20.00); -insert into student values('19201', 'Nakkhatra Roy Shuvo', 'EEE', 22.00); -insert into student values('19501', 'Samiul Islam Shoaib', 'CSE', 21.00); -insert into student values('19801', 'Adham Abhi', 'ECE', 20.50); -insert into student values('19301', 'Nishat Tasnim Zinia', 'ME', 22.00); -insert into student values('19601', 'Progga Paromita Adrita', 'IEM', 20.00); -insert into student values('19901', 'Sumaya Islam Shoitee', 'MTE', 19.50); -insert into student values('19102', 'Sabbir Rahman', 'CE', 22.00); -insert into student values('19402', 'Shohanur Rahman Shaikat', 'URP', 20.00); -insert into student values('19702', 'Nazmul Islam Sadee', 'BECM', 20.00); -insert into student values('19202', 'Jahidul Islam Joy', 'EEE', 22.00); -insert into student values('19502', 'Sabbir Ahmed', 'CSE', 21.00); -insert into student values('19802', 'Shoumik Ahmed Siam', 'ECE', 20.50); -insert into student values('19302', 'Mubtashim Abrar Nihal', 'ME', 22.00); -insert into student values('19602', 'Mihrab Hossain Mafi', 'IEM', 20.00); -insert into student values('19902', 'Abu Taher', 'MTE', 19.50); ---03 -insert into student values('19103', 'Shaikh Mahmud', 'CE', 19.50); -insert into student values('19403', 'Mohammad Al Fahad', 'URP', 22.00); -insert into student values('19703', 'Imtiaj Hossain', 'BECM', 21.00); -insert into student values('19203', 'Tanoy Bhuiyan', 'EEE', 20.00); -insert into student values('19503', 'Jahidul Islam', 'CSE', 20.50); -insert into student values('19803', 'Mirajul Islam', 'ECE', 21.50); -insert into student values('19303', 'Tanvir Bhuiyan', 'ME', 21.00); -insert into student values('19603', 'Athar Ishrak', 'IEM', 22.00); -insert into student values('19903', 'Shahadat Hossain', 'MTE', 20.00); ---04 -insert into student values('19104', 'Shaikh Mahmud', 'CE', 19.50); -insert into student values('19404', 'Mohammad Al Fahad', 'URP', 22.00); -insert into student values('19704', 'Imtiaj Hossain', 'BECM', 21.00); -insert into student values('19204', 'Tanoy Bhuiyan', 'EEE', 20.00); -insert into student values('19504', 'Jahidul Islam', 'CSE', 20.50); -insert into student values('19804', 'Mirajul Islam', 'ECE', 21.50); -insert into student values('19304', 'Tanvir Bhuiyan', 'ME', 21.00); -insert into student values('19604', 'Athar Ishrak', 'IEM', 22.00); -insert into student values('19904', 'Shahadat Hossain', 'MTE', 20.00); - - -insert into instructor values('11101', 'Dr. Muhammed Alamgir', 'CE', 120000); -insert into instructor values('11102', 'Dr. Quazi Hamidul Bari', 'CE', 110000); -insert into instructor values('22201', 'Dr. Md. Nurunnabi Mollah', 'EEE', 120000); -insert into instructor values('22202', 'Dr. Md. Rafiqul Islam', 'EEE', 110000); -insert into instructor values('33301', 'Dr. Md. Kutub Uddin', 'ME', 120000); -insert into instructor values('33302', 'Dr. Khandkar Aftab Hossain', 'ME', 110000); -insert into instructor values('44401', 'Dr. Md. Mustafa Saroar', 'URP', 100000); -insert into instructor values('44402', 'Tusar Kanti Roy', 'URP', 90000); -insert into instructor values('55501', 'Dr. M. M. A. Hashem', 'CSE', 100000); -insert into instructor values('55502', 'Dr. K. M. Azharul Hasan', 'CSE', 90000); -insert into instructor values('66601', 'Dr. Subrata Talapatra', 'IEM', 100000); -insert into instructor values('66602', 'Dr. Md. Rafiquzzaman', 'IEM', 90000); -insert into instructor values('77701', 'Md. Ikramul Hoque', 'BECM', 80000); -insert into instructor values('77702', 'Jhumana Akter', 'BECM', 70000); -insert into instructor values('88801', 'Dr. Md. Mostafizur Rahman', 'ECE', 80000); -insert into instructor values('88802', 'Dr. Md. Rafuque Hossain', 'ECE', 70000); -insert into instructor values('99901', 'Sourav Roy', 'MTE', 60000); -insert into instructor values('99902', 'Dr. Asief Javed', 'MTE', 50000); - -insert into course values('CE3161', 'Engineering Hydraulics', 'CE', 4.00, '1st', '3rd'); -insert into course values('CE3141', 'Environmental Engineering-I', 'CE', 3.00, '1st', '3rd'); -insert into course values('URP3161', 'Housing and Real Estate Development', 'URP', 3.00, '1st', '3rd'); -insert into course values('URP3107', 'Elements of Solid Mechanics', 'URP', 3.00, '1st', '3rd'); -insert into course values('BECM3107', 'Construction Contract and Law', 'BECM', 4.00, '1st', '3rd'); -insert into course values('BECM3115', 'Climate and Architectural Design', 'BECM', 2.00, '1st', '3rd'); -insert into course values('EEE3113', 'Digital Electronics and Logic Design', 'EEE', 3.00, '1st', '3rd'); -insert into course values('EEE3116', 'Sessional on Electrical Measurement and Instrumentation', 'EEE', 0.75, '1st', '3rd'); -insert into course values('CSE3100', 'Web Programming Laboratory', 'CSE', 1.50, '1st', '3rd'); -insert into course values('CSE3101', 'Operating Systems', 'CSE', 3.00, '1st', '3rd'); -insert into course values('ECE3100', 'Internet Programming Laboratory', 'ECE', 1.50, '1st', '3rd'); -insert into course values('ECE3109', 'Numerical Analysis', 'ECE', 3.00, '1st', '3rd'); -insert into course values('ME3100', 'Special Studies', 'ME', 0.75, '1st', '3rd'); -insert into course values('ME3119', 'Statistics &. Quality Control', 'ME', 4.00, '1st', '3rd'); -insert into course values('IPE3103', 'Engineering Metallurgy', 'IEM', 3.00, '1st', '3rd'); -insert into course values('IPE3115', 'Engineering Economy', 'IEM', 3.00, '1st', '3rd'); -insert into course values('MTE3100', 'Seminar and Scientific Writing', 'MTE', 0.75, '1st', '3rd'); -insert into course values('MTE3103', 'Microprocessor, Microcontroller and Interfacing', 'MTE', 3.00, '1st', '3rd'); - -insert into teaches values('11101', 'CE3161'); -insert into teaches values('11102', 'CE3141'); -insert into teaches values('22201', 'EEE3113'); -insert into teaches values('22202', 'EEE3116'); -insert into teaches values('33301', 'ME3100'); -insert into teaches values('33302', 'ME3119'); -insert into teaches values('44401', 'URP3161'); -insert into teaches values('44402', 'URP3107'); -insert into teaches values('55501', 'CSE3100'); -insert into teaches values('55502', 'CSE3101'); -insert into teaches values('66601', 'IPE3103'); -insert into teaches values('66602', 'IPE3115'); -insert into teaches values('77701', 'BECM3107'); -insert into teaches values('77702', 'BECM3115'); -insert into teaches values('88801', 'ECE3100'); -insert into teaches values('88802', 'ECE3109'); -insert into teaches values('99901', 'MTE3100'); -insert into teaches values('99902', 'MTE3103'); - -insert into takes values('19101', 'CE3161', 'A'); -insert into takes values('19101', 'CE3141', 'B'); -insert into takes values('19102', 'CE3161', 'C'); -insert into takes values('19102', 'CE3141', 'D'); -insert into takes values('19103', 'CE3161', 'D'); -insert into takes values('19103', 'CE3141', 'C'); -insert into takes values('19104', 'CE3161', 'B'); -insert into takes values('19104', 'CE3141', 'A'); - -insert into takes values('19201', 'EEE3113', 'B'); -insert into takes values('19201', 'EEE3116', 'C'); -insert into takes values('19202', 'EEE3113', 'D'); -insert into takes values('19202', 'EEE3116', 'A'); -insert into takes values('19203', 'EEE3113', 'A'); -insert into takes values('19203', 'EEE3116', 'D'); -insert into takes values('19204', 'EEE3113', 'C'); -insert into takes values('19204', 'EEE3116', 'B'); - -insert into takes values('19301', 'ME3100', 'C'); -insert into takes values('19301', 'ME3119', 'D'); -insert into takes values('19302', 'ME3100', 'A'); -insert into takes values('19302', 'ME3119', 'B'); -insert into takes values('19303', 'ME3100', 'B'); -insert into takes values('19303', 'ME3119', 'A'); -insert into takes values('19304', 'ME3100', 'D'); -insert into takes values('19304', 'ME3119', 'C'); - -insert into takes values('19401', 'URP3161', 'D'); -insert into takes values('19401', 'URP3107', 'A'); -insert into takes values('19402', 'URP3161', 'B'); -insert into takes values('19402', 'URP3107', 'C'); -insert into takes values('19403', 'URP3161', 'C'); -insert into takes values('19403', 'URP3107', 'B'); -insert into takes values('19404', 'URP3161', 'A'); -insert into takes values('19404', 'URP3107', 'D'); - -insert into takes values('19501', 'CSE3100', 'A'); -insert into takes values('19501', 'CSE3101', 'B'); -insert into takes values('19502', 'CSE3100', 'C'); -insert into takes values('19502', 'CSE3101', 'D'); -insert into takes values('19503', 'CSE3100', 'D'); -insert into takes values('19503', 'CSE3101', 'C'); -insert into takes values('19504', 'CSE3100', 'B'); -insert into takes values('19504', 'CSE3101', 'A'); - -insert into takes values('19601', 'IPE3103', 'B'); -insert into takes values('19601', 'IPE3115', 'C'); -insert into takes values('19602', 'IPE3103', 'D'); -insert into takes values('19602', 'IPE3115', 'A'); -insert into takes values('19603', 'IPE3103', 'A'); -insert into takes values('19603', 'IPE3115', 'D'); -insert into takes values('19604', 'IPE3103', 'C'); -insert into takes values('19604', 'IPE3115', 'B'); - -insert into takes values('19701', 'BECM3107', 'C'); -insert into takes values('19701', 'BECM3115', 'D'); -insert into takes values('19702', 'BECM3107', 'A'); -insert into takes values('19702', 'BECM3115', 'B'); -insert into takes values('19703', 'BECM3107', 'B'); -insert into takes values('19703', 'BECM3115', 'A'); -insert into takes values('19704', 'BECM3107', 'D'); -insert into takes values('19704', 'BECM3115', 'C'); - -insert into takes values('19801', 'ECE3100', 'D'); -insert into takes values('19801', 'ECE3109', 'A'); -insert into takes values('19802', 'ECE3100', 'B'); -insert into takes values('19802', 'ECE3109', 'C'); -insert into takes values('19803', 'ECE3100', 'C'); -insert into takes values('19803', 'ECE3109', 'B'); -insert into takes values('19804', 'ECE3100', 'C'); -insert into takes values('19804', 'ECE3109', 'D'); - -insert into takes values('19901', 'MTE3100', 'A'); -insert into takes values('19901', 'MTE3103', 'B'); -insert into takes values('19902', 'MTE3100', 'C'); -insert into takes values('19902', 'MTE3103', 'D'); -insert into takes values('19903', 'MTE3100', 'D'); -insert into takes values('19903', 'MTE3103', 'C'); -insert into takes values('19904', 'MTE3100', 'D'); -insert into takes values('19904', 'MTE3103', 'A'); - -insert into advisor values ('19101', '11101'); -insert into advisor values ('19102', '11101'); -insert into advisor values ('19103', '11101'); -insert into advisor values ('19104', '11101'); - -insert into advisor values ('19201', '22201'); -insert into advisor values ('19202', '22201'); -insert into advisor values ('19203', '22201'); -insert into advisor values ('19204', '22201'); - -insert into advisor values ('19301', '33301'); -insert into advisor values ('19302', '33301'); -insert into advisor values ('19303', '33301'); -insert into advisor values ('19304', '33301'); - -insert into advisor values ('19401', '44401'); -insert into advisor values ('19402', '44401'); -insert into advisor values ('19403', '44401'); -insert into advisor values ('19404', '44401'); - -insert into advisor values ('19501', '55501'); -insert into advisor values ('19502', '55501'); -insert into advisor values ('19503', '55501'); -insert into advisor values ('19504', '55501'); - -insert into advisor values ('19601', '66601'); -insert into advisor values ('19602', '66601'); -insert into advisor values ('19603', '66601'); -insert into advisor values ('19604', '66601'); - -insert into advisor values ('19701', '77701'); -insert into advisor values ('19702', '77701'); -insert into advisor values ('19703', '77701'); -insert into advisor values ('19704', '77701'); - -insert into advisor values ('19801', '88801'); -insert into advisor values ('19802', '88801'); -insert into advisor values ('19803', '88801'); -insert into advisor values ('19804', '88801'); - -insert into advisor values ('19901', '99901'); -insert into advisor values ('19902', '99901'); -insert into advisor values ('19903', '99901'); -insert into advisor values ('19904', '99901'); \ No newline at end of file From b2b8ab0c5b00247746eba390bbe831a67f72e1d5 Mon Sep 17 00:00:00 2001 From: "Md. Mubtashim Abrar Nihal" <134641466+nihal07010@users.noreply.github.com> Date: Wed, 31 May 2023 12:25:41 +0600 Subject: [PATCH 05/10] Delete Query.sql --- Query.sql | 211 ------------------------------------------------------ 1 file changed, 211 deletions(-) delete mode 100644 Query.sql diff --git a/Query.sql b/Query.sql deleted file mode 100644 index 9b4de2c..0000000 --- a/Query.sql +++ /dev/null @@ -1,211 +0,0 @@ --- Aggregate Functions(count, sum, avg, min, max) with having --- Total no. of classrooms in each faculty -select faculty, sum(no_of_classrooms) as Total_no_of_classrooms from department group by faculty; --- Average salary of teachers in each department -select dept_name, avg(salary) as Average_salary from instructor group by dept_name; --- Total no. of students in each department -select dept_name, count(*) as Total_no_of_students from student group by dept_name; --- Minimum salary of teachers in each department -select dept_name, min(salary) as Minimum_salary from instructor group by dept_name; --- Maximum salary of teachers in each department -select dept_name, max(salary) as Maximum_salary from instructor group by dept_name; --- Name of faculty having more than 55 classrooms with no. of classrooms and no. of departments -select faculty, sum(no_of_classrooms) as Total_no_of_classrooms, count(dept_name) as Number_of_departments from department group by faculty having sum(no_of_classrooms) > 55; - --- String --- Name of the 1st boy/girl in each department -select dept_name, name from student where id like '____1'; - --- Union, Intersection, Except --- Name of dept having at least one student with total credit more than 20 or having more than 15 classrooms -(select dept_name from student where tot_cred > 20) union (select dept_name from department where no_of_classrooms > 20); --- Name of courses having credit greater than or equal to 3.0 and at least one student has got A on that course -(select course_id from course where credit >= 3.0) intersect (select course_id from takes where grade like 'A'); --- Name of courses having credit equal to 4.00 and students taking that course has got less than 'A' -(select course_id from course where credit = 4.0) except (select course_id from takes where grade like 'A'); - --- In, Not in --- Name of students who have taken courses taught by instructor with id = '11101'; -select name from student where id in (select id from takes where course_id in (select course_id from teaches where id like '11101')); --- Titles of courses that are taught in 3rd year but not in 'ME' faculty -select title from course where year like '3rd' and dept_name not in (select dept_name from department where faculty like 'ME'); - --- And, Or, Not --- Title of all course taught in 3rd year in 'CSE' dept -select title from course where dept_name like 'CSE' and year like '3rd'; --- Title of all courses taught in 'CSE' dept or 'EEE' dept -select title from course where dept_name like 'CSE' or dept_name like 'EEE'; --- Name of instructors who are not in 'CSE' dept; -select name from instructor where not dept_name like 'CSE'; - --- Some, All, Exist, Distinct --- Name of students who have got D in some courses -select id from student where id = some(select id from takes where grade like 'D'); --- Name of instructors in each faculty having highest salary -select name from instructor where salary >= all (select salary from instructor); --- Name of students who have got A in some courses -select name from student where exists (select * from takes where grade like 'A' and student.id = takes.id); --- Name of all faculty -select distinct faculty from department; - --- Join --- List of all advisors and their advisees of 'EEE' faculty -select i.name as Advisor, s.name as Advisee from student s join advisor a on s.id = a.s_id join instructor i on i.id = a.i_id where s.dept_name in (select dept_name from department where faculty like 'EEE'); - --- View --- Find Top 3 students of 'EEE' faculty -create or replace view results as select name, fCgpa(id) as cgpa from student where dept_name in (select dept_name from department where faculty like 'EEE') order by cgpa desc; -select * from results fetch next 3 rows only; - --- With --- List of faculty which has the maximum average salary -with avg_salary(faculty, avg_sal) as (select faculty, avg(salary) from instructor i join department d on i.dept_name = d.dept_name group by faculty) -select faculty, avg_sal from avg_salary where avg_sal = (select max(avg_sal) from avg_salary); - --- PL/SQL --- Find the salary of the advisor of student having ID = '19101' -set serveroutput on -declare -name instructor.name%type; -salary instructor.salary%type; -begin -select name, salary into name, salary from instructor where id = (select i_id from advisor where s_id = '19101'); -dbms_output.put_line('Salary of ' || name || ': ' || salary); -end; -/ --- Find information of all 4 credit courses -set serveroutput on -declare -cursor c is select * from course where credit = 4.0; -course_info course%rowtype; -begin -open c; -fetch c into course_info.course_id, course_info.title, course_info.dept_name, course_info.credit, course_info.semester, course_info.year; -while c%found loop -dbms_output.put_line('Course ID: ' || course_info.course_id || ', Title: ' || course_info.title || ', Dept. Name: ' || course_info.dept_name || ', Year: ' || course_info.year || ', Semester: ' || course_info.semester); -fetch c into course_info.course_id, course_info.title, course_info.dept_name, course_info.credit, course_info.semester, course_info.year; -end loop; -close c; -end; -/ --- Find the name of the students who are of 'EEE' faculty and got A in any course -set serveroutput on -declare -cursor c is select name from student where dept_name in (select dept_name from department where faculty like 'EEE') and id in (select id from takes where grade like 'A'); -type namearray is varray(20) of student.name%type; -names namearray := namearray(); -cnt number := 0; -begin - for info in c loop - names.extend; - cnt := cnt + 1; - names(cnt) := info.name; - end loop; - for i in 1 .. cnt loop - dbms_output.put_line('Name: ' || names(i)); - end loop; -end; -/ --- Show the faculty name of each student -set serveroutput on -declare -cursor c is select * from student; -begin - for info in c loop - if info.id like '__1%' or info.id like '__4%' or info.id like '__7%' - then - dbms_output.put_line('Name: ' || info.name || ', Faculty: CE'); - elsif info.id like '__2%' or info.id like '__5%' or info.id like '__8%' - then - dbms_output.put_line('Name: ' || info.name || ', Faculty: EEE'); - else - dbms_output.put_line('Name: ' || info.name || ', Faculty: ME'); - end if; - end loop; -end; -/ - --- Procedure --- Find all information of a student by a given ID -create or replace procedure fInfoProc(varId in student.id%type) as -cursor c is select * from takes where id = varId; -type courseIdArray is varray(10) of course.title%type; -type gradeArray is varray(10) of takes.grade%type; -info1 student%rowtype; -info2 instructor.name%type; -info3 takes%rowtype; -courses courseIdArray := courseIdArray(); -grades gradeArray := gradeArray(); -cnt integer := 0; -begin - select name, dept_name, tot_cred into info1.name, info1.dept_name, info1.tot_cred from student where id = varId; - select name into info2 from instructor where id = (select i_id from advisor where s_id = varId); - for info in c loop - courses.extend; - grades.extend; - cnt := cnt + 1; - select title into courses(cnt) from course where course_id = info.course_id; - grades(cnt) := info.grade; - end loop; - dbms_output.put_line('Name: ' || info1.name); - dbms_output.put_line('Dept. Name: ' || info1.dept_name); - dbms_output.put_line('Total Credit: ' || info1.tot_cred); - dbms_output.put_line('Advisor Name: ' || info2); - dbms_output.put_line('---<< Course Title with Grades >>---'); - for i in 1 .. cnt loop - dbms_output.put_line('Course: ' || courses(i) || ', Grade: ' || grades(i)); - end loop; -end; -/ -begin -finfoproc(19101); -end; -/ - --- Function --- Find the result of student by a given ID -create or replace function fCgpa(varId in student.id%type) return number as -cursor c is select * from takes where id = varId; -grad numeric(2, 1); -cred numeric(2, 1); -tot_grad numeric(4, 2) := 0; -tot_cred numeric(4, 2) := 0; -cgpa numeric(4, 2) := 0; -begin -for info in c loop - if info.grade like 'A' - then - grad := 4.0; - elsif info.grade like 'B' - then - grad := 3.5; - elsif info.grade like 'C' - then - grad := 3.0; - elsif info.grade like 'D' - then - grad := 2.5; - else - grad := 0; - end if; - select credit into cred from course where info.course_id like course.course_id; - tot_grad := tot_grad + cred * grad; - tot_cred := tot_cred + cred; -end loop; -cgpa := tot_grad / tot_cred; -return cgpa; -end; -/ -declare -vId student.id%type := 19101; -cgpa numeric(4, 2) := 0; -name student.name%type; -begin -select name into name from student where id = vId; -cgpa := fCgpa(vId); -dbms_output.put_line('Name: ' || name || ', CGPA: ' || cgpa); -end; -/ - - - From aeb7fa87887b90d64584284f232a164482aef9db Mon Sep 17 00:00:00 2001 From: "Md. Mubtashim Abrar Nihal" <134641466+nihal07010@users.noreply.github.com> Date: Wed, 31 May 2023 12:26:30 +0600 Subject: [PATCH 06/10] Add files via upload --- DDL.sql | 68 ++++++++++++++++ DML.sql | 232 +++++++++++++++++++++++++++++++++++++++++++++++++++++ Query.sql | 235 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 535 insertions(+) create mode 100644 DDL.sql create mode 100644 DML.sql create mode 100644 Query.sql diff --git a/DDL.sql b/DDL.sql new file mode 100644 index 0000000..0307a33 --- /dev/null +++ b/DDL.sql @@ -0,0 +1,68 @@ +drop table advisor; +drop table takes; +drop table teaches; +drop table course; +drop table instructor; +drop table student; +drop table department; + +create table department( + dept_name varchar(5), + no_of_classrooms number(2, 0) check (no_of_classrooms > 0), + faculty varchar(5) check(faculty in ('CE', 'EEE', 'ME')), + primary key(dept_name) +); + +create table student( + id varchar(5), + name varchar(40) not null, + dept_name varchar(5), + tot_cred number(5, 2) check(tot_cred >= 0), + primary key(id), + foreign key(dept_name) references department(dept_name) on delete set null +); + +create table instructor( + id varchar(5), + name varchar(40) not null, + dept_name varchar(5), + salary number(8, 2) check(salary >= 20000), + primary key(id), + foreign key(dept_name) references department(dept_name) on delete set null +); + +create table course( + course_id varchar(10), + title varchar(60) not null, + dept_name varchar(5), + credit number(3, 2) check (credit >= 0.75), + semester varchar(3) check (semester in ('1st', '2nd')), + year varchar(3) check (year in ('1st', '2nd', '3rd', '4th')), + primary key(course_id), + foreign key(dept_name) references department(dept_name) on delete set null +); + +create table teaches( + id varchar(5), + course_id varchar(10), + primary key(id, course_id), + foreign key(id) references instructor(id) on delete cascade, + foreign key(course_id) references course(course_id) on delete cascade +); + +create table takes( + id varchar(5), + course_id varchar(10), + grade varchar(1) check (grade in ('A', 'B', 'C', 'D', 'F')), + primary key(id, course_id), + foreign key(id) references student(id) on delete cascade, + foreign key(course_id) references course(course_id) on delete cascade +); + +create table advisor( + s_id varchar(5), + i_id varchar(5), + primary key(s_id), + foreign key(s_id) references student(id) on delete cascade, + foreign key(i_id) references instructor(id) on delete set null +); \ No newline at end of file diff --git a/DML.sql b/DML.sql new file mode 100644 index 0000000..6ab4618 --- /dev/null +++ b/DML.sql @@ -0,0 +1,232 @@ +insert into department values('CE', 24, 'CE'); +insert into department values('URP', 16, 'CE'); +insert into department values('BECM', 16, 'CE'); +insert into department values('EEE', 24, 'EEE'); +insert into department values('CSE', 20, 'EEE'); +insert into department values('ECE', 16, 'EEE'); +insert into department values('ME', 24, 'ME'); +insert into department values('IEM', 16, 'ME'); +insert into department values('MTE', 12, 'ME'); + +insert into student values('19101', 'Rayhanul Islam Chowdhury', 'CE', 22.00); +insert into student values('19401', 'Kamrul Hasan Kallol', 'URP', 20.00); +insert into student values('19701', 'Sanad Das Pranto', 'BECM', 20.00); +insert into student values('19201', 'Nakkhatra Roy Shuvo', 'EEE', 22.00); +insert into student values('19501', 'Samiul Islam Shoaib', 'CSE', 21.00); +insert into student values('19801', 'Adham Abhi', 'ECE', 20.50); +insert into student values('19301', 'Nishat Tasnim Zinia', 'ME', 22.00); +insert into student values('19601', 'Progga Paromita Adrita', 'IEM', 20.00); +insert into student values('19901', 'Sumaya Islam Shoitee', 'MTE', 19.50); +insert into student values('19102', 'Sabbir Rahman', 'CE', 22.00); +insert into student values('19402', 'Shohanur Rahman Shaikat', 'URP', 20.00); +insert into student values('19702', 'Nazmul Islam Sadee', 'BECM', 20.00); +insert into student values('19202', 'Jahidul Islam Joy', 'EEE', 22.00); +insert into student values('19502', 'Sabbir Ahmed', 'CSE', 21.00); +insert into student values('19802', 'Shoumik Ahmed Siam', 'ECE', 20.50); +insert into student values('19302', 'Mubtashim Abrar Nihal', 'ME', 22.00); +insert into student values('19602', 'Mihrab Hossain Mafi', 'IEM', 20.00); +insert into student values('19902', 'Abu Taher', 'MTE', 19.50); +--03 +insert into student values('19103', 'Shaikh Mahmud', 'CE', 19.50); +insert into student values('19403', 'Mohammad Al Fahad', 'URP', 22.00); +insert into student values('19703', 'Imtiaj Hossain', 'BECM', 21.00); +insert into student values('19203', 'Tanoy Bhuiyan', 'EEE', 20.00); +insert into student values('19503', 'Jahidul Islam', 'CSE', 20.50); +insert into student values('19803', 'Mirajul Islam', 'ECE', 21.50); +insert into student values('19303', 'Tanvir Bhuiyan', 'ME', 21.00); +insert into student values('19603', 'Athar Ishrak', 'IEM', 22.00); +insert into student values('19903', 'Shahadat Hossain', 'MTE', 20.00); +--04 +insert into student values('19104', 'Kazi Fahim Tahmid', 'CE', 19.50); +insert into student values('19404', 'Rifat Morshed', 'URP', 22.00); +insert into student values('19704', 'Eleus Ahammad', 'BECM', 21.00); +insert into student values('19204', 'Shovon Sharma', 'EEE', 20.00); +insert into student values('19504', 'Hasibul Islam', 'CSE', 20.50); +insert into student values('19804', 'Prottoy Roy', 'ECE', 21.50); +insert into student values('19304', 'Chinmoy Modok', 'ME', 21.00); +insert into student values('19604', 'Akik Ashraf Rafi', 'IEM', 22.00); +insert into student values('19904', 'Abdulla Rahman', 'MTE', 20.00); + + +insert into instructor values('11101', 'Dr. Muhammed Alamgir', 'CE', 120000); +insert into instructor values('11102', 'Dr. Quazi Hamidul Bari', 'CE', 110000); +insert into instructor values('22201', 'Dr. Md. Nurunnabi Mollah', 'EEE', 120000); +insert into instructor values('22202', 'Dr. Md. Rafiqul Islam', 'EEE', 110000); +insert into instructor values('33301', 'Dr. Md. Kutub Uddin', 'ME', 120000); +insert into instructor values('33302', 'Dr. Khandkar Aftab Hossain', 'ME', 110000); +insert into instructor values('44401', 'Dr. Md. Mustafa Saroar', 'URP', 100000); +insert into instructor values('44402', 'Tusar Kanti Roy', 'URP', 90000); +insert into instructor values('55501', 'Dr. M. M. A. Hashem', 'CSE', 100000); +insert into instructor values('55502', 'Dr. K. M. Azharul Hasan', 'CSE', 90000); +insert into instructor values('66601', 'Dr. Subrata Talapatra', 'IEM', 100000); +insert into instructor values('66602', 'Dr. Md. Rafiquzzaman', 'IEM', 90000); +insert into instructor values('77701', 'Md. Ikramul Hoque', 'BECM', 80000); +insert into instructor values('77702', 'Jhumana Akter', 'BECM', 70000); +insert into instructor values('88801', 'Dr. Md. Mostafizur Rahman', 'ECE', 80000); +insert into instructor values('88802', 'Dr. Md. Rafuque Hossain', 'ECE', 70000); +insert into instructor values('99901', 'Sourav Roy', 'MTE', 50000); +insert into instructor values('99902', 'Dr. Asief Javed', 'MTE', 50000); + +insert into course values('CE3161', 'Engineering Hydraulics', 'CE', 4.00, '1st', '3rd'); +insert into course values('CE3141', 'Environmental Engineering-I', 'CE', 3.00, '1st', '3rd'); +insert into course values('URP3161', 'Housing and Real Estate Development', 'URP', 3.00, '1st', '3rd'); +insert into course values('URP3107', 'Elements of Solid Mechanics', 'URP', 3.00, '1st', '3rd'); +insert into course values('BECM3107', 'Construction Contract and Law', 'BECM', 4.00, '1st', '3rd'); +insert into course values('BECM3115', 'Climate and Architectural Design', 'BECM', 2.00, '1st', '3rd'); +insert into course values('EEE3113', 'Digital Electronics and Logic Design', 'EEE', 3.00, '1st', '3rd'); +insert into course values('EEE3116', 'Sessional on Electrical Measurement and Instrumentation', 'EEE', 0.75, '1st', '3rd'); +insert into course values('CSE3100', 'Web Programming Laboratory', 'CSE', 1.50, '1st', '3rd'); +insert into course values('CSE3101', 'Operating Systems', 'CSE', 3.00, '1st', '3rd'); +insert into course values('ECE3100', 'Internet Programming Laboratory', 'ECE', 1.50, '1st', '3rd'); +insert into course values('ECE3109', 'Numerical Analysis', 'ECE', 3.00, '1st', '3rd'); +insert into course values('ME3100', 'Special Studies', 'ME', 0.75, '1st', '3rd'); +insert into course values('ME3119', 'Statistics &. Quality Control', 'ME', 4.00, '1st', '3rd'); +insert into course values('IPE3103', 'Engineering Metallurgy', 'IEM', 3.00, '1st', '3rd'); +insert into course values('IPE3115', 'Engineering Economy', 'IEM', 3.00, '1st', '3rd'); +insert into course values('MTE3100', 'Seminar and Scientific Writing', 'MTE', 0.75, '1st', '3rd'); +insert into course values('MTE3103', 'Microprocessor, Microcontroller and Interfacing', 'MTE', 3.00, '1st', '3rd'); + +insert into teaches values('11101', 'CE3161'); +insert into teaches values('11102', 'CE3141'); +insert into teaches values('22201', 'EEE3113'); +insert into teaches values('22202', 'EEE3116'); +insert into teaches values('33301', 'ME3100'); +insert into teaches values('33302', 'ME3119'); +insert into teaches values('44401', 'URP3161'); +insert into teaches values('44402', 'URP3107'); +insert into teaches values('55501', 'CSE3100'); +insert into teaches values('55502', 'CSE3101'); +insert into teaches values('66601', 'IPE3103'); +insert into teaches values('66602', 'IPE3115'); +insert into teaches values('77701', 'BECM3107'); +insert into teaches values('77702', 'BECM3115'); +insert into teaches values('88801', 'ECE3100'); +insert into teaches values('88802', 'ECE3109'); +insert into teaches values('99901', 'MTE3100'); +insert into teaches values('99902', 'MTE3103'); + +insert into takes values('19101', 'CE3161', 'A'); +insert into takes values('19101', 'CE3141', 'B'); +insert into takes values('19102', 'CE3161', 'C'); +insert into takes values('19102', 'CE3141', 'D'); +insert into takes values('19103', 'CE3161', 'D'); +insert into takes values('19103', 'CE3141', 'C'); +insert into takes values('19104', 'CE3161', 'B'); +insert into takes values('19104', 'CE3141', 'A'); + +insert into takes values('19201', 'EEE3113', 'B'); +insert into takes values('19201', 'EEE3116', 'C'); +insert into takes values('19202', 'EEE3113', 'D'); +insert into takes values('19202', 'EEE3116', 'A'); +insert into takes values('19203', 'EEE3113', 'A'); +insert into takes values('19203', 'EEE3116', 'D'); +insert into takes values('19204', 'EEE3113', 'C'); +insert into takes values('19204', 'EEE3116', 'B'); + +insert into takes values('19301', 'ME3100', 'C'); +insert into takes values('19301', 'ME3119', 'D'); +insert into takes values('19302', 'ME3100', 'A'); +insert into takes values('19302', 'ME3119', 'B'); +insert into takes values('19303', 'ME3100', 'B'); +insert into takes values('19303', 'ME3119', 'A'); +insert into takes values('19304', 'ME3100', 'D'); +insert into takes values('19304', 'ME3119', 'C'); + +insert into takes values('19401', 'URP3161', 'D'); +insert into takes values('19401', 'URP3107', 'A'); +insert into takes values('19402', 'URP3161', 'B'); +insert into takes values('19402', 'URP3107', 'C'); +insert into takes values('19403', 'URP3161', 'C'); +insert into takes values('19403', 'URP3107', 'B'); +insert into takes values('19404', 'URP3161', 'A'); +insert into takes values('19404', 'URP3107', 'D'); + +insert into takes values('19501', 'CSE3100', 'A'); +insert into takes values('19501', 'CSE3101', 'B'); +insert into takes values('19502', 'CSE3100', 'C'); +insert into takes values('19502', 'CSE3101', 'D'); +insert into takes values('19503', 'CSE3100', 'D'); +insert into takes values('19503', 'CSE3101', 'C'); +insert into takes values('19504', 'CSE3100', 'B'); +insert into takes values('19504', 'CSE3101', 'A'); + +insert into takes values('19601', 'IPE3103', 'B'); +insert into takes values('19601', 'IPE3115', 'C'); +insert into takes values('19602', 'IPE3103', 'D'); +insert into takes values('19602', 'IPE3115', 'A'); +insert into takes values('19603', 'IPE3103', 'A'); +insert into takes values('19603', 'IPE3115', 'D'); +insert into takes values('19604', 'IPE3103', 'C'); +insert into takes values('19604', 'IPE3115', 'B'); + +insert into takes values('19701', 'BECM3107', 'C'); +insert into takes values('19701', 'BECM3115', 'D'); +insert into takes values('19702', 'BECM3107', 'A'); +insert into takes values('19702', 'BECM3115', 'B'); +insert into takes values('19703', 'BECM3107', 'B'); +insert into takes values('19703', 'BECM3115', 'A'); +insert into takes values('19704', 'BECM3107', 'D'); +insert into takes values('19704', 'BECM3115', 'C'); + +insert into takes values('19801', 'ECE3100', 'D'); +insert into takes values('19801', 'ECE3109', 'A'); +insert into takes values('19802', 'ECE3100', 'B'); +insert into takes values('19802', 'ECE3109', 'C'); +insert into takes values('19803', 'ECE3100', 'C'); +insert into takes values('19803', 'ECE3109', 'B'); +insert into takes values('19804', 'ECE3100', 'C'); +insert into takes values('19804', 'ECE3109', 'D'); + +insert into takes values('19901', 'MTE3100', 'A'); +insert into takes values('19901', 'MTE3103', 'B'); +insert into takes values('19902', 'MTE3100', 'C'); +insert into takes values('19902', 'MTE3103', 'D'); +insert into takes values('19903', 'MTE3100', 'D'); +insert into takes values('19903', 'MTE3103', 'C'); +insert into takes values('19904', 'MTE3100', 'D'); +insert into takes values('19904', 'MTE3103', 'A'); + +insert into advisor values ('19101', '11101'); +insert into advisor values ('19102', '11101'); +insert into advisor values ('19103', '11101'); +insert into advisor values ('19104', '11101'); + +insert into advisor values ('19201', '22201'); +insert into advisor values ('19202', '22201'); +insert into advisor values ('19203', '22201'); +insert into advisor values ('19204', '22201'); + +insert into advisor values ('19301', '33301'); +insert into advisor values ('19302', '33301'); +insert into advisor values ('19303', '33301'); +insert into advisor values ('19304', '33301'); + +insert into advisor values ('19401', '44401'); +insert into advisor values ('19402', '44401'); +insert into advisor values ('19403', '44401'); +insert into advisor values ('19404', '44401'); + +insert into advisor values ('19501', '55501'); +insert into advisor values ('19502', '55501'); +insert into advisor values ('19503', '55501'); +insert into advisor values ('19504', '55501'); + +insert into advisor values ('19601', '66601'); +insert into advisor values ('19602', '66601'); +insert into advisor values ('19603', '66601'); +insert into advisor values ('19604', '66601'); + +insert into advisor values ('19701', '77701'); +insert into advisor values ('19702', '77701'); +insert into advisor values ('19703', '77701'); +insert into advisor values ('19704', '77701'); + +insert into advisor values ('19801', '88801'); +insert into advisor values ('19802', '88801'); +insert into advisor values ('19803', '88801'); +insert into advisor values ('19804', '88801'); + +insert into advisor values ('19901', '99901'); +insert into advisor values ('19902', '99901'); +insert into advisor values ('19903', '99901'); +insert into advisor values ('19904', '99901'); \ No newline at end of file diff --git a/Query.sql b/Query.sql new file mode 100644 index 0000000..64a2dab --- /dev/null +++ b/Query.sql @@ -0,0 +1,235 @@ +-- Aggregate Functions(count, sum, avg, min, max) with having +-- Total no. of classrooms in each faculty +select faculty, sum(no_of_classrooms) as Total_no_of_classrooms from department group by faculty; +-- Average salary of teachers in each department +select dept_name, avg(salary) as Average_salary from instructor group by dept_name; +-- Total no. of students in each department +select dept_name, count(*) as Total_no_of_students from student group by dept_name; +-- Minimum salary of teachers in each department +select dept_name, min(salary) as Minimum_salary from instructor group by dept_name; +-- Maximum salary of teachers in each department +select dept_name, max(salary) as Maximum_salary from instructor group by dept_name; +-- Name of faculty having more than 55 classrooms with no. of classrooms and no. of departments +select faculty, sum(no_of_classrooms) as Total_no_of_classrooms, count(dept_name) as Number_of_departments from department group by faculty having sum(no_of_classrooms) > 55; + +-- String +-- Name of the 1st boy/girl in each department +select dept_name, name from student where id like '____1'; + +-- Union, Intersection, Except +-- Name of dept having at least one student with total credit more than 20 or having more than 15 classrooms +(select dept_name from student where tot_cred > 20) union (select dept_name from department where no_of_classrooms > 20); +-- Name of courses having credit greater than or equal to 3.0 and at least one student has got A on that course +(select course_id from course where credit >= 3.0) intersect (select course_id from takes where grade like 'A'); +-- Name of courses having credit equal to 4.00 and students taking that course has got less than 'A' +(select course_id from course where credit = 4.0) except (select course_id from takes where grade like 'A'); + +-- In, Not in +-- Name of students who have taken courses taught by instructor with id = '11101'; +select name from student where id in (select id from takes where course_id in (select course_id from teaches where id like '11101')); +-- Titles of courses that are taught in 3rd year but not in 'ME' faculty +select title from course where year like '3rd' and dept_name not in (select dept_name from department where faculty like 'ME'); + +-- And, Or, Not +-- Title of all course taught in 3rd year in 'CSE' dept +select title from course where dept_name like 'CSE' and year like '3rd'; +-- Title of all courses taught in 'CSE' dept or 'EEE' dept +select title from course where dept_name like 'CSE' or dept_name like 'EEE'; +-- Name of instructors who are not in 'CSE' dept; +select name from instructor where not dept_name like 'CSE'; + +-- Some, All, Exist, Distinct +-- Name of students who have got D in some courses +select id from student where id = some(select id from takes where grade like 'D'); +-- Name of instructors in each faculty having highest salary +select name from instructor where salary >= all (select salary from instructor); +-- Name of students who have got A in some courses +select name from student where exists (select * from takes where grade like 'A' and student.id = takes.id); +-- Name of all faculty +select distinct faculty from department; + +-- Join +-- List of all advisors and their advisees of 'EEE' faculty +select i.name as Advisor, s.name as Advisee from student s join advisor a on s.id = a.s_id join instructor i on i.id = a.i_id where s.dept_name in (select dept_name from department where faculty like 'EEE'); + +-- View +-- Find Top 3 students of 'EEE' faculty +create or replace view results as select name, fCgpa(id) as cgpa from student where dept_name in (select dept_name from department where faculty like 'EEE') order by cgpa desc; +select * from results fetch next 3 rows only; + +-- With +-- List of faculty which has the maximum average salary +with avg_salary(faculty, avg_sal) as (select faculty, avg(salary) from instructor i join department d on i.dept_name = d.dept_name group by faculty) +select faculty, avg_sal from avg_salary where avg_sal = (select max(avg_sal) from avg_salary); + +-- PL/SQL +-- Find the salary of the advisor of student having ID = '19101' +set serveroutput on +declare +name instructor.name%type; +salary instructor.salary%type; +begin +select name, salary into name, salary from instructor where id = (select i_id from advisor where s_id = '19101'); +dbms_output.put_line('Salary of ' || name || ': ' || salary); +end; +/ +-- Find information of all 4 credit courses +set serveroutput on +declare +cursor c is select * from course where credit = 4.0; +course_info course%rowtype; +begin +open c; +fetch c into course_info.course_id, course_info.title, course_info.dept_name, course_info.credit, course_info.semester, course_info.year; +while c%found loop +dbms_output.put_line('Course ID: ' || course_info.course_id || ', Title: ' || course_info.title || ', Dept. Name: ' || course_info.dept_name || ', Year: ' || course_info.year || ', Semester: ' || course_info.semester); +fetch c into course_info.course_id, course_info.title, course_info.dept_name, course_info.credit, course_info.semester, course_info.year; +end loop; +close c; +end; +/ +-- Find the name of the students who are of 'EEE' faculty and got A in any course +set serveroutput on +declare +cursor c is select name from student where dept_name in (select dept_name from department where faculty like 'EEE') and id in (select id from takes where grade like 'A'); +type namearray is varray(20) of student.name%type; +names namearray := namearray(); +cnt number := 0; +begin + for info in c loop + names.extend; + cnt := cnt + 1; + names(cnt) := info.name; + end loop; + for i in 1 .. cnt loop + dbms_output.put_line('Name: ' || names(i)); + end loop; +end; +/ +-- Show the faculty name of each student +set serveroutput on +declare +cursor c is select * from student; +begin + for info in c loop + if info.id like '__1%' or info.id like '__4%' or info.id like '__7%' + then + dbms_output.put_line('Name: ' || info.name || ', Faculty: CE'); + elsif info.id like '__2%' or info.id like '__5%' or info.id like '__8%' + then + dbms_output.put_line('Name: ' || info.name || ', Faculty: EEE'); + else + dbms_output.put_line('Name: ' || info.name || ', Faculty: ME'); + end if; + end loop; +end; +/ +-- Name of students who have advisor having minimum salary +set serveroutput on +declare +cursor c1 is select * from instructor where salary = (select min(salary) from instructor); +cursor c2 is select * from advisor; +cnt number := 0; +adv_name instructor.name%type; +stud_name student.name%type; +min_sal instructor.salary%type; +begin +select min(salary) into min_sal from instructor; +dbms_output.put_line('Minimum Salary: ' || min_sal); +for i in c1 loop + adv_name := i.name; + for j in c2 loop + if i.id like j.i_id + then + select name into stud_name from student where id = j.s_id; + dbms_output.put_line('Advisor: ' || adv_name || ', Student: ' || stud_name); + end if; + end loop; +end loop; +end; +/ + +-- Procedure +-- Find all information of a student by a given ID +create or replace procedure fInfoProc(varId in student.id%type) as +cursor c is select * from takes where id = varId; +type courseIdArray is varray(10) of course.title%type; +type gradeArray is varray(10) of takes.grade%type; +info1 student%rowtype; +info2 instructor.name%type; +info3 takes%rowtype; +courses courseIdArray := courseIdArray(); +grades gradeArray := gradeArray(); +cnt integer := 0; +begin + select name, dept_name, tot_cred into info1.name, info1.dept_name, info1.tot_cred from student where id = varId; + select name into info2 from instructor where id = (select i_id from advisor where s_id = varId); + for info in c loop + courses.extend; + grades.extend; + cnt := cnt + 1; + select title into courses(cnt) from course where course_id = info.course_id; + grades(cnt) := info.grade; + end loop; + dbms_output.put_line('Name: ' || info1.name); + dbms_output.put_line('Dept. Name: ' || info1.dept_name); + dbms_output.put_line('Total Credit: ' || info1.tot_cred); + dbms_output.put_line('Advisor Name: ' || info2); + dbms_output.put_line('---<< Course Title with Grades >>---'); + for i in 1 .. cnt loop + dbms_output.put_line('Course: ' || courses(i) || ', Grade: ' || grades(i)); + end loop; +end; +/ +begin +finfoproc(19101); +end; +/ + +-- Function +-- Find the result of student by a given ID +create or replace function fCgpa(varId in student.id%type) return number as +cursor c is select * from takes where id = varId; +grad numeric(2, 1); +cred numeric(2, 1); +tot_grad numeric(4, 2) := 0; +tot_cred numeric(4, 2) := 0; +cgpa numeric(4, 2) := 0; +begin +for info in c loop + if info.grade like 'A' + then + grad := 4.0; + elsif info.grade like 'B' + then + grad := 3.5; + elsif info.grade like 'C' + then + grad := 3.0; + elsif info.grade like 'D' + then + grad := 2.5; + else + grad := 0; + end if; + select credit into cred from course where info.course_id like course.course_id; + tot_grad := tot_grad + cred * grad; + tot_cred := tot_cred + cred; +end loop; +cgpa := tot_grad / tot_cred; +return cgpa; +end; +/ +declare +vId student.id%type := 19101; +cgpa numeric(4, 2) := 0; +name student.name%type; +begin +select name into name from student where id = vId; +cgpa := fCgpa(vId); +dbms_output.put_line('Name: ' || name || ', CGPA: ' || cgpa); +end; +/ + + + From 2ef3f36d498ce4026c58d7913b6652d59d432c1b Mon Sep 17 00:00:00 2001 From: "Md. Mubtashim Abrar Nihal" <134641466+nihal07010@users.noreply.github.com> Date: Fri, 23 Jun 2023 13:04:44 +0600 Subject: [PATCH 07/10] Delete DDL.sql --- DDL.sql | 68 --------------------------------------------------------- 1 file changed, 68 deletions(-) delete mode 100644 DDL.sql diff --git a/DDL.sql b/DDL.sql deleted file mode 100644 index 0307a33..0000000 --- a/DDL.sql +++ /dev/null @@ -1,68 +0,0 @@ -drop table advisor; -drop table takes; -drop table teaches; -drop table course; -drop table instructor; -drop table student; -drop table department; - -create table department( - dept_name varchar(5), - no_of_classrooms number(2, 0) check (no_of_classrooms > 0), - faculty varchar(5) check(faculty in ('CE', 'EEE', 'ME')), - primary key(dept_name) -); - -create table student( - id varchar(5), - name varchar(40) not null, - dept_name varchar(5), - tot_cred number(5, 2) check(tot_cred >= 0), - primary key(id), - foreign key(dept_name) references department(dept_name) on delete set null -); - -create table instructor( - id varchar(5), - name varchar(40) not null, - dept_name varchar(5), - salary number(8, 2) check(salary >= 20000), - primary key(id), - foreign key(dept_name) references department(dept_name) on delete set null -); - -create table course( - course_id varchar(10), - title varchar(60) not null, - dept_name varchar(5), - credit number(3, 2) check (credit >= 0.75), - semester varchar(3) check (semester in ('1st', '2nd')), - year varchar(3) check (year in ('1st', '2nd', '3rd', '4th')), - primary key(course_id), - foreign key(dept_name) references department(dept_name) on delete set null -); - -create table teaches( - id varchar(5), - course_id varchar(10), - primary key(id, course_id), - foreign key(id) references instructor(id) on delete cascade, - foreign key(course_id) references course(course_id) on delete cascade -); - -create table takes( - id varchar(5), - course_id varchar(10), - grade varchar(1) check (grade in ('A', 'B', 'C', 'D', 'F')), - primary key(id, course_id), - foreign key(id) references student(id) on delete cascade, - foreign key(course_id) references course(course_id) on delete cascade -); - -create table advisor( - s_id varchar(5), - i_id varchar(5), - primary key(s_id), - foreign key(s_id) references student(id) on delete cascade, - foreign key(i_id) references instructor(id) on delete set null -); \ No newline at end of file From 3eb1171b626dd01878f47dd28e881596c4b806fa Mon Sep 17 00:00:00 2001 From: "Md. Mubtashim Abrar Nihal" <134641466+nihal07010@users.noreply.github.com> Date: Fri, 23 Jun 2023 13:04:54 +0600 Subject: [PATCH 08/10] Delete DML.sql --- DML.sql | 232 -------------------------------------------------------- 1 file changed, 232 deletions(-) delete mode 100644 DML.sql diff --git a/DML.sql b/DML.sql deleted file mode 100644 index 6ab4618..0000000 --- a/DML.sql +++ /dev/null @@ -1,232 +0,0 @@ -insert into department values('CE', 24, 'CE'); -insert into department values('URP', 16, 'CE'); -insert into department values('BECM', 16, 'CE'); -insert into department values('EEE', 24, 'EEE'); -insert into department values('CSE', 20, 'EEE'); -insert into department values('ECE', 16, 'EEE'); -insert into department values('ME', 24, 'ME'); -insert into department values('IEM', 16, 'ME'); -insert into department values('MTE', 12, 'ME'); - -insert into student values('19101', 'Rayhanul Islam Chowdhury', 'CE', 22.00); -insert into student values('19401', 'Kamrul Hasan Kallol', 'URP', 20.00); -insert into student values('19701', 'Sanad Das Pranto', 'BECM', 20.00); -insert into student values('19201', 'Nakkhatra Roy Shuvo', 'EEE', 22.00); -insert into student values('19501', 'Samiul Islam Shoaib', 'CSE', 21.00); -insert into student values('19801', 'Adham Abhi', 'ECE', 20.50); -insert into student values('19301', 'Nishat Tasnim Zinia', 'ME', 22.00); -insert into student values('19601', 'Progga Paromita Adrita', 'IEM', 20.00); -insert into student values('19901', 'Sumaya Islam Shoitee', 'MTE', 19.50); -insert into student values('19102', 'Sabbir Rahman', 'CE', 22.00); -insert into student values('19402', 'Shohanur Rahman Shaikat', 'URP', 20.00); -insert into student values('19702', 'Nazmul Islam Sadee', 'BECM', 20.00); -insert into student values('19202', 'Jahidul Islam Joy', 'EEE', 22.00); -insert into student values('19502', 'Sabbir Ahmed', 'CSE', 21.00); -insert into student values('19802', 'Shoumik Ahmed Siam', 'ECE', 20.50); -insert into student values('19302', 'Mubtashim Abrar Nihal', 'ME', 22.00); -insert into student values('19602', 'Mihrab Hossain Mafi', 'IEM', 20.00); -insert into student values('19902', 'Abu Taher', 'MTE', 19.50); ---03 -insert into student values('19103', 'Shaikh Mahmud', 'CE', 19.50); -insert into student values('19403', 'Mohammad Al Fahad', 'URP', 22.00); -insert into student values('19703', 'Imtiaj Hossain', 'BECM', 21.00); -insert into student values('19203', 'Tanoy Bhuiyan', 'EEE', 20.00); -insert into student values('19503', 'Jahidul Islam', 'CSE', 20.50); -insert into student values('19803', 'Mirajul Islam', 'ECE', 21.50); -insert into student values('19303', 'Tanvir Bhuiyan', 'ME', 21.00); -insert into student values('19603', 'Athar Ishrak', 'IEM', 22.00); -insert into student values('19903', 'Shahadat Hossain', 'MTE', 20.00); ---04 -insert into student values('19104', 'Kazi Fahim Tahmid', 'CE', 19.50); -insert into student values('19404', 'Rifat Morshed', 'URP', 22.00); -insert into student values('19704', 'Eleus Ahammad', 'BECM', 21.00); -insert into student values('19204', 'Shovon Sharma', 'EEE', 20.00); -insert into student values('19504', 'Hasibul Islam', 'CSE', 20.50); -insert into student values('19804', 'Prottoy Roy', 'ECE', 21.50); -insert into student values('19304', 'Chinmoy Modok', 'ME', 21.00); -insert into student values('19604', 'Akik Ashraf Rafi', 'IEM', 22.00); -insert into student values('19904', 'Abdulla Rahman', 'MTE', 20.00); - - -insert into instructor values('11101', 'Dr. Muhammed Alamgir', 'CE', 120000); -insert into instructor values('11102', 'Dr. Quazi Hamidul Bari', 'CE', 110000); -insert into instructor values('22201', 'Dr. Md. Nurunnabi Mollah', 'EEE', 120000); -insert into instructor values('22202', 'Dr. Md. Rafiqul Islam', 'EEE', 110000); -insert into instructor values('33301', 'Dr. Md. Kutub Uddin', 'ME', 120000); -insert into instructor values('33302', 'Dr. Khandkar Aftab Hossain', 'ME', 110000); -insert into instructor values('44401', 'Dr. Md. Mustafa Saroar', 'URP', 100000); -insert into instructor values('44402', 'Tusar Kanti Roy', 'URP', 90000); -insert into instructor values('55501', 'Dr. M. M. A. Hashem', 'CSE', 100000); -insert into instructor values('55502', 'Dr. K. M. Azharul Hasan', 'CSE', 90000); -insert into instructor values('66601', 'Dr. Subrata Talapatra', 'IEM', 100000); -insert into instructor values('66602', 'Dr. Md. Rafiquzzaman', 'IEM', 90000); -insert into instructor values('77701', 'Md. Ikramul Hoque', 'BECM', 80000); -insert into instructor values('77702', 'Jhumana Akter', 'BECM', 70000); -insert into instructor values('88801', 'Dr. Md. Mostafizur Rahman', 'ECE', 80000); -insert into instructor values('88802', 'Dr. Md. Rafuque Hossain', 'ECE', 70000); -insert into instructor values('99901', 'Sourav Roy', 'MTE', 50000); -insert into instructor values('99902', 'Dr. Asief Javed', 'MTE', 50000); - -insert into course values('CE3161', 'Engineering Hydraulics', 'CE', 4.00, '1st', '3rd'); -insert into course values('CE3141', 'Environmental Engineering-I', 'CE', 3.00, '1st', '3rd'); -insert into course values('URP3161', 'Housing and Real Estate Development', 'URP', 3.00, '1st', '3rd'); -insert into course values('URP3107', 'Elements of Solid Mechanics', 'URP', 3.00, '1st', '3rd'); -insert into course values('BECM3107', 'Construction Contract and Law', 'BECM', 4.00, '1st', '3rd'); -insert into course values('BECM3115', 'Climate and Architectural Design', 'BECM', 2.00, '1st', '3rd'); -insert into course values('EEE3113', 'Digital Electronics and Logic Design', 'EEE', 3.00, '1st', '3rd'); -insert into course values('EEE3116', 'Sessional on Electrical Measurement and Instrumentation', 'EEE', 0.75, '1st', '3rd'); -insert into course values('CSE3100', 'Web Programming Laboratory', 'CSE', 1.50, '1st', '3rd'); -insert into course values('CSE3101', 'Operating Systems', 'CSE', 3.00, '1st', '3rd'); -insert into course values('ECE3100', 'Internet Programming Laboratory', 'ECE', 1.50, '1st', '3rd'); -insert into course values('ECE3109', 'Numerical Analysis', 'ECE', 3.00, '1st', '3rd'); -insert into course values('ME3100', 'Special Studies', 'ME', 0.75, '1st', '3rd'); -insert into course values('ME3119', 'Statistics &. Quality Control', 'ME', 4.00, '1st', '3rd'); -insert into course values('IPE3103', 'Engineering Metallurgy', 'IEM', 3.00, '1st', '3rd'); -insert into course values('IPE3115', 'Engineering Economy', 'IEM', 3.00, '1st', '3rd'); -insert into course values('MTE3100', 'Seminar and Scientific Writing', 'MTE', 0.75, '1st', '3rd'); -insert into course values('MTE3103', 'Microprocessor, Microcontroller and Interfacing', 'MTE', 3.00, '1st', '3rd'); - -insert into teaches values('11101', 'CE3161'); -insert into teaches values('11102', 'CE3141'); -insert into teaches values('22201', 'EEE3113'); -insert into teaches values('22202', 'EEE3116'); -insert into teaches values('33301', 'ME3100'); -insert into teaches values('33302', 'ME3119'); -insert into teaches values('44401', 'URP3161'); -insert into teaches values('44402', 'URP3107'); -insert into teaches values('55501', 'CSE3100'); -insert into teaches values('55502', 'CSE3101'); -insert into teaches values('66601', 'IPE3103'); -insert into teaches values('66602', 'IPE3115'); -insert into teaches values('77701', 'BECM3107'); -insert into teaches values('77702', 'BECM3115'); -insert into teaches values('88801', 'ECE3100'); -insert into teaches values('88802', 'ECE3109'); -insert into teaches values('99901', 'MTE3100'); -insert into teaches values('99902', 'MTE3103'); - -insert into takes values('19101', 'CE3161', 'A'); -insert into takes values('19101', 'CE3141', 'B'); -insert into takes values('19102', 'CE3161', 'C'); -insert into takes values('19102', 'CE3141', 'D'); -insert into takes values('19103', 'CE3161', 'D'); -insert into takes values('19103', 'CE3141', 'C'); -insert into takes values('19104', 'CE3161', 'B'); -insert into takes values('19104', 'CE3141', 'A'); - -insert into takes values('19201', 'EEE3113', 'B'); -insert into takes values('19201', 'EEE3116', 'C'); -insert into takes values('19202', 'EEE3113', 'D'); -insert into takes values('19202', 'EEE3116', 'A'); -insert into takes values('19203', 'EEE3113', 'A'); -insert into takes values('19203', 'EEE3116', 'D'); -insert into takes values('19204', 'EEE3113', 'C'); -insert into takes values('19204', 'EEE3116', 'B'); - -insert into takes values('19301', 'ME3100', 'C'); -insert into takes values('19301', 'ME3119', 'D'); -insert into takes values('19302', 'ME3100', 'A'); -insert into takes values('19302', 'ME3119', 'B'); -insert into takes values('19303', 'ME3100', 'B'); -insert into takes values('19303', 'ME3119', 'A'); -insert into takes values('19304', 'ME3100', 'D'); -insert into takes values('19304', 'ME3119', 'C'); - -insert into takes values('19401', 'URP3161', 'D'); -insert into takes values('19401', 'URP3107', 'A'); -insert into takes values('19402', 'URP3161', 'B'); -insert into takes values('19402', 'URP3107', 'C'); -insert into takes values('19403', 'URP3161', 'C'); -insert into takes values('19403', 'URP3107', 'B'); -insert into takes values('19404', 'URP3161', 'A'); -insert into takes values('19404', 'URP3107', 'D'); - -insert into takes values('19501', 'CSE3100', 'A'); -insert into takes values('19501', 'CSE3101', 'B'); -insert into takes values('19502', 'CSE3100', 'C'); -insert into takes values('19502', 'CSE3101', 'D'); -insert into takes values('19503', 'CSE3100', 'D'); -insert into takes values('19503', 'CSE3101', 'C'); -insert into takes values('19504', 'CSE3100', 'B'); -insert into takes values('19504', 'CSE3101', 'A'); - -insert into takes values('19601', 'IPE3103', 'B'); -insert into takes values('19601', 'IPE3115', 'C'); -insert into takes values('19602', 'IPE3103', 'D'); -insert into takes values('19602', 'IPE3115', 'A'); -insert into takes values('19603', 'IPE3103', 'A'); -insert into takes values('19603', 'IPE3115', 'D'); -insert into takes values('19604', 'IPE3103', 'C'); -insert into takes values('19604', 'IPE3115', 'B'); - -insert into takes values('19701', 'BECM3107', 'C'); -insert into takes values('19701', 'BECM3115', 'D'); -insert into takes values('19702', 'BECM3107', 'A'); -insert into takes values('19702', 'BECM3115', 'B'); -insert into takes values('19703', 'BECM3107', 'B'); -insert into takes values('19703', 'BECM3115', 'A'); -insert into takes values('19704', 'BECM3107', 'D'); -insert into takes values('19704', 'BECM3115', 'C'); - -insert into takes values('19801', 'ECE3100', 'D'); -insert into takes values('19801', 'ECE3109', 'A'); -insert into takes values('19802', 'ECE3100', 'B'); -insert into takes values('19802', 'ECE3109', 'C'); -insert into takes values('19803', 'ECE3100', 'C'); -insert into takes values('19803', 'ECE3109', 'B'); -insert into takes values('19804', 'ECE3100', 'C'); -insert into takes values('19804', 'ECE3109', 'D'); - -insert into takes values('19901', 'MTE3100', 'A'); -insert into takes values('19901', 'MTE3103', 'B'); -insert into takes values('19902', 'MTE3100', 'C'); -insert into takes values('19902', 'MTE3103', 'D'); -insert into takes values('19903', 'MTE3100', 'D'); -insert into takes values('19903', 'MTE3103', 'C'); -insert into takes values('19904', 'MTE3100', 'D'); -insert into takes values('19904', 'MTE3103', 'A'); - -insert into advisor values ('19101', '11101'); -insert into advisor values ('19102', '11101'); -insert into advisor values ('19103', '11101'); -insert into advisor values ('19104', '11101'); - -insert into advisor values ('19201', '22201'); -insert into advisor values ('19202', '22201'); -insert into advisor values ('19203', '22201'); -insert into advisor values ('19204', '22201'); - -insert into advisor values ('19301', '33301'); -insert into advisor values ('19302', '33301'); -insert into advisor values ('19303', '33301'); -insert into advisor values ('19304', '33301'); - -insert into advisor values ('19401', '44401'); -insert into advisor values ('19402', '44401'); -insert into advisor values ('19403', '44401'); -insert into advisor values ('19404', '44401'); - -insert into advisor values ('19501', '55501'); -insert into advisor values ('19502', '55501'); -insert into advisor values ('19503', '55501'); -insert into advisor values ('19504', '55501'); - -insert into advisor values ('19601', '66601'); -insert into advisor values ('19602', '66601'); -insert into advisor values ('19603', '66601'); -insert into advisor values ('19604', '66601'); - -insert into advisor values ('19701', '77701'); -insert into advisor values ('19702', '77701'); -insert into advisor values ('19703', '77701'); -insert into advisor values ('19704', '77701'); - -insert into advisor values ('19801', '88801'); -insert into advisor values ('19802', '88801'); -insert into advisor values ('19803', '88801'); -insert into advisor values ('19804', '88801'); - -insert into advisor values ('19901', '99901'); -insert into advisor values ('19902', '99901'); -insert into advisor values ('19903', '99901'); -insert into advisor values ('19904', '99901'); \ No newline at end of file From 382b60fc5e1359b2964469dbeff145bc362a3d91 Mon Sep 17 00:00:00 2001 From: "Md. Mubtashim Abrar Nihal" <134641466+nihal07010@users.noreply.github.com> Date: Fri, 23 Jun 2023 13:05:02 +0600 Subject: [PATCH 09/10] Delete Query.sql --- Query.sql | 235 ------------------------------------------------------ 1 file changed, 235 deletions(-) delete mode 100644 Query.sql diff --git a/Query.sql b/Query.sql deleted file mode 100644 index 64a2dab..0000000 --- a/Query.sql +++ /dev/null @@ -1,235 +0,0 @@ --- Aggregate Functions(count, sum, avg, min, max) with having --- Total no. of classrooms in each faculty -select faculty, sum(no_of_classrooms) as Total_no_of_classrooms from department group by faculty; --- Average salary of teachers in each department -select dept_name, avg(salary) as Average_salary from instructor group by dept_name; --- Total no. of students in each department -select dept_name, count(*) as Total_no_of_students from student group by dept_name; --- Minimum salary of teachers in each department -select dept_name, min(salary) as Minimum_salary from instructor group by dept_name; --- Maximum salary of teachers in each department -select dept_name, max(salary) as Maximum_salary from instructor group by dept_name; --- Name of faculty having more than 55 classrooms with no. of classrooms and no. of departments -select faculty, sum(no_of_classrooms) as Total_no_of_classrooms, count(dept_name) as Number_of_departments from department group by faculty having sum(no_of_classrooms) > 55; - --- String --- Name of the 1st boy/girl in each department -select dept_name, name from student where id like '____1'; - --- Union, Intersection, Except --- Name of dept having at least one student with total credit more than 20 or having more than 15 classrooms -(select dept_name from student where tot_cred > 20) union (select dept_name from department where no_of_classrooms > 20); --- Name of courses having credit greater than or equal to 3.0 and at least one student has got A on that course -(select course_id from course where credit >= 3.0) intersect (select course_id from takes where grade like 'A'); --- Name of courses having credit equal to 4.00 and students taking that course has got less than 'A' -(select course_id from course where credit = 4.0) except (select course_id from takes where grade like 'A'); - --- In, Not in --- Name of students who have taken courses taught by instructor with id = '11101'; -select name from student where id in (select id from takes where course_id in (select course_id from teaches where id like '11101')); --- Titles of courses that are taught in 3rd year but not in 'ME' faculty -select title from course where year like '3rd' and dept_name not in (select dept_name from department where faculty like 'ME'); - --- And, Or, Not --- Title of all course taught in 3rd year in 'CSE' dept -select title from course where dept_name like 'CSE' and year like '3rd'; --- Title of all courses taught in 'CSE' dept or 'EEE' dept -select title from course where dept_name like 'CSE' or dept_name like 'EEE'; --- Name of instructors who are not in 'CSE' dept; -select name from instructor where not dept_name like 'CSE'; - --- Some, All, Exist, Distinct --- Name of students who have got D in some courses -select id from student where id = some(select id from takes where grade like 'D'); --- Name of instructors in each faculty having highest salary -select name from instructor where salary >= all (select salary from instructor); --- Name of students who have got A in some courses -select name from student where exists (select * from takes where grade like 'A' and student.id = takes.id); --- Name of all faculty -select distinct faculty from department; - --- Join --- List of all advisors and their advisees of 'EEE' faculty -select i.name as Advisor, s.name as Advisee from student s join advisor a on s.id = a.s_id join instructor i on i.id = a.i_id where s.dept_name in (select dept_name from department where faculty like 'EEE'); - --- View --- Find Top 3 students of 'EEE' faculty -create or replace view results as select name, fCgpa(id) as cgpa from student where dept_name in (select dept_name from department where faculty like 'EEE') order by cgpa desc; -select * from results fetch next 3 rows only; - --- With --- List of faculty which has the maximum average salary -with avg_salary(faculty, avg_sal) as (select faculty, avg(salary) from instructor i join department d on i.dept_name = d.dept_name group by faculty) -select faculty, avg_sal from avg_salary where avg_sal = (select max(avg_sal) from avg_salary); - --- PL/SQL --- Find the salary of the advisor of student having ID = '19101' -set serveroutput on -declare -name instructor.name%type; -salary instructor.salary%type; -begin -select name, salary into name, salary from instructor where id = (select i_id from advisor where s_id = '19101'); -dbms_output.put_line('Salary of ' || name || ': ' || salary); -end; -/ --- Find information of all 4 credit courses -set serveroutput on -declare -cursor c is select * from course where credit = 4.0; -course_info course%rowtype; -begin -open c; -fetch c into course_info.course_id, course_info.title, course_info.dept_name, course_info.credit, course_info.semester, course_info.year; -while c%found loop -dbms_output.put_line('Course ID: ' || course_info.course_id || ', Title: ' || course_info.title || ', Dept. Name: ' || course_info.dept_name || ', Year: ' || course_info.year || ', Semester: ' || course_info.semester); -fetch c into course_info.course_id, course_info.title, course_info.dept_name, course_info.credit, course_info.semester, course_info.year; -end loop; -close c; -end; -/ --- Find the name of the students who are of 'EEE' faculty and got A in any course -set serveroutput on -declare -cursor c is select name from student where dept_name in (select dept_name from department where faculty like 'EEE') and id in (select id from takes where grade like 'A'); -type namearray is varray(20) of student.name%type; -names namearray := namearray(); -cnt number := 0; -begin - for info in c loop - names.extend; - cnt := cnt + 1; - names(cnt) := info.name; - end loop; - for i in 1 .. cnt loop - dbms_output.put_line('Name: ' || names(i)); - end loop; -end; -/ --- Show the faculty name of each student -set serveroutput on -declare -cursor c is select * from student; -begin - for info in c loop - if info.id like '__1%' or info.id like '__4%' or info.id like '__7%' - then - dbms_output.put_line('Name: ' || info.name || ', Faculty: CE'); - elsif info.id like '__2%' or info.id like '__5%' or info.id like '__8%' - then - dbms_output.put_line('Name: ' || info.name || ', Faculty: EEE'); - else - dbms_output.put_line('Name: ' || info.name || ', Faculty: ME'); - end if; - end loop; -end; -/ --- Name of students who have advisor having minimum salary -set serveroutput on -declare -cursor c1 is select * from instructor where salary = (select min(salary) from instructor); -cursor c2 is select * from advisor; -cnt number := 0; -adv_name instructor.name%type; -stud_name student.name%type; -min_sal instructor.salary%type; -begin -select min(salary) into min_sal from instructor; -dbms_output.put_line('Minimum Salary: ' || min_sal); -for i in c1 loop - adv_name := i.name; - for j in c2 loop - if i.id like j.i_id - then - select name into stud_name from student where id = j.s_id; - dbms_output.put_line('Advisor: ' || adv_name || ', Student: ' || stud_name); - end if; - end loop; -end loop; -end; -/ - --- Procedure --- Find all information of a student by a given ID -create or replace procedure fInfoProc(varId in student.id%type) as -cursor c is select * from takes where id = varId; -type courseIdArray is varray(10) of course.title%type; -type gradeArray is varray(10) of takes.grade%type; -info1 student%rowtype; -info2 instructor.name%type; -info3 takes%rowtype; -courses courseIdArray := courseIdArray(); -grades gradeArray := gradeArray(); -cnt integer := 0; -begin - select name, dept_name, tot_cred into info1.name, info1.dept_name, info1.tot_cred from student where id = varId; - select name into info2 from instructor where id = (select i_id from advisor where s_id = varId); - for info in c loop - courses.extend; - grades.extend; - cnt := cnt + 1; - select title into courses(cnt) from course where course_id = info.course_id; - grades(cnt) := info.grade; - end loop; - dbms_output.put_line('Name: ' || info1.name); - dbms_output.put_line('Dept. Name: ' || info1.dept_name); - dbms_output.put_line('Total Credit: ' || info1.tot_cred); - dbms_output.put_line('Advisor Name: ' || info2); - dbms_output.put_line('---<< Course Title with Grades >>---'); - for i in 1 .. cnt loop - dbms_output.put_line('Course: ' || courses(i) || ', Grade: ' || grades(i)); - end loop; -end; -/ -begin -finfoproc(19101); -end; -/ - --- Function --- Find the result of student by a given ID -create or replace function fCgpa(varId in student.id%type) return number as -cursor c is select * from takes where id = varId; -grad numeric(2, 1); -cred numeric(2, 1); -tot_grad numeric(4, 2) := 0; -tot_cred numeric(4, 2) := 0; -cgpa numeric(4, 2) := 0; -begin -for info in c loop - if info.grade like 'A' - then - grad := 4.0; - elsif info.grade like 'B' - then - grad := 3.5; - elsif info.grade like 'C' - then - grad := 3.0; - elsif info.grade like 'D' - then - grad := 2.5; - else - grad := 0; - end if; - select credit into cred from course where info.course_id like course.course_id; - tot_grad := tot_grad + cred * grad; - tot_cred := tot_cred + cred; -end loop; -cgpa := tot_grad / tot_cred; -return cgpa; -end; -/ -declare -vId student.id%type := 19101; -cgpa numeric(4, 2) := 0; -name student.name%type; -begin -select name into name from student where id = vId; -cgpa := fCgpa(vId); -dbms_output.put_line('Name: ' || name || ', CGPA: ' || cgpa); -end; -/ - - - From f478b291cb9f78cf04f99810a349508a4f283f18 Mon Sep 17 00:00:00 2001 From: "Md. Mubtashim Abrar Nihal" <134641466+nihal07010@users.noreply.github.com> Date: Fri, 23 Jun 2023 13:05:58 +0600 Subject: [PATCH 10/10] Add files via upload --- DDL.sql | 69 +++++++++++++ DML.sql | 232 +++++++++++++++++++++++++++++++++++++++++ Query+PL-SQL.sql | 264 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 565 insertions(+) create mode 100644 DDL.sql create mode 100644 DML.sql create mode 100644 Query+PL-SQL.sql diff --git a/DDL.sql b/DDL.sql new file mode 100644 index 0000000..2fa0211 --- /dev/null +++ b/DDL.sql @@ -0,0 +1,69 @@ +drop table advisor; +drop table takes; +drop table teaches; +drop table course; +drop table instructor; +drop table student; +drop table department; + +create table department( + dept_name varchar(5), + no_of_classrooms number(2, 0) check (no_of_classrooms > 0), + faculty varchar(5) check(faculty in ('CE', 'EEE', 'ME')), + primary key(dept_name) +); + +create table student( + id varchar(5), + name varchar(40) not null, + dept_name varchar(5), + tot_cred number(5, 2) check(tot_cred >= 0), + cgpa number(3, 2), + primary key(id), + foreign key(dept_name) references department(dept_name) on delete set null +); + +create table instructor( + id varchar(5), + name varchar(40) not null, + dept_name varchar(5), + salary number(8, 2) check(salary >= 20000), + primary key(id), + foreign key(dept_name) references department(dept_name) on delete set null +); + +create table course( + course_id varchar(10), + title varchar(60) not null, + dept_name varchar(5), + credit number(3, 2) check (credit >= 0.75), + semester varchar(3) check (semester in ('1st', '2nd')), + year varchar(3) check (year in ('1st', '2nd', '3rd', '4th')), + primary key(course_id), + foreign key(dept_name) references department(dept_name) on delete set null +); + +create table teaches( + id varchar(5), + course_id varchar(10), + primary key(id, course_id), + foreign key(id) references instructor(id) on delete cascade, + foreign key(course_id) references course(course_id) on delete cascade +); + +create table takes( + id varchar(5), + course_id varchar(10), + grade varchar(1) check (grade in ('A', 'B', 'C', 'D', 'F')), + primary key(id, course_id), + foreign key(id) references student(id) on delete cascade, + foreign key(course_id) references course(course_id) on delete cascade +); + +create table advisor( + s_id varchar(5), + i_id varchar(5), + primary key(s_id), + foreign key(s_id) references student(id) on delete cascade, + foreign key(i_id) references instructor(id) on delete set null +); \ No newline at end of file diff --git a/DML.sql b/DML.sql new file mode 100644 index 0000000..ef2202c --- /dev/null +++ b/DML.sql @@ -0,0 +1,232 @@ +insert into department values('CE', 24, 'CE'); +insert into department values('URP', 16, 'CE'); +insert into department values('BECM', 16, 'CE'); +insert into department values('EEE', 24, 'EEE'); +insert into department values('CSE', 20, 'EEE'); +insert into department values('ECE', 16, 'EEE'); +insert into department values('ME', 24, 'ME'); +insert into department values('IEM', 16, 'ME'); +insert into department values('MTE', 12, 'ME'); + +insert into student values('19101', 'Rayhanul Islam Chowdhury', 'CE', 22.00, null); +insert into student values('19401', 'Kamrul Hasan Kallol', 'URP', 20.00, null); +insert into student values('19701', 'Sanad Das Pranto', 'BECM', 20.00, null); +insert into student values('19201', 'Nakkhatra Roy Shuvo', 'EEE', 22.00, null); +insert into student values('19501', 'Samiul Islam Shoaib', 'CSE', 21.00, null); +insert into student values('19801', 'Adham Abhi', 'ECE', 20.50, null); +insert into student values('19301', 'Nishat Tasnim Zinia', 'ME', 22.00, null); +insert into student values('19601', 'Progga Paromita Adrita', 'IEM', 20.00, null); +insert into student values('19901', 'Sumaya Islam Shoitee', 'MTE', 19.50, null); +insert into student values('19102', 'Sabbir Rahman', 'CE', 22.00, null); +insert into student values('19402', 'Shohanur Rahman Shaikat', 'URP', 20.00, null); +insert into student values('19702', 'Nazmul Islam Sadee', 'BECM', 20.00, null); +insert into student values('19202', 'Jahidul Islam Joy', 'EEE', 22.00, null); +insert into student values('19502', 'Sabbir Ahmed', 'CSE', 21.00, null); +insert into student values('19802', 'Shoumik Ahmed Siam', 'ECE', 20.50, null); +insert into student values('19302', 'Mubtashim Abrar Nihal', 'ME', 22.00, null); +insert into student values('19602', 'Mihrab Hossain Mafi', 'IEM', 20.00, null); +insert into student values('19902', 'Abu Taher', 'MTE', 19.50, null); +--03 +insert into student values('19103', 'Shaikh Mahmud', 'CE', 19.50, null); +insert into student values('19403', 'Mohammad Al Fahad', 'URP', 22.00, null); +insert into student values('19703', 'Imtiaj Hossain', 'BECM', 21.00, null); +insert into student values('19203', 'Tanoy Bhuiyan', 'EEE', 20.00, null); +insert into student values('19503', 'Jahidul Islam', 'CSE', 20.50, null); +insert into student values('19803', 'Mirajul Islam', 'ECE', 21.50, null); +insert into student values('19303', 'Tanvir Bhuiyan', 'ME', 21.00, null); +insert into student values('19603', 'Athar Ishrak', 'IEM', 22.00, null); +insert into student values('19903', 'Shahadat Hossain', 'MTE', 20.00, null); +--04 +insert into student values('19104', 'Kazi Fahim Tahmid', 'CE', 19.50, null); +insert into student values('19404', 'Rifat Morshed', 'URP', 22.00, null); +insert into student values('19704', 'Eleus Ahammad', 'BECM', 21.00, null); +insert into student values('19204', 'Shovon Sharma', 'EEE', 20.00, null); +insert into student values('19504', 'Hasibul Islam', 'CSE', 20.50, null); +insert into student values('19804', 'Prottoy Roy', 'ECE', 21.50, null); +insert into student values('19304', 'Chinmoy Modok', 'ME', 21.00, null); +insert into student values('19604', 'Akik Ashraf Rafi', 'IEM', 22.00, null); +insert into student values('19904', 'Abdulla Rahman', 'MTE', 20.00, null); + + +insert into instructor values('11101', 'Dr. Muhammed Alamgir', 'CE', 120000); +insert into instructor values('11102', 'Dr. Quazi Hamidul Bari', 'CE', 110000); +insert into instructor values('22201', 'Dr. Md. Nurunnabi Mollah', 'EEE', 120000); +insert into instructor values('22202', 'Dr. Md. Rafiqul Islam', 'EEE', 110000); +insert into instructor values('33301', 'Dr. Md. Kutub Uddin', 'ME', 120000); +insert into instructor values('33302', 'Dr. Khandkar Aftab Hossain', 'ME', 110000); +insert into instructor values('44401', 'Dr. Md. Mustafa Saroar', 'URP', 100000); +insert into instructor values('44402', 'Tusar Kanti Roy', 'URP', 90000); +insert into instructor values('55501', 'Dr. M. M. A. Hashem', 'CSE', 100000); +insert into instructor values('55502', 'Dr. K. M. Azharul Hasan', 'CSE', 90000); +insert into instructor values('66601', 'Dr. Subrata Talapatra', 'IEM', 100000); +insert into instructor values('66602', 'Dr. Md. Rafiquzzaman', 'IEM', 90000); +insert into instructor values('77701', 'Md. Ikramul Hoque', 'BECM', 80000); +insert into instructor values('77702', 'Jhumana Akter', 'BECM', 70000); +insert into instructor values('88801', 'Dr. Md. Mostafizur Rahman', 'ECE', 80000); +insert into instructor values('88802', 'Dr. Md. Rafuque Hossain', 'ECE', 70000); +insert into instructor values('99901', 'Sourav Roy', 'MTE', 50000); +insert into instructor values('99902', 'Dr. Asief Javed', 'MTE', 50000); + +insert into course values('CE3161', 'Engineering Hydraulics', 'CE', 4.00, '1st', '3rd'); +insert into course values('CE3141', 'Environmental Engineering-I', 'CE', 3.00, '1st', '3rd'); +insert into course values('URP3161', 'Housing and Real Estate Development', 'URP', 3.00, '1st', '3rd'); +insert into course values('URP3107', 'Elements of Solid Mechanics', 'URP', 3.00, '1st', '3rd'); +insert into course values('BECM3107', 'Construction Contract and Law', 'BECM', 4.00, '1st', '3rd'); +insert into course values('BECM3115', 'Climate and Architectural Design', 'BECM', 2.00, '1st', '3rd'); +insert into course values('EEE3113', 'Digital Electronics and Logic Design', 'EEE', 3.00, '1st', '3rd'); +insert into course values('EEE3116', 'Sessional on Electrical Measurement and Instrumentation', 'EEE', 0.75, '1st', '3rd'); +insert into course values('CSE3100', 'Web Programming Laboratory', 'CSE', 1.50, '1st', '3rd'); +insert into course values('CSE3101', 'Operating Systems', 'CSE', 3.00, '1st', '3rd'); +insert into course values('ECE3100', 'Internet Programming Laboratory', 'ECE', 1.50, '1st', '3rd'); +insert into course values('ECE3109', 'Numerical Analysis', 'ECE', 3.00, '1st', '3rd'); +insert into course values('ME3100', 'Special Studies', 'ME', 0.75, '1st', '3rd'); +insert into course values('ME3119', 'Statistics &. Quality Control', 'ME', 4.00, '1st', '3rd'); +insert into course values('IPE3103', 'Engineering Metallurgy', 'IEM', 3.00, '1st', '3rd'); +insert into course values('IPE3115', 'Engineering Economy', 'IEM', 3.00, '1st', '3rd'); +insert into course values('MTE3100', 'Seminar and Scientific Writing', 'MTE', 0.75, '1st', '3rd'); +insert into course values('MTE3103', 'Microprocessor, Microcontroller and Interfacing', 'MTE', 3.00, '1st', '3rd'); + +insert into teaches values('11101', 'CE3161'); +insert into teaches values('11102', 'CE3141'); +insert into teaches values('22201', 'EEE3113'); +insert into teaches values('22202', 'EEE3116'); +insert into teaches values('33301', 'ME3100'); +insert into teaches values('33302', 'ME3119'); +insert into teaches values('44401', 'URP3161'); +insert into teaches values('44402', 'URP3107'); +insert into teaches values('55501', 'CSE3100'); +insert into teaches values('55502', 'CSE3101'); +insert into teaches values('66601', 'IPE3103'); +insert into teaches values('66602', 'IPE3115'); +insert into teaches values('77701', 'BECM3107'); +insert into teaches values('77702', 'BECM3115'); +insert into teaches values('88801', 'ECE3100'); +insert into teaches values('88802', 'ECE3109'); +insert into teaches values('99901', 'MTE3100'); +insert into teaches values('99902', 'MTE3103'); + +insert into takes values('19101', 'CE3161', 'A'); +insert into takes values('19101', 'CE3141', 'B'); +insert into takes values('19102', 'CE3161', 'C'); +insert into takes values('19102', 'CE3141', 'D'); +insert into takes values('19103', 'CE3161', 'D'); +insert into takes values('19103', 'CE3141', 'C'); +insert into takes values('19104', 'CE3161', 'B'); +insert into takes values('19104', 'CE3141', 'A'); + +insert into takes values('19201', 'EEE3113', 'B'); +insert into takes values('19201', 'EEE3116', 'C'); +insert into takes values('19202', 'EEE3113', 'D'); +insert into takes values('19202', 'EEE3116', 'A'); +insert into takes values('19203', 'EEE3113', 'A'); +insert into takes values('19203', 'EEE3116', 'D'); +insert into takes values('19204', 'EEE3113', 'C'); +insert into takes values('19204', 'EEE3116', 'B'); + +insert into takes values('19301', 'ME3100', 'C'); +insert into takes values('19301', 'ME3119', 'D'); +insert into takes values('19302', 'ME3100', 'A'); +insert into takes values('19302', 'ME3119', 'B'); +insert into takes values('19303', 'ME3100', 'B'); +insert into takes values('19303', 'ME3119', 'A'); +insert into takes values('19304', 'ME3100', 'D'); +insert into takes values('19304', 'ME3119', 'C'); + +insert into takes values('19401', 'URP3161', 'D'); +insert into takes values('19401', 'URP3107', 'A'); +insert into takes values('19402', 'URP3161', 'B'); +insert into takes values('19402', 'URP3107', 'C'); +insert into takes values('19403', 'URP3161', 'C'); +insert into takes values('19403', 'URP3107', 'B'); +insert into takes values('19404', 'URP3161', 'A'); +insert into takes values('19404', 'URP3107', 'D'); + +insert into takes values('19501', 'CSE3100', 'A'); +insert into takes values('19501', 'CSE3101', 'B'); +insert into takes values('19502', 'CSE3100', 'C'); +insert into takes values('19502', 'CSE3101', 'D'); +insert into takes values('19503', 'CSE3100', 'D'); +insert into takes values('19503', 'CSE3101', 'C'); +insert into takes values('19504', 'CSE3100', 'B'); +insert into takes values('19504', 'CSE3101', 'A'); + +insert into takes values('19601', 'IPE3103', 'B'); +insert into takes values('19601', 'IPE3115', 'C'); +insert into takes values('19602', 'IPE3103', 'D'); +insert into takes values('19602', 'IPE3115', 'A'); +insert into takes values('19603', 'IPE3103', 'A'); +insert into takes values('19603', 'IPE3115', 'D'); +insert into takes values('19604', 'IPE3103', 'C'); +insert into takes values('19604', 'IPE3115', 'B'); + +insert into takes values('19701', 'BECM3107', 'C'); +insert into takes values('19701', 'BECM3115', 'D'); +insert into takes values('19702', 'BECM3107', 'A'); +insert into takes values('19702', 'BECM3115', 'B'); +insert into takes values('19703', 'BECM3107', 'B'); +insert into takes values('19703', 'BECM3115', 'A'); +insert into takes values('19704', 'BECM3107', 'D'); +insert into takes values('19704', 'BECM3115', 'C'); + +insert into takes values('19801', 'ECE3100', 'D'); +insert into takes values('19801', 'ECE3109', 'A'); +insert into takes values('19802', 'ECE3100', 'B'); +insert into takes values('19802', 'ECE3109', 'C'); +insert into takes values('19803', 'ECE3100', 'C'); +insert into takes values('19803', 'ECE3109', 'B'); +insert into takes values('19804', 'ECE3100', 'C'); +insert into takes values('19804', 'ECE3109', 'D'); + +insert into takes values('19901', 'MTE3100', 'A'); +insert into takes values('19901', 'MTE3103', 'B'); +insert into takes values('19902', 'MTE3100', 'C'); +insert into takes values('19902', 'MTE3103', 'D'); +insert into takes values('19903', 'MTE3100', 'D'); +insert into takes values('19903', 'MTE3103', 'C'); +insert into takes values('19904', 'MTE3100', 'D'); +insert into takes values('19904', 'MTE3103', 'A'); + +insert into advisor values ('19101', '11101'); +insert into advisor values ('19102', '11101'); +insert into advisor values ('19103', '11101'); +insert into advisor values ('19104', '11101'); + +insert into advisor values ('19201', '22201'); +insert into advisor values ('19202', '22201'); +insert into advisor values ('19203', '22201'); +insert into advisor values ('19204', '22201'); + +insert into advisor values ('19301', '33301'); +insert into advisor values ('19302', '33301'); +insert into advisor values ('19303', '33301'); +insert into advisor values ('19304', '33301'); + +insert into advisor values ('19401', '44401'); +insert into advisor values ('19402', '44401'); +insert into advisor values ('19403', '44401'); +insert into advisor values ('19404', '44401'); + +insert into advisor values ('19501', '55501'); +insert into advisor values ('19502', '55501'); +insert into advisor values ('19503', '55501'); +insert into advisor values ('19504', '55501'); + +insert into advisor values ('19601', '66601'); +insert into advisor values ('19602', '66601'); +insert into advisor values ('19603', '66601'); +insert into advisor values ('19604', '66601'); + +insert into advisor values ('19701', '77701'); +insert into advisor values ('19702', '77701'); +insert into advisor values ('19703', '77701'); +insert into advisor values ('19704', '77701'); + +insert into advisor values ('19801', '88801'); +insert into advisor values ('19802', '88801'); +insert into advisor values ('19803', '88801'); +insert into advisor values ('19804', '88801'); + +insert into advisor values ('19901', '99901'); +insert into advisor values ('19902', '99901'); +insert into advisor values ('19903', '99901'); +insert into advisor values ('19904', '99901'); \ No newline at end of file diff --git a/Query+PL-SQL.sql b/Query+PL-SQL.sql new file mode 100644 index 0000000..854a5ce --- /dev/null +++ b/Query+PL-SQL.sql @@ -0,0 +1,264 @@ +-- Aggregate Functions(count, sum, avg, min, max) with having +-- Total no. of classrooms in each faculty +select faculty, sum(no_of_classrooms) as Total_no_of_classrooms from department group by faculty; +-- Average salary of teachers in each department +select dept_name, avg(salary) as Average_salary from instructor group by dept_name; +-- Total no. of students in each department +select dept_name, count(*) as Total_no_of_students from student group by dept_name; +-- Minimum salary of teachers in each department +select dept_name, min(salary) as Minimum_salary from instructor group by dept_name; +-- Maximum salary of teachers in each department +select dept_name, max(salary) as Maximum_salary from instructor group by dept_name; +-- Name of faculty having more than 55 classrooms with no. of classrooms and no. of departments +select faculty, sum(no_of_classrooms) as Total_no_of_classrooms, count(dept_name) as Number_of_departments from department group by faculty having sum(no_of_classrooms) > 55; + +-- String +-- Name of the 1st boy/girl in each department +select dept_name, name from student where id like '____1'; + +-- Union, Intersection, Except +-- Name of dept having at least one student with total credit more than 20 or having more than 15 classrooms +(select dept_name from student where tot_cred > 20) union (select dept_name from department where no_of_classrooms > 20); +-- Name of courses having credit greater than or equal to 3.0 and at least one student has got A on that course +(select course_id from course where credit >= 3.0) intersect (select course_id from takes where grade like 'A'); +-- Name of courses having credit equal to 4.00 and students taking that course has got less than 'A' +(select course_id from course where credit = 4.0) except (select course_id from takes where grade like 'A'); + +-- In, Not in +-- Name of students who have taken courses taught by instructor with id = '11101'; +select name from student where id in (select id from takes where course_id in (select course_id from teaches where id like '11101')); +-- Titles of courses that are taught in 3rd year but not in 'ME' faculty +select title from course where year like '3rd' and dept_name not in (select dept_name from department where faculty like 'ME'); + +-- And, Or, Not +-- Title of all course taught in 3rd year in 'CSE' dept +select title from course where dept_name like 'CSE' and year like '3rd'; +-- Title of all courses taught in 'CSE' dept or 'EEE' dept +select title from course where dept_name like 'CSE' or dept_name like 'EEE'; +-- Name of instructors who are not in 'CSE' dept; +select name from instructor where not dept_name like 'CSE'; + +-- Some, All, Exist, Distinct +-- Name of students who have got D in some courses +select id from student where id = some(select id from takes where grade like 'D'); +-- Name of instructors in each faculty having highest salary +select name from instructor where salary >= all (select salary from instructor); +-- Name of students who have got A in some courses +select name from student where exists (select * from takes where grade like 'A' and student.id = takes.id); +-- Name of all faculty +select distinct faculty from department; + +-- Join +-- List of all advisors and their advisees of 'EEE' faculty +select i.name as Advisor, s.name as Advisee from student s join advisor a on s.id = a.s_id join instructor i on i.id = a.i_id where s.dept_name in (select dept_name from department where faculty like 'EEE'); + +-- View +-- Find Top 3 students of 'EEE' faculty +create or replace view results as select name, fCgpa(id) as cgpa from student where dept_name in (select dept_name from department where faculty like 'EEE') order by cgpa desc; +select * from results fetch next 3 rows only; + +-- With +-- List of faculty which has the maximum average salary +with avg_salary(faculty, avg_sal) as (select faculty, avg(salary) from instructor i join department d on i.dept_name = d.dept_name group by faculty) +select faculty, avg_sal from avg_salary where avg_sal = (select max(avg_sal) from avg_salary); + +-- PL/SQL +-- Find the salary of the advisor of student having ID = '19101' +set serveroutput on +declare +name instructor.name%type; +salary instructor.salary%type; +begin +select name, salary into name, salary from instructor where id = (select i_id from advisor where s_id = '19101'); +dbms_output.put_line('Salary of ' || name || ': ' || salary); +end; +/ +-- Find information of all 4 credit courses +set serveroutput on +declare +cursor c is select * from course where credit = 4.0; +course_info course%rowtype; +begin +open c; +fetch c into course_info.course_id, course_info.title, course_info.dept_name, course_info.credit, course_info.semester, course_info.year; +while c%found loop +dbms_output.put_line('Course ID: ' || course_info.course_id || ', Title: ' || course_info.title || ', Dept. Name: ' || course_info.dept_name || ', Year: ' || course_info.year || ', Semester: ' || course_info.semester); +fetch c into course_info.course_id, course_info.title, course_info.dept_name, course_info.credit, course_info.semester, course_info.year; +end loop; +close c; +end; +/ +-- Find the name of the students who are of 'EEE' faculty and got A in any course +set serveroutput on +declare +cursor c is select name from student where dept_name in (select dept_name from department where faculty like 'EEE') and id in (select id from takes where grade like 'A'); +type namearray is varray(20) of student.name%type; +names namearray := namearray(); +cnt number := 0; +begin + for info in c loop + names.extend; + cnt := cnt + 1; + names(cnt) := info.name; + end loop; + for i in 1 .. cnt loop + dbms_output.put_line('Name: ' || names(i)); + end loop; +end; +/ +-- Show the faculty name of each student +set serveroutput on +declare +cursor c is select * from student; +begin + for info in c loop + if info.id like '__1%' or info.id like '__4%' or info.id like '__7%' + then + dbms_output.put_line('Name: ' || info.name || ', Faculty: CE'); + elsif info.id like '__2%' or info.id like '__5%' or info.id like '__8%' + then + dbms_output.put_line('Name: ' || info.name || ', Faculty: EEE'); + else + dbms_output.put_line('Name: ' || info.name || ', Faculty: ME'); + end if; + end loop; +end; +/ +-- Name of students who have advisor having minimum salary +set serveroutput on +declare +cursor c1 is select * from instructor where salary = (select min(salary) from instructor); +cursor c2 is select * from advisor; +cnt number := 0; +adv_name instructor.name%type; +stud_name student.name%type; +min_sal instructor.salary%type; +begin +select min(salary) into min_sal from instructor; +dbms_output.put_line('Minimum Salary: ' || min_sal); +for i in c1 loop + adv_name := i.name; + for j in c2 loop + if i.id like j.i_id + then + select name into stud_name from student where id = j.s_id; + dbms_output.put_line('Advisor: ' || adv_name || ', Student: ' || stud_name); + end if; + end loop; +end loop; +end; +/ + +-- Procedure +-- Find all information of a student by a given ID +create or replace procedure fInfoProc(varId in student.id%type) as +cursor c is select * from takes where id = varId; +type courseIdArray is varray(10) of course.title%type; +type gradeArray is varray(10) of takes.grade%type; +info1 student%rowtype; +info2 instructor.name%type; +info3 takes%rowtype; +courses courseIdArray := courseIdArray(); +grades gradeArray := gradeArray(); +cnt integer := 0; +begin + select name, dept_name, tot_cred into info1.name, info1.dept_name, info1.tot_cred from student where id = varId; + select name into info2 from instructor where id = (select i_id from advisor where s_id = varId); + for info in c loop + courses.extend; + grades.extend; + cnt := cnt + 1; + select title into courses(cnt) from course where course_id = info.course_id; + grades(cnt) := info.grade; + end loop; + dbms_output.put_line('Name: ' || info1.name); + dbms_output.put_line('Dept. Name: ' || info1.dept_name); + dbms_output.put_line('Total Credit: ' || info1.tot_cred); + dbms_output.put_line('Advisor Name: ' || info2); + dbms_output.put_line('---<< Course Title with Grades >>---'); + for i in 1 .. cnt loop + dbms_output.put_line('Course: ' || courses(i) || ', Grade: ' || grades(i)); + end loop; +end; +/ +begin +finfoproc(19101); +end; +/ + +-- Function +-- Find the result of student by a given ID +create or replace function fCgpa(varId in student.id%type) return number as +cursor c is select * from takes where id = varId; +grad numeric(2, 1); +cred numeric(2, 1); +tot_grad numeric(4, 2) := 0; +tot_cred numeric(4, 2) := 0; +cgpa numeric(4, 2) := 0; +begin +for info in c loop + if info.grade like 'A' + then + grad := 4.0; + elsif info.grade like 'B' + then + grad := 3.5; + elsif info.grade like 'C' + then + grad := 3.0; + elsif info.grade like 'D' + then + grad := 2.5; + else + grad := 0; + end if; + select credit into cred from course where info.course_id like course.course_id; + tot_grad := tot_grad + cred * grad; + tot_cred := tot_cred + cred; +end loop; +cgpa := tot_grad / tot_cred; +return cgpa; +end; +/ +declare +vId student.id%type := 19101; +cgpa numeric(4, 2) := 0; +name student.name%type; +begin +select name into name from student where id = vId; +cgpa := fCgpa(vId); +dbms_output.put_line('Name: ' || name || ', CGPA: ' || cgpa); +end; +/ + +--Trigger +-- Update the cgpa attribute of student on insert/update of takes relation +create or replace trigger updCgpa +before insert or update on takes +referencing old as o new as n +for each row +declare +tot_grad numeric(5, 2); +cnt number; +grad takes.grade%type; +begin + select sum(case grade + when 'A' then 4 + when 'B' then 3.5 + when 'C' then 3 + when 'D' then 2.5 + else 0 + end), count(*) into tot_grad, cnt from takes where id = :n.id; + tot_grad := tot_grad + (case :n.grade + when 'A' then 4 + when 'B' then 3.5 + when 'C' then 3 + when 'D' then 2.5 + else 0 + end); + cnt := cnt + 1; + update student set cgpa = tot_grad / cnt where id = :n.id; +end; +/ + +