logo

Zagnieżdżone zapytania w SQL

Warunki wstępne: Podstawy SQL

Zapytania zagnieżdżone to sposób wykonywania złożonych zapytań poprzez osadzenie jednego zapytania w innym. Zapytanie zewnętrzne może zastosować pewne warunki do wyników zapytania wewnętrznego. Skorzystajmy STUDENT, KURS, STUDENT_COURSE tabele umożliwiające zrozumienie zagnieżdżonych zapytań.



STUDENT

S_ID S_NAME S_ADRES S_TELEFON SZAŁWIA
S1 Baran DELHI 9455123451 18
S2 RAMESZ GURGAON 9652431543 18
S3 SUJIT ROHTAK 9156253131 20
S4 PEWNY DELHI 9156768971 18

KURS

C_ID C_NAME
C1 DSA
C2 Programowanie
C3 DBMS

STUDENT_KURS



S_ID C_ID
S1 C1
S1 C3
S2 C1
S3 C2
S4 C2
S4 C3

Istnieją głównie dwa typy zapytań zagnieżdżonych:

  • Niezależne zapytania zagnieżdżone: W niezależnych zapytaniach zagnieżdżonych wykonywanie zapytań rozpoczyna się od zapytania najbardziej wewnętrznego do zapytania najbardziej zewnętrznego. Wykonanie zapytania wewnętrznego jest niezależne od zapytania zewnętrznego, ale wynik zapytania wewnętrznego jest wykorzystywany do wykonania zapytania zewnętrznego. Do pisania niezależnych zagnieżdżonych zapytań używa się różnych operatorów, takich jak IN, NOT IN, ANY, ALL itp.
    W: Jeśli chcemy się dowiedzieć S_ID którzy są zapisani C_NAME „DSA” lub „DBMS” możemy zapisać za pomocą niezależnego zagnieżdżonego zapytania i operatora IN. Z KURS stole, możemy się dowiedzieć C_ID Do C_NAME „DSA” lub DBMS” i możemy z nich korzystać C_ID za znalezienie S_ID jest z STUDENT_KURS TABELA. KROK 1: Odkrycie C_ID Do C_NAME =’DSA’ lub ‘DBMS’ Wybierz C_ID z KURS Gdzie C_NAME = „DSA” lub C_NAME = „SZBD” KROK 2: Za pomocą C_ID kroku 1 w celu znalezienia S_ID Wybierać S_ID z STUDENT_KURS Gdzie C_ID W (WYBIERZ C_ID z KURS Gdzie C_NAME = „DSA” lub C_NAME =’SZBD’); Zapytanie wewnętrzne zwróci zestaw zawierający elementy C1 i C3, a zapytanie zewnętrzne zwróci te elementy S_ID dla którego C_ID jest równy dowolnemu elementowi zbioru (w tym przypadku C1 i C3). Zatem zwróci S1, S2 i S4. Notatka: Jeśli chcemy poznać nazwiska STUDENT którzy zarejestrowali się w „DSA” lub „DBMS”, można to zrobić w następujący sposób: Wybierz S_NAME z STUDENT Gdzie S_ID W (wybierz S_ID z STUDENT_KURS Gdzie C_ID W (WYBIERZ C_ID z KURS Gdzie C_NAME =’DSA’ lub C_NAME =’SZBD’));
    NIE W: Jeśli chcemy się dowiedzieć S_ID z STUDENT którzy nie zapisali się ani do „DSA”, ani do „DBMS”, można to zrobić w następujący sposób: Wybierz S_ID z STUDENT Gdzie S_ID NIE W (Wybierz S_ID z STUDENT_KURS Gdzie C_ID W (WYBIERZ C_ID z KURS Gdzie C_NAME =’DSA’ lub C_NAME =’SZBD’)); Najbardziej wewnętrzne zapytanie zwróci zbiór zawierający elementy C1 i C3. Drugie zapytanie wewnętrzne zwróci je S_ID dla którego C_ID jest równy dowolnemu elementowi zbioru (w tym przypadku C1 i C3), którym są S1, S2 i S4. Najbardziej zewnętrzne zapytanie zwróci te S_ID gdzie S_ID nie jest członkiem zbioru (S1, S2 i S4). Więc zwróci S3.
  • Współpowiązane zapytania zagnieżdżone: We współzależnych zapytaniach zagnieżdżonych wynik zapytania wewnętrznego zależy od wiersza, który jest aktualnie wykonywany w zapytaniu zewnętrznym. np.; Jeśli chcemy się dowiedzieć S_NAME z STUDENT którzy są zapisani C_ID „C1”, można to zrobić za pomocą powiązanego zagnieżdżonego zapytania w następujący sposób: Wybierz S_NAME z STUDENT S gdzie ISTNIEJE (wybierz * z STUDENT_KURS SC, gdzie S. S_ID =SC. S_ID i SC. C_ID =’C1’); Dla każdego rzędu STUDENT S, znajdzie wiersze z STUDENT_KURS gdzie S. S_ID = SC. S_ID i SC. C_ID =’C1’. Jeśli dla S_ID z STUDENT S, przynajmniej istnieje rząd STUDENT_KURS SC z C_ID =’C1’, wówczas zapytanie wewnętrzne zwróci wartość true i odpowiadającą S_ID zostaną zwrócone jako dane wyjściowe.

PRZYKŁAD W KODZIE SQL:

WYBIERZ nazwę ucznia



OD Studentów

GDZIE StudentID IN (

WYBIERZ ID studenta

Z klas

GDZIE Przedmiot = „Matematyka” ORAZ Wynik> 90

);