Ierakstu ievietošana, dzēšana, atjaunināšana datu bāzē. Kā nosūtīt vaicājumu datu bāzei, izmantojot VBA Access SQL vaicājumu izveide piekļuves vārda sakrājos

Laboratorijas darbs Nr.1

SQL: DATA EXTRACT - komandaATLASĪT

Darba mērķis:

  • iepazīties ar SQL priekšrakstiem;
  • iemācīties izveidot vienkāršus SQL vaicājumus programmā Access, izmantojot komandu SELECT;

· operatoru IN, BETWEEN, LIKE izmantošana IS NULL.

Vingrinājums№1. Izveidojiet vaicājumu, lai SQL režīmā atlasītu visas lauku PIRMVĀRDS un UZVĀRDS vērtības no tabulas STUDENTI.

IZVĒLĒTIES VĀRDS, UZVĀRDS

NO STUDENTIEM;

Vingrinājums№2 . Izveidojiet vaicājumu, lai SQL režīmā atlasītu visas tabulas STUDENTI kolonnas.

ATLASĪT*

NO STUDENTIEM;


Uzdevums Nr.3. Izveidojiet vaicājumu, lai SQL režīmā atlasītu studentu dzīvesvietu pilsētu nosaukumus, par kurām informācija ir tabulā PERSONAS DATI.

IZVĒLIES ATŠĶIRĪGU PILSĒTU

NO [PERSONAS DATIEM];

Uzdevums Nr.4. Izveidojiet atlases vaicājumu SQL režīmā, kas izgūst visu skolēnu vārdus ar uzvārdu Ivanovs, informācija par to ir tabulā SKOLĒNI.

IZVĒLĒTIES UZVĀRDS, VĀRDS

NO STUDENTIEM

KUR UZVĀRDS = "Ivanovs";

Uzdevums Nr.5. Izveidojiet atlases vaicājumu SQL režīmā, lai iegūtu to studentu vārdus un uzvārdus, kuri studē UIT-22 grupā budžeta izglītības formā.

IZVĒLĒTIES UZVĀRDS, VĀRDS

NO STUDENTIEM

KUR GROUP = "UIT-22" UN BUDŽETS = patiess;

Uzdevums Nr.6. Izveidojiet vaicājumu SQL režīmā. paraugam no tabulas PĀRBAUDE informācija par skolēniem, kuriem ir tikai 4. un 5. atzīme.

ATLASĪT*

NO [MAINĪTPĀRBAUDES]

KURGRĀDEIN(4,5);

Uzdevums Nr.7. Izveidojiet zanpoc un SQL režīmu, lai atlasītu informāciju par skolēniem, kuriem eksāmena atzīme ir 3 priekšmetā IOSU.

ATLASĪT*

NO [MAINĪTPĀRBAUDES]

KURLIETA=" IOSU"UnGRĀDENav iekšā (4,5);

Uzdevums Nr.8. Izveidojiet vaicājumu SQL režīmā, lai atlasītu ierakstus vienumiem, kuru stundas ir no 100 līdz 130.

ATLASĪT*

NOPRECES

KURSKATĪTIESNO 100 LĪDZ 130;


Uzdevums Nr.9. Izveidojiet vaicājumu SQL režīmā, lai no tabulas STUDENTI atlasītu informāciju par skolēniem, kuru uzvārdi sākas, piemēram, ar burtu “C”.

ATLASĪT*

NOSTUDENTI

KURUZVĀRDSPATĪK"AR*";

Secinājums: Laikā laboratorijas darbi iepazinās ar SQL instrukcijām, iemācījās izveidot vienkāršus SQL vaicājumus programmā Access, izmantojot komandu SELECT, izmantojot operatorus IN, BETWEEN, LIKE.

Šī nodarbība ir veltīta SQL vaicājumi uz datu bāzi VBA piekļuve. Apskatīsim, kā VBA datu bāzē tiek veikti INSERT, UPDATE, DELETE vaicājumi, kā arī uzzināsim, kā iegūt konkrētu vērtību no SELECT vaicājuma.

Tie, kas ieprogrammē VBA piekļuve strādājot ar datu bāzi SQL serveris, ļoti bieži viņi saskaras ar tik vienkāršu un nepieciešamu uzdevumu kā SQL vaicājuma nosūtīšana uz datu bāzi, vai tas būtu INSERT, UPDATE vai vienkāršs SQL SELECT vaicājums. Un, tā kā mēs esam iesācēji programmētāji, mums vajadzētu arī to izdarīt, tāpēc šodien mēs darīsim tieši to.

Mēs jau esam pieskārušies tēmai par datu iegūšanu no SQL servera, kur mēs rakstījām kodu VBA, lai iegūtu šos datus, piemēram, rakstā par datu augšupielādi teksta failā no MSSql 2008 vai arī pieskārāmies tam maz materiālā Datu augšupielāde no Access uz Word un Excel veidni, taču tā vai citādi mēs to aplūkojām virspusēji, un šodien es ierosinu par to runāt nedaudz sīkāk.

Piezīme! Visi zemāk minētie piemēri ir aplūkoti, izmantojot Access 2003 ADP projektu un MSSql 2008 datu bāzi. Ja nezināt, kas ir ADP projekts, mēs to apskatījām materiālā Kā izveidot un konfigurēt Access ADP projektu.

Piemēru avota dati

Pieņemsim, ka mums ir tabula test_table, kurā būs gada mēnešu skaitļi un nosaukumi (vaicājumi tiek izpildīti, izmantojot Vadības studija)

IZVEIDOT TABULU .( NOT NULL, (50) NULL) TĀLĀK

Kā jau teicu, mēs izmantosim ADP projektu, kas konfigurēts darbam ar MS SQL 2008, kurā es izveidoju testa formu un pievienoju sākuma pogu ar parakstu "Skriet", kas mums būs nepieciešams, lai pārbaudītu mūsu kodu, t.i. Mēs ierakstīsim visu kodu notikumu apdarinātājā " Pogas nospiešana».

Vaicājumi datu bāzei INSERT, UPDATE, DELETE VBA

Lai neaizkavētu pārāk ilgu laiku, sāksim uzreiz, pieņemsim, ka mums ir jāpievieno rinda mūsu testa tabulai ( kods komentēja)/

Private Sub start_Click() "Deklarējiet mainīgo, lai saglabātu vaicājuma virkni Dim sql_query As String "Ierakstiet tajā vajadzīgo vaicājumu sql_query = "INSERT INTO test_table (id, name_mon) VALUES ("6", "June")" "Izpildīt it DoCmd RunSQL sql_query Beigu apakš

Šajā gadījumā vaicājums tiek izpildīts, izmantojot pašreizējos datu bāzes savienojuma parametrus. Mēs varam pārbaudīt, vai dati ir pievienoti vai nav.

Kā redzat, dati ir ievietoti.

Lai dzēstu vienu rindiņu, mēs ierakstām šādu kodu.

Private Sub start_Click() "Deklarējiet mainīgo, lai saglabātu vaicājuma virkni Dim sql_query kā virkni "Ierakstiet tajā dzēšanas vaicājumu sql_query = "DELETE test_table WHERE id = 6" "Palaidiet to DoCmd.RunSQL sql_query Beigas apakšā

Ja pārbaudīsim, redzēsim, ka vēlamā rinda ir dzēsta.

Lai atjauninātu datus, ierakstiet mainīgo sql_query atjaunināšanas pieprasījums, es ceru, ka nozīme ir skaidra.

ATLASĪT vaicājumu datu bāzei VBA

Šeit lietas ir nedaudz interesantākas nekā ar citām SQL konstrukcijām.

Pirmkārt, pieņemsim, ka mums ir jāiegūst visi dati no tabulas, un, piemēram, mēs tos apstrādāsim un parādīsim ziņojumā, un jūs, protams, varat tos izmantot citiem mērķiem, šim nolūkam mēs rakstām: kodu

Privāts Sub start_Click() "Deklarēt mainīgos "Par ierakstu kopu no datu bāzes Dim RS As ADODB.Recordset "Vaicājuma virkne Dim sql_query As String "Virkne kopsavilkuma datu parādīšanai ziņojumā Dim str As String "Izveidot jaunu objektu ierakstiem set RS = New ADODB .Recordset "Query line sql_query = "SELECT id, name_mon FROM test_table" "Palaidiet vaicājumu, izmantojot pašreizējos projekta savienojuma iestatījumus RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic While Cilpa (Neiziet caur ierakstu RS.EOF) "Aizpildiet mainīgo, lai parādītu ziņojumu str = str & RS.Fields("id") & "-" & RS.Fields("name_mon") & vbnewline "pāriet uz nākamo ierakstu RS.MoveNext Wend " Izvadiet ziņojumu msgbox str End Sub

Šeit mēs jau izmantojam VBA Access cilpas, lai atkārtotu visas mūsu ierakstu kopas vērtības.

Bet diezgan bieži no ierakstu kopas ir jāiegūst nevis visas vērtības, bet tikai viena, piemēram, mēneša nosaukums pēc tā koda. Un, lai to izdarītu, ir dārgi izmantot cilpu, tāpēc mēs varam vienkārši uzrakstīt vaicājumu, kas atgriezīs tikai vienu vērtību, un piekļūt tai, piemēram, mēs saņemsim mēneša nosaukumu, izmantojot kodu 5.

Privāts Sub start_Click() "Deklarēt mainīgos" Ierakstu kopai no datu bāzes Dim RS As ADODB.Recordset "Vaicājuma virkne Dim sql_query As String "String, lai parādītu galīgo vērtību Dim str As String "Izveidot jaunu objektu ierakstu kopai RS = Jauns ADODB.Recordset "Query line sql_query = "SELECT name_mon FROM test_table WHERE id = 5" "Palaidiet vaicājumu, izmantojot pašreizējos projekta savienojuma iestatījumus RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic = Iegūt mūsu vērtību. Lauki(0) msgbox str Beigas Apakš

Par universālumu šeit mēs jau esam pievērsušies nevis pēc šūnas nosaukuma, bet pēc tā indeksa, t.i. 0, un šī ir pati pirmā vērtība Ierakstu kopa, beigās mēs ieguvām vērtību "maijs".

Kā redzat, viss ir pavisam vienkārši. Ja jums bieži ir jāiegūst noteikta vērtība no datu bāzes ( kā pēdējā piemērā), tad iesaku visu kodu izvadīt atsevišķā funkcijā (Kā uzrakstīt funkciju VBA Access 2003) ar vienu ievades parametru, piemēram, mēneša kodu ( ja ņemam vērā mūsu piemēru) un vienkārši, kur nepieciešams parādīt šo vērtību, izsauciet mums vajadzīgo funkciju ar nepieciešamo parametru un viss, to darot, mēs ievērojami samazināsim VBA kodu un uzlabosim mūsu programmas uztveri.

Tas šodienai viss. Veiksmi!

Izglītības projekta "Veikals" apraksts

Tabulas saišu diagramma

Tabulu apraksts

m_category - produktu kategorijas

m_ienākums - preču saņemšana

m_outcome - preču patēriņš

m_product - katalogs, produktu apraksti

m_supplier - direktorijs; piegādātāja informācija

m_unit - direktorijs; vienības

Lai praktiski pārbaudītu šajā mācību materiālā sniegtos piemērus, jums ir jābūt šādai programmatūrai:

Microsoft Access 2003 vai jaunāks.

SQL vaicājums programmā MS Access. Sākt

Lai redzētu tabulas saturu, veiciet dubultklikšķi uz tabulas nosaukuma kreisajā panelī:

Lai pārslēgtos uz tabulas lauku rediģēšanas režīmu, noklikšķiniet uz augšējais panelis izvēlieties dizaina režīmu:

Lai parādītu SQL vaicājuma rezultātu, veiciet dubultklikšķi uz vaicājuma nosaukuma kreisajā rūtī:

Lai pārslēgtos uz SQL vaicājuma rediģēšanas režīmu, augšējā panelī atlasiet SQL režīmu:

SQL vaicājums. Piemēri programmā MS Access. IZVĒLĒTIES: 1-10

SQL vaicājumā SELECT tiek izmantots, lai atlasītu no datu bāzes tabulām.

SQL vaicājums Q001. SQL vaicājuma piemērs, lai iegūtu tikai nepieciešamos laukus vēlamajā secībā:

SELECT dt, product_id, summa


NO m_ienākumiem;

SQL vaicājums Q002.Šajā SQL vaicājuma piemērā zvaigznīte (*) tiek izmantota, lai uzskaitītu visas tabulas m_product kolonnas, citiem vārdiem sakot, lai iegūtu visus m_product relācijas laukus:

ATLASĪT*
NO m_produkts;

PieprasītSQL Q003. Paziņojums DISTINCT tiek izmantots, lai novērstu dublētus ierakstus un iegūtu vairākus unikālus ierakstus:

ATLASĪT ATŠĶIRĪGU produkta_id


NO m_ienākumiem;

SQL vaicājums Q004. Priekšraksts ORDER BY tiek izmantots, lai kārtotu (kārtotu) ierakstus pēc noteikta lauka vērtībām. Lauka nosaukums tiek norādīts aiz priekšraksta ORDER BY:

ATLASĪT*
NO m_ienākumiem


PASŪTĪT PĒC cenas;

SQL vaicājums Q005. ASC priekšraksts tiek izmantots kā papildinājums priekšrakstam ORDER BY un kalpo, lai norādītu kārtošanu augošā secībā. DESC priekšraksts tiek izmantots papildus priekšrakstam ORDER BY un tiek izmantots, lai norādītu dilstošu kārtošanu. Gadījumā, ja nav norādīts ne ASC, ne DESC, tiek pieņemts, ka ir ASC (noklusējums):

ATLASĪT*
NO m_ienākumiem


PASŪTĪT PĒC dt DESC , cena;

SQL vaicājums Q006. Lai atlasītu nepieciešamos ierakstus no tabulas, tiek izmantotas dažādas loģiskās izteiksmes, kas izsaka atlases nosacījumu. Būla izteiksme parādās aiz WHERE priekšraksta. Piemērs visu ierakstu iegūšanai no tabulas m_income, kuru summas vērtība ir lielāka par 200:

ATLASĪT*
NO m_ienākumiem


KUR summa>200;

SQL vaicājums Q007. Par izteiksmi grūti apstākļi izmantojiet loģiskos operatorus UN (savienojums), VAI (disjunkcija) un NOT (loģiskā noliegšana). Piemērs, kā iegūt no tabulas m_outcome visus ierakstus, kuru summas vērtība ir 20 un cenas vērtība ir lielāka vai vienāda ar 10:

Cena


NO m_outcome
KUR summa=20 UN cena>=10;

SQL vaicājums Q008. Lai apvienotu datus no divām vai vairākām tabulām, izmantojiet instrukcijas INNER JOIN, LEFT JOIN, RIGHT JOIN. Nākamajā piemērā tiek izgūti lauki dt, product_id, summa, cena no tabulas m_ienākums un nosaukuma lauks no tabulas m_product. Tabulas m_income ieraksts tiek pievienots tabulas m_product ierakstam, ja m_income.product_id vērtība ir vienāda ar m_product.id vērtību:



ON m_income.product_id=m_product.id;

SQL vaicājums Q009.Šajā SQL vaicājumā ir jāņem vērā divas lietas: 1) jūsu meklētais teksts ir iekļauts atsevišķi pēdiņas("); 2) datums ir norādīts formātā #Mēnesis/Diena/gads#, kas attiecas uz MS Access. Citās sistēmās datuma rakstīšanas formāts var atšķirties. Informācijas par kvīti attēlošanas piemērs piena 2011. gada 12. jūnijā. Lūdzu, ņemiet vērā datuma formātu #6/12/2011#:

SELECT dt, product_id, nosaukumu, summu, cenu


NO m_income IEKŠĒJS JOIN m_product

WHERE title="Piens" And dt=#6/12/2011#; !}

SQL vaicājums Q010. Instrukcija BETWEEN tiek izmantota, lai pārbaudītu, vai vērtība pieder noteiktam diapazonam. SQL vaicājuma piemērs, kas parāda informāciju par produktiem, kas saņemti laikā no 2011. gada 1. jūnija līdz 30. jūnijam:

ATLASĪT*
NO m_income IEKŠĒJS JOIN m_product


ON m_income.product_id=m_product.id
KUR dt STARP #6/1/2011# Un #6/30/2011#;

SQL vaicājums. Piemēri programmā MS Access. IZVĒLE: 11-20

Vienu SQL vaicājumu var ligzdot citā. Apakšvaicājums nav nekas cits kā vaicājums vaicājumā. Parasti apakšvaicājums tiek izmantots WHERE klauzulā. Bet ir arī citi veidi, kā izmantot apakšvaicājumus.

Vaicājums Q011. Tiek parādīta informācija par produktiem no tabulas m_product, kuru kodi ir arī tabulā m_income:

ATLASĪT*
NO m_product


WHERE id IN (SELECT product_id FROM m_income);

Vaicājums Q012. Tiek parādīts to produktu saraksts no tabulas m_product, kuru kodi nav tabulā m_outcome:

ATLASĪT*
NO m_product


WHERE id NOT IN (SELECT product_id FROM m_outcome);

Pieprasīt Q013.Šis SQL vaicājums parāda unikālu produktu kodu un nosaukumu sarakstu, kas ir tabulā m_income, bet nav tabulā m_outcome:

ATLASĪT ATŠĶIRĪGU produkta_id, nosaukumu


NO m_income IEKŠĒJS JOIN m_product
ON m_income.product_id=m_product.id
WHERE product_id NOT IN (SELECT product_id FROM m_outcome);

Vaicājums Q014. Tabulā m_category tiek parādīts unikāls to kategoriju saraksts, kuru nosaukumi sākas ar burtu M:

ATLASĪT ATŠĶIRĪGU nosaukumu


NO m_product
KUR nosaukums LIKE "M*";

Vaicājums Q015. Piemērs aritmētisko darbību veikšanai vaicājuma laukiem un vaicājuma lauku pārdēvēšanai (alias). Šajā piemērā tiek aprēķināti izdevumi = daudzums*cena un peļņa katram preces izdevumu ierakstam, pieņemot, ka peļņa ir 7 procenti no pārdošanas apjoma:


summa*cena/100*7 AS peļņa
NO m_outcome;

Vaicājums Q016. Analizējot un vienkāršojot aritmētiskās darbības, varat palielināt vaicājuma izpildes ātrumu:

SELECT dt, product_id, summa, price, summa*price AS result_sum,


iznākuma_summa*0,07 AS peļņa
NO m_outcome;

Pieprasīt Q017. Varat izmantot priekšrakstu INNER JOIN, lai apvienotu datus no vairākām tabulām. Nākamajā piemērā atkarībā no ctgry_id vērtības katrs ieraksts tabulā m_ienākums tiek saskaņots ar tās kategorijas nosaukumu no tabulas m_category, kurai pieder produkts:

ATLASĪT c.title, b.title, dt, summa, cena, summa*price AS ienākumu_summa


FROM (m_ienākums KĀ IEKŠĒJS PIEVIENOJUMS m_produkts AS b ON a.product_id=b.id)
IEKŠĒJĀ JOIN m_category AS c ON b.ctgry_id=c.id
KĀRTĪJUMS PĒC c.title, b.title;

Pieprasīt Q018. Tādas funkcijas kā SUM — summa, COUNT — daudzums, AVG — vidējā aritmētiskā vērtība, MAX — maksimālā vērtība, MIN — minimālā vērtība tiek sauktas par apkopotajām funkcijām. Viņi pieņem daudzas vērtības un pēc to apstrādes atgriež vienu vērtību. Piemērs summas un cenas lauku reizinājuma summas aprēķināšanai, izmantojot SUM apkopošanas funkciju:

SELECT SUM(summa*cena) AS Total_Sum


NO m_ienākumiem;

Vaicājums Q019. Vairāku apkopošanas funkciju izmantošanas piemērs:

SELECT Sum (summa) AS Summa_Summa, AVG(summa) AS Summa_AVG,


MAX(summa) AS Summa_Max, Min(summa) AS Summa_Min,
Skaits(*) AS Total_Number
NO m_ienākumiem;

Pieprasīt Q020.Šajā piemērā tiek aprēķināta visu preču summa ar kodu 1, kas 2011. gada jūnijā ir kapitalizēta:

SELECT Sum(summa*cena) AS ienākumu_summa


NO m_ienākumiem
WHERE product_id=1 UN dt STARP #6/1/2011# UN #6/30/2011#;.

Vaicājums Q021.Šis SQL vaicājums aprēķina preču pārdošanas apjomu ar kodu 4 vai 6:

SELECT Sum(summa*cena) kā iznākuma_summa


NO m_outcome
WHERE produkta_id=4 VAI produkta_id=6;

Vaicājums Q022. Tiek aprēķināts, cik preces ar kodu 4 vai 6 tika pārdotas 2011. gada 12. jūnijā:

SELECT Sum(summa*cena) AS iznākuma_summa


NO m_outcome
KUR (produkta_id=4 VAI produkta_id=6) UN dt=#6/12/2011#;

Vaicājums Q023. Uzdevums ir šāds. Aprēķiniet kopējo preču daudzumu kategorijā “Maiznīcas izstrādājumi”, kas tika rakstītas ar lielo burtu.

Lai atrisinātu šo problēmu, jums jādarbojas ar trim tabulām: m_ienākums, m_produkts un m_kategorija, jo:


- tabulā m_ienākums tiek glabāts kapitalizēto preču daudzums un cena;
- katras preces kategorijas kods tiek saglabāts tabulā m_product;
- virsraksta kategorijas nosaukums tiek saglabāts tabulā m_category.

Lai atrisinātu šo problēmu, mēs izmantosim šādu algoritmu:


- kategorijas koda "Maiznīcas izstrādājumi" noteikšana no tabulas m_category, izmantojot apakšvaicājumu;
- m_income un m_product tabulu savienošana, lai noteiktu katras iegādātās preces kategoriju;
- saņemšanas summas aprēķins (= daudzums*cena) precēm, kuru kategorijas kods ir vienāds ar iepriekš minētajā apakšvaicājumā definēto kodu.
ATLASĪT
NO m_product KĀ IEKŠĒJS PIEVIENOTIES m_income AS b ON a.id=b.product_id
WHERE ctgry_id = (SELECT id FROM m_category WHERE title="Maiznīcas izstrādājumi"); !}

Vaicājums Q024. Kapitalizēto preču kopējā apjoma aprēķināšanas problēmu kategorijā “Maiznīcas izstrādājumi” atrisināsim, izmantojot šādu algoritmu:
- katram ierakstam tabulā m_ienākums, atkarībā no tā produkta_id vērtības, no tabulas m_category atbilst kategorijas nosaukumam;
- atlasīt ierakstus, kuru kategorija ir “Maiznīcas izstrādājumi”;
- aprēķināt čeka summu = daudzums*cena.

NO (m_produkts KĀ IEKŠĒJS PIEVIENOJUMS m_income AS b ON a.id=b.product_id)

WHERE c.title="Maiznīcas izstrādājumi"; !}

Vaicājums Q025.Šajā piemērā tiek aprēķināts, cik preču vienību tika patērēts:

SELECT COUNT(product_id) AS product_cnt


FROM (SELECT DISTINCT product_id FROM m_outcome) AS t;

Vaicājums Q026. Ierakstu grupēšanai tiek izmantots priekšraksts GROUP BY. Parasti ieraksti tiek grupēti pēc viena vai vairāku lauku vērtības, un katrai grupai tiek piemērota apkopota darbība. Piemēram, šāds vaicājums ģenerē pārskatu par preču pārdošanu. Tas ir, tiek ģenerēta tabula, kurā ir preču nosaukumi un summa, par kādu tās tika pārdotas:

SELECT virsraksts, SUM(summa*cena) AS iznākuma_summa


NO m_product KĀ IEKŠĒJĀ JOIN m_outcome AS b
ON a.id=b.product_id
GROUP PĒC nosaukuma;

Pieprasīt Q027. Pārdošanas pārskats pa kategorijām. Tas nozīmē, ka tiek ģenerēta tabula, kurā ir norādīti preču kategoriju nosaukumi, kopējā summa, par kādu tika pārdoti šo kategoriju produkti, un vidējais pārdošanas apjoms. Funkciju ROUND izmanto, lai noapaļotu vidējo vērtību līdz tuvākajai simtdaļai (otrais cipars aiz decimāldaļas atdalītāja):

SELECT c.title, SUM(summa*cena) AS rezultātu_summa,


ROUND(AVG(summa*cena),2) AS iznākuma_summa_vid
FROM (m_product KĀ IEKŠĒJĀ PIEVIENOŠANĀS m_outcome AS b ON a.id=b.product_id)
IEKŠĒJĀ JOIN m_category AS c ON a.ctgry_id=c.id
GROUP BY c.title;

Vaicājums Q028. Katrai precei tiek aprēķināts kopējais un vidējais tās čeku skaits un tiek parādīta informācija par produktiem, kuru kopējie ieņēmumi ir vismaz 500:

SELECT product_id, SUM(summa) AS summa_sum,


Apaļa(Vid.(summa),2) AS summa_vid
NO m_ienākumiem
GROUP BY product_id
HAVING Sum(summa)>=500;

Vaicājums Q029.Šis vaicājums katram produktam aprēķina tā ieņēmumu summu un vidējo ieņēmumu apjomu 2011. gada otrajā ceturksnī. Ja preces čeka kopējā summa ir vismaz 1000, tad tiek parādīta informācija par šo preci:

SELECT nosaukumu, SUM(summa*cena) AS ienākumu_summa


NO m_ienākumiem a IEKŠĒJĀ PIEVIENOTIES m_product b UZ a.product_id=b.id
KUR dt starp #4/1/2011# UN #6/30/2011#
GROUP PĒC nosaukuma
IR SUMMA(summa*cena)>=1000;

Vaicājums Q030. Dažos gadījumos jums ir jāsaskaņo katrs kādas tabulas ieraksts ar katru citas tabulas ierakstu; ko sauc par Dekarta produktu. Tabulu, kas izriet no šāda savienojuma, sauc par Dekarta tabulu. Piemēram, ja kādā tabulā A ir 100 ieraksti un tabulā B ir 15 ieraksti, tad to Dekarta tabula sastāvēs no 100*15=150 ierakstiem. Šis vaicājums savieno katru ierakstu tabulā m_income ar katru ierakstu tabulā m_outcome:
NO m_income, m_outcome;

Vaicājums Q031. Piemērs ierakstu grupēšanai pēc diviem laukiem. Šis SQL vaicājums katram piegādātājam aprēķina no viņa saņemto preču daudzumu un daudzumu:


SUM(summa*cena) AS ienākumu_summa

Pieprasīt Q032. Piemērs ierakstu grupēšanai pēc diviem laukiem. Šis vaicājums katram piegādātājam aprēķina mūsu pārdoto preču daudzumu un daudzumu:

SELECT piegādātāja_id, produkta_id, SUM(summa) AS summa_summa,




GROUP BY piegādātāja_id, produkta_id;

Vaicājums Q033.Šajā piemērā divi iepriekš minētie vaicājumi (q031 un q032) tiek izmantoti kā apakšvaicājumi. Šo vaicājumu rezultāti, izmantojot LEFT JOIN metodi, tiek apvienoti vienā atskaitē. Nākamajā vaicājumā tiek parādīts pārskats par saņemto un pārdoto produktu daudzumu un apjomu katram piegādātājam. Lūdzu, ņemiet vērā, ka, ja kāda prece jau ir saņemta, bet vēl nav pārdota, šī ieraksta šūna result_sum būs tukša. ka šis vaicājums ir tikai piemērs salīdzinoši sarežģītu vaicājumu izmantošanai kā apakšvaicājums. Šī SQL vaicājuma veiktspēja ar lielu datu apjomu ir apšaubāma:

ATLASĪT*
NO



SUM(summa*cena) AS ienākumu_summa

ON a.product_id=b.id GROUP BY BY piegādātāja_id, produkta_id) AS a
PA kreisi PIEVIENOTIES
(ATLASĪT piegādātāja_id, produkta_id, SUM(summa) AS summa_summa,
SUM(summa*cena) AS iznākuma_summa
NO m_outcome KĀ IEKŠĒJS JOIN m_product AS b
ON a.product_id=b.id GROUP BY BY piegādātāja_id, produkta_id) AS b
IESLĒGTS (a.product_id=b.product_id) UN (a.supplier_id=b.supplier_id);

Vaicājums Q034.Šajā piemērā divi iepriekš minētie vaicājumi (q031 un q032) tiek izmantoti kā apakšvaicājumi. Šo vaicājumu rezultāti, izmantojot RIGTH JOIN metodi, tiek apvienoti vienā atskaitē. Nākamajā vaicājumā tiek parādīta atskaite par katra klienta maksājumu apmēru atbilstoši viņa izmantotajām maksājumu sistēmām un veikto ieguldījumu apmēriem. Nākamajā vaicājumā tiek parādīts pārskats par saņemto un pārdoto produktu daudzumu un apjomu katram piegādātājam. Lūdzu, ņemiet vērā, ka, ja kāda prece jau ir pārdota, bet vēl nav atnākusi, šī ieraksta aile ienākumu_summa būs tukša. Šādu tukšu šūnu klātbūtne liecina par kļūdu pārdošanas uzskaitē, jo pirms pārdošanas vispirms ir nepieciešams, lai atbilstošā prece nonāktu:

ATLASĪT*
NO


(ATLASĪT piegādātāja_id, produkta_id, SUM(summa) AS summa_summa,
SUM(summa*cena) AS ienākumu_summa
NO m_income KĀ IEKŠĒJS PIEVIENOTIES m_product AS b ON a.product_id=b.id
GROUP BY piegādātāja_id, produkta_id) AS a
PAREIZI PIEVIENOJIES
(ATLASĪT piegādātāja_id, produkta_id, SUM(summa) AS summa_summa,
SUM(summa*cena) AS iznākuma_summa
NO m_outcome KĀ IEKŠĒJS JOIN m_product AS b ON a.product_id=b.id
GROUP BY piegādātāja_id, produkta_id) AS b
IESLĒGTS (a.supplier_id=b.supplier_id) UN (a.product_id=b.product_id);

Vaicājums Q035. Tiek parādīts pārskats, kurā norādīta ieņēmumu un izdevumu summa pa produktiem. Lai to izdarītu, tiek izveidots preču saraksts pēc tabulām m_income un m_outcome, pēc tam katrai precei no šī saraksta tiek aprēķināta tās ienākumu summa pēc tabulas m_income un tās izdevumu summa pēc tabulas m_outcome:

SELECT product_id, SUM(in_summa) AS ienākumu_summa,


SUM(out_summa) AS iznākuma_summa
NO
(SELECT product_id, summa AS in_amount, 0 AS out_amount
NO m_ienākumiem
SAVIENĪBA VISU
SELECT product_id, 0 AS in_amount, summa AS out_amount
NO m_outcome) AS t
GROUP BY product_id;

Vaicājums Q036. Funkcija EXISTS atgriež TRUE, ja tai nodotā ​​kopa satur elementus. Funkcija EXISTS atgriež FALSE, ja tai nodotā ​​kopa ir tukša, tas ir, tajā nav elementu. Šis vaicājums parāda produktu kodus, kas ir ietverti gan tabulās m_income, gan m_outcome:

ATLASĪT ATŠĶIRĪGU produkta_id


NO m_income AS a
WHERE EXISTS(SELECT product_id FROM m_outcome AS b

Vaicājums Q037. Tiek parādīti produktu kodi, kas ir ietverti gan tabulās m_income, gan m_outcome:

ATLASĪT ATŠĶIRĪGU produkta_id


NO m_income AS a
WHERE product_id IN (SELECT product_id FROM m_outcome)

Vaicājums Q038. Tiek parādīti produktu kodi, kas ir ietverti tabulā m_income, bet nav ietverti tabulā m_outcome:

ATLASĪT ATŠĶIRĪGU produkta_id


NO m_income AS a
WHERE NOT EXISTS(SELECT product_id FROM m_outcome AS b
WHERE b.product_id=a.product_id);

Vaicājums Q039. Tiek parādīts produktu saraksts ar maksimālo pārdošanas apjomu. Algoritms ir šāds. Katrai precei tiek aprēķināts tā pārdošanas apjoms. Pēc tam tiek noteikts šo summu maksimums. Pēc tam katrai precei atkal tiek aprēķināta tās pārdošanas summa, un tiek parādīts kods un to preču pārdošanas summa, kuru pārdošanas summa ir vienāda ar maksimālo:

SELECT product_id, SUM(summa*cena) AS summa_sum


NO m_outcome
GROUP BY product_id
IR SUMMA(summa*cena) = (ATLASĪT MAX(s_summa)
FROM (SELECT SUM(summa*cena) AS s_summa FROM m_outcome GROUP BY product_id));

Vaicājums Q040. Rezervēts vārds IIF ( nosacīts operators) tiek izmantots, lai novērtētu Būla izteiksmi un veiktu darbību atkarībā no rezultāta (TRUE vai FALSE). Nākamajā piemērā preces piegāde tiek uzskatīta par "mazu", ja daudzums ir mazāks par 500. Pretējā gadījumā, tas ir, saņemšanas daudzums ir lielāks vai vienāds ar 500, piegāde tiek uzskatīta par "lielu".

SELECT dt, product_id, summa,


IIF(summa NO m_ienākums;

SQL vaicājums Q041. Gadījumā, ja IIF operators tiek izmantots vairākas reizes, ērtāk to aizstāt ar SWITCH operatoru. SWITCH operators (vairāku atlases operators) tiek izmantots, lai novērtētu loģisko izteiksmi un veiktu darbību atkarībā no rezultāta. Nākamajā piemērā piegādātā partija tiek uzskatīta par "mazu", ja preču daudzums partijā ir mazāks par 500. Pretējā gadījumā, tas ir, ja preču daudzums ir lielāks vai vienāds ar 500, partija tiek uzskatīta par "lielu". ":

SELECT dt, product_id, summa,


SWITCH(summa =500,"liels") AS zīme
NO m_ienākumiem;

Vaicājums Q042. Nākamajā pieprasījumā, ja preču daudzums saņemtajā partijā ir mazāks par 300, tad partija tiek uzskatīta par “mazu”. Pretējā gadījumā tas ir, ja nosacījuma summa SELECT dt, product_id, summa,
IIF(summa IIF(summa NO m_ienākums;

SQL vaicājums Q043. Nākamajā pieprasījumā, ja preču daudzums saņemtajā partijā ir mazāks par 300, tad partija tiek uzskatīta par “mazu”. Pretējā gadījumā tas ir, ja nosacījuma summa SELECT dt, product_id, summa,
SWITCH(summa summa summa>=1000,"liels") AS atzīme
NO m_ienākumiem;

SQL vaicājums Q044. Nākamajā vaicājumā pārdošana ir sadalīta trīs grupās: maza (līdz 150), vidēja (no 150 līdz 300), liela (300 vai vairāk). Pēc tam katrai grupai aprēķina kopējo summu:

SELECT Kategorija, SUM(rezultāta_summa) AS Ctgry_Total


NO (ATLASĪT summa*cena AS iznākuma_summa,
IIf(summa*cena IIf(summa*cena NO m_rezultāta) AS t
GROUP BY Kategorija;

SQL vaicājums Q045. Funkciju DateAdd izmanto, lai norādītajam datumam pievienotu dienas, mēnešus vai gadus un iegūtu jaunu datumu. Nākamais pieprasījums:
1) pievieno 30 dienas datumam no lauka dt un parāda jauno datumu laukā dt_plus_30d;
2) pievieno 1 mēnesi datumam no lauka dt un parāda jauno datumu laukā dt_plus_1m:

SELECT dt, dateadd("d",30,dt) AS dt_plus_30d, dateadd("m",1,dt) AS dt_plus_1m


NO m_ienākumiem;

SQL vaicājums Q046. Funkcija DateDiff ir paredzēta, lai aprēķinātu atšķirību starp diviem datumiem dažādās vienībās (dienas, mēneši vai gadi). Šis vaicājums aprēķina starpību starp datumu laukā dt un pašreizējo datumu dienās, mēnešos un gados:

SELECT dt, DateDiff("d", dt,Date()) AS pēdējā_diena,


DateDiff("m",dt,Date()) AS pēdējie_mēneši,
DatumsAtšķirība("gggg",dt,Datums()) AS pēdējie_gadi
NO m_ienākumiem;

SQL vaicājums Q047. Izmantojot funkciju DateDiff, tiek aprēķināts dienu skaits no preču saņemšanas datuma (tabula m_ienākums) līdz kārtējam datumam un tiek salīdzināts derīguma termiņš (tabula m_produkts):


DateDiff("d",dt,Date()) AS pēdējās_dienas
NO m_income KĀ IEKŠĒJĀ JOIN m_product AS b
ON a.product_id=b.id;

SQL vaicājums Q048. Tiek aprēķināts dienu skaits no preces saņemšanas dienas līdz kārtējam datumam, pēc tam tiek pārbaudīts, vai šis daudzums pārsniedz derīguma termiņu:

SELECT a.id, product_id, dt, lifedays,


DateDiff("d",dt,Date()) AS pēdējās_dienas, IIf(pēdējās_dienas>dzīves dienas,"Jā","Nē") AS date_exire
NO m_income a IEKŠĒJĀ JOIN m_product b
ON a.product_id=b.id;

SQL vaicājums Q049. Tiek aprēķināts mēnešu skaits no preces saņemšanas dienas līdz kārtējam datumam. Kolonna month_last1 aprēķina absolūto mēnešu skaitu, kolonna month_last2 aprēķina pilno mēnešu skaitu:

SELECT dt, DateDiff("m", dt,Date()) AS month_last1,


DatumsAtšķirība("m",dt,Datums())-iif(diena(dt)>diena(datums()),1,0) AS mēnesis_pēdējais2
NO m_ienākumiem;

SQL vaicājums Q050. Tiek parādīts ceturkšņa pārskats par iegādāto preču daudzumu un apjomu par 2011. gadu:

SELECT kvartal, SUM(rezultāta_summa) AS Kopā


FROM (SELECT summa*cena AS rezultātu_summa, mēnesis(dt) AS m,
SLĒDZS(m =10,4) AS kvartāls
NO m_ienākums WHERE gads(dt)=2011) AS t
GROUP BY ceturksnis;

Vaicājums Q051. Sekojošais vaicājums palīdz noskaidrot, vai lietotāji varēja ievadīt sistēmā informāciju par preču patēriņu, kas pārsniedz saņemto preču daudzumu:

SELECT product_id, SUM(in_sum) AS ienākumu_summa, SUM(out_sum) AS rezultātu_summa


NO (ATLASĪT produkta_id, summa*cena kā in_sum, 0 kā out_sum
no m_ienākumiem
SAVIENĪBA VISU
SELECT product_id, 0 kā in_sum, summa*price kā out_sum
no m_outcome) AS t
GROUP BY product_id
IR SUMMA(summā)
Vaicājums Q052. Vaicājuma atgriezto rindu numerācija tiek īstenota dažādos veidos. Piemēram, varat pārnumurēt programmā MS Access sagatavotās atskaites rindas, izmantojot pašu MS Access. Varat arī pārnumurēt, izmantojot programmēšanas valodas, piemēram, VBA vai PHP. Tomēr dažreiz tas ir jādara pašā SQL vaicājumā. Tātad šāds vaicājums numurēs tabulas m_income rindas atbilstoši ID lauka vērtību augošajai secībai:

SELECT COUNT(*) kā N, b.id, b.product_id, b.amount, b.price


NO m_income a INER JOIN m_income b ON a.id GROUP BY b.id, b.product_id, b.amount, b.price;

Vaicājums Q053. Tiek parādīti pieci labākie produkti starp produktiem pēc pārdošanas apjoma. Pirmie pieci ieraksti tiek izdrukāti, izmantojot TOP instrukciju:

SELECT TOP 5, product_id, summa(summa*cena) AS summa


NO m_outcome
GROUP BY product_id
PASŪTĪT PĒC summas(summa*cena) DESC;

Vaicājums Q054. Tiek parādīti pieci populārākie produkti starp produktiem pēc pārdošanas apjoma, kā rezultātā rindas tiek numurētas:

SELECT COUNT(*) AS N, b.product_id, b.summa


NO


NO m_outcome GROUP BY product_id) AS a
IEKŠĒJĀ PIEVIENOŠANĀS
(SELECT product_id, summa(summa*price) AS summa,
summa*10000000+product_id AS id
NO m_outcome GROUP BY product_id) AS b
ON a.id>=b.id
GROUP BY b.product_id, b.summa
AR SKAITĪŠANU (*) SKAITĪT (*);

Vaicājums Q055.Šis SQL vaicājums parāda matemātisko funkciju COS, SIN, TAN, SQRT, ^ un ABS izmantošanu MS Access SQL:

SELECT (atlasīt skaitu (*) no m_iencome) kā N, 3.1415926 kā pi, k,


2*pi*(k-1)/N kā x, COS(x) kā COS_, SIN(x) kā SIN_, TAN(x) kā TAN_,
SQR(x) kā SQRT_, x^3 kā "x^3", ABS(x) kā ABS_
NO (SELECT COUNT(*) AS k
NO m_income KĀ IEKŠĒJS JOIN m_income AS b ON a.idGROUP BY b.id) t;

SQL vaicājums. Piemēri programmā MS Access. ATJAUNINĀJUMS: 1.-10

Vaicājums U001.Šāds SQL izmaiņu vaicājums palielina cenas precēm ar kodu 3 tabulā m_income par 10%:

UPDATE m_income SET cena = cena*1.1


WHERE produkta_id=3;

Pieprasīt U002.Šis SQL atjaunināšanas vaicājums palielina visu produktu daudzumu tabulā m_income par 22 vienībām, kuru nosaukumi sākas ar vārdu “Oil”:

UPDATE m_income SET summa = summa+22


WHERE product_id IN (SELECT id FROM m_product WHERE nosaukums LIKE "Eļļa*");

Pieprasīt U003.Šis SQL vaicājums par izmaiņām tabulā m_outcome samazina visu Sladkoe LLC ražoto preču cenas par 2 procentiem:

UPDATE m_outcome SET cena = cena*0,98


WHERE product_id IN
(IZVĒLIES a.id NO m_product a IEKŠĒJĀ PIEVIENOTIES m_piegādātājs b
ON a.supplier_id=b.id WHERE b.title="LLC"Сладкое"");. !}

Ierakstu ievietošana, dzēšana, atjaunināšana datu bāzē

Metode ExecuteReader() izgūst datu lasītāja objektu, kas ļauj skatīt SQL Select priekšraksta rezultātus, izmantojot uz priekšu tikai lasāmu informācijas straumi. Tomēr, ja jums ir jāizpilda SQL priekšraksti, kas modificē datu tabulu, jums ir jāizsauc metode ExecuteNonQuery() šī objekta komandas. Šī vienīgā metode ir paredzēta ievietošanas, izmaiņu un dzēšanas veikšanai atkarībā no komandas teksta formāta.

Koncepcija bezjautājuma nozīmē SQL priekšrakstu, kas neatgriež rezultātu kopu. Tāpēc Atlasiet paziņojumus ir vaicājumi, bet priekšraksti Insert, Update un Delete nav. Attiecīgi metode ExecuteNonQuery() atgriež int, kas satur šo priekšrakstu ietekmēto rindu skaitu, nevis jaunu ierakstu kopu.

Lai parādītu, kā modificēt esošas datu bāzes saturu, izmantojot tikai ExecuteNonQuery() vaicājumu, nākamais solis ir izveidot savu datu piekļuves bibliotēku, kas iekapsulē AutoLot datu bāzes procesu.

Reālā ražošanas vidē jūsu ADO.NET loģika gandrīz noteikti tiks izolēta .NET .dll komplektā viena vienkārša iemesla dēļ — koda atkārtota izmantošana! Iepriekšējos rakstos tas netika darīts, lai nenovērstu jūsu uzmanību no veicamajiem uzdevumiem. Taču būtu tērēts laiks, lai izstrādātu vienu un to pašu savienojuma loģiku, to pašu datu nolasīšanas loģiku un to pašu komandu izpildes loģiku katrai lietojumprogrammai, kurai jādarbojas ar AutoLot datu bāzi.

Izolējot datu piekļuves loģiku .NET kodu bibliotēkā, dažādas lietojumprogrammas ar jebkuru lietotāja interfeisu (konsoles stila, darbvirsmas stila, tīmekļa stila utt.) var piekļūt esošajai bibliotēkai pat neatkarīgi no valodas. Un, ja jūs izstrādājat datu piekļuves bibliotēku C#, tad citi .NET programmētāji varēs izveidot savu lietotāja saskarnes jebkurā valodā (piemēram, VB vai C++/CLI).

Mūsu datu piekļuves bibliotēkā (AutoLotDAL.dll) būs viena nosaukumvieta (AutoLotConnectedLayer), kas mijiedarbosies ar AutoLot datu bāzi, izmantojot ADO.NET savienotos veidus.

Sāciet, izveidojot jaunu C# klases bibliotēkas projektu ar nosaukumu AutoLotDAL (saīsinājums no "AutoLot Data Access Layer") un pēc tam mainiet sākotnējo C# koda faila nosaukumu uz AutoLotConnDAL.cs.

Pēc tam pārdēvējiet nosaukumvietas tvērumu uz AutoLotConnectedLayer un mainiet sākotnējās klases nosaukumu uz InventoryDAL, jo šī klase definēs dažādus dalībniekus mijiedarbībai ar AutoLot datu bāzes Inventory tabulu. Visbeidzot, importējiet šādas .NET nosaukumvietas:

Sistēmas izmantošana; izmantojot System.Collections.Generic; izmantojot System.Text; izmantojot System.Data; izmantojot System.Data.SqlClient; nosaukumtelpa AutoLotConnectedLayer ( publiskā klase InventoryDAL ( ) )

Savienojuma loģikas pievienošana

Mūsu pirmais uzdevums ir definēt metodes, kas ļauj izsaukšanas procesam izveidot savienojumu ar datu avotu un atvienoties no tā, izmantojot derīgu savienojuma virkni. Tā kā mūsu AutoLotDAL.dll montāža būs stingri kodēta, lai izmantotu klases veidus System.Data.SqlClient, definējiet privātu SqlConnection mainīgo, kas tiks piešķirts, kad tiks izveidots InventoryDAL objekts.

Turklāt definējiet metodi OpenConnection() un pēc tam citu CloseConnection(), kas mijiedarbosies ar šo mainīgo:

Publiskā klase InventoryDAL ( privāts SqlConnection connect = null; public void OpenConnection(virkne savienojumsString) ( connect = new SqlConnection(connectionString); connect.Open(); ) public void CloseConnection() ( connect.Close(); ) )

Īsuma labad InventoryDAL tips nepārbaudīs visus iespējamos izņēmumus un neveidos pielāgotus izņēmumus dažādās situācijās (piemēram, ja savienojuma virkne ir nepareizi veidota). Tomēr, ja veidojat ražošanas datu piekļuves bibliotēku, jums, visticamāk, būs jāizmanto strukturētas izņēmumu apstrādes metodes, lai ņemtu vērā jebkādas anomālijas, kas varētu rasties izpildes laikā.

Ievietošanas loģikas pievienošana

Ievietot jauns ieraksts uz Inventory tabula ir jāformatē SQL priekšraksts Ievietot(atkarībā no lietotāja ievades) un izsauc ExecuteNonQuery() metodi, izmantojot komandas objektu. Lai to paveiktu, klasei InventoryDAL pievienojiet publisko InsertAuto() metodi, kas ņem četrus parametrus, kas atbilst četrām krājumu tabulas kolonnām (CarID, Color, Mark un PetName). Pamatojoties uz šiem argumentiem, ģenerējiet rindu, lai pievienotu jaunu ierakstu. Visbeidzot, izpildiet SQL priekšrakstu, izmantojot objektu SqlConnection:

Public Void InsertAuto(int id, virknes krāsa, virknes marka, virknes petName) ( // SQL priekšraksts string sql = string.Format("Ievietot krājumos" + "(CarID, Marka, Color, PetName) Vērtības(@CarId, @Make, @Color, @PetName)"); izmantojot (SqlCommand cmd = new SqlCommand(sql, this.connect)) ( // Pievienot parametrus cmd.Parameters.AddWithValue("@CarId", id); cmd.Parameters.AddWithValue("@Make", make); cmd. Parameters.AddWithValue("@Krāsa", krāsa); cmd.Parameters.AddWithValue("@PetName", petName); cmd.ExecuteNonQuery(; ) )

Klases, kas pārstāv ierakstus relāciju datu bāzē, ir izplatīts veids, kā izveidot datu piekļuves bibliotēku. Faktiski ADO.NET Entity Framework automātiski ģenerē stingri drukātas klases, kas ļauj mijiedarboties ar datu bāzes datiem. Starp citu, atsevišķais ADO.NET slānis ģenerē stingri ierakstītus DataSet objektus, lai attēlotu datus no dotās tabulas relāciju datu bāzē.

SQL priekšraksta izveidošana, izmantojot virknes savienošanu, var būt drošības risks (domājiet par SQL ievietošanas uzbrukumiem). Komandas tekstu labāk izveidot, izmantojot parametrizētu vaicājumu, kas tiks aprakstīts nedaudz vēlāk.

Dzēšanas loģikas pievienošana

Noņemšana esošais ieraksts nav grūtāk kā ievietot jaunu ierakstu. Atšķirībā no InsertAuto() koda tiks parādīts viens svarīgs try/catch apgabals, kas risina iespējamo situāciju, kad tiek mēģināts izņemt automašīnu, kuru kāds jau ir pasūtījis no klientu tabulas. Pievienojiet klasei InventoryDAL šādu metodi:

Public void DeleteCar(int id) ( string sql = string.Format ("Dzēst no krājuma, kur CarID = "(0)"", id); izmantojot (SqlCommand cmd = new SqlCommand(sql, this.connect)) ( izmēģiniet ( cmd.ExecuteNonQuery(); ) catch (SqlException ex) ( Izņēmuma kļūda = new Exception ("Atvainojiet, šī iekārta ir atpakaļ kārtībā!", ex); metiena kļūda; ) ) )

Izmaiņu loģikas pievienošana

Runājot par esošā ieraksta atjaunošanu Inventāra tabulā, uzreiz rodas acīmredzams jautājums: ko īsti var ļaut mainīt izsaukšanas procesā: mašīnas krāsu, draudzīgo nosaukumu, modeli vai visus trīs? Viens veids, kā palielināt elastību, ir definēt metodi, kas izmanto parametru tipa virkni, kas var saturēt jebkuru SQL priekšrakstu, taču tas ir maigi izsakoties riskanti.

Ideālā gadījumā labāk ir izmantot metožu kopumu, kas ļauj izsaukšanas procesam mainīt ierakstus Dažādi ceļi. Tomēr mūsu vienkāršajai datu piekļuves bibliotēkai mēs definēsim vienu metodi, kas ļauj zvanīšanas procesam mainīt norādītās automašīnas draudzīgo nosaukumu:

Public void UpdateCarPetName(int id, string newpetName) ( string sql = string.Format("Atjaunināt krājumu kopu PetName = "(0)" Kur CarID = "(1)"", newpetName, id); izmantojot (SqlCommand cmd = new SqlCommand(sql, this.connect)) ( cmd.ExecuteNonQuery(); ) )

Izlases loģikas pievienošana

Tagad mums ir jāpievieno metode ierakstu atlasīšanai. Kā parādīts iepriekš, konkrēta datu sniedzēja datu lasītāja objekts ļauj atlasīt ierakstus, izmantojot tikai lasāmu kursoru. Izsaucot Read() metodi, varat apstrādāt katru ierakstu pa vienam. Tas viss ir lieliski, taču tagad mums ir jāizdomā, kā šos ierakstus atgriezt izsaucēja lietojumprogrammas slānim.

Viena pieeja būtu izgūt datus, izmantojot metodi Read() un pēc tam aizpildīt un atgriezt daudzdimensiju masīvu (vai citu objektu, piemēram, vispārīgo sarakstu ).

Vēl viens veids ir atgriezt System.Data.DataTable objektu, kas faktiski pieder atsevišķam ADO.NET slānim. DataTable ir klase, kas attēlo datu tabulas bloku (piemēram, papīru vai izklājlapu).

DataTable klase satur datus kā rindu un kolonnu kolekciju. Šīs kolekcijas var aizpildīt programmatiski, bet DataTable tipam ir Load() metode, kas var tās aizpildīt automātiski, izmantojot datu lasītāja objektu! Šeit ir piemērs, kurā dati no krājumu tabulas tiek atgriezti kā datu tabula:

Publiskā datu tabula GetAllInventoryAsDataTable() ( DataTable inv = new DataTable(); string sql = "Atlasīt * No krājuma"; izmantojot (SqlCommand cmd = new SqlCommand(sql, this.connect)) ( SqlDataReader dr = cmd(ExecutevReader); .Load(dr); dr.Close(); ) return inv; )

Darbs ar parametrizētiem komandu objektiem

Līdz šim InventoryDAL tipa ievietošanas, atjaunināšanas un dzēšanas loģikā katram SQL vaicājumam esam izmantojuši iekodētus virknes literāļus. Jūs droši vien zināt, ka pastāv parametrizēti vaicājumi, kas ļauj SQL parametrus uzskatīt par objektiem, nevis tikai kā teksta daļu.

Darbs ar SQL vaicājumiem vairāk objektorientētā veidā palīdz ne tikai samazināt drukas kļūdas (ar stingri drukātiem rekvizītiem), bet arī parametrizētie vaicājumi parasti ir daudz ātrāki nekā virknes burtiski vaicājumi, jo tie tiek parsēti tikai vienu reizi (nevis katru reizi). rekvizīts CommandText ir iestatīts uz SQL virkni). Turklāt parametrizētie vaicājumi aizsargā pret SQL injekcijas uzbrukumiem (labi zināma datu piekļuves drošības problēma).

Lai atbalstītu parametrizētus vaicājumus, ADO.NET komandu objekti uztur atsevišķu parametru objektu kolekciju. Pēc noklusējuma šī kolekcija ir tukša, taču varat pievienot neierobežotu skaitu atbilstošo parametru objektu viettura parametri SQL vaicājumā. Ja SQL vaicājuma parametrs ir jāsaista ar kāda komandas objekta parametru kolekcijas dalībnieku, pirms SQL parametra ievadiet simbolu @ (vismaz strādājot ar Microsoft SQL serveris, lai gan ne visas DBVS atbalsta šo apzīmējumu).

Parametru iestatīšana, izmantojot DbParameter tipu

Pirms sākam veidot parametrizētus vaicājumus, iepazīsimies ar DbParameter tipu (pakalpojumu sniedzēja parametru objektu bāzes klase). Šai klasei ir vairākas īpašības, kas ļauj norādīt parametra nosaukumu, izmēru un veidu, kā arī citus raksturlielumus, piemēram, parametra skatīšanās virzienu. Tālāk ir norādītas dažas svarīgas DbParameter tipa īpašības:

DbType

Iegūst vai iestata datu tipu no parametra, kas attēlots kā CLR tips

Virziens

Atgriež vai iestata parametra veidu: tikai ievade, tikai izvade, ievade un izvade vai parametrs vērtības atgriešanai

IsNullable

Atgriež vai iestata, vai parametrs var pieņemt tukšas vērtības

ParameterName

Iegūst vai iestata DbParameter nosaukumu

Izmērs

Problēmas vai instalācijas maksimālais izmērs parametra dati (noder tikai teksta datiem)

Vērtība

Atgriež vai iestata parametra vērtību

Lai parādītu, kā aizpildīt komandu objektu kolekciju ar DBParameter saderīgiem objektiem, pārrakstīsim InsertAuto() metodi tā, lai tā izmantotu parametru objektus (visas pārējās metodes var pārtaisīt līdzīgi, bet mums pietiks ar šo piemēru):

Public void InsertAuto(int id, virknes krāsa, virknes marka, virknes petName) ( // SQL priekšraksta virkne sql = string.Format("Ievietot krājumos" + "(CarID, Mark, Color, PetName) Values("(0)) ","(1)","(2)","(3)")", id, marka, krāsa, mājdzīvnieka nosaukums); // Parametrizēta komanda, izmantojot (SqlCommand cmd = new SqlCommand(sql, this.connect)) ( SqlParameter param = new SqlParameter(); param.ParameterName = "@CarID"; param.Value = id; param.SqlDbType = SqlDbType.Int; cmd.Parameters.Add(param); param = new SqlParameter(); param. ParameterName = "@Make"; param.Value = make; param.SqlDbType = SqlDbType.Char; param.Size = 10; cmd.Parameters.Add(param); param = new SqlParameter(); param.ParameterName = "@Color "; param.Value = krāsa; param.SqlDbType = SqlDbType.Char; param.Size = 10; cmd.Parameters.Add(param); param = new SqlParameter(); param.ParameterName = "@PetName"; param.Value = petName; param.SqlDbType = SqlDbType.Char; param.Size = 10; cmd.Parameters.Add(param); cmd.ExecuteNonQuery(); ) )

Ņemiet vērā, ka SQL vaicājumā šeit ir arī četras viettura rakstzīmes, katras pirms kurām ir @ simbols. Izmantojot SqlParameter tipa rekvizītu ParameterName, varat aprakstīt katru no šiem vietturiem un norādīt dažādu informāciju (vērtību, datu tipu, lielumu utt.) stingri drukātā veidā. Kad visi parametru objekti ir sagatavoti, tie tiek pievienoti komandu objektu kolekcijai, izmantojot Add() izsaukumu.

Šeit tiek izmantotas dažādas īpašības, lai projektētu parametru objektus. Tomēr ņemiet vērā, ka parametru objekti atbalsta vairākus pārslogotus konstruktorus, kas ļauj iestatīt dažādu rekvizītu vērtības (kas rada kompaktāku kodu bāzi). Ņemiet vērā arī to, ka programmai Visual Studio 2010 ir dažādi grafiskie dizaineri, kas automātiski ģenerēs lielu daļu šī nogurdinošā koda, kas manipulē ar parametriem.

Parametrēta vaicājuma izveide bieži rada vairāk koda, taču rezultāts ir ērtāks veids, kā programmatiski noregulēt SQL priekšrakstus, kā arī labāka veiktspēja. Šo paņēmienu var izmantot jebkuram SQL vaicājumam, lai gan parametrizētie vaicājumi ir visnoderīgākie, ja nepieciešams palaist saglabātās procedūras.

Noteikumi kvadrātiekavās apzīmē konstrukcijas [izvēles daļu]. Vertikāla josla norāda iespēju izvēlēties starp opcijām (var1|var2). Elipse nozīmē iespējamu atkārtošanos vairākas reizes - 1 reizi, 2 reizes [, …]

SELECT paziņojums

Uzdod Microsoft Access datu bāzes dzinējam atgriezt informāciju no datu bāzes kā ierakstu kopu.

Sintakse

IZVĒLĒTIES [ predikāts] { * | tabula.* | [tabula.]lauks1

[, [tabula.]lauks2 [, ...]]}
NO tabula_izteiksme [, ...]




SELECT priekšraksts ietver šādus elementus.

Elements

Apraksts

Predikāts

Viens no šiem predikātiem: ALL, DISTINCT, DISTINCTROW vai TOP. Predikāti tiek izmantoti, lai ierobežotu atgriezto ierakstu skaitu. Ja predikāts nav norādīts, noklusējuma vērtība ir ALL.

Norāda, ka visi lauki ir atlasīti no norādītās tabulas vai tabulām

Tabula

Tabulas nosaukums, no kuras laukiem ir atlasīti ieraksti

lauks1, lauks2

To lauku nosaukumi, kas satur izgūstamos datus. Ja ir norādīti vairāki lauki, dati tiks izgūti to nosaukumu sarakstā

segvārds1, segvārds2

Nosaukumi, kas tiek izmantoti kā kolonnu virsraksti oriģinālo kolonnu nosaukumu vietā tabulas

tabula_izteiksme

Viens vai vairāki tabulu nosaukumi, kas satur izgūstamos datus.

ārējā_datu bāze

Tās datu bāzes nosaukums, kurā ir komponentā norādītās tabulas tabula_izteiksme ja tie nav pašreizējā datu bāzē

Piezīmes

Lai veiktu šo darbību, Microsoft Access datu bāzes programma veic meklēšanu norādītajā(-ās) tabulā(-ās), izgūst vajadzīgās kolonnas, atlasa rindas, kas atbilst norādītajiem nosacījumiem, un sakārto vai sagrupē iegūtās rindas norādītajā secībā.

SELECT priekšraksti nemaina datu bāzes datus.

SELECT priekšraksts parasti ir pirmais SQL priekšraksta vārds (SQL priekšraksts (string). Izteiksme, kas definē SQL komanda, piemēram, SELECT, UPDATE vai DELETE, kā arī tādas klauzulas kā WHERE vai ORDER BY. SQL priekšraksti/virknes parasti izmanto vaicājumos un statistikas funkcijās.) Lielākā daļa SQL priekšrakstu ir SELECT vai SELECT...INTO priekšraksti.

SELECT priekšraksta minimālā sintakse ir šāda:

ATLASĪT lauki NO tabula

Varat izmantot zvaigznīti (*), lai atlasītu visus tabulas laukus. Nākamajā piemērā tiek atlasīti visi tabulas Darbinieki lauki.

SELECT * FROM Darbinieki;

Ja lauka nosaukums ir iekļauts vairākās tabulās klauzulā FROM, pirms tā norādiet tabulas nosaukumu un priekšrakstu «.» (punkts). Nākamajā piemērā lauks "Nodaļa" atrodas tabulās "Darbinieki" un "Vadītāji". SQL priekšraksts atlasa nodaļas no tabulas Darbinieki un vadītāju nosaukumus no tabulas Uzraudzītāji.

IZVĒLIES Darbiniekus. Nodaļa, vadītāji. Vadītāja vārds FROM Employees IEKŠĒJS PIEVIENOJIES Vadītājiem WHERE Darbinieki. Nodaļa = vadītāji. Nodaļa;

Kad veidojat objektu RecordSet, Microsoft Access datu bāzes dzinējs izmanto tabulas lauka nosaukumu kā objekta "Field" nosaukumu objektā. Ierakstu komplekts. Ja lauka nosaukums ir jāmaina vai to nenodrošina izteiksme, kas ģenerē lauku, izmantojiet rezervētu vārdu (Rezervēts vārds. Vārds, kas ir valodas elements, piemēram, Visual Basic. Rezervētie vārdi ietver priekšrakstu nosaukumus, iebūvētās funkcijas un datu tipi, metodes, operatori un objekti.) AS. Nākamajā piemērā parādīts, kā galvene "Diena" tiek izmantota, lai nosauktu atgriezto objektu Lauks saņemtajā objektā Ierakstu komplekts.

SELECT Birthday AS Day NO Darbiniekiem;

Strādājot ar apkopotām funkcijām vai vaicājumiem, kas atgriež neskaidrus vai identiskus objektu nosaukumus Lauks, jums vajadzētu izmantot AS klauzulu, lai izveidotu citu objekta nosaukumu Lauks. Nākamajā piemērā atgrieztais objekts Lauks saņemtajā objektā Ierakstu komplekts tiek dots nosaukums "Tautas skaitīšana".

SELECT COUNT(EmployeeCode) AS Census FROM Employees;

Strādājot ar SELECT priekšrakstu, varat izmantot papildu klauzulas, lai vēl vairāk ierobežotu un sakārtotu izgūtos datus. Lai iegūtu papildinformāciju, skatiet izmantotā piedāvājuma palīdzības tēmu.

NO klauzulas

Norāda tabulas un vaicājumus, kas satur SELECT priekšrakstā norādītos laukus.

Sintakse

ATLASĪT lauka_saraksts
NO tabula_izteiksme

SELECT priekšraksts, kas satur klauzulu FROM, ietver šādus elementus:

Elements

Apraksts

lauka_saraksts

tabula_izteiksme

Izteiksme, kas definē vienu vai vairākas tabulas — datu avotus. Izteiksme var būt tabulas nosaukums, saglabātā vaicājuma nosaukums vai rezultāta izteiksme, kas izveidota, izmantojot operatoru INNER JOIN, LEFT JOIN vai RIGHT JOIN.

ārējā_datu bāze

Pilns ceļš uz ārējo datu bāzi, kurā ir visas norādītās tabulas tabula_izteiksme

Piezīmes


Pēc SELECT priekšraksta ir nepieciešama klauzula FROM.

Secība, kādā tabulas ir uzskaitītas tabula_izteiksme nav nozīmes.

Saistīto tabulu izmantošana (Saistītā tabula. Tabula, kas ir saglabāta failā, kas nav atvērtas datu bāzes daļa, bet ir pieejama no Microsoft Access. Lietotājs var pievienot, dzēst un mainīt ierakstus saistītajā tabulā, bet nevar mainīt tās struktūru .) klauzulas IN vietā varat atvieglot un efektīvāk veikt datu izguves procesu no ārējās datu bāzes.

Tālāk esošajā piemērā parādīts, kā izgūt datus no tabulas Darbinieki.

IZVĒLĒTIES Uzvārds, Vārds

NO Darbiniekiem;

Norāda SQL vaicājumiem atlasītos ierakstus ( SQL valoda(Strukturētā vaicājuma valoda). Strukturēta vaicājumu un datu bāzes programmēšanas valoda, ko plaši izmanto, lai piekļūtu datiem, veiktu vaicājumus, atjauninātu un pārvaldītu datus relāciju DBVS.

Sintakse

ATLASĪT ]]
NO tabula

SELECT priekšraksts, kas satur šos predikātus, ietver šādus komponentus:

Komponents

Apraksts

Nozīmē, ja nav iekļauti predikāti. Microsoft Access datu bāzes programma atlasa visus ierakstus, kas atbilst SQL priekšraksta nosacījumiem (SQL priekšraksts (virkne). Izteiksme, kas definē SQL komandu, piemēram, SELECT, UPDATE vai DELETE, un ietver klauzulas, piemēram, WHERE vai ORDER BY). SQL priekšraksti/virknes parasti izmanto vaicājumos un statistikas funkcijās). Šie divi identiski piemēri parāda, kā atgriezt visus ierakstus no tabulas Darbinieki.

NO darbiniekiem

PASŪTĪJUMS PĒC EmployeeCode;

NO darbiniekiem

PASŪTĪJUMS PĒC EmployeeCode;

Izslēdz ierakstus, kas satur dublētus datus atlasītajos laukos. Vaicājuma rezultātos tiek iekļautas tikai katra SELECT priekšrakstā norādītā lauka unikālās vērtības. Piemēram, dažiem darbiniekiem tabulā Darbinieki var būt vienāds uzvārds. Ja divos ierakstos laukā Uzvārds ir uzvārds "Ivanov", šāds SQL priekšraksts atgriež tikai vienu ierakstu, kurā ir uzvārds "Ivanov".

ATLASĪT ATŠĶIRĪGU Uzvārdu

Ja komponents DISTINCT tiek izlaists, vaicājums atgriež abus ierakstus ar uzvārdu "Ivanov".

Ja klauzulā SELECT ir vairāki lauki, visu lauku vērtību kombinācija tiek iekļauta vaicājuma rezultātos tikai tad, ja tā ir unikāla šim ierakstam.

Vaicājuma, kurā tiek izmantots komponents DISTINCT, rezultāti netiek atjaunināti, lai atspoguļotu turpmākās citu lietotāju veiktās izmaiņas.

Izslēdz datus no ierakstiem, kas atkārtojas pilnībā, nevis satur atsevišķus laukus ar tiem pašiem datiem. Pieņemsim, ka ir izveidots vaicājums, kas savieno tabulas “Klienti” un “Pasūtījumi”, izmantojot lauku “Klienta kods”. Tabulā Klienti nav dublētu klienta ID lauku, taču tie pastāv tabulā Pasūtījumi, jo katram klientam var būt vairāki pasūtījumi. Šis SQL priekšraksts parāda, kā izmantot DISTINCTROW komponentu, lai uzskaitītu organizācijas, kas veikušas vismaz vienu pasūtījumu, neminot šo pasūtījumu informāciju.

IZVĒLĒTIES DISTINCTROW Nosaukums FROM Klienti INNER JOIN Pasūtījumi

ON Klienti. CustomerId = Pasūtījumi. Klienta kods

PĒC nosaukuma;

Ja DISTINCTROW komponents tiek izlaists, vaicājums rada vairākas rindas katrai organizācijai, kas pasūtīja vairākas reizes.

Komponents DISTINCTROW stājas spēkā tikai tad, ja tiek atlasīti lauki no dažām vaicājumā izmantotajām tabulām. DISTINCTROW komponents tiek ignorēts, ja vaicājumā ir iekļauta tikai viena tabula vai ja lauki tiek izgūti no visām tabulām.

TOPS n

Atgriež norādīto ierakstu skaitu, kas ir starp pirmajiem vai pēdējiem ierakstiem diapazonā, kas norādīts klauzulā ORDER BY. Pieņemsim, ka vēlaties parādīt 25 labāko skolēnu vārdus no 1994. gada klases.

Vārds Uzvārds

KUR Izlaiduma gads = 2003

PASŪTĪT PĒC GradePointAverage DESC;

Ja neiekļaujat klauzulu ORDER BY, vaicājums atgriezīs nejaušu 25 ierakstu kopu no tabulas Studenti, kas atbilst WHERE klauzulai.

Predikāts TOP neietver izvēli starp vienādām vērtībām. Ja iepriekšējā piemērā 25. un 26. ierakstam būtu vienāds GPA, vaicājums atgrieztu 26 ierakstus.

Varat arī izmantot PERCENT rezervēto vārdu, lai izgūtu kādu procentuālo daļu no pirmajiem vai pēdējiem ierakstiem diapazonā, kas norādīts klauzulā ORDER BY. Pieņemsim, ka 25 labāko skolēnu vietā vēlaties rādīt 10% zemāko skolēnu absolventu klasē.

IZVĒLĒTIES TOP 10 PROCENTUS

Vārds Uzvārds

KUR Izlaiduma gads = 2003

PASŪTĪT PĒC GradePointAverage ASC;

ASC predikāts norāda vērtību izvadi no diapazona apakšējās daļas. Vērtībai, kas seko TOP predikātam, ir jābūt vesela skaitļa datu tipam. Pamatdatu tipam, ko izmanto veselu skaitļu vērtību glabāšanai. Vesela skaitļa mainīgais tiek saglabāts kā 64 bitu (8 baitu) skaitlis diapazonā no -32768 līdz 32767. ) neparakstīts .

TOP predikāts neietekmē to, vai vaicājumu var atjaunināt.

tabula

Tabulas nosaukums, no kuras tiek izgūti ieraksti.

Skatīt arī

SELECT paziņojums

NO klauzulas

KUR klauzula

Nosaka, kuri ieraksti no tabulām, kas uzskaitītas klauzulā FROM, tiek apstrādāti ar priekšrakstiem SELECT, UPDATE vai DELETE.

Sintakse

ATLASĪT lauka_saraksts
NO tabula_izteiksme
KUR atlases_nosacījumi

SELECT priekšraksts, kas satur WHERE klauzulu, ietver šādas daļas.

daļa

Apraksts

lauka_saraksts

Lauka vai lauku nosaukums, kas tiek izgūts kopā ar jebkuriem aizstājvārdiem (Alias (SQL). Alternatīvs nosaukums tabulai vai laukam izteiksmē. Pseidonīmi parasti tiek izmantoti kā īsāki tabulu vai lauku nosaukumi, lai atvieglotu turpmāko atsauci programmām, lai novērstu neskaidras atsauces un iegūtu aprakstošākus nosaukumus, parādot vaicājuma rezultātus.), predikātiem (ALL, DISTINCT, DISTINCTROW vai TOP) vai ar jebkuru citu SELECT priekšraksta parametru.

tabula_izteiksme

Tabulas vai tabulu nosaukums, no kuras tiek izgūti dati.

atlases_nosacījumi

Izteiksme (Izteiksme. Matemātisku un loģisku operatoru, konstantu, funkciju, lauku nosaukumu, vadīklu un īpašību kombinācija, kuras rezultātā tiek iegūta viena vērtība. Izteiksme var veikt aprēķinus, apstrādāt tekstu vai apstiprināt datus.), kurai jāatbilst iekļautajiem ierakstiem. vaicājuma rezultātos.

Piezīmes

Microsoft Access datu bāzes programma atlasa ierakstus, kas atbilst WHERE klauzulā uzskaitītajiem nosacījumiem. Ja WHERE klauzula nav norādīta, vaicājums atgriež visas tabulas rindas. Ja vaicājumā ir norādītas vairākas tabulas, bet nav norādīta WHERE vai JOIN klauzula, vaicājums rada Dekarta precizitāti (Dekarta precizitāte. Tas ir SQL SELECT priekšraksta izpildes rezultāts, kuram ir FROM klauzula, kas atsaucas uz divām vai vairākām tabulām un nav WHERE vai JOIN. JOIN klauzula, kas nosaka pievienošanās metodi.) tabulas.

WHERE klauzula nav obligāta, bet, ja tiek izmantota, tai ir jāseko klauzulai FROM. Piemēram, varat atlasīt visus pārdošanas nodaļas darbiniekus (WHERE Department = "Pārdošana") vai visus klientus vecumā no 18 līdz 30 gadiem (WHERE Age Between 18 līdz 30).

Ja JOIN klauzula netiek izmantota SQL savienojuma darbībai vairākās tabulās, iegūtais objekts Rekordu komplekts to atjaunināt nebūs iespējams.

Klauzula WHERE ir līdzīga klauzulai HAVING un norāda atlasītos ierakstus. Pēc tam, kad ieraksti ir sagrupēti ar klauzulu GROUP BY, klauzula HAVING nosaka arī parādāmo ierakstu.

Klauzula WHERE tiek izmantota, lai izslēgtu ierakstus, kas nav jāgrupē, izmantojot klauzulu GROUP BY.

Izmantojiet dažādas izteiksmes, lai noteiktu, kurus ierakstus atgriež SQL priekšraksts. Piemēram, šāds SQL priekšraksts atlasa visus darbiniekus, kuru alga pārsniedz RUR.

SELECT Uzvārds, Alga FROM Darbinieki WHERE Alga > 21000;

WHERE klauzula var saturēt līdz 40 izteiksmēm, kas savienotas ar loģiskiem operatoriem (piemēram, UN Un VAI).

Ja ievadāt lauka nosaukumu, kurā ir atstarpes vai pieturzīmes, tas jāiekļauj kvadrātiekavās (). Piemēram, klientu informācijas tabulā var būt informācija par konkrētiem klientiem.

ATLASĪT [Klienta iecienītākais restorāns]

Argumenta norādīšana atlases_nosacījumi, datuma literāļi (Datuma literāļi. Jebkura rakstzīmju secība derīgā formātā, kas ietverta ciparu zīmēs (#). Derīgie formāti ir datuma formāts, kas norādīts valodas un standartu iestatījumos un universālajā datuma formātā.) ir jāattēlo ASV formātā. , pat ja tiek izmantots datuma formāts ārpus ASV. Microsoft Access datu bāzes dzinēja versija. Piemēram, datums "1996. gada 10. maijs" ir rakstīts kā 10/5/96 Apvienotajā Karalistē un 05/10/1996 Krievijā. Neaizmirstiet iekļaut datuma literāļus skaitļu zīmēs (#), kā parādīts turpmākajos piemēros.

Lai Apvienotās Karalistes datubāzē atrastu ierakstus par 1996. gada 10. maiju, izmantojiet šādu SQL priekšrakstu:

SELECT * FROM Pasūtījumi WHERE Piegādes datums = #10.05.1996#;

Varat arī izmantot funkciju DatumsVērtība, atzīstot starptautiskos parametrus, instalēta Microsoft Windows®. Piemēram, Krievijai izmantojiet šo kodu:

SELECT * FROM Pasūtījumi WHERE Piegādes datums = DateValue("05/10/1996");

Un šāds kods ir paredzēts Apvienotajai Karalistei:

SELECT * FROM Pasūtījumi WHERE Piegādes datums = DateValue("10/5/96");

Piezīme. Ja atlases kritēriju rindā norādītās kolonnas tips ir GUID (Replica ID (GUID). 16 baitu lauks Microsoft Access datu bāzē, ko izmanto, lai unikāli identificētu replikāciju. GUID tiek izmantoti, lai identificētu replikas, kopiju kopas, tabulas, ierakstus un citiem objektiem. Microsoft Access datu bāzēs GUID kodus sauc par replika kodiem.), atlases nosacījumi izmanto nedaudz atšķirīgu sintaksi.

WHERE ReplicaID = (GUID (AB-CDEF0ABCDEF))

Pārliecinieties, vai ligzdotās iekavas un defises ir novietotas pareizi.

Avota lapa: http://office. /ru-ru/access/HA.aspx? pid=CH

GROUP BY klauzula

Apvieno vienā ierakstā ierakstus ar vienādām vērtībām, kas ir norādītajā lauku sarakstā. Katram ierakstam tiek izveidota kopsavilkuma vērtība, ja SELECT priekšrakstā ir iekļauta SQL apkopošanas funkcija, piemēram, Summa vai Skaitīt.

Sintakse

ATLASĪT lauka_saraksts
NO tabula
KUR atlases_nosacījums

SELECT priekšraksts, kas satur klauzulu GROUP BY, ietver šādus elementus:

Elements

Apraksts

lauka_saraksts

Lauku nosaukumi, kas tiek izgūti kopā ar jebkuriem aizstājvārdiem (Alias (SQL). Alternatīvs nosaukums tabulai vai laukam izteiksmē. Pseidonīmi parasti tiek izmantoti kā īsāki tabulu vai lauku nosaukumi, lai programmās būtu vieglāk izmantot turpmākās atsauces, lai novērstu neskaidras atsauces un iegūtu informatīvākus nosaukumus, parādot vaicājuma rezultātus.) un statistikas SQL funkcijas, predikāti (ALL, DISTINCT, DISTINCTROW vai TOP) vai citi priekšraksta SELECT parametri

tabula

atlases_nosacījumi

Atlases nosacījums. Ja paziņojumā ir ietverta klauzula WHERE, pēc tam, kad tā ir piemērota ierakstiem, vērtības tiks grupētas pēc Microsoft Access datu bāzes dzinēja.

group_field_list

group_field_list

Piezīmes

GROUP BY klauzula nav obligāta.

Ja SQL statistikas funkcijas nav iekļautas priekšrakstā SELECT, kopsavilkuma vērtības netiek aprēķinātas.

GROUP BY lauka vērtības, kas ir Null (Null. Vērtība, ko var ievadīt laukā vai izmantot izteiksmēs un vaicājumos, lai norādītu uz trūkstošiem vai nezināmiem datiem. Programmā Visual Basic atslēgvārds Null norāda Null vērtību. Daži lauki, piemēram, kā primārās atslēgas lauki, not var saturēt Null vērtības.), ir grupēti un netiek izlaisti. Tomēr vērtības Null netiek novērtēti nevienā no SQL statistikas funkcijām.

Klauzula WHERE tiek izmantota, lai izslēgtu rindas, kuras nav jāgrupē. Klauzula HAVING tiek izmantota, lai filtrētu ierakstus pēc grupēšanas.

Lauki no lauku saraksta GROUP BY, kas nesatur Memo datu tipu (Memo Field datu tips. Lauka datu tips Microsoft Access datu bāzē. MEMO laukā var būt līdz 65535 rakstzīmēm.) vai OLE objektu (Field data type OLE objekts" Lauka datu tips, ko izmanto, lai saglabātu objektus no citām lietojumprogrammām, kas saistītas ar Microsoft Access datu bāzi vai ir iegultas tajā.) var atsaukties uz jebkuru lauku jebkurā tabulā, kas norādīta klauzulā FROM, pat ja lauks nav iekļauts priekšrakstā SELECT. Lai to izdarītu, pietiek ar vismaz vienu SQL statistikas funkciju SELECT priekšrakstā. Microsoft Access datu bāzes programma neļauj grupēt pēc laukiem, kas satur MEMO lauka vai OLE objekta datus.

Visiem laukiem lauku sarakstā SELECT ir jābūt ietvertiem GROUP BY klauzulā vai arī jābūt argumentiem SQL apkopošanas funkcijai.

Skatīt arī

SELECT paziņojums

SELECT...INTO paziņojums

Predikāti ALL, DISTINCT, DISTINCTROW, TOP

NO klauzulas

IR piedāvājums

PASŪTĪT PĒC klauzulas

KUR klauzula

SQL statistikas funkcijas

Avota lapa: http://office. /ru-ru/access/HA.aspx? pid=CH

IR piedāvājums

Definē grupētus ierakstus, kuriem jāparādās SELECT priekšrakstā ar klauzulu GROUP BY. Pēc tam, kad ieraksti ir sagrupēti, izmantojot klauzulu GROUP BY, klauzulā HAVING tiks parādīti tie, kas atbilst tās nosacījumiem.

Sintakse

ATLASĪT lauka_saraksts
NO tabula
KUR atlases_nosacījumi
GROUP BY group_field_list

SELECT priekšraksts, kas satur klauzulu HAVING, ietver šādus elementus:

Elements

Apraksts

lauka_saraksts

To lauku nosaukumi, kas tiek ielādēti kopā ar jebkuriem aizstājvārdiem (Alias (SQL). Alternatīvs nosaukums tabulai vai laukam izteiksmē. Pseidonīmi parasti tiek izmantoti kā īsāki tabulu vai lauku nosaukumi, lai programmās būtu vieglāk izmantot turpmākās atsauces, lai novērstu neskaidras atsauces un iegūtu informatīvākus nosaukumus, parādot vaicājuma rezultātus.) un SQL statistikas funkcijas, predikātus (ALL, DISTINCT, DISTINCTROW vai TOP) vai ar citiem SELECT priekšraksta parametriem.

tabula

Tabulas nosaukums, no kuras tiek ielādēti ieraksti

atlases_nosacījums

Atlases nosacījums. Ja paziņojumā ir ietverta klauzula WHERE, Microsoft Access datu bāzes programma grupēs vērtības pēc tam, kad tā tiks lietota ierakstiem.

group_field_list

Lauku nosaukumi (līdz 10), ko izmanto ierakstu grupēšanai. Vārdu secība group_field_list nosaka grupēšanas līmeni - no augstākā līdz zemākajam

grupas_nosacījums

Izteiksme, kas norāda parādāmos ierakstus

Piezīmes

HAVING klauzula nav obligāta.

HAVING klauzula ir līdzīga WHERE klauzulai, kas nosaka ierakstu atlasi. Pēc ierakstu grupēšanas ar klauzulu GROUP BY klauzula HAVING nosaka ierakstus, kas jāparāda.

SELECT TypeCode,

Summa (noliktavā)

NO produktiem

GROUP BY TypeCode

HAVING Sum (InStock) > 100 Un Like "TEL*";

Klauzulā HAVING var būt līdz 40 izteiksmēm, kas saistītas ar loģiskiem operatoriem, piemēram Un Un Or.

Avota lapa: http://office. /ru-ru/access/HA.aspx? pid=CH

PASŪTĪT PĒC klauzulas

Sakārto vaicājuma atgrieztos ierakstus augošā vai dilstošā secībā pēc norādītā(-o) lauka(-u) vērtībām.

Sintakse

ATLASĪT lauka_saraksts
NO tabula
KUR atlases_nosacījums
[, lauks2 ][, ...]]]

SELECT priekšraksts, kas satur klauzulu ORDER BY, ietver šādus elementus.

Elements

Apraksts

lauka_saraksts

Lauku nosaukumi, kas tiek izgūti kopā ar jebkuriem aizstājvārdiem (Alias (SQL). Alternatīvs nosaukums tabulai vai laukam izteiksmē. Pseidonīmi parasti tiek izmantoti kā īsāki tabulu vai lauku nosaukumi, lai programmās būtu vieglāk izmantot turpmākās atsauces, lai novērstu neskaidras atsauces un iegūtu informatīvākus nosaukumus, parādot vaicājuma rezultātus.) un SQL statistikas funkcijas, predikātus (ALL, DISTINCT, DISTINCTROW vai TOP) vai ar citiem SELECT priekšraksta parametriem.

tabula

Tabulas nosaukums, no kuras tiek izgūti ieraksti

atlases_nosacījumi

Atlases nosacījumi. Ja paziņojumā ir WHERE klauzula, tad pēc tā piemērošanas ierakstiem Microsoft Access datu bāzes programma sakārtos ierakstu vērtības.

lauks1, lauks2

Lauku nosaukumi, pēc kuriem tiek kārtoti ieraksti.

Piezīmes

Klauzula ORDER BY nav obligāta. To vajadzētu izmantot, ja nepieciešams parādīt datus sakārtotā veidā.

Noklusējuma kārtošanas secība ir (Sort Order. Veids, kā sakārtot datus, pamatojoties uz to vērtībām un veidu. Datus var kārtot alfabētiskā secībā, pēc skaitliskām vērtībām vai pēc datuma. Kārtošanas secība var būt augošā secībā (no 0 līdz 100, no A līdz Z) vai dilstošā (no 100 līdz 0, no Z līdz A).) augošā (no A līdz Z, no 0 līdz 9). Tālāk esošie piemēri parāda darbinieku vārdu kārtošanu pēc uzvārda.

IZVĒLĒTIES Uzvārds, Vārds

NO darbiniekiem

PASŪTĪT PĒC Uzvārda;

IZVĒLĒTIES Uzvārds, Vārds

NO darbiniekiem

PASŪTĪT PĒC Uzvārda ASC;

Lai kārtotu laukus dilstošā secībā (no Z līdz A, no 9 līdz 0), katra lauka nosaukumam pievienojiet rezervēto vārdu DESC. Nākamajā piemērā ir parādīta kārtošana dilstošā secībā, pamatojoties uz darbinieku algām.

IZVĒLĒTIES Uzvārds, Alga

NO darbiniekiem

PASĀKOT PĒC Algas DESC, Uzvārds;

Ja klauzulā ORDER BY norādāt laukus, kas satur datus, kuru tips ir MEMO lauks (Memo Field datu tips. Lauka datu tips Microsoft Access datu bāzē. MEMO laukā var būt līdz 65 535 rakstzīmēm.) vai OLE objekta lauks (OLE Object). Lauka datu tips "Lauka datu tips, ko izmanto, lai saglabātu objektus no citām lietojumprogrammām, kas ir saistītas ar Microsoft Access datu bāzi vai ir iegultas tajā.", tas radīs kļūdu. Microsoft Access datu bāzes programma nevar kārtot šos lauku tipus.

Klauzula ORDER BY parasti ir pēdējā klauzula SQL priekšrakstā (SQL priekšraksts (virkne). Izteiksme, kas definē SQL komandu, piemēram, SELECT, UPDATE vai DELETE, un ietver klauzulas, piemēram, WHERE vai ORDER BY. SQL priekšraksti). /virknes parasti izmanto vaicājumos un statistikas funkcijās.).

Klauzulā ORDER BY varat iekļaut papildu laukus. Ieraksti vispirms tiek sakārtoti pēc lauka, kas vispirms norādīts klauzulā ORDER BY. Pēc tam ieraksti ar vienādām vērtībām pirmajā laukā tiek sakārtoti pēc lauka, kas norādīts otrajā utt.
Skatīt arī

SELECT paziņojums

SELECT...INTO paziņojums

Predikāti ALL, DISTINCT, DISTINCTROW, TOP

NO klauzulas

GROUP BY klauzula

IR piedāvājums

KUR klauzula

SQL statistikas funkcijas

Avota lapa: http://office. /ru-ru/access/HA.aspx? pid=CH

INNER JOIN darbība

Savieno ierakstus no divām tabulām, ja šo tabulu savienojošajos laukos ir vienādas vērtības.

Sintakse

NO 1. tabula IEKŠĒJĀ PIEVIENOŠANĀS 2. tabula IESLĒGTS 1. tabula.lauks1 salīdzināšanas_operatoru tabula2.lauks2

INNER JOIN darbība sastāv no šādiem elementiem:

Elements

Apraksts

1. tabula, 2. tabula

To tabulu nosaukumi, kurās ir savienojamie ieraksti

lauks1, lauks2

Saistāmo lauku nosaukumi. Laukiem, kas nav skaitļi, ir jābūt tāda paša datu tipa (Datu tips. Lauka raksturlielums, kas nosaka datu veidu, ko lauks var saturēt. Datu veidi: Būla, Vesels skaitlis, Garš, Valūta, Viens, Dubults, Datums, Virkne, un Variant (noklusējums).) un satur tāda paša veida datus. Tomēr šo lauku nosaukumi var atšķirties

salīdzināšanas_operators

Jebkurš salīdzināšanas operators: (=,<, >, <=, >= vai<>)




Tops