SQL Query Interview Questions

Hello friends! in this post, we will see some of the most commonly asked SQL queries in interviews. These questions are designed for both freshers as well as experienced professionals. We will start with queries covering basic SQL commands and then move to more complex problems.

Consider the below two tables for most of the questions asked here.

Table – EmployeeDetails

EmpIdFullNameManagerIdDateOfJoining
121John Snow32101/31/2014
321Walter White98601/30/2015
421Kuldeep Rana87627/11/2016


Table – EmployeeSalary

EmpIdProjectSalary
121P18000
321P21000
421P112000

SQL Queries Asked in Interviews with Answers


Ques.1. Write a SQL query to fetch the count of employees working in project ‘P1’.
Ans. Here, we would be using aggregate function count() with the SQL where clause-

SELECT COUNT(*) 
FROM EmployeeSalary 
WHERE Project = 'P1';


Ques.2. Write a SQL query to fetch employee names having a salary greater than or equal to 5000 and less than or equal 10000.
Ans. Here, we will use BETWEEN in the ‘where’ clause to return the EmpId of the employees with salary satisfying the required criteria and then use it as subquery to find the fullName of the employee form EmployeeDetails table.

SELECT FullName 
FROM EmployeeDetails 
WHERE EmpId IN 
(SELECT EmpId FROM EmpolyeeSalary 
WHERE Salary BETWEEN 5000 AND 10000);


Ques.3. Write a SQL query to fetch project-wise count of employees sorted by project’s count in descending order.
Ans. The query has two requirements – first to fetch the project-wise count and then to sort the result by that count. For project-wise count, we will be using the GROUP BY clause and for sorting, we will use the ORDER BY clause on the alias of the project-count.

SELECT Project, count(EmpId) EmpProjectCount 
FROM EmployeeSalary 
GROUP BY Project 
ORDER BY EmpProjectCount DESC;


Ques.4. Write a query to fetch only the first name(string before space) from the FullName column of EmployeeDetails table.
Ans. In this question, we are required to first fetch the location of the space character in the FullName field and then extract the first name out of the FullName field. For finding the location we will use LOCATE method in MySQL and CHARINDEX in SQL SERVER and for fetching the string before space, we will use SUBSTRING OR MID method.mySQL- Using MID

SELECT MID(FullName, 0, LOCATE(' ',FullName)) 
FROM EmployeeDetails;


SQL Server-Using SUBSTRING

SELECT SUBSTRING(FullName, 0, CHARINDEX(' ',FullName)) 
FROM EmployeeDetails;


Also, we can use LEFT which returns the left part of a string till a specified number of characters.

SELECT LEFT(FullName, CHARINDEX(' ',FullName) - 1) 
FROM EmployeeDetails;


Ques.5. Write a query to fetch employee names and salary records. Return employee details even if the salary record is not present for the employee.
Ans. Here, we can use left join with EmployeeDetail table on the left side.

SELECT E.FullName, S.Salary  
FROM EmployeeDetails E LEFT JOIN EmployeeSalary S
ON E.EmpId = S.EmpId;


Ques.6. Write a SQL query to fetch all the Employees who are also managers from EmployeeDetails table.
Ans. Here, we have to use Self-Join as the requirement wants us to analyze the EmployeeDetails table as two different tables, each for Employee and manager records.

SELECT DISTINCT E.FullName
FROM EmpDetails E
INNER JOIN EmpDetails M
ON E.EmpID = M.ManagerID;


Ques.7. Write a SQL query to fetch all employee records from EmployeeDetails table who have a salary record in EmployeeSalary table.
Ans. Using ‘Exists’-

SELECT * FROM EmployeeDetails E 
WHERE EXISTS 
(SELECT * FROM EmployeeSalary S WHERE  E.EmpId = S.EmpId);


Ques.8. Write a SQL query to fetch duplicate records from a table.
Ans. In order to find duplicate records from the table, we can use GROUP BY on all the fields and then use HAVING clause to return only those fields whose count is greater than 1 i.e. the rows having duplicate records.

SELECT EmpId, Project, Salary, COUNT(*)
FROM EmployeeSalary
GROUP BY EmpId, Project, Salary
HAVING COUNT(*) > 1;


Ques.9. Write a SQL query to remove duplicates from a table without using a temporary table.
Ans. Using rowId-

DELETE FROM EmployeeSalary
WHERE rowid NOT IN
(SELECT MAX(rowid) FROM EmployeeSalary GROUP BY EmpId);


Ques.10. Write a SQL query to fetch only odd rows from the table.
Ans. This can be achieved by using Row_number in SQL server-

SELECT E.EmpId, E.Project, E.Salary
FROM (
    SELECT *, Row_Number() OVER(ORDER BY EmpId) AS RowNumber
    FROM EmployeeSalary
) E
WHERE E.RowNumber % 2 = 1


Ques.11. Write a SQL query to fetch only even rows from the table.
Ans. Using the same Row_Number() and checking that the remainder when divided by 2 is 0-

SELECT E.EmpId, E.Project, E.Salary
FROM (
    SELECT *, Row_Number() OVER(ORDER BY EmpId) AS RowNumber
    FROM EmployeeSalary
) E
WHERE E.RowNumber % 2 = 0


Ques.12. Write a SQL query to create a new table with data and structure copied from another table.
Ans. Using SELECT INTO command-

SELECT * INTO newTable 
FROM EmployeeDetails;


Ques.13. Write a SQL query to create an empty table with the same structure as some other table.
Ans. Using SELECT INTO command with False ‘WHERE’ condition-

SELECT * INTO newTable 
FROM EmployeeDetails 
WHERE 1 = 0;

This can also be done using MySQL ‘Like’ command with CREATE statement-

CREATE TABLE newTable 
LIKE EmployeeDetails; 


Ques.14. Write a SQL query to fetch common records between two tables.
Ans. Using INTERSECT-

SELECT * FROM EmployeeSalary
INTERSECT
SELECT * FROM ManagerSalary


Ques.15. Write a SQL query to fetch records that are present in one table but not in another table.
Ans. Using MINUS-

SELECT * FROM EmployeeSalary
MINUS
SELECT * FROM ManagerSalary


Ques.16. Write a SQL query to find the current date-time.
Ans. MySQL-

SELECT NOW();


SQL Server-

SELECT getdate();


Oracle-

SELECT SYSDATE FROM DUAL;


Ques.17. Write a SQL query to fetch all the Employees details from EmployeeDetails table who joined in the Year 2016.
Ans. Using BETWEEN for the date range ’01-01-2016′ AND ’31-12-2016′-

SELECT * FROM EmployeeDetails
WHERE DateOfJoining BETWEEN '01-01-2016' 
AND date '31-12-2016';


Also, we can extract year part from the joining date (using YEAR in mySQL)-

SELECT * FROM EmployeeDetails
WHERE YEAR(DateOfJoining) = '2016';


Ques.18. Write a SQL query to fetch top n records?
Ans. In MySQL using LIMIT-

SELECT * 
FROM EmployeeSalary 
ORDER BY Salary DESC LIMIT N


In SQL server using TOP command-

SELECT TOP N * 
FROM EmployeeSalary 
ORDER BY Salary DESC


In Oracle using ROWNUM-

SELECT * FROM 
(SELECT * FROM EmployeeSalary ORDER BY Salary DESC)
WHERE ROWNUM <= 3;


Ques.19. Write SQL query to find the nth highest salary from table.
Ans. Using Top keyword (SQL Server)-

SELECT TOP 1 Salary
FROM (
      SELECT DISTINCT TOP N Salary
      FROM Employee
      ORDER BY Salary DESC
      )
ORDER BY Salary ASC

Using limit clause(MySQL)-

SELECT Salary 
FROM Employee 
ORDER BY Salary DESC LIMIT N-1,1;


Ques.20. Write SQL query to find the 3rd highest salary from table without using TOP/limit keyword.
Ans. The below SQL query makes use of correlated subquery wherein in order to find the 3rd highest salary the inner query will return the count of till we find that there are two rows that salary greater than other distinct salaries.

SELECT Salary
FROM EmployeeSalary Emp1
WHERE 2 = (
                SELECT COUNT( DISTINCT ( Emp2.Salary ) )
                FROM EmployeeSalary Emp2
                WHERE Emp2.Salary > Emp1.Salary
            )

For nth highest salary-

SELECT Salary
FROM EmployeeSalary Emp1
WHERE N-1 = (
                SELECT COUNT( DISTINCT ( Emp2.Salary ) )
                FROM EmployeeSalary Emp2
                WHERE Emp2.Salary > Emp1.Salary
            )

This concludes our post on frequently asked SQL query interview questions. I hope these questions help you in your interviews.

Do check our post on – Database Interview Questions, focussing on the theoretical concepts of DBMS.

19 thoughts on “SQL Query Interview Questions”

  1. I think the answer for Question Number 6 is wrong.I hope this is the Correct Answer , Also I think there is no need to use the distinct because emp_id will be primary key normally

    SELECT DISTINCT E.FullName
    FROM EmpDetails E
    INNER JOIN EmpDetails M
    ON E.EmpID = M.ManagerID AND E.EmpID=M.EmpID

    Reply
    • @Firos You are right, but your solution also not giving us any solution , there is null value , I tried to correct it, please check it.

      SELECT DISTINCT E.FullName
      FROM EmpDetails E
      INNER JOIN EmpDetails M
      ON E.ManagerID = M.ManagerID

      Need to check employee who is a manager ,
      managerId and employee can’t be same, so how can we compare with each other. I think this works .

      Reply
      • Both of you are wrong, this is the very simple way and also correct:

        select e.fullname
        from EmployeeDetails e
        join EmployeeDetails s on e.EmpID =s.ManagerID

        where their ID is someones EmpID

        Reply
  2. For 2nd Level Manager Name:
    SELECT DISTINCT A.EmpID,ISNULL(C.Name,”) Manager_Name
    FROM Emp_Mgr A
    LEFT OUTER JOIN Emp_Mgr B ON A.MangrID=B.EmpID
    LEFT OUTER JOIN Emp_Mgr C ON B.MangrID=C.EmpID

    Reply
  3. DELETE FROM EmployeeSalary
    WHERE EmpId IN (
    SELECT EmpId
    FROM EmployeeSalary
    GROUP BY Project, Salary
    HAVING COUNT(*) > 1));

    this query is wrong

    Reply
    • Thanks Dorris, the intention was to just show the usage of ‘Minus’ command. Also, since EmployeeDetails and EmployeeSalary have different structures, so we can’t use minus with ‘*’ with those tables. Hence, I had to introduce a third table – ManagerSalary.

      Reply
  4. can I write the query for 6th question like

    Select FullName from EmployeeDeatils
    where ManagerId is not null;

    Because if anyone has ManagerId then he must be a manager right.so need to join??

    Reply
    • Hi Ramesh, the ManagerId field in the EmployeeDetails table refers to the Manager of that Employee. So, your query will return only the Employees with Manager assigned.

      Reply
  5. We don’t need to mention full tablename as EmployeeSalary for 19 answer?

    SELECT TOP 1 Salary
    FROM (
    SELECT DISTINCT TOP N Salary
    FROM EmployeeSalary
    ORDER BY Salary DESC
    )
    ORDER BY Salary ASC
    ——–
    SELECT Salary
    FROM EmployeeSalary
    ORDER BY Salary DESC LIMIT N-1,1;

    Reply

Leave a Comment