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

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 <token>TE000126768</token>.

Aveți posibilitatea să scrieți o subinterogare într-o <token>TE000127167</token> sau într-o instrucțiune SQL (Limbaj de interogare structurat) în <token>TE000126761</token>.

În acest articol

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm1">Utilizarea rezultatelor unei interogări drept câmp într-o altă interogare</link>

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm2">Utilizarea unei subinterogări ca  criteriu pentru un câmp de interogare</link>

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm3">Cuvinte cheie uzuale din SQL care se pot utiliza într-o subinterogare</link>

Utilizarea rezultatelor unei interogări drept câmp într-o altă interogare

Aveți posibilitatea să utilizați o subinterogare ca un alias pentru câmp. Utilizați o subinterogare ca un alias pentru câmp, când doriți să utilizați rezultatele subinterogării ca câmp în interogarea principală.

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

Aveți posibilitatea să utilizați un alias 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, să revenim la exemplul în care doriți să vedeți intervalul dintre comenzi pentru fiecare produs. Pentru a determina acest interval, trebuie să comparați fiecare dată de comandă cu alte date de comandă pentru acel produs. Aveți posibilitatea să creați o interogare care să afișeze aceste informații utilizând șablonul de bază de date Northwind.

  1. Pe fila <ui>Fișier</ui>, faceți clic pe <ui>Nou</ui>.

  2. Sub <ui>Șabloane disponibile</ui>, faceți clic pe <ui>Șabloane eșantion</ui>.

  3. Faceți clic pe <ui>Northwind</ui>, apoi pe <ui>Creare</ui>.

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

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

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

  7. Închideți caseta de dialog <ui>Afișare tabel</ui>.

  8. Faceți dublu clic pe câmpul <ui>ID produs</ui> și pe câmpul <ui>Data comenzii</ui> pentru a le adăuga la grila de proiectare a interogării.

  9. În rândul <ui>Sortare</ui> al coloanei <ui>ID produs</ui> a grilei, selectați <ui>Ascendent</ui>.

  10. În rândul <ui>Sortare</ui> al coloanei <ui>Data comenzii</ui> a grilei, selectați <ui>Descendent</ui>.

  11. În a treia coloană a grilei, faceți clic cu butonul din dreapta pe rândul <ui>Câmp</ui>, apoi faceți clic pe <ui>Zoom</ui> în meniul de comenzi rapide.

  12. În caseta de dialog <ui>Zoom</ui>, 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.

  13. În a patra coloană a grilei, în rândul <ui>Câmp</ui>, tastați următoarea expresie:

    <codeInline>Interval: [Order Date]-[Prior Date]</codeInline>

    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.<br />

  14. În fila <ui>Proiectare</ui>, în grupul <ui>Rezultate</ui>, faceți clic pe <ui>Rulare</ui>.

    1. 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ă Data comenzii (în ordine descendentă).

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

  15. Închideți baza de date Northwind.

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">Începutul paginii</link>

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

Aveți posibilitatea să utilizați o subinterogare drept câmp de clasificare. Folosiți o subinterogare ca un câmp de clasificare 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 <legacyItalic>nu</legacyItalic> 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 baza de date Northwind.accdb și activați conținutul acesteia.

  2. Închideți formularul Conectare.

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

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

  5. Închideți caseta de dialog <ui>Afișare tabel</ui>.

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

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

  8. În caseta <ui>Zoom</ui>, 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. În fila <ui>Proiectare</ui>, în grupul <ui>Rezultate</ui>, faceți clic pe <ui>Rulare</ui>.

    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.

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">Începutul paginii</link>

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.

  • <embeddedLabel>ALL</embeddedLabel> 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]);
  • <embeddedLabel>ANY</embeddedLabel> 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.

  • <embeddedLabel>EXISTS</embeddedLabel> 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]);
  • <embeddedLabel>IN</embeddedLabel> 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');

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">Începutul paginii</link>

Extindeți-vă competențele Office
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.

×