SQL Server  

๐ŸŽฏ Top SQL Server Queries Asked in Interviews (With Examples)

๐Ÿงฉ 1. Basic SQL Queries

๐Ÿ”น Retrieve all records from a table

SELECT * FROM Employees;

๐Ÿ”น Retrieve specific columns

SELECT FirstName, LastName, Department FROM Employees;

๐Ÿ”น Filter rows using WHERE

SELECT * FROM Employees
WHERE Department = 'HR';

๐Ÿ”น Sorting data

SELECT * FROM Employees
ORDER BY Salary DESC;

๐Ÿ”น Aliases for readability

SELECT FirstName + ' ' + LastName AS FullName, Salary AS MonthlySalary
FROM Employees;

๐Ÿงฎ 2. Aggregate Functions

๐Ÿ”น Count, Sum, Average

SELECT COUNT(*) AS TotalEmployees,
       SUM(Salary) AS TotalSalary,
       AVG(Salary) AS AverageSalary
FROM Employees;

๐Ÿ”น Minimum and Maximum

SELECT MIN(Salary) AS LowestSalary,
       MAX(Salary) AS HighestSalary
FROM Employees;

๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘ 3. Grouping Data

๐Ÿ”น Group by Department

SELECT Department, COUNT(*) AS EmployeeCount
FROM Employees
GROUP BY Department;

๐Ÿ”น Group by with HAVING (Filter groups)

SELECT Department, AVG(Salary) AS AvgSalary
FROM Employees
GROUP BY Department
HAVING AVG(Salary) > 60000;

๐Ÿ”— 4. Joins (Most Asked in Interviews)

๐Ÿ”น INNER JOIN

SELECT E.FirstName, D.DepartmentName
FROM Employees E
INNER JOIN Departments D ON E.DepartmentID = D.DepartmentID;

๐Ÿ”น LEFT JOIN

SELECT E.FirstName, D.DepartmentName
FROM Employees E
LEFT JOIN Departments D ON E.DepartmentID = D.DepartmentID;

๐Ÿ”น RIGHT JOIN

SELECT E.FirstName, D.DepartmentName
FROM Employees E
RIGHT JOIN Departments D ON E.DepartmentID = D.DepartmentID;

๐Ÿ”น FULL JOIN

SELECT E.FirstName, D.DepartmentName
FROM Employees E
FULL JOIN Departments D ON E.DepartmentID = D.DepartmentID;

๐Ÿ”น CROSS JOIN

SELECT E.FirstName, D.DepartmentName
FROM Employees E
CROSS JOIN Departments D;

๐Ÿง  5. Subqueries

๐Ÿ”น Find employees earning more than average salary

SELECT * FROM Employees
WHERE Salary > (SELECT AVG(Salary) FROM Employees);

๐Ÿ”น Find highest salary using subquery

SELECT * FROM Employees
WHERE Salary = (SELECT MAX(Salary) FROM Employees);

๐Ÿงฐ 6. Common Table Expressions (CTE)

๐Ÿ”น Example: Recursive CTE for Employee Hierarchy

WITH EmployeeCTE AS (
    SELECT EmployeeID, Name, ManagerID
    FROM Employees
    WHERE ManagerID IS NULL
    UNION ALL
    SELECT E.EmployeeID, E.Name, E.ManagerID
    FROM Employees E
    INNER JOIN EmployeeCTE C ON E.ManagerID = C.EmployeeID
)
SELECT * FROM EmployeeCTE;

๐Ÿ•ต๏ธโ€โ™‚๏ธ 7. Window Functions (Advanced)

๐Ÿ”น Rank employees by salary

SELECT EmployeeID, FirstName, Salary,
       RANK() OVER (ORDER BY Salary DESC) AS SalaryRank
FROM Employees;

๐Ÿ”น Running total of salaries

SELECT EmployeeID, Salary,
       SUM(Salary) OVER (ORDER BY EmployeeID) AS RunningTotal
FROM Employees;

โณ 8. Date and Time Queries

๐Ÿ”น Employees joined in last 30 days

SELECT * FROM Employees
WHERE DATEDIFF(DAY, JoinDate, GETDATE()) <= 30;

๐Ÿ”น Extract year and month

SELECT FirstName, YEAR(JoinDate) AS JoinYear, MONTH(JoinDate) AS JoinMonth
FROM Employees;

๐Ÿ”’ 9. Constraints & NULL Handling

๐Ÿ”น IS NULL and IS NOT NULL

SELECT * FROM Employees
WHERE ManagerID IS NULL;

๐Ÿ”น COALESCE and ISNULL

SELECT FirstName, COALESCE(Phone, 'Not Available') AS PhoneNumber
FROM Employees;

โš™๏ธ 10. DML Operations

๐Ÿ”น INSERT

INSERT INTO Employees (FirstName, LastName, Salary, DepartmentID)
VALUES ('Nitin', 'Kumar', 70000, 2);

๐Ÿ”น UPDATE

UPDATE Employees
SET Salary = Salary + 5000
WHERE Department = 'IT';

๐Ÿ”น DELETE

DELETE FROM Employees
WHERE EmployeeID = 101;

๐Ÿ” 11. Transactions

BEGIN TRANSACTION;

UPDATE Accounts SET Balance = Balance - 500 WHERE AccountID = 1;
UPDATE Accounts SET Balance = Balance + 500 WHERE AccountID = 2;

IF @@ERROR <> 0
    ROLLBACK TRANSACTION;
ELSE
    COMMIT TRANSACTION;

โšก 12. Performance & Optimization Queries

๐Ÿ”น Check execution plan

SET SHOWPLAN_ALL ON;
SELECT * FROM Employees WHERE Department = 'IT';
SET SHOWPLAN_ALL OFF;

๐Ÿ”น Create an index

CREATE INDEX IX_Employees_Department ON Employees(Department);

๐Ÿงฉ 13. String Functions

SELECT UPPER(FirstName), LOWER(LastName), LEN(FirstName), SUBSTRING(FirstName, 1, 3)
FROM Employees;

๐Ÿ“Š 14. Pivot and Unpivot

๐Ÿ”น PIVOT Example

SELECT Department, [2024] AS Hires2024, [2025] AS Hires2025
FROM (
    SELECT Department, YEAR(JoinDate) AS JoinYear, EmployeeID
    FROM Employees
) AS Source
PIVOT (
    COUNT(EmployeeID) FOR JoinYear IN ([2024], [2025])
) AS PivotTable;
๐Ÿงฉ 15. Find Nth Highest Salary

To find the Nth highest salary (e.g., 3rd highest):

SELECT DISTINCT TOP 1 Salary
FROM Employees E1
WHERE 3 - 1 = (
    SELECT COUNT(DISTINCT Salary)
    FROM Employees E2
    WHERE E2.Salary > E1.Salary
);

๐Ÿง  Replace 3 with any number (like 2 for second highest).

๐Ÿ” 16. Find Duplicate Records in a Table

To find duplicate rows based on name:

SELECT FirstName, LastName, COUNT(*) AS DuplicateCount
FROM Employees
GROUP BY FirstName, LastName
HAVING COUNT(*) > 1;

โœ… Shows which names appear more than once.

๐Ÿงน 17. Delete Duplicate Records (Keep One)

Remove duplicates while keeping one record:

WITH CTE AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY FirstName, LastName ORDER BY EmployeeID) AS RowNum
    FROM Employees
)
DELETE FROM CTE WHERE RowNum > 1;

โš™๏ธ Uses ROW_NUMBER() to identify duplicates.

๐Ÿ“Š 18. Clustered vs Non-Clustered Index

-- Clustered Index (physically sorts data)
CREATE CLUSTERED INDEX IX_EmployeeID ON Employees(EmployeeID);

-- Non-Clustered Index (creates separate index structure)
CREATE NONCLUSTERED INDEX IX_Department ON Employees(Department);

๐Ÿ“š Clustered = one per table, Non-clustered = multiple allowed.

๐Ÿ‘ฅ 19. Display Employee Count Department-Wise

SELECT Department, COUNT(*) AS EmployeeCount
FROM Employees
GROUP BY Department
ORDER BY EmployeeCount DESC;

๐Ÿ“ˆ Useful for finding which department has most employees.

๐Ÿง‘โ€๐Ÿ’ผ 20. Find Employees Without a Manager

SELECT * FROM Employees
WHERE ManagerID IS NULL;

Shows all top-level employees or heads of departments.

๐Ÿ’ฐ 21. Employees Earning More Than Department Average

SELECT E.FirstName, E.Salary, E.Department
FROM Employees E
WHERE E.Salary > (
    SELECT AVG(Salary)
    FROM Employees
    WHERE Department = E.Department
);

๐Ÿ† Helps identify high-performing employees.

๐Ÿงฎ 22. Find Second Highest Salary Using CTE

WITH SalaryCTE AS (
    SELECT Salary, DENSE_RANK() OVER (ORDER BY Salary DESC) AS RankNo
    FROM Employees
)
SELECT Salary FROM SalaryCTE
WHERE RankNo = 2;

๐Ÿš€ The easiest and most optimized way to get the 2nd highest salary.

๐Ÿ“… 23. Employees Joined in Last 60 Days

SELECT * FROM Employees
WHERE DATEDIFF(DAY, JoinDate, GETDATE()) <= 60;

Shows all employees recently joined.

๐Ÿง  24. Employees with Multiple Projects

SELECT EmployeeID, COUNT(ProjectID) AS ProjectCount
FROM EmployeeProjects
GROUP BY EmployeeID
HAVING COUNT(ProjectID) > 1;

๐Ÿ” Great query to test GROUP BY + HAVING.


๐Ÿ’ผ 25. Highest Paid Employee Per Department

SELECT Department, FirstName, Salary
FROM Employees E1
WHERE Salary = (
    SELECT MAX(Salary)
    FROM Employees E2
    WHERE E2.Department = E1.Department
);

๐Ÿ… Shows the top earner in every department.

๐Ÿงพ 26. Categorize Employees by Salary Range

SELECT FirstName, Salary,
CASE
    WHEN Salary > 100000 THEN 'High'
    WHEN Salary BETWEEN 50000 AND 100000 THEN 'Medium'
    ELSE 'Low'
END AS SalaryCategory
FROM Employees;

๐Ÿ’ก Often asked in interviews to test CASE usage.

๐Ÿšซ 27. Employees Who Never Took Leave

SELECT E.EmployeeID, E.FirstName
FROM Employees E
LEFT JOIN Leaves L ON E.EmployeeID = L.EmployeeID
WHERE L.EmployeeID IS NULL;

Shows employees with no leave records โ€” uses LEFT JOIN.

๐Ÿข 28. Department with Maximum Employees

SELECT TOP 1 Department, COUNT(*) AS EmployeeCount
FROM Employees
GROUP BY Department
ORDER BY COUNT(*) DESC;

๐ŸŽฏ Finds the department with the largest team.

๐Ÿ“Š 29. Average Salary per Department (Window Function)

SELECT Department, Salary,
AVG(Salary) OVER (PARTITION BY Department) AS AvgDeptSalary
FROM Employees;

โšก Window functions are highly efficient for analytical queries.

โš™๏ธ 30. Check Query Performance (Execution Plan)

SET SHOWPLAN_ALL ON;
SELECT * FROM Employees WHERE Department = 'Finance';
SET SHOWPLAN_ALL OFF;

๐Ÿงฉ Returns the execution plan instead of executing the query โ€” useful for performance tuning.