Sub Query
Sub Query
query(queries)
Q) Write a query to display the employees who are getting more salary than
the avg(sal) from emp?
Ans: SQL> select ename, sal from emp where sal>(select avg(sal) from emp);
Q) Write a query to display the employees who are working in sales
department from emp, dept tables.?
Ans: SQL> select ename from emp where deptno=(select deptno from dept
where dname=‟SALES‟);
Q) Write a query to display the employees who are working in “SMITH”
department number from emp table?
Ans: SQL> select ename from emp where deptno=(select deptno from emp
where ename=‟SMITH‟);
Q) Write a query to display senior most employee details from emp table?
Ans: SQL> select * from emp where hiredate=(select min(hiredate) from emp);
Q) Write a query to display highest sal details emp table?
Ans: SQL> select * from emp where sal=(select max (sal) from emp);
Q) Write a query to display highest paid emp department, dname from emp,
dept tables?
Ans: SQL> select dname from dept where deptno=(select deptno from emp
where sal=(select sal(max) from emp));
Q) Write a query to display second max(sal) from emp table?
Ans: SQL> select max(sal) from emp where sal select * from emp where
sal=(select max(sal) from emp where sal.
Q) Write a query to display the employees who are working under „BLAKE‟
from emp table using „empno, mgr‟ columns ?
Ans: SQL> select * from emp where mgr= (select empno from emp where
ename=‟BLAKE‟);
Q) Write a query to display lowest average salary job from emp tables?
Ans: SQL> select job, avg(sal) from emp group by job having avg(sal)=(select
min(avg(sal)) from emp);
Q) Write a query to display lowest average salary job from emp table where
deptno less than 30?
Ans: SQL> select deptno, min(sal) from emp group by deptno having
min(sal)>(select min(sal) from emp where deptno= 30);
Q) Write a query to display job, avg(sal) of the employees whose job avg(sal)
more than the clerk‟s job avg(sal) from emp table?
Ans: SQL> select avg(sal), job from emp group by job having avg(sal) >(select
avg(sal) from emp where job=‟CLERK‟)
Q) Write a query to display the employees who are working sales department
from emp, dept tables?
Ans: SQL> select ename, dname from emp e, dept d where e.deptno=d.deptno
and d.deptno=(select deptno from dept where dname=‟SALES‟)
Q) Write a query to display the employees who are getting more salary than
the „BLAKE‟ salary from emp table?
Ans: SQL> select * from emp where sal> (select sal from emp where
ename=‟BLAKE‟)
MULTIPLE ROW SUB QUERY‟S:
Q) Write a query to display the employee details who are getting max(sal) in
each department from emp table?
Ans: SQL> select * from emp where sal= (select max(sal) from emp group by
deptno);
Q) Write a query to display the employees who are working in sales or
research department from emp, dept?
Ans: SQL> select ename, deptno from emp where deptno in(select deptno
from dept where dname=‟SALES‟ or dname=‟RESEARCH‟);
Q) Write a query to display the employees who are working as “supervisors”
(managers) from emp table using empno, mgr?
Ans: SQL> select * from emp where empno in(select mgr from emp);
Q) Write a query to display the employees who are not working as
“supervisors” (managers) from emp using empno, mgr?
Ans: SQL> select * from emp where empno not in(select nvl(mgr,0) from emp);
TOP N Analysis:
1. Inline view
2. Rownum
Q) Write a query to display first row from emp table using rownum?
Ans: SQL> select * from emp where rownum=1;
Q) Write a query to display second row from emp table using rownum?
Ans: SQL> select * from emp where rownum=2; No rows selected Generally,
rownum doesn‟t work with more than “1” +ve integer, i.e., it works with <=
operators.
Q) Write a query to display first five rows from emp table using rownum?
Ans: SQL> select * from emp where rownum<=5;
Q) Write a query to display first five highest salary employees from emp using
rownum?
Ans: SQL> select * from( select * from emp order by sal desc) where
rownum<=5;
Q) Write a query to display 5th highest salary employee from emp table using
rownum?
Ans: SQL> select * from(select * from emp order by sal desc) where
rownum=5 minus select * from(select * from emp order by sal desc) where
rownum<=4;
Q) Write a query to display rows between 1 to 5 from emp table using
“Rownum”?
Ans: SQL> select * from emp where rownum between 1 and 5;
Q) Write a query to display rows between to 5 to 9 from table?
Ans: SQL> select * from emp where rownum between 5 and 9; No rows
selected Solution: SQL> select * from emp where rownum <=9 minus select *
from emp where rownum<=5;
Q) Write a query to display second record from emp using rownum?
Ans: SQL> select * from emp where rownum<=2 minus select * from emp
where rownum<=1;
Q) Write a query to display last two records from emp table using rownum?
Ans: SQL> select * from emp where rownum<=14
Minus
select * from emp where rownum<=12;
Solution: SQL> select * from emp minus select * from emp where
rownum<=(select count(*)-2 from emp);
SQL> select * from emp where rownum>1;
No rows selected
SQL> select * from emp where rownum>=1;
Q) Write a query to display second record from emp table using “rownum”
alias name?
Ans: SQL> select * from(select rownum r, ename, job, sal from emp) where
r=2;
Q) Write a query to display second, third, fifth, seventh, eighth rows from emp
table using rownum alias name?
Ans: SQL> select * from (select rownum r, e.* from emp e) where r
in(2,3,5,7,8);
Q) Write a query to display records from 5 to 9 from emp table using rownum
alias name?
Ans: SQL> select * from(select rownum r, emp.* from emp) where r between
5 and 9;
Q) Write a query to display first and last records from emp table using rownum
alias name?
Ans: SQL> select * from(select rownum r, emp.* from emp) where r=1 or
r=(select count(*) from emp);
Q) Write a query to display even number of records from emp table using
rownum alias name?
Ans: SQL> select * from(select rownum r, emp.* from emp) where r in(select
mod(r,2)=0 from emp);
Solution: SQL> select * from(select rownum r, emp.* from emp) where
mod(r,2)=0;
Q) Write a query to display skip first 5 rows from emp table using rownum
alias name?
Ans: SQL> select * from (select rownum r, emp.* from emp) where r>5;
ROWID
Eg: SQL> select rownum, rowid, ename from emp where deptno=10; In Oracle,
by default rowid‟s are ascending order.
Q) Write a query to display second record from emp table using analytical
function, rowid?
Ans: select * from(select deptno, ename, sal, row_number() over(order by
rowid)r from emp) where r=2;
Q) Write a query to display each department second row from emp table using
analytical function, rowid?
Ans: SQL> select * from(select deptno, ename, sal, row_number() over
(partition by deptno order by rowid) r from emp where r=2);
Q) Write a query to display last two records from emp table using analytical
function, rowid?
We can also use max(), min() functions in “rowid‟s”.
Eg: SQL> select max(rowid) from emp; SQL> select max(rowid) from emp;
Q) Write a query to display first row from emp table using rowid?
Ans: SQL> select * from emp where rowid=(select min(rowid) from emp);
Q) Write a query to display last record from emp table using rowid?
Ans: SQL> select * from emp where rowid=(select max(rowid) from emp);
Ans: SQL> select * from(select deptno, ename, sal, row_number() over (order
by rowid desc) r from emp)where r<=2;
Q ) Display the emp records who are earning more than BLAKE:
SELECT * FROM emp
WHERE sal>(SELECT sal FROM emp
WHERE ename='BLAKE');
Q)Display the emp records who
joined after 'FORD' [OR]
Q)Display the juniors of 'FORD':
SELECT empno,ename,hiredate
FROM emp
WHERE hiredate > '23-NOV-1981';
Display the emp records who joined before FORD [OR]
Display the emp records who are senior to FORD:
SELECT empno,ename,hiredate FROM emp
WHERE hiredate<(SELECT hiredate FROM emp
WHERE ename='FORD');