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

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ārds (SQL). 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 vērtībām, un to nevar izdarīt, neizmantojot apakšvaicājumu.

Atgriezīsimies pie piemēra, kurā vēlaties skatīt intervālu starp katra produkta pasūtījumiem. Lai noteiktu šo intervālu, katra pasūtījuma datums ir jāsalīdzina ar pārējo šī produkta pasūtījumu datumiem. Varat izveidot vaicājumu, kurā ir parādīta šī informācija, izmantojot Northwind datu bāzes veidni.

Kā iestatīt Northwind

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

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

  3. Noklikšķiniet uz Northwind un 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.

  1. Cilnē Izveidot, kas atrodas grupā Vaicājumi, noklikšķiniet uz Vaicājuma noformējums.

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

  3. Aizveriet dialoglodziņu Rādīt tabulu.

  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:

    Iepriekšējais datums: (SELECT MAX([Pasūtījuma datums]) 
    FROM [Produktu pasūtījumi] AS [Vecie pasūtījumi]
    WHERE [Old Orders].[Order Date] < [Produktu pasūtījumi].[Pasūtījuma datums]
    AND [Vecie pasūtījumi].[Produkta ID] = [Produktu pasūtījumi].[Produkta 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.

  1. Režģa ceturtajā kolonnā rindā Lauks ierakstiet šādu izteiksmi:

    Intervāls: [Pasūtījuma datums]-[Iepriekšējais datums]

Šī 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 Palaist.

    1. Š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ā).

    2. 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ēriji. 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 ir jāsalīdzina darbinieka ID ar darbinieku ID sarakstu tiem darbiniekiem, kuri nav tirdzniecības aģenti. Lai izveidtou šādu sarakstu un izmantotu to kā lauka kritēriju, ir jāizmanto apakšvaicājums, 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ā Citi noklikšķiniet Vaicājuma noformējums.

  4. Dialoglodziņa Rādīt tabulu cilnē Tabulas veiciet dubultklikšķi uz Pasūtījumi un Darbinieki.

  5. Aizveriet dialoglodziņu Rādīt tabulu.

  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 [Darbinieki] 
    WHERE [Amats]<>'Tirdzniecības aģents')

    Š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 Palaist.

    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 [Mācību priekšmets], [Min_ATZ] 
FROM [Mācību priekšmeti]
WHERE [Min_ATZ] < ALL
(SELECT [ATZ] FROM [Studentu_ieraksti]
WHERE [Studentu_ieraksti].[Mācību priekšmets]=[Mācību priekšmeti].[Mācību priekšmets]);
  • 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 [Mācību priekšmets], [Min_ATZ] 
    FROM [Mācību priekšmeti]
    WHERE [Min_ATZ] > ANY
    (SELECT [ATZ] FROM [Studentu_ieraksti]
    WHERE [Studentu_ieraksti].[Mācību priekšmets]=[Mācību priekšmeti].[Mācību priekšmets]);

    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 [Produkti]
    WHERE EXISTS
    (SELECT * FROM [Pasūtījumu informācija]
    WHERE [Pasūtījumu informācija].[Produkta ID]=[Produkti].[ID]);

    Izmantojot NOT EXISTS, vaicājums atgriež sarakstu ar produktiem, kas nav atrodami vismaz vienā esošajā pasūtījumā:

    SELECT *
    FROM [Produkti]
    WHERE NOT EXISTS
    (SELECT * FROM [Pasūtījumu informācija]
    WHERE [Pasūtījumu informācija].[Produkta ID]=[Produkti].[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 [Pasūtījuma ID], [Pasūtījuma datums]
    FROM [Pasūtījumi]
    WHERE [Darbinieka ID] IN
    (SELECT [ID] FROM [Darbinieki]
    WHERE [Amats]<>'Pārdošanas aģents');

    Izmantojot NOT IN, to pašu vaicājumu varēja uzrakstīt šād:

    SELECT [Pasūtījuma ID], [Pasūtījuma datums]
    FROM [Pasūtījumi]
    WHERE [Darbinieka ID] NOT IN
    (SELECT [ID] FROM [Darbinieki]
    WHERE [Amats]='Pārdošanas aģents');

Uz lapas sākumu

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.

×