rightclickdisable

Topics Categories

Sub Queries


SUB-QUERIES
===========

* Sub-query means query within a query
* It is also called as nested query

Syntax: -
======
select             -------
from               -------
where             -------
          (
                        select             ---------------
                       from               ---------------
                        where             ---------------
          )
/

ü  Here the output of inner query is passed as input to the outer query.
ü  To write Sub-query we should have a common column between the tables.
ü  The common column should have same data type but it can have different name.
ü  The result to be displayed on the screen should be written as the outer query.

Eg:-
[1] display the emps from accounting dept.
 SQL> select *
         from emp
         where deptno = (select deptno from dept where Dname='ACCOUNTING' );

[2] display dname of 'BLAKE'.
 SQL> select dname
          from dept where deptno = (select deptno from emp where ename ='BLAKE');

[3]DISPLAY ALL THE PERSONS LIVING IN NEWYORK
  SQL> select *
          from emp where deptno =   (select deptno from dept where loc='NEWYORK');

[4]DISPLAY THE EMPLOYEES WORKING IN ACCOUNTING AND RESEARCH DEPT.
  SQL>  select *
           from emp
            where deptno IN (select deptno from dept
                                  where dname IN ('ACCOUNTING', 'RESEARCH'));

[5] DISPLAY THE EMP WHO HAS JOINED FIRST.
  SQL> SELECT *
           FROM EMP
                    WHERE HIREDATE = (SELECT MIN(HIREDATE) FROM EMP);

[6] LIST THE ENAME WHO IS GETTING FIRST HIGHEST SALARY.
   SQL> SELECT *
            FROM EMP WHERE SAL=(SELECT MAX(SAL) FROM EMP);               

[7] DISPLAY THE DNAME WHICH IS GETTING HIGHEST SALARY.
   sql> SELECT * 
            FROM DEPT
            WHERE DEPTNO =
                       (SELECT DEPTNO
                         FROM EMP
                         WHERE SAL =    
                           (SELECT MAX(SAL) FROM EMP)
                        );

[8] DISPLAY THER SECOND HIGHEST SALARY.
  sql> SELECT MAX(SAL)
            FROM EMP
            WHERE SAL <
                        (SELECT MAX(SAL)
                         FROM EMP
                        );


[9] DISPLAY FOR FOURTH HIGHEST SALARIES
   SQL>  SELECT MAX(SAL) FROM EMP WHERE SAL <
           ( SELECT MAX(SAL) FROM EMP WHERE SAL <
           ( SELECT MAX(SAL) FROM EMP WHERE SAL <
           (  SELECT MAX(SAL) FROM EMP )));

[10] LIST THE EMP REPORTING TO BLAKE.
  SQL>  SELECT *
            FROM EMP
            WHERE MGR=
                        (SELECT EMPNO
                        FROM EMP
                        WHERE ENAME ='BLAKE');

[11] DISPLAY THE EMPS WHO DO NOT HAVE ANY REPORTING MANAGERS.
  SQL> SELECT *
            FROM EMP
            WHERE MGR NOT IN
                       (SELECT EMPNO
                                    FROM EMP
                                    WHERE MGR  IS NOT NULL);


========================================================

PAIRED COLUMNS
============


SELECT       ---------
FROM          ---------
WHERE(COL1, COL2) IN (SELECT COL4, COL5 FROM ------):

Oracle will understand as  "WHERE COL1=COL4 AND COL2=COL5"


EG:-
====
Display emps earning highest salary in their respective depts.

select *
from emp
where (deptno, sal) IN (select deptno, max(sal)
                                    from emp
                                    group by deptno
                               )
/

=============================================================================


LIMITATIONS OF SUB QUERIES: -
============================
* ONLY UPTO 256 LEVEL OF SUBQUERIES IS POSSIBLE.
* THE ORDER BY CLAUSE SHOULD NOT BE USED IN INNER QUERIES (SHOULD BE USED IN THE OUTERMOST QUERY).
* WE CANNOT FETCH THE DATA FROM TWO TABLES SIMULTANEOUSLY. THIS CAN BE OVERCOME BY USING JOINS.

No comments:

Post a Comment