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

Svarīgi! :  Šis raksts ir mašīntulkots, skatiet atrunu. Lūdzu, skatiet šī raksta versiju angļu valodā šeit jūsu informācijai.

Dažreiz, iespējams, vēlēsities izmantot vaicājuma rezultātus kā lauku citā vaicājumā vai kā kritēriju vaicājuma laukā. Piemēram, pieņemism, ka katram produktam vēlaties skatīt intervālu starp pasūtījumiem. Lai izveidotu vaicājumu, kurā tiek parādīts šis intervēls, ir jāsalīdzina katra pasūtījuma datums ar pārējiem šī produkta pasūtījumu datumiem. Arī šo datumu salīdzināšanai ir nepieciešams vaicājums. Šo vaicājumu varat ligzdod galvenajā vaicājumā, izmantojot apakšvaicājums.

Apakšvaicājumu var ierakstīt izteiksme vai strukturētas vaicājuma valodas (SQL) priekšrakstā SQL skats.

Šajā rakstā

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

Kā izmantot apakšvaicāijumu kā kritēriju vaicājuma laukam

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

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

Apakšvaicājumu var 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 atgriezt vairāk kā vienu lauku.

Apakšvaicājuma lauka aizstājvārdu var izmantot, lai parādītu vērtības, kuras ir atkarīgas no citām pašreizējās rindas, kas nav iespējams, neizmantojot apakšvaicājumu vērtībām. Piemēram, dariet mums atgriezties piemēra vietā, kur vēlaties redzēt intervālu starp katras produktu pasūtījumi. Lai noteiktu šo intervālu, jums ir salīdzināt katra pasūtījuma datumu citas pasūtījuma datumu šim produktam. Varat izveidot vaicājumu, kas parāda šo informāciju, izmantojot veidni Northwind 2007.

Kā iestatīt Northwind 2007

  1. Noklikšķiniet uz Microsoft Office pogas pogas attēls un tad noklikšķiniet uz Jauns.

  2. Kreisās rūts sadaļā Veidņu kategorijasnoklikšķiniet uz Vietējo veidnes.

  3. Sadaļā Lokālā veidnesnoklikšķiniet uz Northwind 2007un pēc tam noklikšķiniet uz izveidot.

  4. Lai atvērtu datu bāzi, izpildiet Northwind Traders lapā (objekta cilnē Startēšanas ekrāns) redzamos norādījumus un pēc tam aizveriet logu Pieteikšanās dialogs.

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

  2. Dialoglodziņā Tabulas rādīšana noklikšķiniet uz cilnes Vaicājumi un pēc tam veiciet dubultklikšķi uz Produktu pasūtījumi.

  3. Aizveriet dialoglodziņu Tabulas rādīšana.

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

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

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

  7. Režģa trešajā kolonna veiciet dubultklikšķi uz rindas Lauks un pēc tam īsinājumizvēlnē noklikšķiniet uz Tālummaiņa.

  8. Dialoglodziņā Tālummaiņa ierakstiet vai ielīmējiet tālāk norādīto 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. Katrai rindai apakšvaicājums atlasa visjaunāko pasūtījuma datumu, kas ir jaunāks nekā pasūtījuma datums, kas jau ir saistīts ar šo rindu. Piefiksējiet, kā tabulas aizstājvārda izveidei tiek izmantots atslēgvārds AS, lai jūs varētu salīdzināt apakšvaicājuma vērtības ar galvenā vaicājuma pašreizējās rindas vērtībām.

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

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

    Šis vaicājums palaiž un parāda sarakstu ar produktu nosaukumiem, pasūtījumu datumiem, iepriekšējo pasūtījumu datumiem un intervālu starp pastūtījumu datumiem. Rezultāti tiek sakārtoti pēc produkta ID (augošā secībā) un pēc tam pēc pasūtījuma datuma (dilstošā secībā).

    Piezīme : Tākā Produkta ID ir uzmeklēšanas lauks, pēc noklusējuma sadaļā Piekļuve tiek parādītas uzmeklēšanas vērtības (šajā gadījumā — produkta nosaukums), nevis faktiskie Produkta ID. Lai gan tādējādi tiek mainītas parādītās vērtības, tas nemaina kārtošanas secību.

  2. Aizveriet Northwind datu bāzi.

Uz lapas sākumu

Kā izmantot apakšvaicāijumu kā kritēriju vaicājuma laukam

Apakšvaicājumu var izmantot kā 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 pasūtījumu sarakstu, ko apstrādājuši darbinieki, kas nav tirdzniecības aģenti. Lai ģenerētu šo sarakstu, katram pasūtījumam jāsalīdzina darbinieka ID ar darbinieku ID sarakstu tiem darbiniekiem, kuri nav tirdzniecības aģenti. Lai izveidotu šādu sarakstu un izmantotu to kā lauka kritēriju, izmantojiet apakšvaicājumu, kā redzams tālāk norādītajā procedūrā.

  1. Atveriet Northwind 2007.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. Dialoglodziņa Tabulas rādīšana cilnē Tabulas veiciet dubultklikšķi uz Pasūtījumi un Darbinieki.

  5. Aizveriet dialoglodziņu Tabulas rādīšana.

  6. Pasūtījumu tabulā veiciet dubultklikšķi uz lauka Darbinieka ID, uz lauka Pasūtījuma ID un uz lauka Pasūtījuma datums, lai pievienotu tos vaicājuma noformējuma režģim. Darbinieku tabulā veiciet dubultklikšķi uz lauka Amats, lai pievienotu to noformējuma režģim.

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

  8. Lodziņā Tālummaiņa ierakstiet vai ielīmējiet tālāk norādīto izteiksmi:

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

    Šis ir apakšvaicājums. Tas atlasa visus darbinieku ID, kuriem darbinieka amats nav tirdzniecības aģents, un piegādā šo rezultātu kopu uz galveno vaicājumu. Pēc tam galvenais vaicājums pārbaude, vai darbinieku ID no pasūtījumu tabulas ietilpst šajā rezultātu kopā.

  9. 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šie darbinieki 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 visaptverošs. Apakšvaicājumā varat izmantot jebkuru derīgo SQL atslēgvārdu, izņemot datu definīijas atslēgvārdus.

  • ALL    Izmantojiet ALL teikumā WHERE, lai izgūtu rindas, kas atbilst nosacījuma, kad tiek veikts salīdzinājums ar katru apakšvaicājuma atgriezto rindu.

    Piemēram, pieņemsim, ka analizējat studentu datus koledžā. Studentiem ir jāsaņem noteikta minimālā vidējā atzīme, kas dažādiem priekšmetiem var atšķirties. Mācību priekšmeti un to minimālās vidējās atzīmes tiek saglabātas cilnē ar nosaukumu Mācību priekšmeti, bet attiecīgā studentu informācija tiek saglabāta cilnē Studentu_ieraksti.

    Lai skatītu priekšmetu sarakstu (un to minimālās vidējās atzīmes) kuriem katram šī priekšmeta studentm ir pārsniegta minimālā vidējā atzīme, 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    Izmantojiet atslēgvārdu ANY teikumā WHERE, lai izgūtu rindas, kas atbilst nosacījumam, kad tiek veikts salīdzinājums vismaz ar vienu apakšvaicājuma atgiezto rindu.

    Piemēram, pieņemsim, ka analizējat studentu datus koledžā. Studentiem ir jāsaņem noteikta minimālā vidējā atzīme, kas dažādiem priekšmetiem var atšķirties. Mācību priekšmeti un to minimālās vidējās atzīmes tiek saglabātas cilnē ar nosaukumu Mācību priekšmeti, bet attiecīgā studentu informācija tiek saglabāta cilnē Studentu_ieraksti.

    Lai skatītu priekšmetu sarakstu (un to minimālās vidējās atzīmes), kuros kāds šī priekšmeta students nav saņēmis minimālo vidējo atzīme, 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 : Tam pašam nolūkam var izmantot arī atslēgvārdu SOME; atslēgvārds SOME ir sinonīms atslēgvārdam ANY.

  • EXISTS    Izmantojiet atlsēgvārdu EXISTS teikumā WHERE, lai norādītu, ka apakšvaicājumam ir jāatgriež vismaz viena rinda. Atslēgvārdam EXISTS varat arī pievienot prefiksu NOT, lai norādītu, ka apakšvaicājumam nav jāatgriež neviena rinda.

    Piemēram, tālāk norādītais 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 EXISTS, vaicājums atgriež sarakstu ar produktiem, kas nav atrodami vismaz vienā esošajā pasūtījumā:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • IN    Izmantojiet atslēgvārdu IN teikumā WHERE, lai pārbaudītu, vai galvenā vaicājuma pašreizējās rindas vērtība ir tās kopas daļa, kuru atgriezis apakšvaicājums. Atslēgvārdam IN varat arī pievienot prefiksu NOT, lai pārliecinātos, ka galvenā vaicājuma pašreizējās rindas vērtība nav kopas daļa, kuru atgriezis apakšvaicājums.

    Piemēram, tālāk norādītais vaicājums atgriež sarakstu ar pasūtījumiem (ar pasūtījumu datumiem), kurus apstrādājuši darbinieki, kuru amats nav tirdzniecības aģents:

    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 šād:

    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

Piezīme : Mašīntulkošanas atruna. Šo rakstu ir tulkojusi datorsistēma bez cilvēka iejaukšanās. Microsoft piedāvā šos mašīntulkojumus, lai palīdzētu angliski nerunājošajiem lietotājiem izmanot saturu par Microsoft produktiem, pakalpojumiem un tehnoloģijām. Tā kā šis raksts ir mašīntulkots, tajā var būt leksikas, sintakses un gramatikas kļūdas.

Paplašiniet savas 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 varētu būt noderīgi sazināties ar kādu no mūsu Office atbalsta aģentiem.

×