Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Les06 Subqueries


Published on

Published in: Travel

Les06 Subqueries

  1. 1. Subqueries<br />
  2. 2. Objectives<br />After completing this lesson, you should be able to do the following:<br />Describe the types of problems that subqueries can solve<br />Define subqueries<br />List the types of subqueries<br />Write single-row and multiple-row subqueries<br />
  3. 3. Using a Subquery to Solve a Problem<br />“Who has a salary greater than Jones’?”<br />Main Query<br />“Which employees have a salary greater than Jones’ salary?”<br />?<br />Subquery<br />?<br />“What is Jones’ salary?”<br />
  4. 4. Subqueries<br />SELECTselect_list<br />FROMtable<br />WHEREexpr operator<br /> (SELECTselect_list<br /> FROMtable);<br />The subquery (inner query) executes once before the main query.<br />The result of the subquery is used by the main query (outer query).<br />
  5. 5. 2975<br />SQL&gt; SELECT ename<br />2 FROM emp<br />3 WHERE sal &gt; <br />4 (SELECT sal<br />5 FROM emp<br />6 WHERE empno=7566);<br />Using a Subquery<br />ENAME<br />----------<br />KING<br />FORD<br />SCOTT<br />
  6. 6. Guidelines for Using Subqueries<br />Enclose subqueries in parentheses. <br />Place subqueries on the right side of the comparison operator.<br />Do not add an ORDER BY clause to a subquery.<br />Use single-row operators with single-row subqueries.<br />Use multiple-row operators with multiple-row subqueries.<br />
  7. 7. Main query<br />returns<br />Subquery<br /><ul><li>Multiple-row subquery</li></ul>Main query<br />CLERK<br />MANAGER<br />returns<br />Subquery<br /><ul><li>Multiple-column subquery</li></ul>Main query<br />returns<br />CLERK 7900MANAGER 7698<br />Subquery<br />Types of Subqueries<br />Single-row subquery<br />CLERK<br />
  8. 8. Single-Row Subqueries<br />Return only one row<br />Use single-row comparison operators<br />Operator<br />=<br />&gt;<br /> &gt;= <br />&lt;<br /> &lt;= <br />&lt;&gt;<br />Meaning<br />Equal to<br />Greater than <br />Greater than or equal to <br />Less than <br />Less than or equal to<br />Not equal to<br />
  9. 9. CLERK<br />1100<br />Executing Single-Row Subqueries<br />SQL&gt; SELECT ename, job2 FROM emp<br />3 WHERE job = <br />4 (SELECT job5FROM emp6WHERE empno = 7369)<br />7 AND sal &gt; <br />8 (SELECT sal<br />9FROMemp<br />10WHEREempno = 7876); <br />ENAME JOB<br />---------- ---------<br />MILLER CLERK<br />
  10. 10. Using Group Functions in a Subquery<br />800<br />SQL&gt; SELECTename, job, sal<br />2 FROMemp<br />3 WHEREsal = <br />4 (SELECTMIN(sal)<br />5FROMemp);<br />ENAME JOB SAL<br />---------- --------- ---------<br />SMITH CLERK 800<br />
  11. 11. HAVING Clause with Subqueries<br />800<br />The Oracle Server executes subqueries first.<br />The Oracle Server returns results into the HAVING clause of the main query.<br />SQL&gt; SELECTdeptno, MIN(sal)<br />2 FROMemp<br />3 GROUP BYdeptno<br />4 HAVINGMIN(sal) &gt;<br />5 (SELECTMIN(sal)<br />6FROMemp<br />7WHEREdeptno = 20);<br />
  12. 12. What Is Wrong with This Statement?<br />SQL&gt; SELECT empno, ename<br />2 FROM emp<br />3 WHERE sal = <br />4 (SELECT MIN(sal)<br />5FROM emp<br />6GROUP BY deptno);<br />Single-row operator with <br />multiple-row subquery<br />ERROR:<br />ORA-01427: single-row subquery returns more thanone row<br />no rows selected<br />
  13. 13. Will This Statement Work?<br />SQL&gt; SELECT ename, job<br />2 FROM emp<br />3 WHERE job = <br />4 (SELECTjob<br />5FROMemp<br />6WHEREename=&apos;SMYTHE&apos;);<br />no rows selected<br />Subquery returns no values<br />
  14. 14. Multiple-Row Subqueries<br />Return more than one row<br />Use multiple-row comparison operators<br />Operator<br /> IN<br /> ANY<br /> ALL<br />Meaning<br />Equal to any member in the list<br />Compare value to each value returned by the subquery <br />Compare value to every value returned by the subquery <br />
  15. 15. Using ANY Operator in Multiple-Row Subqueries<br />1300<br />1100<br />800<br />950<br />SQL&gt; SELECT empno, ename, job<br />2 FROM emp<br />3 WHERE sal &lt; ANY <br />4 (SELECTsal<br />5FROMemp<br />6WHEREjob = &apos;CLERK&apos;)<br />7 AND job &lt;&gt; &apos;CLERK&apos;;<br /> EMPNO ENAME JOB<br />--------- ---------- ---------<br />7654 MARTIN SALESMAN <br />7521 WARD SALESMAN <br />
  16. 16. Using ALL Operator in Multiple-Row Subqueries<br />1566.6667<br />2175<br />2916.6667<br />SQL&gt; SELECT empno, ename, job<br />2 FROM emp<br />3 WHERE sal &gt; ALL <br />4 (SELECTavg(sal)<br />5FROMemp<br />6GROUP BYdeptno);<br /> EMPNO ENAME JOB<br />--------- ---------- ---------<br />7839 KING PRESIDENT<br />7566 JONES MANAGER<br />7902 FORD ANALYST<br />7788 SCOTT ANALYST<br />
  17. 17. Summary<br />Subqueries are useful when a query is based on unknown values.<br />SELECTselect_list<br />FROMtable<br />WHEREexpr operator<br /> (SELECT select_list<br />FROMtable);<br />
  18. 18. Practice Overview<br />Creating subqueries to query values based on unknown criteria<br />Using subqueries to find out what values exist in one set of data and not in another<br />