SQL_Programming_Paper_with_Answers
SQL_Programming_Paper_with_Answers
(Basic to Intermediate)
Section A: Basics & DDL/DML (10 Marks)
Q1. What is the difference between DELETE, TRUNCATE, and DROP?
A1.
- DELETE removes rows based on a condition and can be rolled back.
- TRUNCATE removes all rows quickly without logging individual row deletions and cannot be rolled
back.
- DROP deletes the entire table structure and data permanently.
A2.
CREATE TABLE Employees (
EmpID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Salary DECIMAL(10,2),
JoinDate DATE
);
A3.
INSERT INTO Employees (EmpID, FirstName, LastName, Salary, JoinDate)
VALUES (101, 'John', 'Doe', 50000, '2020-04-01');
A4.
ALTER TABLE Employees ADD Department VARCHAR(30);
A5.
UPDATE Employees SET Salary = 55000 WHERE EmpID = 101;
A6.
SELECT * FROM Employees WHERE Salary > 50000;
Q7. Fetch FirstName, LastName, JoinDate for employees joined after '2022-01-01'.
A7.
SELECT FirstName, LastName, JoinDate FROM Employees WHERE JoinDate > '2022-01-01';
A8.
SELECT DISTINCT Department FROM Employees;
A9.
SELECT * FROM Employees WHERE Salary BETWEEN 40000 AND 60000;
A10.
SELECT * FROM Employees WHERE FirstName LIKE 'J%';
A11.
SELECT E.FirstName, E.LastName, D.DeptName FROM Employees E
JOIN Departments D ON E.DeptID = D.DeptID;
A12.
SELECT E.FirstName, E.LastName, D.DeptName FROM Employees E
LEFT JOIN Departments D ON E.DeptID = D.DeptID;
A13.
SELECT D.DeptName FROM Departments D
LEFT JOIN Employees E ON D.DeptID = E.DeptID
WHERE E.EmpID IS NULL;
A14.
SELECT DeptID, COUNT(*) AS EmployeeCount FROM Employees GROUP BY DeptID;
A15.
SELECT E.FirstName, E.LastName FROM Employees E
JOIN Departments D ON E.DeptID = D.DeptID
WHERE D.DeptName = 'IT';
Section D: Subqueries & Aggregations (15 Marks)
Q16. Employee(s) with highest salary.
A16.
SELECT * FROM Employees WHERE Salary = (SELECT MAX(Salary) FROM Employees);
A17.
SELECT DeptID, AVG(Salary) AS AvgSalary FROM Employees GROUP BY DeptID;
A18.
SELECT * FROM Employees WHERE Salary > (SELECT AVG(Salary) FROM Employees);
A19.
SELECT * FROM Employees WHERE Salary > ALL (
SELECT Salary FROM Employees E
JOIN Departments D ON E.DeptID = D.DeptID WHERE D.DeptName = 'HR');
A20.
SELECT MAX(Salary) FROM Employees WHERE Salary < (SELECT MAX(Salary) FROM Employees);
Section E: Group By, Having, Case & Window Functions (20 Marks)
Q21. Total salary paid per department.
A21.
SELECT DeptID, SUM(Salary) AS TotalSalary FROM Employees GROUP BY DeptID;
A22.
SELECT DeptID, AVG(Salary) FROM Employees GROUP BY DeptID HAVING AVG(Salary) > 60000;
A23.
SELECT *, CASE
WHEN Salary > 80000 THEN 'A'
WHEN Salary BETWEEN 50000 AND 80000 THEN 'B'
ELSE 'C' END AS SalaryGrade FROM Employees;
A25.
SELECT *, SUM(Salary) OVER (PARTITION BY DeptID ORDER BY Salary) AS CumulativeSalary FROM
Employees;
A26.
SELECT CustomerID, SUM(Amount) AS TotalAmount FROM Orders GROUP BY CustomerID ORDER
BY TotalAmount DESC LIMIT 3;
A27.
SELECT * FROM Customers WHERE CustomerID NOT IN (SELECT DISTINCT CustomerID FROM
Orders);
A28.
SELECT DATE_FORMAT(OrderDate, '%Y-%m') AS Month, SUM(Amount) AS MonthlySales FROM
Orders GROUP BY Month;
A29.
SELECT CustomerID, COUNT(*) AS OrderCount FROM Orders GROUP BY CustomerID ORDER BY
OrderCount DESC LIMIT 1;
A30.
SELECT CustomerID,
ROUND(SUM(Amount) * 100.0 / (SELECT SUM(Amount) FROM Orders), 2) AS
PercentageContribution
FROM Orders GROUP BY CustomerID;