Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Was sind unterabfragen bei orakel

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