Home arrow Oracle arrow Page 3 - Stepping through Sub-Queries in Oracle

A sub-query with aggregate functions (or group functions) in Oracle - Oracle

This is the first article in a series concentrating on working with sub-queries in Oracle. Sub-queries really have tremendous depth. In this series I will show you several scenarios where they can be efficiently used to retrieve information from Oracle databases.

TABLE OF CONTENTS:
  1. Stepping through Sub-Queries in Oracle
  2. The simplest sub-query in Oracle
  3. A sub-query with aggregate functions (or group functions) in Oracle
  4. Designing sub-queries to deal with more than one table (or different tables)
  5. An example of a nested sub-query (or multi-level sub-query)
By: Jagadish Chatarji
Rating: starstarstarstarstar / 28
November 07, 2006

print this article
SEARCH DEV SHED

TOOLS YOU CAN USE

advertisement

I already introduced sub-queries in the previous section.  In this section, I shall start giving you some practical examples.

Let us consider that I would like to retrieve the details of the highest paid employee. Let us write the question in a meaningful manner and identify the steps as follows:

From the above figure, you have two steps to work with for the query.  The following is the order you must follow (based on the above figure):

  • Find the highest salary from the table (1)
  • Based on the value you get, retrieve the employee details like empno, ename, etc. belonging to that salary. (2)

The following is the statement which retrieves the highest salary:

SELECT MAX(sal) FROM emp

To retrieve an employee's details based on a given salary (say 5000), the query would be as follows:

SELECT empno,ename,sal,deptno FROM emp

WHERE sal = 5000

Just replace the value 5000 with the query that gives you the highest salary.  The complete statement would be as follows:

SQL> SELECT empno,ename,sal,deptno FROM emp

WHERE sal = (SELECT MAX(sal) FROM emp);

Now, let us walk through its execution:

  • The innermost query gets executed first. 
  • In this case, the query “select max(sal) from emp” gets executed first.  It retrieves the highest value in the column “sal” from the table “emp.”
  • Once the innermost query gets executed, it returns a value to the immediate outer query.  In this case, it is 5000.
  • The entire innermost query gets replaced with the new value returned by it.  In this case, the outer query virtually becomes “select empno, ename, sal, deptno from emp where sal = 5000.”
  • And finally, the outer query gets executed, which retrieves KING’s details.

Let us end this section with a final touch.  Why can’t I write the above query as follows?

SQL> SELECT empno,ename,sal,deptno FROM emp

WHERE sal = MAX(sal)

Or even the following:

SQL> SELECT empno,ename,sal,deptno FROM emp

WHERE MAX(sal) = sal

None of the above two queries get executed successfully. The reason is that a condition in a WHERE clause cannot contain any aggregate function (or group function) without a sub-query!



 
 
>>> More Oracle Articles          >>> More By Jagadish Chatarji
 

blog comments powered by Disqus
   

ORACLE ARTICLES

- Oracle Java Security Woes Continue
- Oracle's New IaaS Cloud Option: There's a Ca...
- Oracle Acquires Eloqua to Boost Cloud Presen...
- Choosing Innovation: Oracle Survey Insights
- Oracle Fixes Privilege Escalation Bug
- Oracle`s Communications Service Availability...
- Oracle Releases Exalytics, Taleo Plans
- Oracle Releases Communications Network Integ...
- Oracle Releases Communications Data Model 11...
- Oracle Releases PeopleSoft PeopleTools 8.52
- Oracle Integrates Cloudera Apache Distro, My...
- Oracle Releases MySQL 5.5.18
- Oracle Announces NoSQL Database Availability
- Sorting Database Columns With the SELECT Sta...
- Retrieving Table Data with the LIKE Operator

Developer Shed Affiliates

 



© 2003-2013 by Developer Shed. All rights reserved. DS Cluster - Follow our Sitemap

Dev Shed Tutorial Topics: