Conectați-vă cu Microsoft
Conectați-vă sau creați un cont.
Salut,
Selectați un alt cont.
Aveți mai multe conturi
Alegeți contul cu care doriți să vă conectați.

Uneori, este posibil să doriți să utilizați rezultatele unei interogări ca un câmp în altă interogare sau ca criteriu pentru un câmp de interogare. De exemplu, să presupunem că doriți să vedeți intervalul dintre comenzi pentru fiecare dintre produsele dvs. Pentru a crea o interogare care afișează acest interval, trebuie să comparați fiecare dată de comandă la alte date de comandă pentru acel produs. Compararea acestor date de comenzi necesită, de asemenea, o interogare. Puteți să imbricați această interogare în interiorul interogării principale, utilizând o subinterogare.

Puteți să scrieți o subinterogare într-o expresie sau într-o instrucțiune de interogare structurată (SQL) în Vizualizare SQL.

În acest articol

Utilizarea rezultatelor unei interogări ca un câmp în altă interogare

Puteți utiliza o subinterogare ca alias de câmp. Utilizați o subinterogare ca alias de câmp atunci când doriți să utilizați rezultatele subinterogării ca un câmp din interogarea principală.

Notă: O subinterogare pe care o utilizați ca alias de câmp nu poate returna mai mult de un câmp.

Puteți utiliza un alias de câmp de subinterogare pentru a afișa valori care depind de alte valori din rândul curent, ceea ce nu este posibil fără a utiliza o subinterogare.

De exemplu, permiteți-ne să revenim la exemplul în care doriți să vedeți intervalul dintre comenzi pentru fiecare dintre produsele dvs. Pentru a determina acest interval, trebuie să comparați fiecare dată de comandă la alte date de comandă pentru acel produs. Puteți crea o interogare care afișează aceste informații utilizând șablonul de bază de date Northwind.

  1. Pe fila Fișier, faceți clic pe Nou.

  2. Sub șabloane disponibile, faceți clic pe șabloane eșantion.

  3. Faceți clic pe Northwind, apoi faceți clic pe Creare.

  4. Urmați instrucțiunile de la pagina Northwind Traders (pe fila obiect Ecran de lansare în execuție) pentru a deschide baza de date, apoi închideți fereastra de dialog Conectare

  5. În fila Creare, în grupul Interogări, faceți clic pe Proiectare interogare.

  6. Faceți clic pe fila interogări , apoi faceți dublu clic pe comenzi produs.

  7. Faceți dublu clic pe câmpul ID produs și pe câmpul data comenzii pentru a le adăuga la grila de proiectare a interogării.

  8. În rândul Sortare al coloanei ID produs a grilei, selectați ascendent.

  9. În rândul Sortare al coloanei data comenzii din grilă, selectați descendent.

  10. În a treia coloană a grilei, faceți clic cu butonul din dreapta pe rândul câmp , apoi faceți clic pe Zoom în meniul de comenzi rapide.

  11. În caseta de dialog Zoom , tastați sau lipiți următoarea expresie:

    Prior Date: (SELECT MAX([Order Date]) 
    FROM [Product Orders] AS [Old Orders]
    WHERE [Old Orders].[Order Date] < [Product Orders].[Order Date]
    AND [Old Orders].[Product ID] = [Product Orders].[Product ID])

    Această expresie este subinterogarea. Pentru fiecare rând, subinterogarea selectează data cea mai recentă a comenzii care este mai puțin recentă decât data comenzii asociată deja cu rândul. Rețineți modul în care utilizați cuvântul cheie ca pentru a crea un alias de tabel, astfel încât să puteți compara valorile din subinterogare la valorile din rândul curent al interogării principale.

  12. În a patra coloană a grilei, în rândul câmp , tastați următoarea expresie:

    Interval: [Order Date]-[Prior Date]

    Această expresie calculează intervalul dintre fiecare dată de comandă și data comenzii anterioare pentru acel produs, utilizând valoarea pentru data anterioară pe care am definit-o utilizând o subinterogare.

  13. Pe fila Proiectare, în grupul Rezultate, faceți clic pe Rulare.

    1. Interogarea rulează și afișează o listă de nume de produse, date de comandă, date de comandă anterioare și intervalul dintre datele comenzii. Rezultatele sunt sortate mai întâi după ID-ul produsului (în ordine ascendentă), apoi după data comenzii (în ordine descrescătoare).

    2. Notă: Deoarece ID produs este un câmp de căutare, în mod implicit, Access afișează valorile de căutare (în acest caz, numele produsului), mai degrabă decât ID-urile de produs efective. Deși aceasta modifică valorile care apar, aceasta nu modifică ordinea de sortare.

  14. Închideți baza de date Northwind.

Începutul paginii

Utilizarea unei subinterogări ca criteriu pentru un câmp de interogare

Puteți utiliza o subinterogare ca criteriu de câmp. Utilizați o subinterogare ca criteriu de câmp atunci când doriți să utilizați rezultatele subinterogării pentru a limita valorile pe care le afișează câmpul.

De exemplu, să presupunem că doriți să revizuiți o listă de comenzi care au fost procesate de angajați care nu sunt reprezentanți de vânzări. Pentru a genera această listă, trebuie să comparați ID-ul angajaților pentru fiecare comandă, cu o listă de ID-uri de angajați pentru angajații care nu sunt reprezentanți de vânzări. Pentru a crea această listă și a o utiliza ca criteriu de câmp, utilizați o subinterogare, așa cum se arată în următoarea procedură:

  1. Deschideți Northwind. accdb și activați conținutul său.

  2. Închideți formularul de conectare.

  3. Pe fila Creare, în grupul Altele, faceți clic pe Proiectare interogare.

  4. Pe fila tabele , faceți dublu clic pe comenzi și pe angajați.

  5. În tabelul Orders, faceți dublu clic pe câmpul ID angajat , câmpul ID comandă și câmpul data comenzii pentru a le adăuga la grila de proiectare a interogării. În tabelul angajați, faceți dublu clic pe câmpul de titlu al lucrării pentru a-l adăuga la grila de proiectare.

  6. Faceți clic cu butonul din dreapta pe rândul criterii al coloanei ID angajat, apoi faceți clic pe Zoom în meniul de comenzi rapide.

  7. În caseta Zoom , tastați sau lipiți următoarea expresie:

    IN (SELECT [ID] FROM [Employees] 
    WHERE [Job Title]<>'Sales Representative')

    Aceasta este subinterogarea. Selectează toate ID-urile angajaților în care angajatul nu are un titlu de serviciu reprezentativ pentru vânzări și furnizează rezultatul setat la interogarea principală. Interogarea principală verifică, apoi, pentru a vedea dacă ID-urile angajaților din tabelul Orders se află în setul de rezultate.

  8. Pe fila Proiectare, în grupul Rezultate, faceți clic pe Rulare.

    Interogarea rulează, iar rezultatele interogării afișează o listă de comenzi care au fost procesate de angajați care nu sunt reprezentanți de vânzări.

Începutul paginii

Cuvinte cheie SQL comune care se pot utiliza cu o subinterogare

Există câteva cuvinte cheie SQL care se pot utiliza cu o subinterogare:

Notă: Această listă nu este exhaustivă. Puteți utiliza orice cuvânt cheie SQL valid într-o subinterogare, excluzând cuvintele cheie de definiție a datelor.

  • TOATE    Utilizați toate într-o clauză WHERE pentru a regăsi rândurile care satisfac condiția în comparație cu fiecare rând returnat de subinterogare.

    De exemplu, să presupunem că analizați datele elevilor la un colegiu. Elevii trebuie să mențină un GPA minim, care variază de la maiorul la major. Specializările și mediile minimele lor minime sunt stocate într-un tabel numit Majors, iar informațiile relevante despre elevi sunt stocate într-un tabel denumit Student_Records.

    Pentru a vedea o listă de specializări (și mediile minime lor minimă) pentru care fiecare elev cu acel maior depășește GPA-ul minim, puteți utiliza următoarea interogare:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • ORICE    Utilizați orice într-o clauză WHERE pentru a regăsi rândurile care satisfac condiția în comparație cu cel puțin unul dintre rândurile returnate de subinterogare.

    De exemplu, să presupunem că analizați datele elevilor la un colegiu. Elevii trebuie să mențină un GPA minim, care variază de la maiorul la major. Specializările și mediile minimele lor minime sunt stocate într-un tabel numit Majors, iar informațiile relevante despre elevi sunt stocate într-un tabel denumit Student_Records.

    Pentru a vedea o listă de specializări (și mediile minime lor minimă) pentru care orice elev cu acel maior nu îndeplinește GPA-ul minim, puteți utiliza următoarea interogare:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] > ANY
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);

    Notă: De asemenea, puteți utiliza un anumit cuvânt cheie pentru același scop; UNELE cuvinte cheie sunt sinonime cu orice.

  • EXISTS     Utilizați există într-o clauză WHERE pentru a indica faptul că o subinterogare trebuie să returneze cel puțin un rând. De asemenea, puteți prefața există cu NOT, pentru a indica faptul că o subinterogare nu trebuie să returneze niciun rând.

    De exemplu, următoarea interogare returnează o listă de produse care se găsesc în cel puțin una dintre comenzile existente:

    SELECT *
    FROM [Products]
    WHERE EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);

    Utilizarea nu există, interogarea returnează o listă de produse care nu se găsesc în cel puțin una dintre comenzile existente:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • IN    Utilizați într-o clauză WHERE pentru a verifica dacă o valoare din rândul curent al interogării principale face parte din setul pe care îl returnează subinterogarea. De asemenea, puteți face față cu NOT, pentru a verifica dacă o valoare din rândul curent al interogării principale nu face parte din setul pe care îl returnează subinterogarea.

    De exemplu, următoarea interogare returnează o listă de comenzi (cu date de comandă) care au fost procesate de angajați care nu sunt reprezentanți de vânzări:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]<>'Sales Representative');

    Utilizând NOT IN, puteți scrie aceeași interogare astfel:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] NOT IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]='Sales Representative');

Începutul paginii

Aveți nevoie de ajutor suplimentar?

Extindeți-vă competențele
Explorați instruirea
Fiți primul care obține noile caracteristici
Alăturați-vă utilizatorilor Insider Microsoft Office

Au fost utile aceste informații?

Cât de mulțumit sunteți de calitatea limbajului?
Ce v-a afectat experiența?

Vă mulțumim pentru feedback!

×