Unterabfragen in Oracle
(1) Eine Unterabfrage oder verschachtelte Abfrage ist eine Abfrage innerhalb einer anderen SQL-Abfrage und eingebettet in die WHERE-Klausel. Eine Unterabfrage ist eine Abfrage innerhalb einer Abfrage
(2) Eine Unterabfrage wird verwendet, um Daten zurückzugeben, die in der Hauptabfrage als Bedingung verwendet werden, um die abzurufenden Daten weiter einzuschränken.
(3) Unterabfragen beantworten mehrteilige Abfragen. Die übergeordnete Abfrage beantwortet einen Teil und die untergeordnete Abfrage beantwortet einen anderen Teil
(4) Unterabfragen können mit den SELECT-, INSERT-, UPDATE- und DELETE-Anweisungen zusammen mit den Operatoren wie =, <,>,>=, <=, IN, BETWEEN usw. verwendet werden.
(5) Die Verwendung von Unterabfragen in einer FROM-Klausel wird als Inline-Ansicht bezeichnet .
(6) Die Verwendung von Unterabfragen in der WHERE-Klausel wird als verschachtelte Unterabfrage bezeichnet . Es sind bis zu 255 verschachtelte Abfragen zulässig.
Einige Richtlinien für Oracle-Unterabfragen
(1) Wir müssen Unterabfragen immer in Klammern setzen
(2) Wir müssen Unterabfragen auf der rechten Seite des Vergleichsoperators platzieren
(3) Verwenden Sie den Einzelzeilenoperator mit Einzelzeilen-Unterabfragen und den Mehrfachzeilenoperator mit Mehrfachzeilen-Unterabfragen
Allgemeine Syntax
SELECT col1, col2 FROM table1 WHERE col1 OPERATOR (SELECT col1 FROM table2 [WHERE])
Einzeilige Unterabfrage
Es gibt nur eine Ergebniszeile zurück und verwendet einen einzelnen Zeilenoperator (am häufigsten ist der Gleichheitsoperator (=)). Die anderen Operatoren sind > ,<,>= ,=<
Einzelzeilen-Unterabfragen können Daten aus derselben Tabelle oder aus einer anderen Tabelle auswählen
SELECT ENAME FROM EMP WHERE SAL = (SELECT MIN(SAL) FROM EMP);SELECT ENAME FROM EMP WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE DNAME = 'RESEARCH');
Mehrzeilige Unterabfrage
Es gibt mehrere Ergebniszeilen aus der Unterabfrage zurück und verwendet den IN-Operator. Wenn in der vorherigen Abfrage mehr als eine Forschungsabteilung vorhanden war, wäre die Abfrage fehlgeschlagen. Beispiel für die Rückgabe von mehr als einer Zeile in der Unterabfrage
Der andere verwendete Operator ist any and all
SELECT ENAME, DEPTNO FROM EMP WHERE DEPTNO IN (SELECT DEPTNO FROM DEPT WHERE DNAME LIKE 'R%');
Korrelierte Unterabfrage
Eine korrelierte Unterabfrage ist eine Unterabfrage, die sich auf Spalten der übergeordneten Abfrage stützt. Eine korrelierte Unterabfrage wird für jede Zeile ausgewertet, die von der übergeordneten Abfrage verarbeitet wird. Die übergeordnete Anweisung kann ein SELECT, UPDATE oder DELETE sein.
SELECT ENAME,SAL FROM EMP E1 WHERE SAL = (SELECT MAX(SAL) FROM EMP E2 WHERE E1.DEPTNO = E2.DEPTNO);
Basierend auf den gleichen Daten von emp und dept, hier ist das Ergebnis
Skalare Unterabfragen
Es gibt genau einen Wert aus einer Zeile zurück, der am häufigsten in der VALUES-Klausel einer INSERT-Anweisung, in einer ORDER BY- oder WHERE-Klausel und in einer SELECT-Klausel verwendet wird:
SELECT ENAME, DEPTNO, (SELECT MAX(SAL) FROM EMP E2 WHERE E2.DEPTNO = E1.DEPTNO) HIGH_SAL FROM EMP E1 WHERE ENAME LIKE 'B%';
Die Unterabfrage wird einmal für jede Ausführung der Hauptabfrage ausgeführt. Eine einzeilige Unterabfrage kann nur mit einzeiligen Operatoren verwendet werden
Mehrspaltige Unterabfragen
Die Abfrage kann mehr als eine Spalte in der SELECT-Klausel einer Unterabfrage oder in UPDATE-Anweisungen haben
SELECT CITY,CITY_CODE,CITY_DESCRIPTION FROM LOCATIONS WHERE (LOCATION_ID, COUNTRY_ID) IN (SELECT LOCATION_ID, COUNTRY_ID FROM LOCATIONS WHERE STATE_PROVINCE = 'NEWYORK');
Unterabfragen in anderen DML-Anweisungen
Unterabfragen können in UPDATE-, DELETE- und INSERT-Anweisungen verwendet werden
Update Statement UPDATE EMP SET SALARY = (SELECT SALARY FROM EMP WHERE EMPLOYEE_ID = 112408) WHERE EMPLOYEE_ID = 193711; Insert Statement INSERT INTO DEPT (DEPT_ID, DEPT_NAME) VALUES ((SELECT MAX(DEPT_ID) FROM DEPT), 'NEW DEPT'); Delete Statement DELETE FROM CUSTOMERS WHERE AGE IN (SELECT AGE FROM CUST_BACK WHERE AGE > 40 );
Verwandte Artikel
Wie man SQL-Abfragen schreibt:Was sind Oracle-Joins mit Beispielen (Sql-Joins), Verschiedene Arten von Joins, Inner Join, Outer Join, Left Outer Join, Right Outer Join, Cross Join mit Beispielen
Oracle Joins :Was sind Oracle-Joins mit Beispielen (SQL-Joins), verschiedene Arten von Joins, Inner Join, Outer Join, Left Outer Join, Right Outer Join, Cross Join mit Beispielen
Datumsfunktionen in Oracle :Schauen Sie sich diesen Beitrag für Oracle an Datumsfunktionen, Orakel-Datumsdifferenz in Jahren, Orakel-Datumsdifferenz in Tagen, Orakel-Datumsdifferenz in Monaten.
JSON in Orakel:Sehen Sie sich diesen Beitrag an, wie Sie JSON in Orakel verwenden, wie Sie eine Tabelle mit JSON-Daten erstellen, wie zum Extrahieren, Einfügen der JSON-Daten in Oracle
Oracle Sql-Tutorial:Auflistung aller SQL-Tutorial-Lektionen, die verwendet werden können, um SQL zu beherrschen und in Oracle zu verwenden, Datenverwaltung und -manipulation
https://livesql. oracle.com/apex/livesql/file/tutorial_GMLYIBY74FPBS888XO8F1R95I.html