Imbricarea unei interogări în altă interogare sau într-o expresie utilizând o subinterogare

Important : Acest articol este tradus automat, consultați exonerarea de răspundere. Versiunea în limba engleză a acestui articol se poate găsi aici pentru referință.

Uneori, poate doriți să utilizați rezultatele unei interogări ca un câmp în altă interogare sau ca un criteriu pentru un câmp de interogare. De exemplu, să presupunem că doriți să vedeți intervalul dintre comenzi pentru fiecare produs. Pentru a crea o interogare care să arate acest interval, trebuie să comparați fiecare dată de comandă cu alte date de comandă pentru acel produs. Compararea acestor date de comandă necesită, de asemenea, o interogare. Aveți posibilitatea să imbricați această interogare în interogarea dvs. principală, utilizând o subinterogare.

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

În acest articol

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

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

Cuvinte cheie SQL comune care se pot utiliza într-o subinterogare

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

Aveți posibilitatea să utilizați o subinterogare ca un alias câmp. Utilizați o subinterogare ca un alias câmp 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 un alias câmp nu poate returna mai mult de un câmp.

Puteți utiliza un alias câmp de subinterogare pentru a afișa valori care depind de alte valori din rândul curent, care nu este posibilă fără a utiliza o subinterogare. De exemplu, să ne reveniți la exemplu în cazul în care doriți să vedeți intervalul dintre comenzile pentru fiecare dintre produsele dvs. Pentru a determina acest interval, aveți nevoie pentru a compara fiecare data comenzii în alte date de comandă pentru acel produs. Puteți crea o interogare care afișează aceste informații prin utilizarea șablonului Northwind 2007.

Afișează cum se configurează Northwind 2007

  1. Faceți clic pe butonul Microsoft Office Imagine cu butonul Office , apoi pe Nou.

  2. În panoul din stânga, sub Categorii de șabloane, faceți clic pe Șabloane locale.

  3. Sub Local șabloane, faceți clic pe Northwind 2007și 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 Login

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

  2. În caseta de dialog Afișare tabel faceți clic pe fila Interogări, apoi faceți dublu clic pe Comenzi produs.

  3. Închideți caseta de dialog Afișare tabel.

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

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

  6. În rândul Sortare al coloanei Dată comandă a grilei, selectați Descendent.

  7. Î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.

  8. Î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ă de comandă care este imediat anterioară datei de comandă deja asociată cu rândul. Rețineți să utilizați cuvântul cheie AS pentru a crea un alias tabel, astfel încât să comparați valori din subinterogare cu valori din rândul curent al interogării principale.

  9. Î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 anterioară de comandă pentru acel produs, utilizând valoarea pentru data anterioară pe care am definit-o utilizând o subinterogare.

  1. Pe fila Proiect, în grupul Rezultate, faceți clic pe Execuție.

    Interogarea rulează și afișează o listă de nume de produse, date de comandă, date de comandă anterioare și intervalul dintre datele de comandă. Rezultatele sunt sortate mai întâi după ID produs (în ordine ascendentă), apoi după Dată comandă (în ordine descendentă).

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

  2. Închideți baza de date Northwind.

Începutul paginii

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

Aveți posibilitatea să utilizați o subinterogare ca un criteriu câmp. Utilizați o subinterogare ca un criteriu câmp când doriți să utilizați rezultatele subinterogării pentru a limita valorile afișate de câmp.

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-urile de angajat pentru fiecare comandă cu o listă de ID-uri de angajat pentru angajații care nu sunt reprezentanți de vânzări. Pentru a crea această listă și a o utiliza ca un criteriu de câmp, utilizați o subinterogare, așa cum se arată în următoarea procedură:

  1. Deschideți Northwind 2007.accdb și activați conținutul acesteia.

  2. Închideți formularul Conectare.

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

  4. În caseta de dialog Afișare tabel, pe fila Tabele, faceți dublu clic pe Comenzi și pe Angajați.

  5. Închideți caseta de dialog Afișare tabel.

  6. În tabelul Comenzi, faceți dublu clic pe câmpul ID angajat, pe câmpul ID comandă și pe câmpul Dată comandă pentru a le adăuga la grila de proiectare a interogării. În tabelul Angajați, faceți dublu clic pe câmpul Ocupație pentru a-l adăuga la grila de proiectare.

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

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

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

    Aceasta este subinterogarea. Ea selectează toate ID-urile de angajat unde angajatul nu are ca ocupație Reprezentant de vânzări și furnizează acest set de rezultate interogării principale. Interogarea principală verifică apoi dacă ID-urile de angajat din tabelul Comenzi sunt în setul de rezultate.

  9. Pe fila Proiect, în grupul Rezultate, faceți clic pe Execuție.

    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 într-o subinterogare

Există câteva cuvinte cheie SQL care se pot utiliza într-o subinterogare:

Notă : Această listă nu este exhaustivă. Aveți posibilitatea să utilizați orice cuvânt cheie SQL valid într-o subinterogare, în afară de cuvinte cheie de definiție de date.

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

    De exemplu, să presupunem că analizați date despre elevii de la un colegiu. Elevii trebuie să aibă o medie minimă, care variază după tipul de examen de bacalaureat. Examenele de bacalaureat și mediile lor minime sunt stocate într-un tabel denumit Bacalaureate și informațiile relevante despre elevi sunt stocate într-un tabel denumit Înregistrări_elevi.

    Pentru a vedea o listă de examene de bacalaureat (și mediile lor minime) pentru care fiecare student are nota la examen mai mare decât media minimă, utilizați următoarea interogare:

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

    De exemplu, să presupunem că analizați date despre elevii de la un colegiu. Elevii trebuie să aibă o medie minimă, care variază după tipul de examen de bacalaureat. Examenele de bacalaureat și mediile lor minime sunt stocate într-un tabel denumit Bacalaureate și informațiile relevante despre elevi sunt stocate într-un tabel denumit Înregistrări_elevi.

    Pentru a vedea o listă de examene de bacalaureat (și mediile lor minime) pentru care un student are nota la examen mai mică decât media minimă, utilizați 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, se poate utiliza cuvântul cheie SOME pentru 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 interogare ar trebui să returneze cel puțin un rând. EXISTS poate fi precedat de NOT, pentru a indica faptul că o interogare nu ar trebui 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]);

    Utilizând NOT EXISTS, interogarea returnează o listă de produse care nu se găsesc în niciuna dintre comenzile existente:

    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. IN poate fi precedat de 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 date ale comenzilor) 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, scrieți 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

Notă : Exonerare de răspundere pentru traducere automată: Acest articol a fost tradus de un sistem computerizat, fără intervenție umană. Microsoft oferă aceste traduceri automate pentru a ajuta utilizatorii vorbitori de alte limbi decât engleza să beneficieze de conținutul despre produsele, serviciile și tehnologiile Microsoft. Pentru că articolul a fost tradus de un computer, poate conține erori de vocabular, sintaxă sau gramatică.

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

Au fost utile aceste informații?

Vă mulțumim pentru feedback!

Vă mulțumim pentru feedback! Se pare că ar fi util să luați legătura cu unul dintre agenții noștri de asistență Office.

×