SQL Queries - CRUD, Aggregate
Functions, Joins, Subqueries, Stored
Procedures
Database & Table Creation
CREATE DATABASE StudentDB;
USE StudentDB;
CRUD Operations
-- 1. Create Students table
CREATE TABLE Students (
ID INT PRIMARY KEY,
Name VARCHAR(50),
Age INT,
Department VARCHAR(50)
);
-- 2. Insert five records
INSERT INTO Students VALUES
(1, 'Alice', 21, 'CS'),
(2, 'Bob', 19, 'Math'),
(3, 'Charlie', 20, 'Physics'),
(4, 'David', 22, 'CS'),
(5, 'Eva', 23, 'Math');
-- 3. Update age where ID = 3
UPDATE Students SET Age = 22 WHERE ID = 3;
-- 4. Delete student where ID = 5
DELETE FROM Students WHERE ID = 5;
-- 5. Retrieve all records
SELECT * FROM Students;
-- 6. Retrieve names of students aged over 20
SELECT Name FROM Students WHERE Age > 20;
-- 7. Retrieve distinct departments
SELECT DISTINCT Department FROM Students;
-- 8. Count total students
SELECT COUNT(*) AS Total_Students FROM Students;
-- 9. Add new column Email
ALTER TABLE Students ADD Email VARCHAR(100);
-- 10. Drop Email column
ALTER TABLE Students DROP COLUMN Email;
Aggregate Functions
-- 11. Average age
SELECT AVG(Age) AS Avg_Age FROM Students;
-- 12. Minimum and maximum age
SELECT MIN(Age) AS Min_Age, MAX(Age) AS Max_Age FROM Students;
-- 13. Total students in each department
SELECT Department, COUNT(*) AS Total FROM Students GROUP BY Department;
-- 14. Departments with more than 2 students
SELECT Department FROM Students GROUP BY Department HAVING COUNT(*) >=2;
-- 15. Sum of all ages
SELECT SUM(Age) AS Total_Age FROM Students;
-- 16. Department with highest avg age
SELECT Department FROM Students GROUP BY Department ORDER BY AVG(Age) DESC
LIMIT 1;
-- 17. Students whose name starts with 'A'
SELECT COUNT(*) FROM Students WHERE Name LIKE 'A%';
-- 18. Average age per department, sorted descending
SELECT Department, AVG(Age) AS Avg_Age FROM Students GROUP BY Department ORDER
BY Avg_Age DESC;
-- 19. Total number of distinct ages
SELECT COUNT(DISTINCT Age) FROM Students;
-- 20. Department with max students
SELECT Department FROM Students GROUP BY Department ORDER BY COUNT(*) DESC
LIMIT 1;
Joins
-- Sample Departments table
CREATE TABLE Departments (Department VARCHAR(50) PRIMARY KEY, DeptName
VARCHAR(50));
INSERT INTO Departments (Department, DeptName) VALUES
('CS', 'Computer Science'),
('EE', 'Electrical Engineering'),
('ME', 'Mechanical Engineering'),
('CE', 'Civil Engineering'),
('BIO', 'Biotechnology');
-- Sample Projects table
CREATE TABLE Projects (StudentID INT, ProjectName VARCHAR(50));
INSERT INTO Projects (StudentID, ProjectName) VALUES
(1, 'AI Chatbot'),
(2, 'Smart Irrigation'),
(3, 'Self Driving Car'),
(4, 'DNA Analysis'),
(5, 'Bridge Design');
-- 21. INNER JOIN
SELECT * FROM Students AS s INNER JOIN Departments AS d ON [Link] =
[Link];
-- 22. RIGHT JOIN
SELECT [Link], [Link] FROM Students AS s RIGHT JOIN Departments AS d ON
[Link] = [Link];
-- 23. LEFT JOIN
SELECT [Link], [Link] FROM Students AS s LEFT JOIN Departments AS d ON
[Link] = [Link];
-- 24. Students and their projects (LEFT JOIN)
SELECT [Link], [Link] FROM Students AS s LEFT JOIN Projects AS p ON [Link] =
[Link];
-- 25. Students without departments
SELECT [Link] FROM Students AS s LEFT JOIN Departments AS d ON [Link] =
[Link] WHERE [Link] IS NULL;
-- 26. FULL OUTER JOIN (via UNION)
SELECT [Link], [Link] FROM Students AS s LEFT JOIN Projects AS p ON [Link] =
[Link]
UNION
SELECT [Link], [Link] FROM Students AS s RIGHT JOIN Projects AS p ON [Link] =
[Link];
Subqueries
-- 27. Students older than average age
SELECT * FROM Students WHERE Age > (SELECT AVG(Age) FROM Students);
-- 28. Students in departments with more than 2 students
SELECT * FROM Students WHERE Department IN (SELECT Department FROM Students
GROUP BY Department HAVING COUNT(*) > 2);
-- 29. Students older than all in Projects table
SELECT * FROM Students WHERE Age > ALL (SELECT Age FROM Students S JOIN Projects P
ON [Link] = [Link]);
-- 30. Departments with no students
SELECT Department FROM Departments WHERE Department NOT IN (SELECT DISTINCT
Department FROM Students);
Stored Procedures
-- 31. Insert new student
DELIMITER //
CREATE PROCEDURE AddStudent(IN sid INT, IN sname VARCHAR(50), IN sage INT, IN
sdept VARCHAR(50))
BEGIN
INSERT INTO Students(ID, Name, Age, Department) VALUES (sid, sname, sage, sdept);
END //
DELIMITER ;
-- 32. Update student age
DELIMITER //
CREATE PROCEDURE UpdateAge(IN sid INT, IN newAge INT)
BEGIN
UPDATE Students SET Age = newAge WHERE ID = sid;
END //
DELIMITER ;
-- 33. Delete student by ID
DELIMITER //
CREATE PROCEDURE DeleteStudent(IN sid INT)
BEGIN
DELETE FROM Students WHERE ID = sid;
END //
DELIMITER ;
-- 34. Get students by department
DELIMITER //
CREATE PROCEDURE GetStudentsByDept(IN sdept VARCHAR(50))
BEGIN
SELECT * FROM Students WHERE Department = sdept;
END //
DELIMITER ;
-- 35. Total students per department
DELIMITER //
CREATE PROCEDURE CountStudentsPerDept()
BEGIN
SELECT Department, COUNT(*) AS Total FROM Students GROUP BY Department;
END //
DELIMITER ;