Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Copyright Oracle Corporation, 1998. All rights reserved. 6 Unteranfragen (Subqueries)

Ähnliche Präsentationen


Präsentation zum Thema: "Copyright Oracle Corporation, 1998. All rights reserved. 6 Unteranfragen (Subqueries)"—  Präsentation transkript:

1 Copyright Oracle Corporation, 1998. All rights reserved. 6 Unteranfragen (Subqueries)

2 6-2 Ziele Welche Probleme können mit Sub- queries gelöst werden Definition von Subqueries Typen von Subqueries kennenlernen Schreiben von Subqueries Welche Probleme können mit Sub- queries gelöst werden Definition von Subqueries Typen von Subqueries kennenlernen Schreiben von Subqueries

3 6-3 Anwendung einer Subquery zur Lösug eines Problems Wer hat ein Gehalt, das größer ist als das von Jones? Welche Angestellte hat ein Gehalt, das größer ist als das von Jones? Hauptanfrage ? Wie hoch ist das Gehalt von Jones? ? Unteranfrage

4 6-4 Subqueries Die Unteranfrage (innere Query) wird einmal vor der Haupt-Query ausgeführt. Das Ergebnis der Subquery wird genutzt durch die Hauptanfrage (äußere Query). Die Unteranfrage (innere Query) wird einmal vor der Haupt-Query ausgeführt. Das Ergebnis der Subquery wird genutzt durch die Hauptanfrage (äußere Query). SELECTselect_list FROMtable WHEREexpr operator (SELECTselect_list FROMtable);

5 6-5 2975 SQL> SELECT ename 2 FROM emp 3 WHERE sal > 4 (SELECT sal 5 FROM emp 6 WHERE empno=7566); Anwendung Subquery ENAME ---------- KING FORD SCOTT ENAME ---------- KING FORD SCOTT

6 6-6 Regeln für den Gebrauch von Subqueries Subqueries in Klammern einschließen. Subqueries auf der rechten Seite des Vergleichsoperators. Keine ORDER BY-Klausel einer Subquery hinzufügen. Single-Row-Operatoren zu Single-Row Subqueries (Vergleich Wert - Wert). Multiple-Row-Operatoren mit Multiple-Row Subqueries (Vergleich Menge-Menge) Subqueries in Klammern einschließen. Subqueries auf der rechten Seite des Vergleichsoperators. Keine ORDER BY-Klausel einer Subquery hinzufügen. Single-Row-Operatoren zu Single-Row Subqueries (Vergleich Wert - Wert). Multiple-Row-Operatoren mit Multiple-Row Subqueries (Vergleich Menge-Menge)

7 6-7 Typen von Subqueries Single-Row Subquery Main query Subquery liefert CLERK Multiple-Row Subquery CLERKMANAGER Main query Subquery liefert Multiple-Column Subquery CLERK 7900 MANAGER 7698 Main query Subquery liefert

8 6-8 Single-Row Subqueries Liefern nur eine Zeile (einen Wert) Nutze die passenden Vergleichsoperatoren Liefern nur eine Zeile (einen Wert) Nutze die passenden Vergleichsoperatoren Operator = > >= < <= <> Bedeutung Gleich Größer als Größer gleich Kleiner Kleiner gleich Ungleich

9 6-9 Single-Row Subqueries ausführen CLERK 1100 ENAME JOB ---------- --------- MILLER CLERK ENAME JOB ---------- --------- MILLER CLERK SQL> SELECT ename, job 2 FROM emp 3 WHERE job = 4(SELECT job 5 FROM emp 6 WHERE empno = 7369) 7 AND sal > 8(SELECT sal 9FROMemp 10WHEREempno = 7876);

10 6-10 Gruppen-Funktionen in einer Subquery 800 ENAME JOB SAL ---------- --------- --------- SMITH CLERK 800 ENAME JOB SAL ---------- --------- --------- SMITH CLERK 800 SQL> SELECTename, job, sal 2 FROMemp 3 WHEREsal = 4(SELECTMIN(sal) 5FROMemp);

11 6-11 HAVING Klausel mit Subqueries Der Oracle Server führt zuerst Subqueries aus. Der Oracle Server gibt Ergebnisse in die HAVING Klausel der Haupt-Query zurück. Der Oracle Server führt zuerst Subqueries aus. Der Oracle Server gibt Ergebnisse in die HAVING Klausel der Haupt-Query zurück. 800 SQL> SELECTdeptno, MIN(sal) 2 FROMemp 3 GROUP BYdeptno 4 HAVINGMIN(sal) > 5(SELECTMIN(sal) 6FROMemp 7WHEREdeptno = 20);

12 6-12 Was geht schief bei diesem Befehl? ERROR: ORA-01427: single-row subquery returns more than one row no rows selected ERROR: ORA-01427: single-row subquery returns more than one row no rows selected SQL> SELECT empno, ename 2 FROM emp 3 WHERE sal = 4(SELECT MIN(sal) 5FROM emp 6GROUP BY deptno); Single-row operator with multiple-row subquery

13 6-13 Funktioniert dieser Befehl? no rows selected Subquery returns no values SQL> SELECT ename, job 2 FROM emp 3 WHERE job = 4(SELECTjob 5FROMemp 6WHEREename='SMYTHE');

14 6-14 Multiple-Row Subqueries Liefern mehr als eine Zeile Nutzen multiple-row Vergleichsoperatoren: Liefern mehr als eine Zeile Nutzen multiple-row Vergleichsoperatoren: Operator IN ANY ALL Bedeutung Entspricht einem Mitglied der Liste. Vergleiche Wert mit jedem Wert aus der Subquery Vergleiche Wert mit jedem Wert, den die Subquery liefert

15 6-15 Anwendung des IN-Operators SQL> SELECT ename, sal, deptno 2 FROM emp 3 WHERE sal IN 4(SELECTMIN(sal) 5FROMemp 6GROUP BY deptno); ENAME SAL DEPTNO ---------- --------- --------- ADAMS 200 20 JAMES 950 30 MILLER 1111 10 ENAME SAL DEPTNO ---------- --------- --------- ADAMS 200 20 JAMES 950 30 MILLER 1111 10

16 6-16 Anwendung des ANY Operator in Multiple-Row Subqueries 950 800 1100 1300 EMPNO ENAME JOB --------- ---------- --------- 7654 MARTIN SALESMAN 7521 WARD SALESMAN EMPNO ENAME JOB --------- ---------- --------- 7654 MARTIN SALESMAN 7521 WARD SALESMAN SQL> SELECT empno, ename, job 2 FROM emp 3 WHERE sal < ANY 4(SELECTsal 5 FROMemp 6WHEREjob = 'CLERK') 7 AND job <> 'CLERK';

17 6-17 Anwendung des ALL Operator in Multiple-Row Subqueries 2916.6667 2175 1566.6667 EMPNO ENAME JOB --------- ---------- --------- 7839 KING PRESIDENT 7566 JONES MANAGER 7902 FORD ANALYST 7788 SCOTT ANALYST EMPNO ENAME JOB --------- ---------- --------- 7839 KING PRESIDENT 7566 JONES MANAGER 7902 FORD ANALYST 7788 SCOTT ANALYST SQL> SELECT empno, ename, job 2 FROM emp 3 WHERE sal > ALL 4 (SELECTavg(sal) 5 FROMemp 6GROUP BYdeptno);

18 6-18 Zusammenfassung Subqueries sind sinnvoll, wenn eine Anfrage auf unbekannten Werten basiert. SELECTselect_list FROMtable WHEREexpr operator (SELECT select_list FROM table);


Herunterladen ppt "Copyright Oracle Corporation, 1998. All rights reserved. 6 Unteranfragen (Subqueries)"

Ähnliche Präsentationen


Google-Anzeigen