Structured Query Language (SQL), is the backbone of the most relational database .You can process any complex dataset. Here we will explore SQL queries with examples for beginners to advance. If you will go through this, it will be very helpful for you to crack any job interview and grab a high paying job.
73 Important SQL Queries with Examples for Interview Preparation in 2025
Let’s now explore the most common SQL queries with examples for for Beginners and Experienced Professionals as given below:-
-
1. Extract all record from the table
SELECT *
FROM employees;
2. Create New Column
ALTER TABLE table_name
ADD COLUMN column_name data_type;
3. Remove all records from a table but keep the table structure
TRUNCATE TABLE table_name;
4. Convert the String in lower case
SELECT LOWER(‘HELLO WORLD’) AS lower_case_string;
5. Find the record where column has null( Column name is missing)
SELECT *
FROM table_name
WHERE column_name IS NULL;
6. Total sales per customer from sales table
SELECT customer_id, SUM(sale_amount) AS total_sales
FROM sales
GROUP BY customer_id;
7. How to check table is empty
SELECT CASE
WHEN EXISTS (SELECT 1 FROM employees) THEN ‘Not Empty’
ELSE ‘Empty’
END AS table_status;
8. Select second highest salaried employee
SELECT MAX(salary)
FROM employees
WHERE salary < (SELECT MAX(salary) FROM employees);
9. To find the N-th highest salary in SQL, you can use the DENSE_RANK() or ROW_NUMBER() window functions.
WITH RankedSalaries AS (
SELECT
Salary,
DENSE_RANK() OVER (ORDER BY Salary DESC) AS Rank
FROM Employees
)
SELECT Salary
FROM RankedSalaries
WHERE Rank = N;
10. To find employees whose salary is greater than the average salary, you can use the following query:
SELECT EmployeeID, Name, Salary
FROM Employees
WHERE Salary > (SELECT AVG(Salary) FROM Employees);
11. Write a query to display current date and time
SELECT GETDATE() AS CurrentDateTime;
SELECT CURRENT_TIMESTAMP;
12. Find duplicate record in table
SELECT
Name,
Department,
COUNT(*) AS DuplicateCount
FROM
Employees
GROUP BY
Name, Department
HAVING
COUNT(*) > 1;
13. Delete duplicate records from table
WITH CTE AS (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY Column1, Column2, …, ColumnN ORDER BY ID) AS RowNum
FROM TableName
)
DELETE FROM TableName
WHERE ID IN (
SELECT ID
FROM CTE
WHERE RowNum > 1
);
14. Another way by Self join
DELETE t1
FROM TableName t1
JOIN TableName t2
ON
t1.Column1 = t2.Column1 AND
t1.Column2 = t2.Column2 AND
t1.ID > t2.ID;
15. Extract common records from table
SELECT *
FROM Table1
INTERSECT
SELECT *
FROM Table2;
16. Another way
SELECT *
FROM Table1 a
WHERE EXISTS (
SELECT 1
FROM Table2 b
WHERE a.Column1 = b.Column1 AND a.Column2 = b.Column2
);
17. Another way
SELECT a.*
FROM Table1 a
INNER JOIN Table2 b
ON a.ID = b.ID AND a.Name = b.Name AND a.Age = b.Age;
18. Extract the last 10 records from the table .
SELECT *
FROM TableName
ORDER BY ID DESC
LIMIT 10;
19. Fetches the top 5 products with the highest sales.
SELECT TOP 5 ProductName, SUM(SalesAmount) AS TotalSales
FROM SalesTable
GROUP BY ProductName
ORDER BY TotalSales DESC;
20. Calculate total salary of all employees
SELECT SUM(Salary) AS TotalSalary
FROM Employees;
21. Find employee who joined in year 2022
SELECT *
FROM Employees
WHERE YEAR(JoinDate) = 2022;
22. Find employees whose name start with A
SELECT *
FROM Employees
WHERE Name LIKE ‘A%’;
“OR”
SELECT *
FROM Employees
WHERE Name LIKE ‘A%’;
23. Find employee who don’t have manager
SELECT EmployeeID, Name
FROM Employees
WHERE ManagerID IS NULL;
24. Find the product that haven’t been sold, the query could look like this:
Assuming you have a Products table and a Sales table
SELECT p.ProductName
FROM Products p
LEFT JOIN Sales s ON p.ProductID = s.ProductID
WHERE s.ProductID IS NULL;
25. Find department with highest number of employee
SELECT DepartmentName, COUNT(EmployeeID) AS EmployeeCount
FROM Employees
GROUP BY DepartmentName
ORDER BY EmployeeCount DESC
LIMIT 1;
26. Find the product category with the highest sales in each category.
SELECT p.Category, SUM(s.SalesAmount) AS TotalSales
FROM Products p
JOIN Sales s ON p.ProductID = s.ProductID
GROUP BY p.Category
ORDER BY TotalSales DESC
LIMIT 1;
27. Count of employees in each department
SELECT DepartmentName, COUNT(EmployeeID) AS EmployeeCount
FROM Employees
GROUP BY DepartmentName;
28. Find employee with highest salary in each department
SELECT e.EmployeeID, e.Name, e.DepartmentID, e.Salary
FROM Employees e
WHERE e.Salary = (
SELECT MAX(Salary)
FROM Employees
WHERE DepartmentID = e.DepartmentID
);
29. Update the salary of all employees by increasing it by 10%,
UPDATE Employees
SET Salary = Salary * 1.10;
30. Find employees whose salary is between 50,000 and 100,000,
SELECT EmployeeID, Name, Salary
FROM Employees
WHERE Salary BETWEEN 50000 AND 100000;
31. Find youngest employee
SELECT *
FROM Employees
ORDER BY BirthDate DESC
LIMIT 1;
32. Fetch the first and last record from the employee table using UNION ALL:
SELECT * FROM employee
ORDER BY emp_id ASC
LIMIT 1
33. UNION ALL
SELECT * FROM employee
ORDER BY emp_id DESC
LIMIT 1;
34. Find employee whose manager id is 141
SELECT *
FROM employee
WHERE manager_id = 141;
35. Find total number of department in the company
SELECT COUNT(DISTINCT department_id) AS total_departments
FROM employees;
36. Employee who joined in last 2 years
SELECT *
FROM employees
WHERE hire_date >= DATEADD(YEAR, -2, GETDATE());
37. Find department with lowest average salary
SELECT TOP 1 department_id, AVG(salary) AS average_salary
FROM employees
GROUP BY department_id
ORDER BY average_salary ASC;
38. Display customers who have been engaged with the company for the last 5 years
SELECT *
FROM customers
WHERE registration_date <= DATEADD(YEAR, -5, GETDATE());
39. Display the second most sold product
WITH ProductSales AS (
SELECT product_id, SUM(quantity_sold) AS total_sold
FROM sales
GROUP BY product_id
)
SELECT TOP 1 product_id, total_sold
FROM ProductSales
ORDER BY total_sold DESC
OFFSET 1 ROWS;
Also Read: 10 Most Asked SQL Interview Questions With Answers
40. Get all the employee in XML format
SELECT *
FROM employees
FOR XML AUTO;
41. Employees who do not have any subordinates in sales department
SELECT e.emp_id, e.name
FROM employees e
WHERE e.department = ‘Sales’
AND e.emp_id NOT IN (
SELECT DISTINCT manager_id
FROM employees
WHERE manager_id IS NOT NULL
AND department = ‘Sales’
);
42. Find employees having the same salary
SELECT *
FROM employees
WHERE salary IN (
SELECT salary
FROM employees
GROUP BY salary
HAVING COUNT(*) > 1
);
43. Update salary as per their department like for department 101, 10% , department 102, 15 %
UPDATE employees
SET salary = CASE
WHEN department_id = 101 THEN salary * 1.10
WHEN department_id = 102 THEN salary * 1.05
ELSE salary
END;
44. Find employees who hired in last 6 months
SELECT *
FROM employees
WHERE hire_date >= DATEADD(MONTH, -6, GETDATE());
45. Find department wise total and average salary
SELECT department_id,
SUM(salary) AS total_salary,
AVG(salary) AS average_salary
FROM employees
GROUP BY department_id;
46. Find employees who joined the company in the same month and year as their manager
SELECT e.employee_id AS employee_id,
e.name AS employee_name,
e.hire_date AS employee_hire_date,
m.employee_id AS manager_id,
m.name AS manager_name,
m.hire_date AS manager_hire_date
FROM employees e
JOIN employees m
ON e.manager_id = m.employee_id
AND YEAR(e.hire_date) = YEAR(m.hire_date)
AND MONTH(e.hire_date) = MONTH(m.hire_date);
47. Find employees whose salary is higher than their manager’s salary
SELECT e.employee_id AS employee_id,
e.name AS employee_name,
e.salary AS employee_salary,
m.employee_id AS manager_id,
m.name AS manager_name,
m.salary AS manager_salary
FROM employees e
JOIN employees m
ON e.manager_id = m.employee_id
WHERE e.salary > m.salary;
48. Find employee who work under the same manager(managerID =12)
SELECT *
FROM employee
WHERE managerID = 12;
49. Find employees who work under the same manager, but without specifying the manager ID,
SELECT e1.name AS employee_name,
e1.managerID AS manager_id
FROM employee e1
WHERE e1.managerID IS NOT NULL
ORDER BY e1.managerID;
50. Find employee with more than 5 years experience in each department
SELECT department_id,
employee_id,
name,
DATEDIFF(CURDATE(), hire_date) / 365 AS years_of_service
FROM employees
WHERE DATEDIFF(CURDATE(), hire_date) / 365 > 5;
51. Calculate Running total for each day
SELECT SaleDate, Amount,
SUM(Amount) OVER (ORDER BY SaleDate) AS RunningTotal
FROM Sales;
52. Find customers who did not purchase from last year
SELECT customer_id, customer_name
FROM customers
WHERE customer_id NOT IN (
SELECT DISTINCT customer_id
FROM sales
WHERE sale_date >= CURDATE() – INTERVAL 1 YEAR
);
53. Find the best selling product in each department or the top performing product in each department.
SELECT region, product_id, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY region, product_id
HAVING total_sales = (
SELECT MAX(SUM(sales_amount))
FROM sales s2
WHERE s2.region = sales.region
GROUP BY s2.product_id
);
54. Find employee who exceeded their sales target
SELECT e.employee_id, e.name, e.sales_target, SUM(s.sales_amount) AS total_sales
FROM employees e
JOIN sales s ON e.employee_id = s.employee_id
GROUP BY e.employee_id, e.name, e.sales_target
HAVING total_sales > e.sales_target;
55. Check out products with low inventory or List the product with low stock level .
SELECT product_id, product_name, inventory_quantity
FROM products
WHERE inventory_quantity < 10;
56. Monitor the daily website traffic or count daily visitor count for the website.
SELECT DATE(visit_time) AS visit_date, COUNT(*) AS total_visits
FROM website_traffic
GROUP BY DATE(visit_time)
ORDER BY visit_date DESC;
57. Find customers who purchased product of Electronic category
SELECT c.customer_id, c.customer_name
FROM customers c
JOIN sales s ON c.customer_id = s.customer_id
WHERE s.product_id IN (SELECT product_id FROM products WHERE category = ‘Electronics’);
58. Calculate average delivery time for orders
SELECT AVG(DATEDIFF(delivery_date, order_date)) AS avg_delivery_time
FROM orders
WHERE delivery_date IS NOT NULL;
59. Find most frequently ordered product or product with highest number of orders
SELECT product_id, COUNT(*) AS order_count
FROM sales
GROUP BY product_id
ORDER BY order_count DESC
LIMIT 1;
60. Detect customers who file multiple complaints
SELECT customer_id, COUNT(*) AS complaint_count
FROM complaints
GROUP BY customer_id
HAVING complaint_count > 1;
61. Find employees who are close to retierment
SELECT employee_id, name, birth_date, (YEAR(CURDATE()) – YEAR(birth_date)) AS age
FROM employees
WHERE (YEAR(CURDATE()) – YEAR(birth_date)) >= 58;
62. Find products which are still pending for delivery or not delivered yet .
SELECT order_id, customer_id, order_date
FROM orders
WHERE delivery_date IS NULL;
63. Analyse sales performance by quarter
SELECT QUARTER(sale_date) AS quarter, YEAR(sale_date) AS year, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY YEAR(sale_date), QUARTER(sale_date)
ORDER BY year, quarter;
64. Identify overlapping Booking in a hotel or detect the conflict room booking for the same period
SELECT b1.booking_id, b2.booking_id, b1.room_id, b1.check_in, b1.check_out
FROM bookings b1
JOIN bookings b2 ON b1.room_id = b2.room_id
WHERE b1.booking_id <> b2.booking_id
AND b1.check_in < b2.check_out
AND b1.check_out > b2.check_in;
65. Find the most common issue in support tickets or most frequently reported issue
SELECT issue_type, COUNT(*) AS occurrence
FROM support_tickets
GROUP BY issue_type
ORDER BY occurrence DESC
LIMIT 1;
66. Find average purchase value per customer
SELECT customer_id, AVG(sales_amount) AS avg_purchase_value
FROM sales
GROUP BY customer_id;
67. Identify Which products have experienced a more than 50% drop in sales in the last 30 days compared to the previous period?
SELECT product_id, SUM(CASE WHEN sale_date >= CURDATE() – INTERVAL 30 DAY THEN sales_amount ELSE 0 END) AS last_30_days,
SUM(CASE WHEN sale_date < CURDATE() – INTERVAL 30 DAY THEN sales_amount ELSE 0 END) AS previous_period
FROM sales
GROUP BY product_id
HAVING last_30_days < previous_period / 2;
68. Find employee who work in multiple roles
SELECT employee_id, COUNT(DISTINCT role_id) AS role_count
FROM employee_roles
GROUP BY employee_id
HAVING role_count > 1;
69. Calculate employee attrition rate
SELECT YEAR(resignation_date) AS year,
COUNT(*) * 100.0 / (SELECT COUNT(*) FROM employees) AS attrition_rate
FROM employees
WHERE resignation_date IS NOT NULL
GROUP BY YEAR(resignation_date);
70. Find top product pair commonly purchased together
SELECT product_id_1, product_id_2, COUNT(*) AS pair_count
FROM (
SELECT a.product_id AS product_id_1, b.product_id AS product_id_2
FROM sales a
JOIN sales b ON a.order_id = b.order_id AND a.product_id < b.product_id
) AS product_pairs
GROUP BY product_id_1, product_id_2
ORDER BY pair_count DESC
LIMIT 5;
71. Update table with value 0 to 1 and 1 to 0
UPDATE employee
SET column_name = CASE
WHEN column_name = 0 THEN 1
WHEN column_name = 1 THEN 0
END;
72. Find users who have logged in for exactly 3 consecutive days
WITH LoginSequence AS (
SELECT
UserID,
LoginDate,
ROW_NUMBER() OVER (PARTITION BY UserID ORDER BY LoginDate) AS LoginRow
FROM UserLogins
),
ConsecutiveLogins AS (
SELECT
UserID,
MIN(LoginDate) AS StartDate,
MAX(LoginDate) AS EndDate,
COUNT(*) AS ConsecutiveDays
FROM LoginSequence
GROUP BY UserID, (DATEDIFF(DAY, LoginDate, LoginRow))
)
SELECT
UserID,
StartDate,
EndDate
FROM ConsecutiveLogins
WHERE ConsecutiveDays = 3;
73. Find those employees whose total sales are greater than 120% of the department’s average total sales.
WITH DepartmentSales AS (
SELECT
DepartmentID,
AVG(TotalSales) AS AvgSales
FROM (
SELECT
e.DepartmentID,
e.EmployeeID,
SUM(s.Revenue) AS TotalSales
FROM Employees e
JOIN Sales s ON e.EmployeeID = s.SalespersonID
GROUP BY e.DepartmentID, e.EmployeeID
) EmployeeSales
GROUP BY DepartmentID
),
EmployeeSales AS (
SELECT
e.EmployeeID,
e.Name,
e.DepartmentID,
SUM(s.Revenue) AS TotalSales
FROM Employees e
JOIN Sales s ON e.EmployeeID = s.SalespersonID
GROUP BY e.EmployeeID, e.Name, e.DepartmentID
)
SELECT
es.EmployeeID,
es.Name,
es.TotalSales,
ds.AvgSales,
(ds.AvgSales * 1.2) AS Threshold
FROM EmployeeSales es
JOIN DepartmentSales ds ON es.DepartmentID = ds.DepartmentID
WHERE es.TotalSales > ds.AvgSales * 1.2;
Conclusion
You can learn SQL by enrolling in Data Analysis or Data science which is high in demand in today’s world. As everything is completely digital now. Every organisation relies on data now. You can learn data analysis by enrolling in console flare where you will work on a real dataset.
And you will be unbeatable as compared to other candidates.
For more such content and regular updates, follow us on Facebook, Instagram, LinkedIn