Pierakstīties, izmantojot Microsoft
Pierakstīties vai izveidot kontu
Sveicināti!
Atlasīt citu kontu.
Jums ir vairāki konti
Izvēlieties kontu, ar kuru vēlaties pierakstīties.

Dažkārt var būt nepieciešams izmantot vaicājuma rezultātus kā lauku citā vaicājumā vai kā kritēriju vaicājuma laukam. Piemēram, pieņemsim, ka vēlaties skatīt intervālu starp pasūtījumiem katram jūsu produktiem. Lai izveidotu vaicājumu, kurā redzams šis intervāls, katram pasūtījuma datumam ir jāsalīdzina citi šī produkta pasūtījuma datumi. Lai salīdzinātu šos secību datumus, nepieciešams arī vaicājums. Šo vaicājumu var ligzdot galvenajā vaicājumā, izmantojot apakšvaicājums.

Varat uzrakstīt apakšvaicājumu vaicājumā izteiksme strukturētās vaicājumvalodas (SQL) priekšrakstā programmā SQL skats.

Šajā rakstā

Vaicājuma rezultātu izmantošana par lauku citā vaicājumā

Apakšvaicājumu varat izmantot kā lauka aizstājvārdu. Izmantojiet apakšvaicājumu kā lauka aizstājvārdu, lai izmantotu apakšvaicājuma rezultātus kā lauku galvenajā vaicājumā.

Piezīme.: Apakšvaicājumu, kas tiek izmantots kā lauka aizstājvārds, nevar atgriezt vairāk par vienu lauku.

Varat izmantot apakšvaicājuma lauka aizstājvārdu, lai parādītu vērtības, kas ir atkarīgas no citām vērtībām pašreizējā rindā, kas nav iespējams, neizmantojot apakšvaicājumu.

Piemēram, atgriezīsim piemēru, kurā vēlaties skatīt intervālu starp pasūtījumiem katram jūsu produktiem. Lai noteiktu šo intervālu, katrs pasūtījuma datums ir jāsalīdzina ar citiem šī produkta pasūtījuma datumiem. Var izveidot vaicājumu, kas parāda šo informāciju, izmantojot datu bāzes veidni Northwind.

  1. Cilnē Fails noklikšķiniet uz Jauns.

  2. Sadaļā Pieejamās veidnes noklikšķiniet uz Paraugu veidnes.

  3. Noklikšķiniet uz Northwind un pēc tam uz Izveidot.

  4. Izpildiet norādījumus lapā Northwind Traders (objekta cilnē Sākuma ekrāns), lai atvērtu datu bāzi, pēc tam aizveriet pieteikšanās dialoglodziņu.

  5. Cilnes Izveide grupā Vaicājumi noklikšķiniet uz Vaicājuma noformējums.

  6. Noklikšķiniet uz cilnes Vaicājumi un pēc tam veiciet dubultklikšķi uz Produktu pasūtījumi.

  7. Veiciet dubultklikšķi uz lauka Produkta ID un Pasūtījuma datums , lai tos pievienotu vaicājuma noformējuma režģim.

  8. Režģa kolonnas Produkta ID rindā Kārtot atlasiet Augošā secībā.

  9. Režģa kolonnas Pasūtījuma datums rindā Kārtot atlasiet Dilstošā secībā.

  10. Režģa trešajā kolonnā ar peles labo pogu noklikšķiniet uz rindas Lauks un pēc tam īsinājumizvēlnē noklikšķiniet uz Tālummaiņa.

  11. Dialoglodziņā Tālummaiņa ierakstiet vai ielīmējiet šādu izteiksmi:

    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])

    Šī izteiksme ir apakšvaicāšana. Katrai rindai apakšvaicātājs atlasa pēdējo pasūtījuma datumu, kas ir mazāks par pasūtījuma datumu, kas jau ir saistīts ar rindu. Ievērojiet, kā izmantojat atslēgvārdu AS, lai izveidotu tabulas aizstājvārdu un varētu salīdzināt apakšvaicājuma vērtības ar vērtībām galvenā vaicājuma pašreizējā rindā.

  12. Režģa ceturtās kolonnas rindā Lauks ierakstiet šādu izteiksmi:

    Interval: [Order Date]-[Prior Date]

    Šajā izteiksmē tiek aprēķināts intervāls starp katru pasūtījuma datumu un šī produkta iepriekšējās pasūtījuma datumu, izmantojot vērtību iepriekšējam datumam, ko definējām, izmantojot apakšvaicājumu.

  13. Cilnes Noformējums grupā Rezultāti noklikšķiniet uz Izpildīt.

    1. Vaicājums tiek palaists un parādīts produktu nosaukumu saraksts, pasūtījuma datumi, iepriekšējo pasūtījumu datumi un intervāls starp pasūtījuma datumiem. Rezultāti vispirms tiek kārtoti pēc produkta ID (augošā secībā) un pēc tam pēc secības datuma (dilstošā secībā).

    2. Piezīme.: Tā kā produkta ID ir uzmeklēšanas lauks, pēc noklusējuma programma Access parāda uzmeklēšanas vērtības (šajā gadījumā produkta nosaukumu), nevis faktiskos produkta ID. Lai gan tas maina parādītās vērtības, tā nemaina kārtošanas secību.

  14. Aizveriet Northwind datu bāzi.

Uz lapas sākumu

Apakšvaicājuma izmantošana par kritēriju vaicājuma laukam

Apakšvaicājumu varat izmantot kā lauka kritēriju. Izmantojiet apakšvaicājumu kā lauka kritēriju, ja vēlaties izmantot apakšvaicājuma rezultātus, lai ierobežotu lauka parādītās vērtības.

Piemēram, pieņemsim, ka vēlaties pārskatīt to pasūtījumu sarakstu, kurus apstrādā darbinieki, kuri nav tirdzniecības pārstāvji. Lai ģenerētu šo sarakstu, ir jāsalīdzina darbinieka ID katram pasūtījumam ar darbinieku ID sarakstu darbiniekiem, kuri nav tirdzniecības pārstāvji. Lai izveidotu šo sarakstu un izmantotu to kā lauka kritēriju, izmantojiet apakšvaicājumu, kā parādīts tālāk:

  1. Atveriet Northwind.accdb un iespējojiet tā saturu.

  2. Aizveriet pieteikšanās formu.

  3. Cilnes Izveidot grupā Cits noklikšķiniet uz Vaicājuma noformējums.

  4. Cilnē Tabulas veiciet dubultklikšķi uz Pasūtījumi unDarbinieki.

  5. Tabulā Pasūtījumi veiciet dubultklikšķi uz lauka Darbinieka ID, lauka Pasūtījuma ID un Lauka Pasūtījuma datums, lai to pievienotu vaicājuma noformējuma režģim. Tabulā Darbinieki veiciet dubultklikšķi uz lauka Amats , lai to pievienotu noformējuma režģim.

  6. Ar peles labo pogu noklikšķiniet uz kolonnas Darbinieka ID rindas Kritēriji un pēc tam īsinājumizvēlnē noklikšķiniet uz Tālummaiņa.

  7. Lodziņā Tālummaiņa ierakstiet vai ielīmējiet šādu izteiksmi:

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

    Šis ir apakšvaicājumu. Tas atlasa visus darbinieku ID, kur darbiniekam nav tirdzniecības pārstāvja amata, un nodrošina šo rezultātu kopu galvenajam vaicājumam. Pēc tam galvenais vaicājums pārbauda, vai darbinieku ID no tabulas Pasūtījumi ir rezultātu kopā.

  8. Cilnes Noformējums grupā Rezultāti noklikšķiniet uz Izpildīt.

    Tiek izpildīts vaicājums, un vaicājuma rezultātos tiek rādīts to pasūtījumu saraksts, kurus apstrādāja darbinieki, kuri nav tirdzniecības pārstāvji.

Uz lapas sākumu

Bieži lietoti SQL atslēgvārdi, ko var izmantot ar apakšvaicājumu

Pastāv vairāki SQL atslēgvārdi, ko var izmantot ar apakšvaicājumu:

Piezīme.: Šis saraksts nav visaptverošs. Apakšvaicājumam varat izmantot jebkuru derīgu SQL atslēgvārdu, izņemot datu definīcijas atslēgvārdus.

  • ALL    Klauzulā WHERE izmantojiet ALL, lai izgūtu rindas, kas atbilst nosacījumam salīdzinājumā ar katru apakšvaicājuma atgriezto rindu.

    Piemēram, pieņemsim, ka analizējot skolēnu datus augstskolā. Skolēniem ir jāuztur minimālais GPA, kas ir atkarīgs no nozīmīgiem. Majors un to minimālie GPAs tiek glabāti tabulā ar nosaukumu Majors, un atbilstošā informācija par studentiem tiek glabāta tabulā ar nosaukumu Student_Records.

    Lai skatītu lielāko studentu sarakstu (un viņu minimālo GPAs), kuriem katrs skolēns ar šo galveno pakalpojumu pārsniedz minimālo GPA, varat izmantot šādu vaicājumu:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • ANY    Klauzulā WHERE izmantojiet ANY, lai izgūtu rindas, kas atbilst nosacījumam, salīdzinājumā ar vismaz vienu no apakšvaicājuma atgrieztajām rindām.

    Piemēram, pieņemsim, ka analizējot skolēnu datus augstskolā. Skolēniem ir jāuztur minimālais GPA, kas ir atkarīgs no nozīmīgiem. Majors un to minimālie GPAs tiek glabāti tabulā ar nosaukumu Majors, un atbilstošā informācija par studentiem tiek glabāta tabulā ar nosaukumu Student_Records.

    Lai skatītu lielāko studentu sarakstu (un viņu minimālo GPAs), kuriem jebkurš skolēns ar šo galveno studentu neatbilst minimālajam GPA, varat izmantot šādu vaicājumu:

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

    Piezīme.: Varat arī izmantot atslēgvārdu SOME tam pašam nolūkam. Atslēgvārds SOME ir sinonīms ar ANY.

  • EXISTS     Klauzulā WHERE izmantojiet EXISTS, lai norādītu, ka apakšvaicājumam jāatgriež vismaz viena rinda. Varat arī preface EXISTS ar NOT, lai norādītu, ka apakšvaicājumam nevajadzētu atgriezt nevienu rindu.

    Piemēram, šis vaicājums atgriež produktu sarakstu, kas atrodas vismaz vienā esošā secībā:

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

    Izmantojot NOT EXISTS, vaicājums atgriež produktu sarakstu, kuri nav atrodami vismaz vienā esošā secībā:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • IN    Klauzulā WHERE izmantojiet IN, lai pārbaudītu, vai vērtība pašreizējā galvenā vaicājuma rindā ir daļa no kopas, kuru atgriež apakšvaicājums. Varat arī izveidot savienojumu IN ar NOT, lai pārbaudītu, vai vērtība pašreizējā galvenā vaicājuma rindā nav daļa no kopas, kuru atgriež apakšvaicājums.

    Piemēram, tālāk redzamais vaicājums atgriež to pasūtījumu sarakstu (ar pasūtījuma datumiem), kurus apstrādā darbinieki, kuri nav tirdzniecības pārstāvji:

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

    Izmantojot NOT IN, var rakstīt to pašu vaicājumu šādi:

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

Uz lapas sākumu

Nepieciešama papildu palīdzība?

Vēlaties vairāk opciju?

Izpētiet abonementa priekšrocības, pārlūkojiet apmācības kursus, uzziniet, kā aizsargāt ierīci un veikt citas darbības.

Kopienas palīdz uzdot jautājumus un atbildēt uz tiem, sniegt atsauksmes, kā arī saņemt informāciju no ekspertiem ar bagātīgām zināšanām.

Vai šī informācija bija noderīga?

Cik lielā mērā esat apmierināts ar valodas kvalitāti?
Kas ietekmēja jūsu pieredzi?
Nospiežot Iesniegt, jūsu atsauksmes tiks izmantotas Microsoft produktu un pakalpojumu uzlabošanai. Jūsu IT administrators varēs vākt šos datus. Paziņojums par konfidencialitāti.

Paldies par jūsu atsauksmēm!

×