? Programmierer und Datenbank-Administratoren verwenden die Structured Query Language zu Computer-Datenbanken und Bericht über die Informationen, die in ihnen zu schaffen. Eine SQL-Anweisung kann enthalten komplexe bedingte Tests auf bestimmte Gruppen von Daten aus Tabellen in einer Datenbank auswählen. Eine korrelierte Unterabfrage hat zwei Tests , verschachtelt ineinander ; jeder Test hängt vom Ergebnis des anderen . SQL
meisten modernen relationalen Datenbanken integrieren SQL für das Hinzufügen und Aktualisieren von Daten , Strukturen zu schaffen und das Sammeln von Informationen . SQL basiert auf Theorien über Daten in den 1970er Jahren entwickelt und seitdem kontinuierlich verfeinert basiert. Es besteht aus einer Reihe von Aussagen, einschließlich SELECT, INSERT, erstellen und löschen , gefolgt von verschiedenen Klauseln Angabe der zu verwaltenden Daten und Optionen wie Sortieren und Gruppieren . Die weit verbreitete Verwendung von Datenbanken ist auf SQL Flexibilität und Raffinesse , sondern ermöglicht es Unternehmen, komplexe Gruppen von Daten in vielerlei Hinsicht analysieren
Abfragen und Unterabfragen
Eine SQL-Befehl . zum Abrufen von Daten wird eine Abfrage genannt , in der Regel , verwenden Programmierer die SELECT-Anweisung für Abfragen , obwohl viele der Regeln für die Abfrage von Daten gelten auch für INSERT, DELETE und UPDATE . Eine einfache SELECT-Abfrage kann den Inhalt einer Datentabelle , wie die folgende Aussage :
SELECT * FROM Inventar;
Diese Abfrage listet alle Datensätze in einer Tabelle namens " Inventar ". Sie machen die Ergebnisse einer Abfrage genauer , indem bedingte Tests , wie in dieser Aussage :
SELECT * FROM WHERE Inventar warehouse_code = ' chicago5 ';
Diese Abfrage zeigt Ihnen nur Inventarlisten von einem Lager Code chicago5 .
eine Unterabfrage ist eine Abfrage in einer anderen Abfrage . Die folgende Anweisung listet Inventarlisten für diese Elemente aus Lagerhäusern in einer bestimmten Region :
SELECT * FROM WHERE Inventar warehouse_code IN (SELECT FROM warehouse_code Hallen WHERE Region = ' Midwest ');
Beachten Sie, dass diese Abfrage hat zwei SELECT-Anweisungen , die eine Bestandsaufnahme Datensätze zeigt , und eine andere , die die Haupt- Abfrage mit Lager -Codes zur Verfügung stellt.
korrelierte Unterabfrage
In einer korrelierten Unterabfrage , ziehen beide Haupt-und untergeordneten Abfragen Daten aus derselben Tabelle . Die innere Abfrage führt ein Aggregat Funktion, wie eine Statistik und führt diese Informationen der äußeren Abfrage , die ihr als die Basis des Vergleichs . Beispielsweise erzeugt das korrelierte Unterabfrage eine Liste der Inventarlisten für diese Elemente mit Preisen von mehr als einem Lager -Durchschnitt. Die äußere Abfrage übergibt die Informationen an Lager der inneren Abfrage , und die innere Abfrage sendet der durchschnittliche Preis zurück zu der äußeren Abfrage : SELECT
part_number , Preis, warehouse_code aus dem Inventar i1 WHERE preis > ( SELECT AVG ( Preis ) FROM Inventar i2 = WHERE warehouse_code.i1 warehouse_code.i2 ); . " i2 "
Die beiden Abfragen Verwendung Tabellenaliasen " i1 " und obwohl sie auf dieselbe Tabelle verweisen , mit Aliasnamen können die Abfragen zu behandeln als zwei getrennte Einheiten .
Leistungsprobleme
korrelierte Unterabfragen , wertet SQL das innere Abfrage einmal für jeden Datensatz in der äußeren Abfrage . Wie Tabelle Größen größer zu werden, dauert der Vorgang länger. Wenn Sie feststellen, dass eine korrelierte Unterabfrage übermäßig viel Zeit in Anspruch nimmt , sollten Sie eine Alternative , wie das Laden einer temporären Tabelle mit Zwischenergebnissen , dann die Verarbeitung der temporären Tabelle direkt gegen die Haupt-Tabelle mit einer einfachen Unterabfrage . Obwohl weniger elegant, kann es sich als deutlich schneller .