Cs2258 Database Management Systems Lab
May 5, 2017 | Author: Dhaya | Category: N/A
Short Description
Download Cs2258 Database Management Systems Lab...
Description
CS2258
DATABASE MANAGEMENT SYSTEMS LAB LIST OF EXPERIMENTS
1. Data Definition, Table Creation, Constraints. 2. Insert, Select Commands, Update & Delete Commands. 3. Nested Queries & Join Queries 4. Views 5. High level programming language extensions (Control structures, Procedures and Functions). 6. Front end tools 7. Forms 8. Triggers 9. Menu Design 10. Reports. 11.Database Design and implementation (Mini Project).
using strings
System Configuration Front end: Back end: GUI : Platform:
Eclipse my SQL mysql-admin Linux
1.
Data Definition, Table Creation, Constraints.
1. Install MySQL and mySQLadmin and configure them 2. Connect to MySQL from the mySQLadmin GUI interface using the login/password and carry out the following tasks 3. Create the University schema using the commands in theDDL.sql script; the commands can be copy-pasted into mySQLadmin. (If you have already created the tables and wish to drop them, you can use the script here to drop all tables.
2.
Insert, Select Commands, Update & Delete Commands
1. Insert sample data using the command in the file smallRelationsInsertFile.sql. 2. Try out some of these queries, and see what they do. To run them, copy/paste them into the mySQLadmin command window and run them. a. select * from instructor b.select name from instructor where dept_name = 'Comp. Sci.' and salary > 70000 c. select * from instructor, department where instructor.dept_name = department.dept_name 3. Try inserting data about yourselves into these tables. Refer to the populate script above for examples. 4. Write the following simple SQL Queries on the University Schema a. Find the names of all the instructors from Comp. Sci. department mysql> select name from instructor where dept_name='Comp. Sci.';
+------------+ | name | +------------+ | Srinivasan | | Katz | | Brandt | +------------+ 3 rows in set (0.00 sec) b. Find the course id and titles of all courses taught by an instructor named 'Srinivasan' mysql> select course.course_id,course.title from course where course.course_id=some(select teaches.course_id from teaches where teaches.id=(select instructor.id from instructor where instructor.name='Srinivasan')); +-----------+----------------------------+ | course_id | title
|
+-----------+----------------------------+ | CS-101
| Intro. to Computer Science |
| CS-315
| Robotics
| CS-347
| Database System Concepts |
|
+-----------+----------------------------+ 3 rows in set (0.00 sec) c. Find the ID and name of instructors who have taught a course in the Comp. Sci. department, even if they are themselves not from the Comp. Sci. department. To test this query, make sure you add appropriate data, and include the corresponding insert statements along with your query. mysql>insert into course values ('CS-555', 'DSP', 'Comp. Sci.', '4'); mysql>insert into instructor values ('12312', 'Dhaya', 'ECE', '90000'); mysql>insert into section values ('CS-555', '1', 'Fall', '2009', 'Watson', '100', 'A'); mysql>insert into teaches values ('12312', 'CS-555', '1', 'Fall', '2009'); mysql> select instructor.id, instructor.name from instructor where instructor.dept_name != 'Comp. Sci.' and instructor.id=some(select teaches.id from teaches where teaches.course_id=some(select course.course_id from course where dept_name='Comp. Sci.')); +-------+-------+ | id
| name |
+-------+-------+ | 12312 | Dhaya | +-------+-------+ 1 row in set (0.00 sec) d. Find IDs of instructors who have never taught any course. If the result of your query is empty, add appropriate data (and include corresponding insert statements) to ensure the result is not empty. mysql> select id from instructor where id not in (select id from teaches); +-------+ | id
|
+-------+ | 33456 | | 58583 | | 76543 | +-------+ 3 rows in set (0.00 sec) e. Find the courses, which are offered in both 'Fall' and 'Spring' semester. mysql> select course_id, title from course where course_id=(select course_id from teaches as F where semester='Fall' and exists(select * from teaches as S where semester='Spring' and F.course_id=S.course_id)); +-----------+----------------------------+ | course_id | title
|
+-----------+----------------------------+ | CS-101
| Intro. to Computer Science |
+-----------+----------------------------+ 1 row in set (0.00 sec) f. Find the id and title of all courses, which do not require any prerequisites. mysql> select C.course_id, C.title from course as C where not exists(select P.course_id from prereq as P where C.course_id=P.course_id); +-----------+----------------------------+
| course_id | title
|
+-----------+----------------------------+ | BIO-101 | Intro. to Biology | CS-101
|
| Intro. to Computer Science |
| FIN-201 | Investment Banking | HIS-351 | World History | MU-199
|
| Music Video Production
| PHY-101 | Physical Principles | CS-555
|
| DSP
| |
|
+-----------+----------------------------+ 7 rows in set (0.00 sec) g. Find the names of students who have not taken any biology dept courses 5. Write SQL update queries to perform the following (queries 2 and 4 are pretty meangless, but still fun to write): a) Give a 10% hike to all instructors update instructor set salary=salary+(salary*0.1); b) Increase the tot_creds of all students who have taken the course titled "Genetics" by the number of credits associated with that course. update student set tot_cred=(select credits from course where title='Operatig Systems')+student.tot_cred where student.id=(select takes.id from takes where takes.course_id=(select course.course_id from course where title='Operating Systems'))insert into takes values ('12345', 'CS-101', '1', 'Fall', '2009', 'C'); c) For all instructors who are advisors of atleast 2 students, increase their salary by 50000. update instructor set salary=salary+50000 where (id, 't') in (select i_id as I, count(s_id)>5 as C from advisor group by i_id); d) Set the total credits to 2 for all courses which have less than 5 students taking them (across all sections for the course, across all years/semesters). update course set credits=2 where ('f',course_id) in (select count (id)>5, course_id from takes group by course_id,
sec_id, semester, year); 6. Each offering of a course (i.e. a section) can have many Teaching assistants; each teaching assistant is a student. Extend the existing schema(Add/Alter tables) to accommodate this requirement. 7. According to the existing schema, one student can have only one advisor. 1. Alter the schema to allow a student to have multiple advisors and make sure that you are able to insert multiple advisors for a student. alter table advisor drop constraint "advisor_pkey"; insert into advisor values ('12345', '45565'); 2. Write SQL queries on the modified schema. You will need to insert data to ensure the query results are not empty. a) Find all students who have more than 3 advisors select student.name from student where (student.id,'t') in (select s_id, count(s_id)>3 from advisor group by s_id); b) Find all students who are co-advised by Prof. Srinivas and Prof. Gold. select distinct(s_id) from advisor where (i_id) in (select id from instructor where name ='Srinivasan' or name='Gold') c) Find students advised by instructors from different departments. Etc. select s_id, i_id from advisor where (s_id,'t') in (select s_id, count(s_id)>2 from advisor group by s_id); 8. Write SQL queries for the following: 1. Delete all information in the database, which is more than 10 years old. Add data as necessary to verify your query. delete from takes where year < (year(CURRENT_DATE) – 10); delete from teaches where year < (year(CURRENT_DATE) – 10); delete from section where year < (year(CURRENT_DATE) – 10); 2. Delete the course CS 101. All courses which have this as a prereq should remove this from its prereq set. Create a cascade constraint and verify. DELETE FROM course WHERE course_id='CS-101'
3. Nested Queries & Join Queries 1. Find the maximum number of teachers for any single course section.
2. Find all departments that have the minimum number of instructors, using a subquery; order the result by department name in descending order. select dept_name,count(*) as num from instructor group by (dept_name) order by num desc ; 3. For each student, compute the total credits they have successfully completed, i.e. total credits of courses they have taken, for which they have a non-null grade other than 'F'. Do NOT use the tot_creds attribute of student. mysql> select student.id, name, sum(course.credits) from takes, student, course where grade 'F' and grade is not null and takes.course_id = course.course_id and student.id=takes.id group by id, name; 4. Find the number of students who have been taught (at any
time) by an instructor named 'Srinivasan'. Make sure you count a student only once even if the student has taken more than one course from Srinivasan. mysql> select count(distinct takes.ID) from instructor,takes,teaches,section where takes.course_id=teaches.course_id and takes.sec_id = teaches.sec_id and takes.semester = teaches.semester and takes.year = teaches.year and section.course_id=teaches.course_id and section.semester=teaches.semester and section.sec_id=teaches.sec_id and section.year=teaches.year and teaches.ID=instructor.ID and instructor.name='Srinivasan'; 5. Find the name of all instructors who get the highest salary in their department. mysql> select name from instructor I1 , (select max(salary) as maxsal,dept_name from instructor I2 group by dept_name ) I2 where (I2.maxsal = I1.salary and I1.dept_name = I2.dept_name); 6. Find all students who have taken all courses taken by instructor 'Srinivasan'. (This is the division operation of relational algebra.) You can implement it by counting the number of courses taught by Srinivasan, and for each student (i.e. group by student), find the number of courses taken by that student, which were taught by Srinivasan. Make sure to count each course ID only once.
1. Find the IDs of all students who were taught by an instructor named Einstein; make sure there are no duplicates in the result. 2. Find the highest salary of any instructor. 3. Find all instructors earning the highest salary (there may be more than one with the same salary). 4. Find the enrollment of each section that was offered in Autumn 2009. 5. Find the maximum enrollment, across all sections, in Autumn 2009. 6. Find the sections that had the maximum enrollment in Autumn 2009. 7. Suppose you are given a relation grade points(grade, points), which provides a conversion from letter grades in the takes relation to numeric scores; for example an “A” grade could be specified to correspond to 4 points, an “A−” to 3.7 points, a “B+” to 3.3 points, a “B” to 3 points, and so on. The grade points earned by a student for a course offering (section) is defined as the number of credits for the course multiplied by the numeric points for the grade that the student received. Given the above relation, and our university schema, write each of the following queries in SQL. You can assume for simplicity that no takes tuple has the null value for grade. a. Find the total gradepoints earned by the student with ID 12345, across all courses taken by the student. b. Find the gradepoint average (GPA) for the above student, that is, the total gradepoints divided by the total credits for the associated courses.
c. Find the ID and the gradepoint average of every student.
9. Find the maximum number of teachers for any single course section. 10. Find all departments that have the minimum number of instructors, using a subquery; order the result by department name in descending order. 11. For each student, compute the total credits they have successfully completed, i.e. total credits of courses they have taken, for which they have a non-null grade other than 'F'. Do NOT use the tot_creds attribute of student. 12. Find the number of students who have been taught (at any time) by an instructor named 'Srinivasan'. Make sure you count a student only once even if the student has taken more than one course from Srinivasan. 13. Find the name of all instructors who get the highest salary in their department. 14. Find all students who have taken all courses taken by instructor 'Srinivasan'. (This is the division operation of relational algebra.) You can implement it by counting the number of courses taught by Srinivasan, and for each student (i.e. group by student), find the number of courses taken by that student, which were taught by Srinivasan. Make sure to count each course ID only once. 15. Display a list of all instructors, showing their ID, name, and the number of sections that they have taught. Make sure to show the number of sections as 0 for instructors who have not taught any section. Your query should use an outerjoin, and should not use scalar subqueries. 16. Write the same query as above, but using a scalar subquery, with out outerjoin. 17. Display the list of all course sections offered in Spring 2010, along with the names of the instructors teaching the section. If a section has more than one instructor, it should appear as many times in the result as it has instructors. If it does not have any instructor, it should still appear in the result with the instructor name set to “ —”. 18. Display the list of all departments, with the total number of in structors in each department, without using scalar subqueries. Make sure to correctly handle departments with no instructors.
5. High level programming language extensions
1. Write a SQL procedure, which accepts a name and prints welcome message for the given name. 2. Write a SQL procedure to accept the details of a student and print in on the screen using procedure. 3. Write a SQL procedure to demonstrate swapping of two numbers. 4. Write a SQL procedure that will accept an integer and find out its factorial value and also print its Fibonacci series. 5. Write a SQL function, which returns the highest paid staff 6. Write a SQL function, which returns the average salary of given department. 7. Write a SQL function, which returns number of student who got above 60 marks in a given subject. 8. Write a SQL function to find whether the given string is palindrome or not.
View more...
Comments