SQL | Unterabfrage
In SQL kann eine Unterabfrage einfach als Abfrage innerhalb einer anderen Abfrage definiert werden. Mit anderen Worten können wir sagen, dass eine Unterabfrage eine Abfrage ist, die in die WHERE-Klausel einer anderen SQL-Abfrage eingebettet ist. Wichtige Regeln für Unterabfragen:
- Sie können die Unterabfrage in eine Reihe von SQL-Klauseln einfügen: WO Klausel, HAVING-Klausel, FROM-Klausel. Unterabfragen können mit SELECT-, UPDATE-, INSERT- und DELETE-Anweisungen zusammen mit Ausdrucksoperatoren verwendet werden. Es kann sich um einen Gleichheitsoperator oder einen Vergleichsoperator wie den Operator =,>, =, <= und Like handeln.
- Eine Unterabfrage ist eine Abfrage innerhalb einer anderen Abfrage. Die äußere Abfrage heißt als Hauptabfrage und die innere Abfrage heißt als Unterabfrage .
- Die Unterabfrage wird im Allgemeinen zuerst ausgeführt, wenn die Unterabfrage keine hat Mitbeziehung mit dem Hauptabfrage , wenn eine Korrelation besteht, trifft der Parser die Entscheidung im laufenden Betrieb welche Abfrage ausgeführt werden soll Vorrang und verwendet die Ausgabe der Unterabfrage entsprechend.
- Die Unterabfrage muss in Klammern eingeschlossen werden.
- Unterabfragen befinden sich auf der rechten Seite des Vergleichsoperators.
- SORTIEREN NACH Befehl kann nicht in einer Unterabfrage verwendet werden. GRUPPIERE NACH Der Befehl kann verwendet werden, um dieselbe Funktion wie der Befehl ORDER BY auszuführen.
- Verwenden Sie einzeilige Operatoren mit einzeiligen Unterabfragen. Verwenden Sie mehrzeilige Operatoren mit mehrzeiligen Unterabfragen.
Syntax: Es gibt keine allgemeine Syntax für Unterabfragen. Allerdings werden Unterabfragen am häufigsten mit der SELECT-Anweisung verwendet, wie unten gezeigt:
SELECT column_name FROM table_name WHERE column_name expression operator ( SELECT COLUMN_NAME from TABLE_NAME WHERE ... );
Beispieltabelle :
DATENBANK
| NAME | ROLL_NR | STANDORT | TELEFONNUMMER |
|---|---|---|---|
| RAM | 101 | Chennai | 9988775566 |
| Raj | 102 | Coimbatore | 8877665544 |
| Sasi | 103 | Madurai | 7766553344 |
| Behandlung | 104 | Salem | 8989898989 |
| Sumathi | 105 | Kanchipuram | 8989856868 |
STUDENT
| NAME | ROLL_NR | ABSCHNITT |
|---|---|---|
| Behandlung | 104 | A |
| Sumathi | 105 | B |
| Raj | 102 | A |
Beispielabfragen
:
- Um NAME, STANDORT und TELEFONNUMMER der Schüler aus der DATABASE-Tabelle anzuzeigen, deren Abschnitt A ist
Select NAME, LOCATION, PHONE_NUMBER from DATABASE WHERE ROLL_NO IN (SELECT ROLL_NO from STUDENT where SECTION=’A’);
- Erläuterung: Die erste Unterabfrage führt SELECT ROLL_NO von STUDENT aus, wobei SECTION='A' ROLL_NO aus der STUDENT-Tabelle zurückgibt, deren SECTION 'A' ist. Dann führt die äußere Abfrage sie aus und gibt NAME, LOCATION, PHONE_NUMBER aus der DATABASE-Tabelle des Studenten zurück, dessen ROLL_NO wird von der inneren Unterabfrage zurückgegeben. Ausgabe:
| NAME | ROLL_NR | STANDORT | TELEFONNUMMER |
| Behandlung | 104 | Salem | 8989898989 |
| Raj | 102 | Coimbatore | 8877665544 |
- Beispiel für eine Abfrage einfügen:
Tabelle 1: Student1
| NAME | ROLL_NR | STANDORT | TELEFONNUMMER | |
|---|---|---|---|---|
| RAM | 101 | Chennai | 9988773344 | |
| Raju | 102 | Coimbatore | 9090909090 | |
| Behandlung | 103 | Salem | 8989898989 |
Tabelle2: Student2
| NAME | ROLL_NR | STANDORT | TELEFONNUMMER | |
|---|---|---|---|---|
| Raj | 111 | Chennai | 8787878787 | |
| Bis | 112 | Mumbai | 6565656565 | |
| Sri | 113 | Coimbatore | 7878787878 |
- So fügen Sie Student2 in die Tabelle Student1 ein:
INSERT INTO Student1 SELECT * FROM Student2;
- Ausgabe:
| NAME | ROLL_NR | STANDORT | TELEFONNUMMER | |
|---|---|---|---|---|
| RAM | 101 | Chennai | 9988773344 | |
| Raju | 102 | Coimbatore | 9090909090 | |
| Behandlung | 103 | Salem | 8989898989 | |
| Raj | 111 | Chennai | 8787878787 | |
| Bis | 112 | Mumbai | 6565656565 | |
| Sri | 113 | Coimbatore | 7878787878 |
- Um Schüler aus der Tabelle „Student2“ zu löschen, deren Rollennummer mit der in der Tabelle „Student1“ übereinstimmt und deren Standort Chennai ist
DELETE FROM Student2 WHERE ROLL_NO IN ( SELECT ROLL_NO FROM Student1 WHERE LOCATION = ’chennai’);
- Ausgabe:
1 row delete successfully.
- Student2-Tabelle anzeigen:
| NAME | ROLL_NR | STANDORT | TELEFONNUMMER | |
|---|---|---|---|---|
| Bis | 112 | Mumbai | 6565656565 | |
| Sri | 113 | Coimbatore | 7878787878 |
- Um den Namen der Schüler in „Geeks“ in der Tabelle „Student2“ zu aktualisieren, deren Standort mit Raju,Ravi in der Tabelle „Student1“ übereinstimmt
UPDATE Student2 SET NAME=’geeks’ WHERE LOCATION IN ( SELECT LOCATION FROM Student1 WHERE NAME IN (‘Raju’,’Ravi’));
- Ausgabe:
1 row updated successfully.
- Student2-Tabelle anzeigen:
| NAME | ROLL_NR | STANDORT | TELEFONNUMMER | |
|---|---|---|---|---|
| Bis | 112 | Mumbai | 6565656565 | |
| Geeks | 113 | Coimbatore | 7878787878 |