Vaicājuma ligzdošana citā vaicājumā vai izteiksmē, izmantojot apakšvaicājumu

Dažkārt, iespējams, vēlēsities izmantot vaicājuma rezultātu kā lauku citā vaicājumā vai kā kritēriju vaicājuma laukam. Piemēram, pieņemsim, ka vēlaties redzēt intervālu starp pasūtījumiem katram produktam. Lai izveidotu vaicājumu, kas rāda šo intervālu, katram pasūtījuma datumam ir jāsalīdzina ar citiem šī produkta pasūtījumu datumiem. Lai salīdzinātu šos pasūtījumu datumus, ir nepieciešams arī vaicājums. Šo vaicājumu varat ligzdot galvenā vaicājuma iekšējā vaicājumā, izmantojot apakšvaicājums.

Apakšvaicājumu varat uzrakstīt izteiksme vai strukturētā vaicājumu valodas (SQL) priekšrakstā SQL skats.

Šajā rakstā

Kā izmantot vaicājuma rezultātu kā lauku citā vaicājumā

Apakšvaicājumu varat izmantot kā lauka aizstājvārdu. Izmantojiet apakšvaicājumu kā lauka aizstājvārdu, ja vēlaties izmantot apakšvaicājuma rezultātus kā lauku galvenajā vaicājumā.

Piezīme.: Apakšvaicājums, ko izmantojat kā lauka aizstājvārdu, nevar nosūtīt vairāk nekā vienu lauku.

Apakšvaicājuma lauka aizstājvārdu var izmantot, lai rādītu vērtības, kuras ir atkarīgas no citām pašreizējās rindas vērtībām, un to nevar izdarīt, neizmantojot apakšvaicājumu.

Piemēram, ļaujiet mums atgriezties piemēra vietā, kur vēlaties redzēt intervālu starp pasūtījumiem katram no jūsu produktiem. Lai noteiktu šo intervālu, ir jāsalīdzina katrs pasūtījuma datums ar citiem šī produkta pasūtījumu datumiem. Varat izveidot vaicājumu, kas šo informāciju rāda, izmantojot Northwind datu bāzes veidni.

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

  2. Sadaļā pieejamās veidnesnoklikšķiniet uz parauga veidnes.

  3. Noklikšķiniet uz Northwindun pēc tam noklikšķiniet 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 laukā 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ājums. Katrā rindā apakšvaicājums atlasa pēdējo pasūtījuma datumu, kas ir jaunāks par pasūtījuma datumu, kas jau ir saistīts ar šo rindu. Ņemiet vērā, ka, izmantojot kā atslēgvārdu, varat izveidot tabulas aizstājvārdu, lai varētu salīdzināt apakšvaicājuma vērtības ar galvenā vaicājuma pašreizējās rindas vērtībām.

  12. Režģa ceturtajā kolonnā rindā lauks ierakstiet šādu izteiksmi:

    Interval: [Order Date]-[Prior Date]

    Šī izteiksme aprēķina intervālu starp katra pasūtījuma datumu un iepriekšējā pasūtījuma datumu šim produktam, izmantojot iepriekšējā datuma vērtību, kas tika definēta, izmantojot apakšvaicājumu.

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

    1. Vaicājums tiek palaists, un tiek parādīts produktu nosaukumu saraksts, pasūtījumu datumi, iepriekšējie pasūtījumu datumi un intervāls starp pasūtījumu datumiem. Rezultāti tiek kārtoti vispirms pēc produkta ID (augošā secībā) un pēc tam pēc pasūtījuma 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 produktu identifikatorus. Lai gan tas maina parādītās vērtības, tā nemaina kārtošanas secību.

  14. Aizvērtu Northwind datu bāzi.

Uz lapas sākumu

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

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 vērtības.

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

  1. Atveriet Northwind. accdb un iespējojiet tās 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 un darbinieki.

  5. Tabulā pasūtījumi veiciet dubultklikšķi uz lauka Darbinieka ID , lauka pasūtījuma ID un lauka Pasūtījuma datums , lai tos pievienotu vaicājuma noformējuma režģim. Tabulā Employees veiciet dubultklikšķi uz lauka darba nosaukums , 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ājums. Tiek atlasīti visi darbinieku identifikatori, kuros darbiniekam nepieder tirdzniecības pārstāvja amats, un piegādes, kas tiek iestatītas galvenajam vaicājumam. Galvenais vaicājums pēc tam pārbauda, vai tabulas Pasūtījumi darbinieku ID ir rezultātu kopā.

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

    Vaicājums tiek palaists, un vaicājuma rezultāti parāda sarakstu ar pasūtījumiem, kurus apstrādājuši darbinieki, kuri nav tirdzniecības aģenti.

Uz lapas sākumu

Vispārējie SQL atslēgvārdi, ko var izmantot apakšvaicājumā

Ir vairāki SQL atslēgvārdi, kurus var izmantot apakšvaicājumā:

Piezīme.: Šis saraksts nav izsmeļošs. Apakšvaicājumā varat izmantot jebkuru derīgu SQL atslēgvārdu, neiekļaujot datu definēšanas atslēgvārdus.

  • VISAS    Izmantojiet visi klauzulā WHERE, lai izgūtu rindas, kas atbilst nosacījumam, salīdzinot ar katru apakšvaicājuma atgriezto rindu.

    Piemēram, iedomāsimies, ka jūs analizējat studentu datus koledžā. Skolēniem ir jāuztur minimālā GPA, kas atšķiras no galvenajiem uz galvenajiem. Galvenās un to minimālās GPAs tiek glabātas tabulā ar nosaukumu lielākie, un attiecīgā informācija par studentiem tiek glabāta tabulā, kas tiek dēvēta par Student_Records.

    Lai skatītu sarakstu ar primārajiem (un to minimālajiem GPAs), kuriem katram skolēnam ar šo lielāko daļu ir lielāks nekā Minimālais 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]);
  • JEBKURU    Izmantojiet klauzulu WHERE, lai izgūtu rindas, kas atbilst nosacījumam, salīdzinot ar vismaz vienu no apakšvaicājuma atgrieztajām rindām.

    Piemēram, iedomāsimies, ka jūs analizējat studentu datus koledžā. Skolēniem ir jāuztur minimālā GPA, kas atšķiras no galvenajiem uz galvenajiem. Galvenās un to minimālās GPAs tiek glabātas tabulā ar nosaukumu lielākie, un attiecīgā informācija par studentiem tiek glabāta tabulā, kas tiek dēvēta par Student_Records.

    Lai skatītu sarakstu ar primārajiem (un to minimālajiem GPAs), kuros kāds no šiem galvenajiem skolēniem neatbilst minimālajai 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 daži tam pašam nolūkam; atslēgvārds SOME ir sinonīms.

  • EXISTS     Izmantojiet pastāv klauzulā WHERE, lai norādītu, ka Apakšvaicājumam ir jāatgriež vismaz viena rinda. Varat arī izveidoties ar NOT, lai norādītu, ka apakšvaicājums neatgriezīs nevienu rindu.

    Piemēram, tālāk sniegtais vaicājums atgriež sarakstu ar produktiem, kas atrodami vismaz vienā no esošajiem pasūtījumiem:

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

    Izmantojot NOT, vaicājums atgriež sarakstu ar produktiem, kas nav atrodami vismaz vienā no esošajiem pasūtījumiem:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • IN    Izmantojiet klauzulā WHERE, lai pārbaudītu, vai galvenā vaicājuma pašreizējā rindā esošā vērtība ir daļa no apakšvaicājuma atgrieztās kopas. Varat arī veikt darbības ar NOT, lai pārliecinātos, vai vērtība pašreizējā vaicājuma rindā nav daļa no kopas, ko atgriež apakšvaicājums.

    Piemēram, tālāk sniegtais vaicājums atgriež sarakstu ar pasūtījumiem (ar pasūtījumu datumiem), kurus apstrādājuši darbinieki, kuri nav tirdzniecības aģenti.

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

    Izmantojot NOT IN, to pašu vaicājumu varēja uzrakstīt šā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

Vai nepieciešama papildu palīdzība?

Paplašiniet savas Office prasmes
Iepazīties ar apmācību
Esiet pirmais, kas saņem jaunās iespējas
Pievienoties Office Insider programmai

Vai šī informācija bija noderīga?

Paldies par jūsu atsauksmēm!

Paldies par atsauksmēm! Šķiet, ka jums varētu būt noderīgi sazināties ar kādu no mūsu Office atbalsta speciālistiem.

×