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

Apakšvaicājumu var ierakstīt <token>TE000127167</token> vai strukturētas vaicājuma valodas (SQL) priekšrakstā <token>TE000126761</token>.

Šajā rakstā

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm1">Izmantot vaicājuma rezultātu kā lauku citā vaicājumā</link>

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm2">IZmantot apakšvaicāijumu kā kritēriju vaicājuma laukam</link>

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm3">Vispārējie SQL atslēgvārdi, ko var izmantot apakšvaicājumā</link>

Izmantojiet vaicājuma rezultātu kā lauku citā vaicājumā

Apakšvaicājumu var izmantot kā lauka aizstājējvārdu. Izmantojiet apakšvaicājumu kā lauka aizstājē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.

  1. Cilnē <ui>Fails</ui> noklikšķiniet uz <ui>Jauns</ui>.

  2. Sadaļā <ui>Pieejamās veidnes</ui> noklikšķiniet <ui>Parauga veidnes</ui>.

  3. Noklikšķiniet uz <ui>Northwind</ui> un pēc tam noklikšķiniet uz <ui>Izveidot</ui>.

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

  5. Cilnē <ui>Izveidot</ui>, kas atrodas grupā <ui>Vaicājumi</ui>, noklikšķiniet uz <ui>Vaicājuma noformējums</ui>.

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

  7. Aizveriet dialoglodziņu <ui>Tabulas rādīšana</ui>.

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

  9. Režģa kolonnas <ui>Produkta ID</ui> rindā <ui>Kārtot</ui> atlasiet <ui>Augošā secībā</ui>.

  10. Režģa kolonnas <ui>Pasūtījuma datums</ui> rindā <ui>Kārtot</ui> atlasiet <ui>Dilstošā secībā</ui>.

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

  12. Dialoglodziņā <ui>Tālummaiņa</ui> 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.

  13. Režģa ceturtajā kolonnā rindā <ui>Lauks</ui> ierakstiet šādu izteiksmi:

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

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

  14. Cilnes <ui>Noformējums</ui> sadaļā <ui>Rezultāti</ui> noklikšķiniet uz <ui>Izpildīt</ui>.

    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.

  15. Aizveriet Northwind datu bāzi.

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">Uz lapas sākumu</link>

Izmantojiet apakšvaicāijumu kā kritēriju vaicājuma laukam

Apakšvaicājumu var 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 pasūtījumu sarakstu, ko apstrādājuši darbinieki, kas <legacyItalic>nav</legacyItalic> 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 datu bāzi un iespējojiet tās saturu.

  2. Aizveriet pieteikšanās formu.

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

  4. Dialoglodziņa <ui>Tabulas rādīšana</ui> cilnē <ui>Tabulas</ui> veiciet dubultklikšķi uz <ui>Pasūtījumi</ui> un <ui>Darbinieki</ui>.

  5. Aizveriet dialoglodziņu <ui>Tabulas rādīšana</ui>.

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

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

  8. Lodziņā <ui>Tālummaiņa</ui> 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 <ui>Noformējums</ui> grupā <ui>Rezultāti</ui> noklikšķiniet uz <ui>Izpildīt</ui>.

    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.

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">Uz lapas sākumu</link>

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.

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

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

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">Uz lapas sākumu</link>

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

×