English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQL-Untersuchung

In diesem教程中,Sie werden lernen, wie man Abfragen in SQL in eine andere Abfrage einbetten kann.

Was ist eine abgeleitete Abfrage?

Abgeleitete Abfragen, auch als eingebettete Abfragen oder Subselections bezeichnet, sindSELECTeingebettet in einer anderen SQL-Abfrage} WHERE oder HAVINGAnweisung in einem Unterabfrage. Die von der Unterabfrage zurückgegebenen Daten werden wie bei der Verwendung von Textwerten verwendet.

Eine Unterabfrage bietet eine einfache und effektive Methode, um auf die Ergebnisse einer anderen Abfrage angewiesene Abfragen zu verarbeiten. Sie sind fast so wie eine normale SELECT-Anweisung, aber fast ohne Einschränkungen. Die wichtigsten Punkte sind wie folgt:

  • Eine Unterabfrage muss immer in Klammern stehen.

  • Eine Unterabfrage muss nur eine Spalte zurückgeben. Dies bedeutet, dass Sie im Unterabfrage keine SELECT *,es sei denn, die referenzierte Tabelle hat nur eine Spalte. Wenn das Ziel eine Zeilenvergleiche ist, können Sie eine Unterabfrage mit mehreren Spalten verwenden.

  • Sie können nur Operationen verwenden, die mehrere Werte zurückgeben (z.B.IN oder NOT INOperator)von mehreren Zeilen einer Unterabfrage.

  • Eine Unterabfrage kann nicht seinUNION. Es ist nur eine SELECT-Anweisung erlaubt.

Die Unterabfrage wird am häufigsten mitSELECTmit einem SELECT-Auftrag zusammen verwendet werden, aber sie können auch inINSERT,UPDATEoderDELETEin einer Anweisung verwendet werden oder in einer anderen Unterabfrage verwendet werden.

Unterabfrage mit SELECT-Anweisung

Die folgenden Anweisungen geben nur Bestellungen in der Tabelle zurück, die einen Bestellwert von über5000 US-Dollar derjenigen Kunden detailliert. Beachten Sie auch, dass wir im Unterabfrage den SchlüsselwortDISTINCTDie wiederholten cust_id-Werte wurden aus dem Ergebnissatz entfernt.

SELECT * FROM customers
WHERE cust_id IN (SELECT DISTINCT cust_id FROM orders WHERE order_value > 5000);

Hinweis:Eine Unterabfrage kann einen einzelnen Wert, eine einzelne Zeile, eine einzelne Spalte oder eine Tabelle mit einer oder mehreren Zeilen oder einer oder mehreren Spalten zurückgeben. Sie können eine oder mehrere Zeilen oder eine oder mehrere Spalten enthalten.

Beachten Sie:Eine Unterabfrage kann in einer externenSELECT,INSERT,UPDATEoderDELETEAnweisungWHEREoderHAVINGKlausel kann auch in anderen Unterabfragen eingebettet werden.

Unterabfrage mit INSERT-Anweisung

Eine Unterabfrage kann auch mit einem INSERT-Auftrag verwendet werden. Dies ist ein Beispiel:

INSERT INTO premium_customers 
SELECT * FROM customers 
WHERE cust_id IN (SELECT DISTINCT cust_id FROM orders WHERE order_value > 5000);

Die obige Anweisung fügt die Aufzeichnungen der Premium-Kunden in die Tabelle premium_customers ein, indem sie die Daten der Unterabfrage verwenden, die durch die Verwendung der Unterabfrage zurückgegeben werden. Hier sind die Premium-Kunden diejenigen, die einen Bestellwert von über5000 US-Dollar Kunden.

Hinweis: Lesen SieÜberSQL-Tabelle klonenAnleitung, um zu erfahren, wie Sie mehrere Zeilen schnell von einer anderen Tabelle in eine Tabelle einfügen können, indem Sie den INSERT ... SELECT-Auftrag verwenden.

Unterabfrage mit UPDATE-Anweisung

Sie können auch eine Unterabfrage mit einem UPDATE-Auftrag kombinieren, um eine oder mehrere Spalten in einer Tabelle zu aktualisieren, wie folgt:

UPDATE orders
SET order_value = order_value + 10
WHERE cust_id IN (SELECT cust_id FROM customers WHERE postal_code = 75016);

durch das Erhöhen des aktuellen Bestellwerts um10Dollar, der obige Ausdruck wird die Bestellungen (orders) aktualisieren, deren Postleitzahl75016der Bestellungen der Kunden in dieser Region.

Subquery mit DELETE-Anweisung

Gleichzeitig kann eine Unterverschachtelung mit dem DELETE-Ausdruck kombiniert werden, um einezeilige oder mehrzeilige Zeilen in einer Tabelle zu löschen, wie folgt:

DELETE FROM orders
DELETE FROM orders WHERE order_id IN (SELECT order_id FROM order_details WHERE product_id = 5);

Der SQL-Ausdruck in dem obigen Beispiel enthältproduct_idfür5durch die Entfernung dieser Bestellungen aus der Bestelltabelle des Produkts.