SQL Interview Scenario
SQL Interview Scenario
SQL Interview Scenario
1) List employee number, name, his department and the department name?
SQL> SELECT E.EMPNO, E.ENAME, E.DEPTNO, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO=D.DEPTNO;
2) List employee name, his department name and the department location?
SQL> SELECT E.ENAME, D.DNAME, D.LOC
FROM EMP E, DEPT D
WHERE E.DEPTNO=D.DEPTNO;
3) List employee name, department name for all the clerks in the company?
SQL> SELECT E.ENAME, D.DNAME, E.JOB
FROM EMP E, DEPT D
WHERE E.DEPTNO=D.DEPTNO
AND E.JOB='CLERK';
4) List employee number, name, job, his manager’s name, and manager’s job?
SQL> SELECT E.EMPNO, E.ENAME, E.JOB, M.ENAME AS MGR_NAME, M.JOB AS MGR_JOB
FROM EMP E, EMP M
WHERE E.MGR=M.EMPNO;
9) List all the employees who have the same job as ‘SCOTT’?
SQL> SELECT * FROM EMP
WHERE JOB = (SELECT JOB FROM EMP
WHERE ENAME='SCOTT');
OR
SQL> SELECT E.EMPNO, E.ENAME, M.ENAME, M.EMPNO
FROM EMP E, EMP M
WHERE E.JOB=M.JOB
AND E.ENAME='SCOTT';
OR
SQL> SELECT * FROM EMP E
WHERE EXISTS (SELECT M.JOB FROM EMP M WHERE E.JOB=M.JOB AND
M.ENAME='SCOTT');
10) Display the names of the employees who are working in Sales or Research
department?
SQL> SELECT E.ENAME, E.DEPTNO, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO=D.DEPTNO
AND D.DNAME IN ('SALES','RESEARCH')
ORDER BY E.DEPTNO;
11) Display name and salary of the employee who is working in CHICAGO?
SQL> SELECT E.ENAME, E.SAL, D.LOC
FROM EMP E, DEPT D
WHERE E.DEPTNO=D.DEPTNO
AND D.LOC='CHICAGO'
ORDER BY E.DEPTNO;
12) List the details of employees in department 10 who have the same job as in
department 30?
SQL> SELECT * FROM EMP E
WHERE DEPTNO=10
AND EXISTS (SELECT JOB FROM EMP M
WHERE M.DEPTNO=20
AND M.JOB=E.JOB);
OR
SQL> SELECT * FROM EMP
WHERE DEPTNO=10 AND JOB IN
(SELECT JOB FROM EMP WHERE DEPTNO=30);
13) List all the departments that have employees who exist in them?
SQL> SELECT E.* FROM EMP E
WHERE DEPTNO = ANY (SELECT DEPTNO FROM DEPT);
OR
SQL> SELECT D.DEPTNO FROM EMP E EQUI JOIN DEPT D
ON E.DEPTNO=D.DEPTNO;
14) List the employee details if and only if more than 2 employees are present in
department 10?
SQL> SELECT DEPTNO, COUNT (*) FROM EMP
WHERE DEPTNO=10
GROUP BY DEPTNO
HAVING COUNT (*)>2;
15) List the employee names whose salary is greater than the lowest salary of an
employee belonging to department 10?
SQL> SELECT * FROM EMP
WHERE SAL > ANY (SELECT MIN (SAL) FROM EMP WHERE DEPTNO=10)
ORDER BY SAL;
16) List the employee names whose salary is greater than the highest salary of an
employee belonging to department 20?
SQL> SELECT * FROM EMP
WHERE SAL > ANY (SELECT MAX (SAL) FROM EMP WHERE DEPTNO=20)
ORDER BY SAL;
OR
SQL> SELECT EMP.*
FROM EMP
WHERE SAL > (SELECT MAX (SAL) FROM EMP WHERE DEPTNO=20);
17) List the names of the employees drawing the highest salary?
SQL> SELECT * FROM EMP
WHERE SAL IN (SELECT MAX (SAL) FROM EMP);
18) List the employees whose salary is second highest in the company?
SQL> SELECT * FROM EMP
WHERE SAL = (SELECT MAX (SAL) FROM EMP WHERE SAL < (SELECT MAX (SAL) FROM
EMP));
OR
SQL> SELECT * FROM (SELECT DENSE_RANK () OVER (ORDER BY SAL DESC) AS DR,
EMP.*
FROM EMP)
WHERE DR=2;
19) List the details about employees who have maximum number of people
reporting to them?
SQL> SELECT E.MGR, COUNT (*) FROM EMP E
GROUP BY E.MGR
HAVING COUNT (*) = (SELECT MAX (COUNT (*)) FROM EMP M GROUP BY M.MGR);
OR
SQL> SELECT A.*, D.MGR, D.COUNT FROM EMP A
INNER JOIN
(SELECT E.MGR AS MGR, COUNT (*) AS COUNT FROM EMP E
GROUP BY E.MGR
HAVING COUNT (*) = (SELECT MAX (COUNT (*)) FROM EMP M GROUP BY M.MGR)) D
ON D.MGR =A.MGR;
OR
SQL> SELECT E.*, M.EMPNO AS MGR_EMPNO, M.ENAME AS MGR_NAME, (SELECT MAX
(COUNT (*)) FROM EMP GROUP BY MGR) AS CNT
FROM EMP E, EMP M
WHERE E.MGR = ( SELECT MGR FROM EMP
GROUP BY MGR
HAVING COUNT (*) = (SELECT MAX (COUNT (1)) FROM EMP GROUP BY MGR)
)
AND M.EMPNO=E.MGR;
20) List the employees who earn more than the average salary in their own
department?
SQL→SELECT * FROM EMP A WHERE A.SAL >
(SELECT AVG (SAL) FROM EMP B WHERE A.DEPTNO=B.DEPTNO
GROUP BY B.DEPTNO)
ORDER BY DEPTNO;
OR
SELECT * FROM EMP A,(SELECT DISTINCT DEPTNO, AVG(SAL) OVER (PARTITION BY
DEPTNO) AS AVG_SAL FROM EMP ) B
WHERE A.SAL> B.AVG_SAL AND A.DEPTNO=B.DEPTNO
ORDER BY B.DEPTNO;
21) List the employee name, length of his name, his manager’s name whose name
length is greater than their manager’s name length?
SQL> SELECT E.ENAME, LENGTH (E.ENAME) AS EMP_ENAME_LENGTH, M.ENAME AS
MGR_NAME, LENGTH (M.ENAME) AS MGR_ENAME_LENGTH
FROM EMP E, EMP M
WHERE M.EMPNO=E.MGR
AND LENGTH (E.ENAME) > LENGTH (M.ENAME);
22) List employees and his manager’s details, where that employee’s salary is
greater than his manager’s salary?
SQL> SELECT E.EMPNO, E.ENAME, E.SAL, M.SAL AS MGR_SAL, M.EMPNO AS MGR_EMPNO,
M.ENAME AS MGR_NAME
FROM EMP E, EMP M
WHERE E.MGR=M.EMPNO
AND E.SAL>M.SAL;
24) List the locations of all the departments and the employees working in them
including the departments without employees?
SQL> SELECT E.ENAME, E.EMPNO, A.LOC, A.D_DEPTNO, A.E_DEPTNO FROM EMP E, DEPT
A
WHERE E. DEPTNO (+) = A. DEPTNO;
OR
25) List information of all employee’s along with information of all the
departments?
SQL> SELECT E.*, D.*
FROM EMP E FULL OUTER JOIN DEPT D
ON E.DEPTNO=D.DEPTNO;
26) What is the length of the longest employee name and by how many characters is
it longer than its nearest one?
SQL > SELECT LNAME, DIFF FROM (
SELECT RNO, LNAME, LNAME - PREV_LNAME AS DIFF FROM (
SELECT ROWNUM AS RNO, LNAME, RNK, LAG (LNAME) OVER (ORDER BY RNK) AS
PREV_LNAME FROM (
SELECT LNAME, RNK FROM (
SELECT DISTINCT LENGTH (ENAME) AS LNAME, DENSE_RANK () OVER (ORDER BY
LENGTH (ENAME)) AS RNK
FROM EMP ORDER BY LENGTH (ENAME) DESC)
ORDER BY RNK DESC)
ORDER BY RNO))
WHERE RNO=1;
27) Find out the difference between the maximum salary earned by a person in department number
10 and minimum salary earned by a person in department number 30?
SQL > SELECT A.MORE_SAL - B.LESS_SAL AS DIFF_SAL FROM
(SELECT MAX (SAL) AS MORE_SAL FROM EMP WHERE DEPTNO=10) A,
(SELECT MIN (SAL) LESS_SAL FROM EMP WHERE DEPTNO=30) B;
OR
SELECT T.A, T.B, T.A-T.B AS DIFF_SAL FROM
(SELECT MAX (CASE WHEN DEPTNO=10 THEN MAX (SAL) END) AS A,
MAX (CASE WHEN DEPTNO=30 THEN MIN (SAL) END) AS B
FROM EMP
GROUP BY DEPTNO) T;
28) Find out the difference between average earnings of department no 30 and 40?
SQL > SELECT A.AVG_SAL - B.AVG_SAL AS DIFF_AVG_SAL FROM
(SELECT ROUND (AVG (SAL), 2) AS AVG_SAL FROM EMP WHERE DEPTNO=20) A,
(SELECT ROUND (AVG (SAL), 2) AS AVG_SAL FROM EMP WHERE DEPTNO=30) B;
29) Display the Details of all employees working in the same Department as 'FORD'?
SQL> SELECT * FROM EMP
WHERE DEPTNO IN (SELECT DEPTNO FROM EMP WHERE ENAME='FORD');
OR
SQL> SELECT E.* FROM EMP E, DEPT D
WHERE E.DEPTNO=D.DEPTNO
AND E.DEPTNO = (SELECT DEPTNO FROM EMP WHERE ENAME='FORD');
30) Display the details of all employees who are joined before 'FORD'?
SQL> SELECT * FROM EMP
WHERE HIREDATE < (SELECT HIREDATE FROM EMP WHERE ENAME = 'FORD')
ORDER BY HIREDATE;
OR
SQL> SELECT A.* FROM EMP A, EMP B
WHERE B.ENAME='FORD' AND B.HIREDATE > A.HIREDATE
ORDER BY A.HIREDATE;
31) Display the names of all the employees who are all getting the salary greater
than the salary of 'SMITH' along with the difference in salary?
SQL> SELECT E.*, SAL - (SELECT SAL FROM EMP WHERE ENAME='SMITH') AS SAL_DIFF
FROM EMP E
WHERE SAL > (SELECT SAL FROM EMP WHERE ENAME='SMITH');
OR
SQL> SELECT A.*, A.SAL AS EMP_SAL, B.SAL AS SMITH_SAL, A.SAL - B.SAL AS DIFF_SAL
FROM EMP A, EMP B
WHERE B.ENAME='SMITH' AND A.SAL>B.SAL;
34) Display all the details where department is either ‘SALES’ or ‘RESEARCH’?
SQL> SELECT * FROM EMP
WHERE DEPTNO IN (SELECT DEPTNO FROM DEPT WHERE DNAME IN
('SALES','RESEARCH'));
OR
SQL> SELECT E.*, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO=D.DEPTNO
AND D.DNAME IN ('SALES','RESEARCH')
ORDER BY D.DNAME;
37) Display all the details of employees whose job is same as that of jones?
SQL> SELECT * FROM EMP
WHERE JOB IN
(SELECT JOB FROM EMP WHERE ENAME='JONES');
OR
SQL> SELECT A.* FROM EMP A, EMP B
WHERE A.JOB=B.JOB
AND B.ENAME='JONES';
38) Display the details of all employees who are getting salary greater than the
salary of ‘ADAMS’?
SQL> SELECT E.*, (SELECT SAL FROM EMP WHERE ENAME='ADAMS') AS ADAM_SAL
FROM EMP E WHERE SAL > (SELECT SAL FROM EMP WHERE ENAME='ADAMS')
ORDER BY SAL;
OR
SQL> SELECT A.*, B.SAL AS ADAM_SAL
FROM EMP A, EMP B
WHERE B.ENAME='ADAMS' AND A.SAL > B.SAL
ORDER BY A.SAL;
39) Display the details of all the employees who are joined after ‘SMITH’ but before
‘MILLER’?
SQL> SELECT * FROM EMP
WHERE HIREDATE > (SELECT HIREDATE FROM EMP WHERE ENAME='SMITH')
AND HIREDATE < (SELECT HIREDATE FROM EMP WHERE ENAME='MILLER')
ORDER BY HIREDATE;
OR
SQL> SELECT A.*, B.HIREDATE SMITH_HIREDATE, C.HIREDATE MILLER_HIREDATE
FROM EMP A, EMP B, EMP C
WHERE B.ENAME='SMITH' AND C.ENAME='MILLER'
AND A.HIREDATE > B.HIREDATE AND A.HIREDATE < C.HIREDATE;
40) Display the details of all employees working in the same department as 'FORD'?
SQL> SELECT * FROM
EMP WHERE DEPTNO = (SELECT DEPTNO FROM EMP WHERE ENAME='FORD');
OR
SQL> SELECT A.*, B.ENAME AS EMP_NAME, B.DEPTNO AS FORD_DEPTNO
FROM EMP A, EMP B
WHERE A.DEPTNO=B.DEPTNO
AND B.ENAME='FORD';
45) Display 1st 3 Records & Last 3 Records from EMP Table?
SQL→ SELECT ROWNUM, E.* from EMP E WHERE ROWNUM <=3
UNION
SELECT * FROM (SELECT ROWNUM, E.* FROM EMP E ORDER BY ROWID DESC) WHERE
ROWNUM <=3;
46) Display 5th Record from EMP Table?
SQL→SELECT * FROM (SELECT ROWNUM AS RNO, Emp.* FROM EMP) WHERE RNO=5;
50) Display 2nd, 5th & 9th Record from EMP Table?
SQL→SELECT * FROM (SELECT ROWNUM AS RNO, EMP.* FROM EMP) WHERE RNO IN (2,
5, 9);
61) How can i create an Empty Table Emp1 with Same Structure as EMP?
SQL→ CREATE TABLE Emp1 AS SELECT * FROM EMP WHERE 1=2;
65) How will you identify the duplicates on a particular column, e.g. PK Column?
SQL→SELECT COUNT (*), <PK_Column>
FROM <Table_Name>
GROUP BY <PK_Column>;
OR
SQL→ SELECT COUNT (*), <PK_Column>
FROM <Table_Name>
GROUP BY <PK_Column>
HAVING COUNT (*) > 1;
99) Get number of seconds passed since today (since 00:00 hr.)?
SQL→SELECT (SYSDATE – TRUNC (SYSDATE)) * 24 * 60 * 60
NOS_OF_SECS_FROM_MORNING FROM DUAL;