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, poate doriți să utilizați rezultatele unei interogări ca un câmp în altă interogare sau drept 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ă a comenzii cu alte date ale comenzii pentru produsul respectiv. Compararea acestor date de comandă necesită, de asemenea, o interogare. Puteți imbrica această interogare în interogarea principală utilizând un subinterogare.

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

În acest articol

Utilizarea rezultatelor unei interogări ca câmp într-o 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 în interogarea principală.

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

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

De exemplu, să revenim la exemplul în care doriți să vedeți intervalul dintre comenzile pentru fiecare dintre produsele dvs. Pentru a determina acest interval, trebuie să comparați fiecare dată a comenzii cu alte date ale comenzii pentru produsul respectiv. 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 din coloana ID produs din grilă, selectați Ascendent.

  9. În rândul Sortare din coloana Dată comandă din grilă, selectați Descendent.

  10. În a treia coloană a grilei, faceți clic 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ă cea mai recentă dată a comenzii care este mai puțin recentă decât data comenzii care este asociată deja cu rândul. Rețineți cum utilizați cuvântul cheie AS pentru a crea un alias de tabel, astfel încât să puteți compara valorile din subinterogare cu 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ă a comenzii și data comenzii anterioare pentru produsul respectiv, 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 ale comenzilor, date ale comenzilor anterioare și intervalul dintre datele comenzilor. Rezultatele sunt sortate mai întâi după ID produs (î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), nu ID-urile reale de produs. Deși acest lucru modifică valorile care apar, nu modifică ordinea de sortare.

  14. Închideți baza de date Northwind.

Începutul paginii

Utilizarea unei subinterogare drept criteriu pentru un câmp de interogare

Puteți utiliza o subinterogare drept criteriu de câmp. Utilizați o subinterogare drept 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 ai vânzărilor. Pentru a genera această listă, trebuie să comparați ID-ul angajatului pentru fiecare comandă cu o listă de ID-uri de angajat pentru angajații care nu sunt reprezentanți ai vânzărilor. Pentru a crea această listă și a o utiliza drept 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 angajați.

  5. În tabelul Comenzi, faceți dublu clic pe câmpul ID angajat , pe câmpul ID comandă și pe 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 Funcție pentru a-l adăuga la grila de proiectare.

  6. Faceți clic dreapta pe rândul Criterii din coloana 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. Aceasta selectează toate ID-urile de angajat în care angajatul nu are un funcție de Reprezentant vânzări și furnizează rezultatul setat la interogarea principală. Interogarea principală verifică apoi dacă ID-urile angajaților din tabelul Comenzi sunt î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 ai vânzărilor.

Începutul paginii

Cuvinte cheie SQL comune pe care le puteți utiliza cu o subinterogare

Există mai multe cuvinte cheie SQL pe care le puteți utiliza cu o subinterogare:

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

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

    De exemplu, să presupunem că analizați datele elevilor/studenților la un colegiu. Elevii trebuie să mențină un GPA minim, care variază de la majore la majore. Specializările și GPA-urile minime sunt stocate într-un tabel denumit Specializări, iar informațiile relevante despre elevi/studenți sunt stocate într-un tabel numit Student_Records.

    Pentru a vedea o listă de specializări (și GPA-urile lor minime) pentru care fiecare elev/student cu acea specializare depășește GPA 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 ANY într-o clauză WHERE pentru a regăsi rândurile care satisfac condiția comparativ cu cel puțin unul dintre rândurile returnate de subinterogare.

    De exemplu, să presupunem că analizați datele elevilor/studenților la un colegiu. Elevii trebuie să mențină un GPA minim, care variază de la majore la majore. Specializările și GPA-urile minime sunt stocate într-un tabel denumit Specializări, iar informațiile relevante despre elevi/studenți sunt stocate într-un tabel numit Student_Records.

    Pentru a vedea o listă de specializări (și GPA-urile lor minime) pentru care orice elev/student cu specializarea respectivă nu îndeplinește GPA 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 cuvântul cheie SOME în același scop; cuvântul cheie SOME este sinonim cu ANY.

  • EXISTS     Utilizați EXISTS într-o clauză WHERE pentru a indica faptul că o subinterogare ar trebui să returneze cel puțin un rând. De asemenea, puteți prefața EXISTS 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 o comandă existentă:

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

    Utilizând NOT EXISTS, interogarea returnează o listă de produse care nu se găsesc în cel puțin o comandă existentă:

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

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

    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?

Doriți mai multe opțiuni?

Explorați avantajele abonamentului, navigați prin cursurile de instruire, aflați cum să vă securizați dispozitivul și multe altele.

Comunitățile vă ajută să adresați întrebări și să răspundeți la întrebări, să oferiți feedback și să primiți feedback de la experți cu cunoștințe bogate.

Au fost utile aceste informații?

Cât de mulțumit sunteți de calitatea limbajului?
Ce v-a afectat experiența?
Apăsând pe Trimitere, feedbackul dvs. va fi utilizat pentru a îmbunătăți produsele și serviciile Microsoft. Administratorul dvs. IT va avea posibilitatea să colecteze aceste date. Angajamentul de respectare a confidențialității.

Vă mulțumim pentru feedback!

×