it-swarm.com.de

Wie funktioniert die Unterabfrage in der SELECT-Anweisung in Oracle?

Ich habe mich nach einer Erklärung umgesehen, wie die Unterabfrage in einer select-Anweisung funktioniert, und kann das Konzept aufgrund sehr vager Erklärungen immer noch nicht erfassen.

Ich möchte wissen, wie Sie eine Unterabfrage in einer select-Anweisung in Oracle verwenden und was genau sie ausgibt.

Zum Beispiel, wenn ich eine Abfrage hatte, die die Namen der Mitarbeiter und die Anzahl der Profile anzeigen wollte, die sie aus diesen Tabellen verwalten

Mitarbeiter (EmpName, EmpId)

Profil (ProfileId, ..., EmpId)

wie verwende ich die Unterabfrage?

Ich dachte, dass eine Unterabfrage in der select-Anweisung erforderlich ist, um die Funktion group by zu implementieren, um die Anzahl der Profile zu zählen, die für jeden Mitarbeiter verwaltet werden, bin mir aber nicht sicher.

17
user3054901

Es ist einfach-

SELECT empname,
       empid,
       (SELECT COUNT (profileid)
          FROM profile
         WHERE profile.empid = employee.empid)
           AS number_of_profiles
  FROM employee;

Noch einfacher ist es, wenn Sie einen Tabellen-Join wie diesen verwenden:

  SELECT e.empname, e.empid, COUNT (p.profileid) AS number_of_profiles
    FROM employee e LEFT JOIN profile p ON e.empid = p.empid
GROUP BY e.empname, e.empid;

Erläuterung zur Unterabfrage:

Im Wesentlichen erhält eine Unterabfrage in einem select einen skalaren Wert und übergibt ihn an die Hauptabfrage. Eine Unterabfrage in select darf nicht mehr als eine Zeile und mehr als eine Spalte übergeben, was eine Einschränkung darstellt. Hier übergeben wir ein count an die Hauptabfrage, die, wie wir wissen, immer nur eine Zahl sein würde - ein Skalarwert. Wird kein Wert gefunden, gibt die Unterabfrage null an die Hauptabfrage zurück. Darüber hinaus kann eine Unterabfrage über die from -Klausel der Hauptabfrage auf Spalten zugreifen, wie in meiner Abfrage gezeigt, in der employee.empid wird von der äußeren Abfrage an die innere Abfrage übergeben.


Edit:

Wenn Sie eine Unterabfrage in einer select -Klausel verwenden, wird sie von Oracle im Wesentlichen als linker Join behandelt (Sie können dies im EXPLAIN-Plan für Ihre Abfrage sehen), mit der Kardinalität der Zeilen für jede Reihe auf der linken Seite nur eine auf der rechten Seite zu sein.


Erklärung für den linken Join

Ein linker Join ist sehr praktisch, insbesondere wenn Sie die Unterabfrage select aufgrund ihrer Einschränkungen ersetzen möchten. Hier gibt es keine Einschränkungen für die Anzahl der Zeilen der Tabellen auf beiden Seiten des LEFT JOIN Stichwort.

Weitere Informationen finden Sie unter Oracle Docs on subqueries und linker Join oder linker Outer Join .

26
Rachcha

In Oracle RDBMS ist es möglich, eine mehrzeilige Unterabfrage in der select-Klausel zu verwenden, solange die (Unter-) Ausgabe als Auflistung gekapselt ist. Insbesondere kann eine mehrzeilige Auswahlklausel-Unterabfrage jede ihrer Zeilen als xml-Element ausgeben, das in einem xmlforest eingekapselt ist.

0
lambdakiki