Wednesday, June 22, 2016

SQL Quaries

To find the uniqueness of the given record.

select * from dual where 1= (select max(count(empno)) from emp group by empno)

select 1 yes_unique from emp having  count(distinct  sal)=count(sal)

To delete the even number of records
delete  from emp where rowid in(select rowid from emp group by rownum,rowid having mod(rownum,2)<>0)

To find the nth max sal

select distinct sal from emp e where &n= (select count(distinct sal) from emp d where e.sal<=d.sal)

select * from(select rownum r,e.* from (select  distinct sal from emp order by sal desc)e) where r=&n

To find the nth min sal

select distinct sal from emp e where &n= (select count(distinct sal) from emp d where e.sal>=d.sal)

To select nth max sal from each department.

select * from(select rownum r,e.* from (select  distinct sal from emp order by sal)e) where  r=&n

select distinct sal from emp e where &n= (select count(distinct sal) from emp d where e.sal<=d.sal and e.deptno=d.deptno)

To select nth min sal from each department.

select distinct sal from emp e where &n= (select count(distinct sal) from emp d where
e.sal>=d.sal and e.deptno=d.deptno)

TO select top n salarys from each department.

select * from(select empno,ename,sal,deptno,rank() over (partition by deptno order by sal desc) top_sal from emp) where top_sal <=&n order by deptno,sal desc

To select bottom n salarys from each department

select * from(select empno,ename,sal,deptno,rank() over (partition by deptno order by sal ) bottom_sal from emp) where bottom_sal <=&n order by deptno,sal

--> Q:To create the duplicate table without data

A: create table emp_dup as select * from emp where 1=2

--> Q:what will be the output

    select * from emp where null is null

    select * from emp where null=null

--> Q:To delete nth record

A:Delete from emp where rowid=(select rowid from emp group by                    

rowid,rownum having rownum=&n)

A2:delete from emp where rowid=(select max(r) from

          (select rowid r from emp where rownum<=&n))

--> Q:To delete a record where there are no employes working

A:delete from(select * from dept e where not exists

    (select 'x' from emp d where d.deptno=e.deptno))

--> Q:To display the duplicate records

A:select col1,col2,col# ,count(*) from table group by col1,col2,col# having      

count(*)>1

--> Q:To delete duplicate recoreds

A:delete from tabel a where rowid in

     (select rowid from table b minus select max(rowid)

         from table c group by c.col1,c.col2,c.col#)

--> Q:To count the number of nulls and notnulls in Comm. column of emp table

A:select count(decode(nvl2(comm,1,2),1,1)) nulls,

   count(decode(nvl2(comm,1,2),2,1)) not_nulls  from emp

--> Q:To select 1st and last record of the employee table

A: select * from(select rownum r,e.* from emp e)

     where r=(select count(*) from emp) or r=1

--> Q:To count the number of sundays,mondays...saturdays..total_days in the current month

A:create table temp

      (

          num number(2)

       )

 insert into temp values(&num)

 insert the values into temp from 1 to 31. and execute the below query.

 select

count(decode(to_char(last_day(add_months(sysdate,-1))+num,'d'),1,1)) sun,

count(decode(to_char(last_day(add_months(sysdate,-1))+num,'d'),2,1)) mon,

count(decode(to_char(last_day(add_months(sysdate,-1))+num,'d'),3,1) )tue,

count(decode(to_char(last_day(add_months(sysdate,-1))+num,'d'),4,1) )wed,

count(decode(to_char(last_day(add_months(sysdate,-1))+num,'d'),5,1)) thu,

count(decode(to_char(last_day(add_months(sysdate,-1))+num,'d'),6,1)) fri,

count(decode(to_char(last_day(add_months(sysdate,-1))+num,'d'),7,1)) sat,

to_char(last_day(sysdate),’dd’) tot_days

 from temp where num<=(select to_char(last_day(sysdate),’dd’) from dual)

Output:

SUN     MON   TUE   WED    THU   FRI  SAT   TOTAL

----    ---- ----   ----   ----  ---- ----  ------

4       4     5     5      5     4    4     31

--> Q:To select first and last record of employee table

 A2: select * from emp where rowid in

      (select rowid from emp group by rowid,rownum having rownum        

      in(1,(select count(*) from emp)))

A3:select * from emp where rowid in

      (select min(rowid) from emp union select max(rowid) from emp)

--> Q:To display the second max sal

A:select max(sal) from emp where sal<(select max(sal) from emp)

--> Q:To display top n salarys

A:select * from(select rownum r,e.* from(select  distinct sal from emp order    

by sal desc) e) where r<=&n

--> Q:To select bottom n salarys

A:select * from(select rownum r,e.* from

(select  distinct sal from emp order by sal ) e) where r<=&n

--> Q:To select first and last salary of the table

A:select * from(select rownum r,e.* from

     (select  distinct sal from emp order by sal desc ) e)

         where r in(1,(select count(*) from emp))

--> Q:To select n to nth record

A:select * from(select rownum r,e.* from emp e)

        where r between 4 and 7

--> Q:Display empno,ename,sal,max(sal) of their own dept ,max(SAL) of  the emp table of all the employes using with clause.

A:with maxsal as (select max(sal)  max_sal from emp),dept_max as

   (select deptno,max(sal) dept_maxsal from emp group by deptno)

select empno,ename,sal,(select max_sal from maxsal) maxsal,(select dept_maxsal from dept_max where

       dept_maxsal.deptno=e.deptno) dept_max from emp e

--> Q:To find the empno,ename,deptno,maximum sal of the whole table,

maximum salary of the whole dept  and minimum salary  of the whole department and dept name of the employee

A:select empno,ename,sal,deptno,(select max(sal) from emp)  max_sal_table,

     (select max(sal) from emp where deptno=e.deptno) dept_max,

        (select min(sal) from emp where deptno=e.deptno) min_sal,

        (select dname from dept d where d.deptno=e.deptno) dname  from emp e

--> Q:Display the employes whose salary is greater than his own manager

A:select*from emp e where sal>(select sal from emp where empno=e.mgr)

--> Q:Disply the employes whose sal is greater than the other managers

A:  select * from emp e where sal> any(select sal from emp

where empno in(select distinct mgr from emp where mgr<>e.mgr))

--> Q:To  find the employes who are seniour to the employes who are joined in the year 1981.

A:SELECT HIREDATE FROM EMP WHERE HIREDATE<ALL

      (SELECT HIREDATE FROM EMP WHERE HIREDATE LIKE'%81')

--> Q:To fined the employes who have joined on the same hiredate

A:  SELECT * FROM EMP WHERE HIREDATE IN

     (SELECT HIREDATE FROM EMP GROUP BY HIREDATE HAVING  COUNT(HIREDATE)>1)

--> Q:To find the uniquness of the given column for the given table.

A: SELECT 1 YES_UNIQUE FROM DUAL

      WHERE 1=(SELECT MAX(COUNT(EMPNO)) FROM EMP

     GROUP  BY EMPNO)

--> Q:To delete the managers who  are working under king with salary ranging from 2000 to 3000 and joined in first half of 1981

A:DELETE FROM EMP_D WHERE EMPNO IN

     (SELECT EMPNO FROM EMP_D WHERE EMPNO IN

         (SELECT DISTINCT MGR FROM EMP_D WHERE MGR<>

                       (SELECT EMPNO FROM EMP_D WHERE

              ENAME='KING')) AND MGR=(SELECT EMPNO FROM EMP_D WHERE ENAME='KING'))

AND (SAL BETWEEN 2000 AND 3000) AND (HIREDATE BETWEEN '1-JAN-81' AND '31-MAY-81')

--> Q:To delete all the employes who have joined most recently under king.

A: DELETE FROM EMP44 E WHERE MGR=(SELECT EMPNO FROM EMP44 D WHERE ENAME='KING' AND HIREDATE>E.HIREDATE)

--> Q:To delete all the grade 1 and grade 2 employes and woring in chicago and joined in the first half of 81.

A: SELECT E.EMPNO,E.ENAME,S.GRADE,D.LOC,E.HIREDATE FROM SALGRADE S, DEPT D, EMP E WHERE E.DEPTNO=D.DEPTNO AND E.SAL BETWEEN S.LOSAL AND S.HISAL  AND S.GRADE IN(1,2) AND D.LOC='CHICAGO'

AND E.HIREDATE BETWEEN '01-JAN-81' AND '30-JUN-81'

--> Q:To delete all the employes with experience <4  and whose job is ending with 'man'

A: DELETE FROM EMP44 WHERE EMPNO  IN(SELECT  EMPNO FROM EMP44 WHERE

FLOOR(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12)>4

AND JOB LIKE '%MAN')

--> Q:Delete all the employes of sales department whose salary ranging from 1500 to 3000

A: DELETE FROM EMP44 WHERE EMPNO IN(select e.empno from emp44 e,dept d where e.deptno=d.deptno

     AND d.dname='SALES' AND E.SAL BETWEEN 1500 AND 3000)

--> Q:To delete all the grade 2 and 3 employes of sales dept and working at chicago and joined after the all the employes whose hiredate is in the year1980.

A:DELETE FROM EMP44 WHERE EMPNO IN(SELECT E.EMPNO FROM EMP44 E,DEPT D,SALGRADE S

WHERE E.DEPTNO=D.DEPTNO

AND E.SAL BETWEEN S.LOSAL AND S.HISAL

AND S.GRADE IN(2,3)

AND D.DNAME ='SALES'

AND D.LOC='CHICAGO'

AND

HIREDATE>ALL(SELECT HIREDATE FROM EMP44 WHERE HIREDATE LIKE'%80'))

--> Q: Delete the emps whose salary is lowest salary of their own deptartment

A: DELETE FROM EMP44 WHERE EMPNO IN

      (SELECT EMPNO FROM EMP44  WHERE SAL IN

      (SELECT MIN(SAL)

FROM EMP44 GROUP BY DEPTNO))

A2.delete from emp e where sal =(select min(sal) from emp d where d.deptno=e.deptno)

--> Q: To find the employes who are seniour to their own managers.

A:  SELECT * FROM EMP  E WHERE HIREDATE<

      (SELECT  HIREDATE FROM EMP WHERE EMPNO=E.MGR)

--> Q:To find the employes who are seniour to their own managers using corelated sub query.

A: DELETE FROM EMP44 WHERE EMPNO IN

      (SELECT E.EMPNO FROM EMP44  E WHERE

     HIREDATE< (SELECT HIREDATE FROM EMP WHERE EMPNO=E.MGR))

--> Q:To find the employes who are seniour to their own manager using self join.

A: SELECT E.* FROM EMP E,EMP D WHERE E.MGR=D.EMPNO AND E.HIREDATE<D.HIREDATE

--> Q: Delete the employes whose experience greater than four.

A: delete from emp where hiredate in(select hiredate from emp where (months_between(sysdate,hiredate)/12)>4)

--> Q: To list the employes whose salary is less than his own manages and   greater than any of the other managers.

A: select * from emp e where sal<(select sal from emp where empno=e.mgr)

And  sal> any(select sal from emp

where empno in(select distinct mgr from emp where mgr<>e.mgr))

--> Q:To display the employee name and this manager name for each record selected.

A: SELECT E.EMPNO,E.ENAME,D.ENAME MGR_NAME FROM EMP E,EMP D WHERE D.EMPNO=E.MGR

--> Q:To display all the employes who are working under blake and display the manager name along with the select list.

A: SELECT * FROM(SELECT E.*,D.ENAME MGR_NAME FROM EMP E,EMP D WHERE E.MGR=D.EMPNO ) WHERE MGR_NAME='BLAKE'

--> Q:To find the employes who are seniour to all the other managers.

A:SELECT * FROM EMP E  WHERE HIREDATE < ALL(SELECT HIREDate from emp where empno

 IN(SELECT DISTINCT MGR FROM EMP WHERE MGR <>

(SELECT EMPNO FROM EMP WHERE EMPNO=E.MGR)))

--> Q:To count the m's and f's from the column and display in the same row like

A:SELECT COUNT(DECODE(GENDER1,'M',1)) M, COUNT(DECODE(GENDER1,'F',1)) F FROM GENDER

--> Q:To find the emps who are senior to his own manager and junior to any one of the other managers

A: select * from emp e where hiredate <(select hiredate from emp where empno=e.mgr) and HIREDATE  > any(SELECT HIREDate from emp where empno   IN(SELECT DISTINCT MGR FROM EMP

 WHERE MGR <>(SELECT EMPNO FROM EMP WHERE   EMPNO=E.MGR)))

--> Q:To convert the given number into string format.

A:SELECT TO_CHAR(TO_DATE(SAL,'J'),'JSP') SAL_STRING,SAL      FROM EMP

Q:To find the employes who have joined on the same hiredate.

A: select*from emp where hiredate in(select hiredate from(select hiredate, count(hiredate) from emp group by hiredate

        having count(*)>1))

--> Q:To delete nth record.

A: delete from emp44 where rowid=(select rowid from emp44 group by rowid,rownum having rownum=&n)

--> Q:To find the uniqueness of any given cloumn in a given table.

A: SELECT CASE

WHEN COUNT( DISTINCT &COLUMN)=COUNT(*)

 THEN

'YES_UNIQUE'

ELSE

'NOT_UNIQUE'

END CASE

FROM &TABLE

--> Q:To find nth minimum salary.

A:select * from(select rownum r,e.* from

(select distinct(sal) from emp order  by sal)e)where r=&n

--> Q:To find nth minimum salary.

A: select * from(select rownum r,e.* from

    (select distinct(sal) from emp order by sal)e)where r=&n

--> Q:To delete the duplicate records existing.

A: delete from emp_dups e where rowid<(select max(rowid) from emp_dups d where

e.empno=d.empno and e.ename=d.ename and e.sal=d.sal and e.hiredate=d.hiredate

and e.comm=d.comm and e.mgr=d.mgr and e.deptno=d.deptno)

--> Q:To count the number of nulls and notnulls.

A:SELECT COUNT(*)-COUNT(DECODE(NVL(COMM,1),1,1)) NOT_NULLS,

COUNT(DECODE(NVL(COMM,1),1,1)) NULLS  FROM EMP

--> Q:To select the duplicate records.

A: select e.*  from emp_dups e where rowid<(select max(rowid) from   emp_dups d where

e.empno=d.empno and e.ename=d.ename and e.sal=d.sal and e.hiredate=d.hiredate

and e.comm=d.comm and e.mgr=d.mgr and e.deptno=d.deptno)

--> Q:To find the hirearchey of the employee table

A; select level, e.* from emp  e connect by prior empno=mgr start

     with mgr  is null

--> Q:  To incrimentally update the employee table from nth row

A: update emp set empno=rownum+999 where rowid >

    (select max(rowid) from emp where

     rownum<=&n)

--> Q: To incrementally update the table where mgr is null

A: update emp set empno=rownum where rowid in

(select rowid from emp  where comm is null)

--> Q:To select from nth record to nth record.

A: select * from(select rownum r,e.* from emp  e)

    where r between &n and &m

--> Q:To select the given records

select * from(select rownum r,e.* from emp  e) where r in(3,5,6)

TO delete the nth record

delete from emp where rowid= (select rowid from emp group by rownum,rowid having rownum=&n )

TO delete the given set of records

delete from emp where rowid in (select rowid from emp group by rownum,rowid having rownum  in (4,5,6) )

No comments:

Post a Comment