0% found this document useful (0 votes)
22 views9 pages

Practical No 02 (B)

Uploaded by

Siddhi Narke
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
22 views9 pages

Practical No 02 (B)

Uploaded by

Siddhi Narke
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 9

Practical No 02 B

Name : Siddhi Vinayak Narke

Roll No : 13267

Batch : B3

Database Management System Laboratory

Problem Statement : - Write at least 10 SQL queries on the suitable database

application using SQL DML statements.

show databases;
+--------------------+
| Database |
+--------------------+
| college |
| information_schema |
| priyadb1 |
| mysql |
| performance_schema |
| sys |
+--------------------+

mysql> create database university;

mysql> use university;


Database changed

2. Create Tables

a. students table
mysql> CREATE TABLE students (student_id INT AUTO_INCREMENT PRIMARY KEY, name
VARCHAR(100), email VARCHAR(100) UNIQUE, enrollment_date DATE);

mysql> INSERT INTO students (name, email, enrollment_date) VALUES ('Aman',


'aman@example.com', '2025-08-01'), ('Dhanashree', 'dhanashree@example.com', '2025-08-
02'), ('Rohan', 'rohan@example.com', '2025-08-03'), ('Sarvesh', 'sarvesh@example.com',
'2025-08-04'), ('Priya', 'priya@example.com', '2025-08-05'), ('Unnati',
'unnati@example.com', '2025-08-06')(‘Kiran’,’kiran@example.com’,’2025-08-07’);

mysql> select * from students;


+------------+------------+------------------------+-----------------+
| student_id | name | email | enrollment_date |
+------------+------------+------------------------+-----------------+
| 1 | Aman | aman@example.com | 2025-08-01 |
| 2 | Dhanashree | dhanashree@example.com | 2025-08-02 |
| 3 | Rohan | rohan@example.com | 2025-08-03 |
| 4 | Sarvesh | sarvesh@example.com | 2025-08-04 |
| 5 | Priya | priya@example.com | 2025-08-05 |
| 6 | Unnati | unnati@example.com | 2025-08-06 |
| 7 | kiran | kiran@example.com | 2025-08-07 |
+------------+------------+------------------------+-----------------+

Index on Email
mysql> CREATE INDEX idx_students_email ON students(email);
mysql> SHOW INDEX FROM students;
+----------+------------+--------------------+--------------+-------------+-----------+-------------+----------
+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation |
Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible |
Expression |
+----------+------------+--------------------+--------------+-------------+-----------+-------------+----------
+--------+------+------------+---------+---------------+---------+------------+
| students | 0 | PRIMARY | 1 | student_id | A | 6 | NULL |
NULL | | BTREE | | | YES | NULL |
| students | 0 | email | 1 | email |A | 6 | NULL | NULL |
YES | BTREE | | | YES | NULL |
| students | 1 | idx_students_email | 1 | email |A | 7 | NULL |
NULL | YES | BTREE | | | YES | NULL |
+----------+------------+--------------------+--------------+-------------+-----------+-------------+----------
+--------+------+------------+---------+---------------+---------+------------+

b.instructors table
mysql> CREATE TABLE instructors (instructor_id INT AUTO_INCREMENT PRIMARY KEY, name
VARCHAR(100), department VARCHAR(50) );

mysql> INSERT INTO instructors (name, department) VALUES ('Dr. Mehta', 'Computer
Science'),
('Prof. Sharma', 'Electronics'), ('Dr. Iyer', 'Mathematics'), ('Prof. Khan', 'Physics'), ('Dr. Desai',
'Information Technology'),('Prof. Reddy', 'Mechanical Engineering');

mysql> select * from instructors;


+---------------+--------------+------------------------+
| instructor_id | name | department |
+---------------+--------------+------------------------+
| 1 | Dr. Mehta | Computer Science |
| 2 | Prof. Sharma | Electronics |
| 3 | Dr. Iyer | Mathematics |
| 4 | Prof. Khan | Physics |
| 5 | Dr. Desai | Information Technology |
| 6 | Prof. Reddy | Mechanical Engineering |
+---------------+--------------+------------------------+

c.courses table
mysql> CREATE TABLE courses (course_id INT AUTO_INCREMENT PRIMARY KEY,
course_name VARCHAR(100),credits INT);

mysql> INSERT INTO courses (course_name, credits) VALUES ('Database Systems', 4),
('Operating Systems', 3), ('Computer Networks', 3),('Software Engineering', 4), ('Data
Structures', 4), ('Machine Learning', 3);

mysql> select * from courses;


+-----------+----------------------+---------+
| course_id | course_name | credits |
+-----------+----------------------+---------+
| 1 | Database Systems | 4|
| 2 | Operating Systems | 3|
| 3 | Computer Networks | 3|
| 4 | Software Engineering | 4|
| 5 | Data Structures | 4|
| 6 | Machine Learning | 3|
+-----------+----------------------+---------+

d.enrollment table
mysql> CREATE TABLE enrollments (enrollment_id INT AUTO_INCREMENT PRIMARY KEY,
student_id INT,course_id INT,semester VARCHAR(10),grade DECIMAL(5,2),FOREIGN KEY
(student_id) REFERENCES students(student_id),FOREIGN KEY (course_id) REFERENCES
courses(course_id));
mysql> INSERT INTO enrollments (student_id, course_id, semester, grade) VALUES(1, 1,
'Sem 3', 88.50), (2, 2, 'Sem 3', 91.00), (3, 3, 'Sem 3', 78.25), (4, 1, 'Sem 3', 85.00), (5, 4, 'Sem
3', 92.75), (6, 2, 'Sem 3', 89.00);

mysql> select * from enrollments;


+---------------+------------+-----------+----------+-------+
| enrollment_id | student_id | course_id | semester | grade |
+---------------+------------+-----------+----------+-------+
| 1| 1| 1 | Sem 3 | 88.50 |
| 2| 2| 2 | Sem 3 | 91.00 |
| 3| 3| 3 | Sem 3 | 78.25 |
| 4| 4| 1 | Sem 3 | 85.00 |
| 5| 5| 4 | Sem 3 | 92.75 |
| 6| 6| 2 | Sem 3 | 89.00 |
+---------------+------------+-----------+----------+-------+

- Index on course_id for faster joins/queries


CREATE INDEX idx_enrollments_course_id ON enrollments(course_id);

mysql> show index from enrollments;


+-------------+------------+---------------------------+--------------+---------------+-----------+-------------
+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation
| Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible
| Expression |
+-------------+------------+---------------------------+--------------+---------------+-----------+-------------
+----------+--------+------+------------+---------+---------------+---------+------------+
| enrollments | 0 | PRIMARY | 1 | enrollment_id | A | 6|
NULL | NULL | | BTREE | | | YES | NULL |
| enrollments | 1 | student_id | 1 | student_id | A | 6|
NULL | NULL | YES | BTREE | | | YES | NULL |
| enrollments | 1 | idx_enrollments_course_id | 1 | course_id | A |
4 | NULL | NULL | YES | BTREE | | | YES | NULL |
+-------------+------------+---------------------------+--------------+---------------+-----------+-------------
+----------+--------+------+------------+---------+---------------+---------+------------+

e.teaches table
mysql> CREATE TABLE teaches ( instructor_id INT,course_id INT,PRIMARY KEY
(instructor_id, course_id),FOREIGN KEY (instructor_id) REFERENCES
instructors(instructor_id),FOREIGN KEY (course_id) REFERENCES courses(course_id));
mysql> INSERT INTO teaches (instructor_id, course_id) VALUES (1, 1), (1, 2), (2, 3), (3, 1), (3,
4);

mysql> select * from teaches;


+---------------+-----------+
| instructor_id | course_id |
+---------------+-----------+
| 1| 1|
| 3| 1|
| 1| 2|
| 2| 3|
| 3| 4|
+---------------+-----------+

mysql> CREATE VIEW student_performance_view AS SELECT s.name AS student_name,


c.course_name, e.grade, e.semester FROM students s JOIN enrollments e ON s.student_id =
e.student_id JOIN courses c ON e.course_id = c.course_id;

mysql> SELECT * FROM student_performance_view;


+--------------+----------------------+-------+----------+
| student_name | course_name | grade | semester |
+--------------+----------------------+-------+----------+
| Aman | Database Systems | 88.50 | Sem 3 |
| Dhanashree | Operating Systems | 91.00 | Sem 3 |
| Rohan | Computer Networks | 78.25 | Sem 3 |
| Sarvesh | Database Systems | 85.00 | Sem 3 |
| Priya | Software Engineering | 92.75 | Sem 3 |
| Unnati | Operating Systems | 89.00 | Sem 3 |

mysql> CREATE VIEW course_statistics_view AS SELECT c.course_name,


COUNT(e.student_id) AS total_students, AVG(e.grade) AS average_grade, MAX(e.grade) AS
highest_grade FROM courses c LEFT JOIN enrollments e ON c.course_id = e.course_id
GROUP BY c.course_name;

mysql> SELECT * FROM course_statistics_view;


+----------------------+----------------+---------------+---------------+
| course_name | total_students | average_grade | highest_grade |
+----------------------+----------------+---------------+---------------+
| Database Systems | 2 | 86.750000 | 88.50 |
| Operating Systems | 2 | 90.000000 | 91.00 |
| Computer Networks | 1 | 78.250000 | 78.25 |
| Software Engineering | 1 | 92.750000 | 92.75 |
| Data Structures | 0| NULL | NULL |
| Machine Learning | 0| NULL | NULL |
+----------------------+----------------+---------------+---------------+

• Average grade per course in "sem3" semester


mysql> SELECT
c.course_name,
AVG(e.grade) AS average_grade
FROM
courses c
JOIN enrollments e ON c.course_id = e.course_id
WHERE
e.semester = 'Sem 3'
GROUP BY
c.course_name;

+----------------------+---------------+
| course_name | average_grade |
+----------------------+---------------+
| Database Systems | 86.750000 |
| Operating Systems | 90.000000 |
| Computer Networks | 78.250000 |
| Software Engineering | 92.750000 |
+----------------------+---------------+

• Students who scored more than 85 in any course


mysql> SELECT
s.student_id,
s.name AS student_name,
c.course_name,
e.grade
FROM
students s
JOIN enrollments e ON s.student_id = e.student_id
JOIN courses c ON e.course_id = c.course_id
WHERE
e.grade > 85;
+------------+--------------+----------------------+-------+
| student_id | student_name | course_name | grade |
+------------+--------------+----------------------+-------+
| 1 | Aman | Database Systems | 88.50 |
| 2 | Dhanashree | Operating Systems | 91.00 |
| 5 | Priya | Software Engineering | 92.75 |
| 6 | Unnati | Operating Systems | 89.00 |
+------------+--------------+----------------------+-------+

3.Instructors teaching more than 2 courses


mysql> SELECT
i.instructor_id,
i.name AS instructor_name,
COUNT(t.course_id) AS total_courses
FROM
instructors i
JOIN teaches t ON i.instructor_id = t.instructor_id
GROUP BY
i.instructor_id, i.name
HAVING
COUNT(t.course_id) > 2;

4.Top 3 students with highest average grade


SELECT
s.student_id,
s.name AS student_name,
AVG(e.grade) AS average_grade
FROM
students s
JOIN enrollments e ON s.student_id = e.student_id
GROUP BY
s.student_id, s.name
ORDER BY
average_grade DESC
LIMIT 3;

• INNER JOIN: Student names with the courses they enrolled in


mysql> SELECT
s.name AS student_name,
c.course_name,
e.semester,
e.grade
FROM
students s
JOIN enrollments e ON s.student_id = e.student_id
JOIN courses c ON e.course_id = c.course_id;
+--------------+----------------------+----------+-------+
| student_name | course_name | semester | grade |
+--------------+----------------------+----------+-------+
| Aman | Database Systems | Sem 3 | 88.50 |
| Dhanashree | Operating Systems | Sem 3 | 91.00 |
| Rohan | Computer Networks | Sem 3 | 78.25 |
| Sarvesh | Database Systems | Sem 3 | 85.00 |
| Priya | Software Engineering | Sem 3 | 92.75 |
| Unnati | Operating Systems | Sem 3 | 89.00 |
+--------------+----------------------+----------+-------+

• LEFT JOIN: All students and their grades (even if not enrolled)
mysql> SELECT
s.name AS student_name,
c.course_name,
e.grade
FROM
students s
LEFT JOIN enrollments e ON s.student_id = e.student_id
LEFT JOIN courses c ON e.course_id = c.course_id;
+--------------+----------------------+-------+
| student_name | course_name | grade |
+--------------+----------------------+-------+
| Aman | Database Systems | 88.50 |
| Dhanashree | Operating Systems | 91.00 |
| Rohan | Computer Networks | 78.25 |
| Sarvesh | Database Systems | 85.00 |
| Priya | Software Engineering | 92.75 |
| Unnati | Operating Systems | 89.00 |
| kiran | NULL | NULL |
+--------------+----------------------+-------+

• JOIN with Aggregation: Count of courses each instructor teaches


mysql> SELECT
i.name AS instructor_name,
COUNT(t.course_id) AS courses_taught
FROM
instructors i
JOIN teaches t ON i.instructor_id = t.instructor_id
GROUP BY
i.name;
+-----------------+----------------+
| instructor_name | courses_taught |
+-----------------+----------------+
| Dr. Mehta | 2|
| Dr. Iyer | 2|
| Prof. Sharma | 1|
+-----------------+----------------+

• JOIN with WHERE + Operator: Students scoring above 85


mysql> SELECT
s.name AS student_name,
c.course_name,
e.grade
FROM
students s
JOIN enrollments e ON s.student_id = e.student_id
JOIN courses c ON e.course_id = c.course_id
WHERE
e.grade > 85;
+--------------+----------------------+-------+
| student_name | course_name | grade |
+--------------+----------------------+-------+
| Aman | Database Systems | 88.50 |
| Dhanashree | Operating Systems | 91.00 |
| Priya | Software Engineering | 92.75 |
| Unnati | Operating Systems | 89.00 |
+--------------+----------------------+-------+

• JOIN to Show Courses Not Yet Assigned to Any Instructor


mysql> SELECT
c.course_name
FROM
courses c
LEFT JOIN teaches t ON c.course_id = t.course_id
WHERE
t.instructor_id IS NULL;
+------------------+
| course_name |
+------------------+
| Data Structures |
| Machine Learning |
+------------------+

You might also like