Tietueiden lisääminen, poistaminen, päivittäminen tietokantaan. Kuinka lähettää kysely tietokantaan VBA Accessin avulla sql-kyselyjen luominen pääsyn kaimaissa

Laboratoriotyö nro 1

SQL: DATA EXTRACT - komentoVALITSE

Työn tavoite:

  • tutustua SQL-lauseisiin;
  • oppia luomaan yksinkertaisia ​​SQL-kyselyitä Accessissa SELECT-komennolla;

· operaattorien IN, BETWEEN, LIKE, käyttö ON NULL.

Harjoittele№1. Luo kysely valitaksesi SQL-tilassa kaikki ETUNIME- ja SUKUNIMI-kenttien arvot OPISKELIJAT-taulukosta.

VALITSE ETUNIMI, SUKUNIMI

OPISKELIJAILTA;

Harjoittele№2 . Luo kysely valitaksesi SQL-tilassa kaikki OPISKELIJAT-taulukon sarakkeet.

VALITSE *

OPISKELIJAILTA;


Tehtävä nro 3. Luo kysely valitaksesi SQL-tilassa opiskelijoiden asuinkaupunkien nimet, joista tiedot ovat HENKILÖTIEDOT-taulukossa.

VALITSE ERILAINEN KAUPUNGIN

FROM [HENKILÖTIEDOT];

Tehtävä nro 4. Luo SQL-tilassa valintakysely, joka hakee kaikkien opiskelijoiden nimet, joiden sukunimi on Ivanov, jonka tiedot ovat OPISKELIJAT-taulukossa.

VALITSE SUKUNIMI, ETUNIMI

OPISKELIJAILTA

WHERE LAST NAME="Ivanov";

Tehtävä nro 5. Luo valintakysely SQL-tilassa saadaksesi UIT-22-ryhmässä budjettikoulutusmuodossa opiskelevien opiskelijoiden etu- ja sukunimet.

VALITSE SUKUNIMI, ETUNIMI

OPISKELIJAILTA

WHERE GROUP="UIT-22" AND BUDGET=true;

Tehtävä nro 6. Luo kysely SQL-tilassa. TESTI-taulukon esimerkkinä tiedot opiskelijoista, joilla on vain arvosanat 4 ja 5.

VALITSE *

FROM [MUUTTAATUTKIMUKSET]

MISSÄARVOSANAIN(4,5);

Tehtävä nro 7. Luo zanpoc- ja SQL-tila valitaksesi tietoja opiskelijoista, joiden koearvosana on 3 IOSU-aiheessa.

VALITSE *

FROM [MUUTTAATUTKIMUKSET]

MISSÄKOHDE=" IOSU"JaARVOSANAEi sisällä (4,5);

Tehtävä nro 8. Luo kysely SQL-tilassa valitaksesi tietueet kohteille, joiden tunnit ovat 100–130.

VALITSE *

FROMTAVARAT

MISSÄKATSELLA100-130 VÄLILLÄ;


Tehtävä nro 9. Luo kysely SQL-tilassa valitaksesi OPISKELIJAT-taulukosta tiedot opiskelijoista, joiden sukunimet alkavat esimerkiksi kirjaimella “C”.

VALITSE *

FROMOPISKELIJAT

MISSÄSUKUNIMIKUTEN"KANSSA*";

Johtopäätös: Aikana laboratoriotyöt tutustuttiin SQL-ohjeisiin, opittiin luomaan yksinkertaisia ​​SQL-kyselyitä Accessissa SELECT-komennolla IN, BETWEEN, LIKE-operaattoreiden avulla.

Tämä oppitunti on omistettu SQL-kyselyt tietokantaan VBA pääsy. Katsomme, kuinka INSERT, UPDATE, DELETE kyselyt tehdään tietokantaan VBA:ssa, ja opimme myös kuinka saada tietty arvo SELECT-kyselystä.

Ne, jotka ohjelmoivat VBA pääsy työskennellessään tietokannan kanssa SQL-palvelin, hyvin usein he kohtaavat niin yksinkertaisen ja tarpeellisen tehtävän kuin SQL-kyselyn lähettäminen tietokantaan, olipa kyseessä INSERT, UPDATE tai yksinkertainen SQL SELECT -kysely. Ja koska olemme aloittelevia ohjelmoijia, meidän pitäisi myös pystyä tekemään tämä, joten teemme tänään juuri niin.

Olemme jo käsitelleet aihetta tietojen hankkimisesta SQL-palvelimelta, jossa kirjoitimme koodin VBA:ssa näiden tietojen saamiseksi, esimerkiksi artikkelissa Tietojen lataaminen tekstitiedostoon MSSql 2008:sta tai käsittelimme sitä myös vähän materiaalissa Tietojen lataaminen Accessista Word- ja Excel-malliin, mutta tavalla tai toisella katsoimme tätä pinnallisesti, ja tänään ehdotan, että puhumme tästä hieman yksityiskohtaisemmin.

Huomautus! Kaikki alla olevat esimerkit on otettu huomioon Access 2003 ADP -projektin ja MSSql 2008 -tietokannan avulla. Jos et tiedä mikä ADP-projekti on, tarkastelimme tätä materiaalissa Access ADP -projektin luominen ja määrittäminen

Lähdetiedot esimerkkejä varten

Oletetaan, että meillä on taulukko testi_taulukko, joka sisältää vuoden kuukausien numerot ja nimet (kyselyt Management Studio)

LUO TAULUKKO .( EI NULL, (50) NULL) JÄRJ

Kuten jo sanoin, käytämme ADP-projektia, joka on määritetty toimimaan MS SQL 2008:n kanssa, johon loin testilomakkeen ja lisäsin aloituspainikkeen allekirjoituksella. "Juosta", jota tarvitsemme koodimme testaamiseen, ts. Kirjoitamme kaiken koodin tapahtumakäsittelijään" Painikkeen painallus».

Kyselyt tietokantaan INSERT, UPDATE, DELETE VBA:ssa

Jotta ei viivyttele liian kauan, aloitetaan heti, sanotaan, että meidän on lisättävä rivi testitaulukkoomme ( koodi kommentoi)/

Private Sub start_Click() "Ilmoita muuttuja kyselymerkkijonon tallentamiseksi Dim sql_query As String "Kirjoita siihen tarvittava kysely sql_query = "INSERT INTO test_table (id, name_mon) ARVOT ("6", "kesäkuu")" "Suorita it DoCmd RunSQL sql_query End Sub

Tässä tapauksessa kysely suoritetaan käyttämällä nykyisiä tietokantayhteysparametreja. Voimme tarkistaa, onko tiedot lisätty vai ei.

Kuten näet, tiedot on lisätty.

Yhden rivin poistamiseksi kirjoitamme seuraavan koodin.

Private Sub start_Click() "Ilmoita muuttuja kyselymerkkijonon tallentamiseksi Dim sql_query merkkijonona "Kirjoita siihen poistokysely sql_query = "POISTA testitaulukko WHERE id = 6" "Suorita se DoCmd.RunSQL sql_query End Sub

Jos tarkistamme, näemme, että haluttu rivi on poistettu.

Päivitä tiedot kirjoittamalla sql_query-muuttujaan päivityspyyntö, Toivottavasti merkitys on selvä.

SELECT kysely tietokantaan VBA:ssa

Täällä asiat ovat hieman mielenkiintoisempia kuin muissa SQL-rakenteissa.

Oletetaan ensin, että meidän on saatava kaikki tiedot taulukosta, ja esimerkiksi käsittelemme sen ja näytämme sen viestissä, ja voit tietysti käyttää sitä muihin tarkoituksiin, tätä varten kirjoitamme seuraavan koodi

Private Sub start_Click() "Ilmoita muuttujat "Tietuejoukolle tietokannasta Dim RS As ADODB.Recordset "Kyselymerkkijono Dim sql_query As String "Merkkijono yhteenvetotietojen näyttämiseen viestissä Dim str As String "Luo uusi objekti tietueille set RS = Uusi ADODB .Recordset "Query line sql_query = "SELECT id, name_mon FROM test_table" "Suorita kysely nykyisten projektin yhteysasetusten avulla RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic Vaikka ei silmukkaa tietueen läpi RS.EOF) "Täytä muuttuja näyttääksesi viestin str = str & RS.Fields("id") & "-" & RS.Fields("name_mon") & vbnewline "siirry seuraavaan tietueeseen RS.MoveNext Wend " Tulosta viesti msgbox str End Sub

Täällä käytämme jo VBA Access -silmukoita iteroidaksemme kaikki tietuejoukossamme olevat arvot.

Mutta melko usein ei tarvitse saada kaikkia arvoja tietuejoukosta, vaan vain yksi, esimerkiksi kuukauden nimi sen koodilla. Ja tätä varten silmukan käyttäminen on kallista, joten voimme yksinkertaisesti kirjoittaa kyselyn, joka palauttaa vain yhden arvon ja käyttää sitä, esimerkiksi saamme kuukauden nimen koodilla 5

Private Sub start_Click() "Ilmoita muuttujat" Tietuejoukolle tietokannasta Dim RS As ADODB.Recordset "Kyselymerkkijono Dim sql_query As String "Merkkijono lopullisen arvon näyttämiseksi Dim str As String "Luo uusi objekti tietuejoukolle RS = Uusi ADODB.Recordset "Query line sql_query = "SELECT name_mon FROM test_table WHERE id = 5" "Suorita kysely nykyisten projektin yhteysasetusten RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic = "RS. Kentät(0) msgbox str End Sub

Universaalisuuden vuoksi olemme jo käsitelleet tässä ei solun nimen, vaan sen indeksin, ts. 0, ja tämä on ensimmäinen arvo Recordset, lopulta saimme arvon "Saattaa".

Kuten näet, kaikki on melko yksinkertaista. Jos tarvitset usein tietyn arvon tietokannasta ( kuten viimeisessä esimerkissä), suosittelen koko koodin tulostamista erilliseen funktioon (funktion kirjoittaminen VBA Access 2003:ssa) yhdellä syöttöparametrilla, esimerkiksi kuukausikoodilla ( jos ajattelemme esimerkkiämme) ja yksinkertaisesti, jos tämä arvo on tarpeen näyttää, kutsu tarvitsemamme funktio vaaditulla parametrilla ja siinä kaikki, tekemällä näin vähennämme merkittävästi VBA-koodia ja parannamme ohjelmamme käsitystä.

Siinä kaikki tältä päivältä. Onnea!

Kuvaus koulutusprojektista "Kauppa"

Taulukon linkkikaavio

Taulukoiden kuvaus

m_category - tuoteluokat

m_tulo - tavaran vastaanotto

m_outcome - tavaroiden kulutus

m_product - hakemisto, tuotekuvaukset

m_supplier - hakemisto; toimittajan tiedot

m_yksikkö - hakemisto; yksiköitä

Jotta voit käytännössä testata tässä koulutusmateriaalissa annettuja esimerkkejä, sinulla on oltava seuraava ohjelmisto:

Microsoft Access 2003 tai uudempi.

SQL-kysely MS Accessissa. alkaa

Näet taulukon sisällön kaksoisnapsauttamalla taulukon nimeä vasemmassa paneelissa:

Voit siirtyä taulukkokentän muokkaustilaan napsauttamalla yläpaneeli valitse suunnittelutila:

Voit näyttää SQL-kyselyn tuloksen kaksoisnapsauttamalla kyselyn nimeä vasemmassa ruudussa:

Voit vaihtaa SQL-kyselyn muokkaustilaan valitsemalla yläpaneelista SQL-tilan:

SQL-kysely. Esimerkkejä MS Accessista. VALITSE: 1-10

SQL-kyselyssä SELECT-käskyä käytetään valintaan tietokantataulukoista.

SQL-kysely Q001. Esimerkki SQL-kyselystä saadaksesi vain vaaditut kentät halutussa järjestyksessä:

SELECT dt, product_id, summa


FROM m_tulo;

SQL-kysely Q002. Tässä esimerkissä SQL-kyselyssä tähtimerkkiä (*) käytetään listaamaan kaikki m_product-taulukon sarakkeet, toisin sanoen saadakseen kaikki m_product-relaation kentät:

VALITSE *
FROM m_product;

PyyntöSQL Q003. DISTINCT-käskyä käytetään poistamaan päällekkäisiä merkintöjä ja hankkimaan useita yksilöllisiä merkintöjä:

VALITSE ERI tuotteen_tunnus


FROM m_tulo;

SQL-kysely Q004. ORDER BY -käskyä käytetään tietueiden lajitteluun (järjestykseen) tietyn kentän arvojen mukaan. Kentän nimi määritetään ORDER BY -käskyn jälkeen:

VALITSE *
M_tulolta


TILAA hinnan mukaan;

SQL-kysely Q005. ASC-käskyä käytetään ORDER BY -käskyn täydennyksenä, ja se määrittää nousevan lajittelun. DESC-käskyä käytetään ORDER BY -käskyn lisäksi, ja sitä käytetään laskevan lajittelun määrittämiseen. Jos ASC:tä tai DESC:tä ei ole määritetty, oletetaan ASC:n olemassaolo (oletus):

VALITSE *
M_tulolta


TILAA dt DESC:llä, hinta;

SQL-kysely Q006. Tarvittavien tietueiden valitsemiseksi taulukosta käytetään erilaisia ​​loogisia lausekkeita, jotka ilmaisevat valintaehdon. Boolen lauseke näkyy WHERE-käskyn jälkeen. Esimerkki kaikkien tietueiden hakemisesta m_income-taulukosta, jonka summan arvo on suurempi kuin 200:

VALITSE *
M_tulolta


WHERE määrä>200;

SQL-kysely Q007. Ilmaisua varten vaikeita olosuhteita käytä loogisia operaattoreita AND (konjunktio), OR (disjunktio) ja NOT (looginen negaatio). Esimerkki kaikkien tietueiden saamisesta m_outcome-taulukosta, joiden summa-arvo on 20 ja hinta-arvo on suurempi tai yhtä suuri kuin 10:

Hinta


FROM m_outcome
WHERE määrä=20 JA hinta>=10;

SQL-kysely Q008. Liitä tiedot kahdesta tai useammasta taulukosta käyttämällä SISÄLIITTYMINEN, VASEMMALLE LIITTYMINEN, OIKEA LIITTYMINEN -ohjeita. Seuraava esimerkki hakee dt-, product_id-, summa-, hinta-kentät m_tulotaulukosta ja otsikkokentät m_tuotetaulukosta. M_tulotaulukon tietue liitetään m_tuotetaulukkotietueeseen, kun m_tulo.tuotetunnus on yhtä suuri kuin m_tuote.id:n arvo:



PÄÄLLÄ m_tulo.tuotetunnus=m_tuote.tunnus;

SQL-kysely Q009. Tässä SQL-kyselyssä on huomioitava kaksi asiaa: 1) etsimäsi teksti on suljettu yksittäisiä lainauksia("); 2) päivämäärä annetaan muodossa #Kuukausi/Päivä/Vuosi#, mikä pätee MS Accessiin. Muissa järjestelmissä päivämäärän kirjoitusmuoto voi olla erilainen. Esimerkki kuitin tietojen näyttämisestä maitoa 12. kesäkuuta 2011. Huomaa päivämäärämuoto #6/12/2011#:

SELECT dt, product_id, title, summa, price


FROM m_income SISÄLITYS m_product

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

SQL-kysely Q010. BETWEEN-käskyä käytetään testaamaan, kuuluuko arvo tietylle alueelle. Esimerkki SQL-kyselystä, joka näyttää tietoja tuotteista, jotka on vastaanotettu 1.–30. kesäkuuta 2011:

VALITSE *
FROM m_income SISÄLITYS m_product


ON m_tulo.tuotetunnus=m_tuote.tunnus
MISSÄ dt VÄLILLÄ #6/1/2011# ja #6/30/2011#;

SQL-kysely. Esimerkkejä MS Accessista. VALITSE: 11-20

Yksi SQL-kysely voidaan upottaa toiseen. Alikysely ei ole muuta kuin kysely kyselyn sisällä. Tyypillisesti alikyselyä käytetään WHERE-lauseessa. Mutta on muitakin tapoja käyttää alikyselyjä.

Kysely Q011. Näkyviin tulee tiedot tuotteista m_tuotetaulukosta, joiden koodit ovat myös m_tulotaulukossa:

VALITSE *
FROM m_product


WHERE id IN (SELECT tuotetunnus FROM m_tulo);

Kysely Q012. Näkyviin tulee luettelo tuotteista m_product-taulukosta, joiden koodit eivät ole m_outcome-taulukossa:

VALITSE *
FROM m_product


WHERE id NOT IN (SELECT product_id FROM m_outcome);

Pyydä Q013. Tämä SQL-kysely näyttää yksilöllisen luettelon tuotekoodeista ja nimistä, jotka ovat m_income-taulukossa mutta eivät m_outcome-taulukossa:

SELECT DISTINCT product_id, title


FROM m_income SISÄLITYS m_product
ON m_tulo.tuotetunnus=m_tuote.tunnus
WHERE product_id NOT IN (SELECT product_id FROM m_outcome);

Kysely Q014. Yksilöllinen luettelo luokista, joiden nimet alkavat kirjaimella M, näytetään m_category-taulukossa:

SELECT DISTINCT otsikko


FROM m_product
MISSÄ otsikko LIKE "M*";

Kysely Q015. Esimerkki aritmeettisten operaatioiden suorittamisesta kyselyn kentille ja kenttien uudelleennimeämisestä kyselyssä (alias). Tässä esimerkissä lasketaan kulut = määrä*hinta ja voitto kullekin tuotekululle, olettaen, että voitto on 7 prosenttia myynnistä:


määrä*hinta/100*7 AS voittoa
FROM m_outcome;

Kysely Q016. Analysoimalla ja yksinkertaistamalla aritmeettisia operaatioita voit nopeuttaa kyselyn suoritusta:

SELECT dt, tuotteen_tunnus, summa, hinta, summa*hinta AS loppusumma,


tulos_summa*0,07 AS-voitto
FROM m_outcome;

Pyydä Q017. Voit käyttää INNER JOIN -käskyä useiden taulukoiden tietojen yhdistämiseen. Seuraavassa esimerkissä ctgry_id:n arvosta riippuen jokainen m_income-taulukon merkintä yhdistetään sen luokan nimeen m_category-taulukosta, johon tuote kuuluu:

SELECT c.title, b.title, dt, summa, hinta, summa*hinta AS tulon_summa


FROM (m_tulo SISÄLIITTYMÄNÄ m_product AS b ON a.product_id=b.id)
SISÄLIITTYMINEN m_category AS c ON b.ctgry_id=c.id
JÄRJESTYS c.title, b.title;

Pyydä Q018. Toimintoja, kuten SUM - summa, COUNT - määrä, AVG - aritmeettinen keskiarvo, MAX - maksimiarvo, MIN - minimiarvo, kutsutaan yhdistelmäfunktioiksi. Ne hyväksyvät useita arvoja ja käsittelyn jälkeen palauttavat yhden arvon. Esimerkki summa- ja hintakenttien tulon summan laskemisesta SUM-aggregaattifunktiolla:

SELECT SUM(summa*hinta) AS Total_Sum


FROM m_tulo;

Kysely Q019. Esimerkki useiden koontifunktioiden käyttämisestä:

SELECT Summa(summa) AS Summa_Summa, AVG(määrä) AS Summa_AVG,


MAX(summa) AS Summa_Max, Min(määrä) AS Summa_Minimi,
Count(*) AS Total_Number
FROM m_tulo;

Pyydä Q020. Tässä esimerkissä lasketaan kaikkien koodilla 1 merkittyjen tavaroiden määrä isoilla kirjaimilla kesäkuussa 2011:

SELECT Sum(summa*hinta) AS tulon_summa


M_tulolta
WHERE product_id=1 AND dt BETWEEN #6/1/2011# JA #6/30/2011#;.

Kysely Q021. Seuraava SQL-kysely laskee koodilla 4 tai 6 olevien tuotteiden myynnin määrän:

SELECT Sum(summa*hinta) tulokseksi_summa


FROM m_outcome
WHERE tuotteen_tunnus=4 TAI tuotteen_tunnus=6;

Kysely Q022. Lasketaan kuinka paljon koodilla 4 tai 6 merkittyjä tavaroita myytiin 12.6.2011:

SELECT Summa(summa*hinta) AS lopputuloksen_summa


FROM m_outcome
WHERE (tuotetunnus=4 TAI tuotteen_tunnus=6) JA dt=#6/12/2011#;

Kysely Q023. Tehtävä on tämä. Laske "Leipomotuotteet"-luokan tavaroiden kokonaismäärä, jotka merkittiin isoilla kirjaimilla.

Tämän ongelman ratkaisemiseksi sinun on käytettävä kolme taulukkoa: m_tulo, m_tuote ja m_luokka, koska:


- aktivoitujen tavaroiden määrä ja hinta tallennetaan taulukkoon m_income;
- kunkin tuotteen luokkakoodi on tallennettu m_product -taulukkoon;
- otsikkoluokan nimi tallennetaan m_category-taulukkoon.

Tämän ongelman ratkaisemiseksi käytämme seuraavaa algoritmia:


- luokkakoodin "Leipomotuotteet" määrittäminen m_category-taulukosta alikyselyllä;
- m_income- ja m_product-taulukoiden yhdistäminen kunkin ostetun tuotteen luokan määrittämiseksi;
- kuittisumman laskeminen (= määrä*hinta) tavaroille, joiden luokkakoodi on sama kuin yllä olevassa alikyselyssä määritetty koodi.
VALITSE
M_TUOTTEESTA SISÄLIITTYMÄNÄ m_tulo AS b ON a.id=b.product_id
WHERE ctgry_id = (SELECT id FROM m_category WHERE title="Leipomotuotteet"); !}

Kysely Q024. Ratkaisemme "Leipomotuotteet"-luokan pääomatuotteiden kokonaismäärän laskemisongelman seuraavalla algoritmilla:
- Jokaisen merkinnän m_income taulukossa, riippuen sen product_id arvosta, m_category taulukosta vastaa luokan nimeä;
- valitse tietueet, joiden luokka on "Leipomotuotteet";
- laske kuitin määrä = määrä*hinta.

FROM (m_product AS A INNER JOIN m_income AS b ON a.id=b.product_id)

WHERE c.title="Leipomotuotteet"; !}

Kysely Q025. Tämä esimerkki laskee, kuinka monta tavaraa kulutettiin:

SELECT COUNT(product_id) AS product_cnt


FROM (SELECT DISTINCT product_id FROM m_outcome) AS t;

Kysely Q026. GROUP BY -käskyä käytetään tietueiden ryhmittelyyn. Tyypillisesti tietueet ryhmitellään yhden tai useamman kentän arvon mukaan, ja jokaiseen ryhmään sovelletaan jotakin koontioperaatiota. Esimerkiksi seuraava kysely luo raportin tavaroiden myynnistä. Toisin sanoen luodaan taulukko, joka sisältää tavaroiden nimet ja määrän, jolla ne myytiin:

SELECT otsikko, SUM(summa*hinta) AS lopputuloksen_summa


FROM m_product AS SISÄLIITTYMÄNÄ m_outcome AS b
ON a.id=b.product_id
GROUP BY otsikon mukaan;

Pyydä Q027. Myyntiraportti kategorioittain. Toisin sanoen luodaan taulukko, joka sisältää tuotekategorioiden nimet, kokonaismäärän, jolla näiden luokkien tuotteita myytiin, ja keskimääräisen myyntimäärän. ROUND-funktiota käytetään pyöristämään keskiarvo lähimpään sadasosaan (toinen numero desimaalierottimen jälkeen):

SELECT c.title, SUM(summa*hinta) AS lopputuloksen_summa,


ROUND(AVG(määrä*hinta),2) AS tulos_summa_keskiarvo
FROM (m_product AS SISÄLIITTYMÄNÄ m_outcome AS b ON a.id=b.product_id)
SISÄLIITTYMINEN m_category AS c ON a.ctgry_id=c.id
GROUP BY c.title;

Kysely Q028. Sen kuittien kokonais- ja keskimääräinen määrä lasketaan kullekin tuotteelle ja näyttää tiedot tuotteista, joiden kuittien kokonaismäärä on vähintään 500:

SELECT product_id, SUM(summa) AS summa_sum,


Pyöreä(Keskim.(määrä),2) AS summa_avg
M_tulolta
GROUP BY product_id
HAVING Sum(summa)>=500;

Kysely Q029. Tämä kysely laskee kullekin tuotteelle sen vuoden 2011 toisella neljänneksellä saatujen tulojen määrän ja keskiarvon. Jos tuotekuitin kokonaissumma on vähintään 1000, tämän tuotteen tiedot näytetään:

VALITSE otsikko, SUMMA(summa*hinta) AS tulon_summa


M_TULOSTA a SISÄLIITTYMISESTÄ m_product b ON a.product_id=b.id
MISSÄ dt 1.4.2011# JA 30.6.2011# VÄLILLÄ
GROUP BY otsikon mukaan
ON SUMMA(määrä*hinta)>=1000;

Kysely Q030. Joissakin tapauksissa sinun on yhdistettävä jonkin taulukon jokainen tietue toisen taulukon jokaiseen tietueeseen; jota kutsutaan karteesiseksi tuotteeksi. Tällaisesta yhteydestä muodostuvaa taulukkoa kutsutaan Descartesin taulukoksi. Jos esimerkiksi jossain taulukossa A on 100 tietuetta ja taulukossa B on 15 tietuetta, niiden Descartes-taulukko koostuu 100*15=150 tietueesta. Seuraava kysely yhdistää jokaisen m_income-taulukon tietueen jokaisen m_outcome-taulukon tietueen kanssa:
FROM m_tulo, m_tulos;

Kysely Q031. Esimerkki tietueiden ryhmittelystä kahden kentän mukaan. Seuraava SQL-kysely laskee kullekin toimittajalle häneltä vastaanotettujen tavaroiden määrän ja määrän:


SUMMA(määrä*hinta) AS tulon_summa

Pyydä Q032. Esimerkki tietueiden ryhmittelystä kahden kentän mukaan. Seuraava kysely laskee kullekin toimittajalle myymiemme tuotteiden määrän ja määrän:

SELECT toimittajan_tunnus, tuotteen_tunnus, SUMMA(määrä) AS summa_summa,




GROUP BY toimittajan_tunnus, tuotetunnus;

Kysely Q033. Tässä esimerkissä kahta yllä olevaa kyselyä (q031 ja q032) käytetään alikyselyinä. Näiden LEFT JOIN -menetelmää käyttävien kyselyiden tulokset yhdistetään yhdeksi raportiksi. Seuraava kysely näyttää raportin kunkin toimittajan vastaanotettujen ja myytyjen tuotteiden määrästä ja määrästä. Huomaa, että jos jokin tuote on jo vastaanotettu, mutta sitä ei ole vielä myyty, tämän merkinnän result_sum-solu on tyhjä. että tämä kysely on vain esimerkki suhteellisen monimutkaisten kyselyjen käyttämisestä alikyselynä. Tämän SQL-kyselyn suorituskyky suurella tietomäärällä on kyseenalainen:

VALITSE *
FROM



SUMMA(määrä*hinta) AS tulon_summa

ON a.product_id=b.id RYHMÄ toimittajan_tunnuksen, tuotteen_tunnuksen mukaan) AS a
LEFT LIITY
(VALITSE toimittajan_tunnus, tuotteen_tunnus, SUMMA(määrä) AS summa_summa,
SUMMA(määrä*hinta) AS lopputuloksen_summa
FROM m_outcome AS SISÄLIITTYMÄNÄ m_product AS b
ON a.product_id=b.id RYHMÄ toimittajan_tunnuksen, tuotteen_tunnuksen mukaan) AS b
PÄÄLLÄ (a.product_id=b.product_id) JA (a.supplier_id=b.supplier_id);

Kysely Q034. Tässä esimerkissä kahta yllä olevaa kyselyä (q031 ja q032) käytetään alikyselyinä. Näiden RIGTH JOIN -menetelmää käyttävien kyselyiden tulokset yhdistetään yhdeksi raportiksi. Seuraava kysely näyttää raportin kunkin asiakkaan maksujen määrästä hänen käyttämiensa maksujärjestelmien ja tekemien investointien mukaan. Seuraava kysely näyttää raportin kunkin toimittajan vastaanotettujen ja myytyjen tuotteiden määrästä ja määrästä. Huomaa, että jos jokin tuote on jo myyty, mutta ei ole vielä saapunut, tämän merkinnän tulo_summa-solu on tyhjä. Tällaisten tyhjien solujen esiintyminen on merkki myyntilaskennan virheestä, koska ennen myyntiä on ensin saatava vastaava tuote perille:

VALITSE *
FROM


(VALITSE toimittajan_tunnus, tuotteen_tunnus, SUMMA(määrä) AS summa_summa,
SUMMA(määrä*hinta) AS tulon_summa
M_TULOSTA SISÄLIITTYMÄNÄ m_product AS b ON a.product_id=b.id
RYHMÄ toimittajan_tunnuksen, tuotteen_tunnuksen mukaan) AS a
OIKEA LIITTYMINEN
(VALITSE toimittajan_tunnus, tuotteen_tunnus, SUMMA(määrä) AS summa_summa,
SUMMA(määrä*hinta) AS lopputuloksen_summa
FROM m_outcome SISÄLIITTYMÄNÄ m_product AS b ON a.product_id=b.id
RYHMÄ toimittajan_tunnuksen, tuotteen_tunnuksen mukaan) AS b
PÄÄLLÄ (a.supplier_id=b.supplier_id) JA (a.product_id=b.product_id);

Kysely Q035. Näkyviin tulee raportti, jossa näkyy tulojen ja menojen määrä tuotteittain. Tätä varten luodaan luettelo tuotteista m_income- ja m_outcome-taulukoiden mukaisesti, sitten jokaiselle tämän luettelon tuotteelle lasketaan sen tuottojen summa m_tulotaulukon mukaisesti ja sen kulujen summa m_tulostaulukon mukaan:

SELECT product_id, SUM(in_summa) AS tulon_summa,


SUM(out_amount) AS lopputuloksen_summa
FROM
(SELECT product_id, summa AS in_amount, 0 AS out_amount
M_tulolta
UNIONI KAIKKI
SELECT product_id, 0 AS in_amount, summa AS out_amount
FROM m_outcome) AS t
GROUP BY product_id;

Kysely Q036. EXISTS-funktio palauttaa TOSI, jos sille välitetty joukko sisältää elementtejä. EXISTS-funktio palauttaa EPÄTOSI, jos sille välitetty joukko on tyhjä, eli se ei sisällä elementtejä. Seuraava kysely näyttää tuotekoodit, jotka sisältyvät sekä m_income- että m_outcome-taulukoihin:

VALITSE ERI tuotteen_tunnus


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

Kysely Q037. Tuotekoodit, jotka sisältyvät sekä m_income- että m_outcome-taulukoihin, näytetään:

VALITSE ERI tuotteen_tunnus


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

Kysely Q038. Näytetään tuotekoodit, jotka sisältyvät m_income-taulukkoon, mutta jotka eivät sisälly m_outcome-taulukkoon:

VALITSE ERI tuotteen_tunnus


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

Kysely Q039. Näkyviin tulee luettelo tuotteista, joiden myyntimäärä on suurin. Algoritmi on seuraava. Jokaiselle tuotteelle lasketaan sen myynnin määrä. Sitten määritetään näiden määrien enimmäismäärä. Sitten jokaiselle tuotteelle lasketaan uudelleen sen myynnin summa ja näytetään koodi ja niiden tavaroiden myyntisumma, joiden myyntisumma on maksimi:

SELECT tuotetunnus, SUMMA(määrä*hinta) AS summa_sum


FROM m_outcome
GROUP BY product_id
ON SUMMA(määrä*hinta) = (VALITSE MAKSIMI(s_määrä)
FROM (VALITSE SUMMA(määrä*hinta) AS s_summa FROM m_tulos GROUP BY product_id));

Kysely Q040. Varattu sana IIF ( ehdollinen operaattori) käytetään arvioimaan Boolen lauseke ja suorittamaan toiminto tuloksen mukaan (TRUE tai FALSE). Seuraavassa esimerkissä tuotteen toimitus katsotaan "pieneksi", jos määrä on pienempi kuin 500. Muussa tapauksessa, eli kuittimäärä on suurempi tai yhtä suuri kuin 500, toimitus katsotaan "suureksi":

SELECT dt, product_id, summa,


IIF(summa M_tulo;

SQL-kysely Q041. Jos IIF-operaattoria käytetään useita kertoja, on kätevämpää korvata se SWITCH-operaattorilla. SWITCH-operaattoria (multiple selection operator) käytetään arvioimaan looginen lauseke ja suorittamaan toiminto tuloksesta riippuen. Seuraavassa esimerkissä toimitettu erä katsotaan "pieneksi", jos tavaran määrä erässä on alle 500. Muussa tapauksessa, eli jos tavaramäärä on suurempi tai yhtä suuri kuin 500, erää pidetään "suurena". ":

SELECT dt, product_id, summa,


SWITCH(määrä =500"suuri") AS-merkki
FROM m_tulo;

Kysely Q042. Seuraavassa pyynnössä, jos tavaramäärä vastaanotetussa erässä on alle 300, erää pidetään "pienenä". Muussa tapauksessa, jos ehdon määrä SELECT dt, tuotetunnus, summa,
IIF(määrä IIF(määrä M_tulo;

SQL-kysely Q043. Seuraavassa pyynnössä, jos tavaramäärä vastaanotetussa erässä on alle 300, erää pidetään "pienenä". Muussa tapauksessa, jos ehdon määrä SELECT dt, tuotetunnus, summa,
SWITCH(summa summa>=1000"suuri") AS-merkki
FROM m_tulo;

SQL-kysely Q044. Seuraavassa kyselyssä myynti on jaettu kolmeen ryhmään: pieni (enintään 150), keskikokoinen (150 - 300), suuri (300 tai enemmän). Seuraavaksi lasketaan kunkin ryhmän kokonaismäärä:

SELECT Luokka, SUM(tulossumma) AS Ctgry_Total


FROM (VALITSE summa*hinta AS loppusumma,
IIf(määrä*hinta IIf(määrä*hinta M_tulos) AS t
GROUP BY Kategoriat;

SQL-kysely Q045. DateAdd-toimintoa käytetään lisäämään päiviä, kuukausia tai vuosia tiettyyn päivämäärään ja hankkimaan uusi päivämäärä. Seuraava pyyntö:
1) lisää 30 päivää päivämäärään dt-kentästä ja näyttää uuden päivämäärän dt_plus_30d-kentässä;
2) lisää 1 kuukauden päivämäärään dt-kentästä ja näyttää uuden päivämäärän dt_plus_1m-kentässä:

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


FROM m_tulo;

SQL-kysely Q046. DateDiff-funktio on suunniteltu laskemaan ero kahden päivämäärän välillä eri yksiköissä (päivät, kuukaudet tai vuodet). Seuraava kysely laskee dt-kentän päivämäärän ja nykyisen päivämäärän välisen eron päivinä, kuukausina ja vuosina:

SELECT dt, DateDiff("d",dt,Date()) AS viime_päivä,


DateDiff("m",dt,Date()) AS viimeiset_kuukaudet,
DateDiff("yyyy",dt,Date()) AS viime_vuodet
FROM m_tulo;

SQL-kysely Q047. Päivämäärä tavaroiden vastaanottopäivästä (taulukko m_tulo) nykyiseen päivämäärään lasketaan DateDiff-funktiolla ja verrataan viimeistä käyttöpäivää (taulukko m_tuote):


DateDiff("d",dt,Date()) AS viimeiset_päivät
FROM m_income AS SISÄLIITTYMÄNÄ m_product AS b
PÄÄLLÄ a.product_id=b.id;

SQL-kysely Q048. Päivien lukumäärä tavaroiden vastaanottopäivästä nykyiseen päivään lasketaan, sitten tarkistetaan, ylittääkö tämä määrä viimeistä käyttöpäivää:

SELECT a.id, product_id, dt, lifedays,


DateDiff("d",dt,Date()) AS viime_päivät, IIf(viimeiset_päivät>elinpäivää,"Kyllä","Ei") AS date_expire
FROM m_income a INNER JOIN m_product b
PÄÄLLÄ a.product_id=b.id;

SQL-kysely Q049. Lasketaan kuukausien lukumäärä tavaroiden vastaanottopäivästä kuluvaan päivään. Sarake month_last1 laskee kuukausien absoluuttisen määrän, sarake month_last2 laskee kokonaisten kuukausien määrän:

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


DateDiff("m",dt,Date())-iif(päivä(dt)>päivä(päivä()),1,0) AS kuukausi_viimeinen2
FROM m_tulo;

SQL-kysely Q050. Neljännesvuosittainen raportti näytetään vuodelle 2011 ostettujen tavaroiden määrästä:

SELECT kvartal, SUM(tulossumma) AS Yhteensä


FROM (VALITSE summa*hinta AS loppusumma, kuukausi(dt) AS m,
SWITCH(m = 10,4) AS kvartal
FROM m_income WHERE vuosi(dt)=2011) AS t
GROUP BY neljännesvuosittain;

Kysely Q051. Seuraava kysely auttaa selvittämään, ovatko käyttäjät pystyneet syöttämään järjestelmään tietoja tavaroiden kulutuksesta suuremman määrän kuin vastaanotettujen tavaroiden määrä:

SELECT product_id, SUM(in_sum) AS tulon_summa, SUM(out_sum) AS tulossumma


FROM (VALITSE tuotteen_tunnus, summa*hinta muodossa in_sum, 0 muodossa out_sum
m_tulosta
UNIONI KAIKKI
SELECT product_id, 0 in_sum, summa*hinta muodossa out_sum
m_outcome) AS t
GROUP BY product_id
ON SUMMA(summassa)
Kysely Q052. Kyselyn palauttamien rivien numerointi on toteutettu eri tavoin. Voit esimerkiksi numeroida uudelleen MS Accessissa laaditun raportin rivit käyttämällä itse MS Accessia. Voit myös numeroida uudelleen käyttämällä ohjelmointikieliä, esimerkiksi VBA tai PHP. Joskus tämä on kuitenkin tehtävä itse SQL-kyselyssä. Joten seuraava kysely numeroi m_income-taulukon rivit ID-kentän arvojen nousevassa järjestyksessä:

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


FROM m_tulo a SISÄINEN LIITTYMINEN m_tulo b ON a.id GROUP BY b.id, b.product_id, b.amount, b.price;

Kysely Q053. Tuotteiden viisi parasta tuotetta myyntimäärien mukaan näytetään. Ensimmäiset viisi tietuetta tulostetaan TOP-ohjeen mukaan:

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


FROM m_outcome
GROUP BY product_id
TILAA summan mukaan(määrä*hinta) DESC;

Kysely Q054. Tuotteiden viisi parasta tuotetta myyntimäärien mukaan näytetään, ja rivit on numeroitu tuloksena:

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


FROM


FROM m_outcome GROUP BY product_id) AS a
SISÄLIITTYMINEN
(SELECT product_id, summa(summa*hinta) AS summa,
summa*10000000+product_id AS-tunnus
FROM m_outcome GROUP BY product_id) AS b
ON a.id>=b.id
GROUP BY b.product_id, b.summa
HAVING COUNT(*)JÄRJESTYKSEN MUKAAN(*);

Kysely Q055. Seuraava SQL-kysely näyttää matemaattisten funktioiden COS, SIN, TAN, SQRT, ^ ja ABS käytön MS Access SQL:ssä:

SELECT (valitse määrä(*) m_tulosta) muodossa N, 3,1415926 pi, k,


2*pi*(k-1)/N muodossa x, COS(x) muodossa COS_, SIN(x) muodossa SIN_, TAN(x) muodossa TAN_,
SQR(x) muodossa SQRT_, x^3 muodossa "x^3", ABS(x) muodossa ABS_
FROM (SELECT COUNT(*) AS k
FROM m_income AS SISÄLIITTYMÄNÄ m_tulo AS b ON a.idGROUP BY BY b.id) t;

SQL-kysely. Esimerkkejä MS Accessista. PÄIVITYS: 1-10

Kysely U001. Seuraava SQL-muutoskysely nostaa m_income-taulukon koodilla 3 olevien tavaroiden hintoja 10 %:

PÄIVITYS m_tulo SET hinta = hinta*1.1


WHERE tuotteen_tunnus=3;

Pyydä U002. Seuraava SQL-päivityskysely lisää kaikkien m_income-taulukon tuotteiden määrää 22 yksiköllä, joiden nimet alkavat sanalla "Oil":

PÄIVITYS m_tulo SET summa = summa+22


WHERE product_id IN (SELECT id FROM m_product WHERE otsikko LIKE "Öljy*");

Pyydä U003. Seuraava SQL-kysely m_outcome-taulukon muutoksesta alentaa kaikkien Sladkoe LLC:n valmistamien tuotteiden hintoja 2 prosenttia:

PÄIVITYS m_outcome SET hinta = hinta*0,98


WHERE product_id IN
(VALITSE a.id FROM m_product a INNER JOIN m_supplier b
ON a.supplier_id=b.id WHERE b.title="LLC"Сладкое"");. !}

Tietueiden lisääminen, poistaminen, päivittäminen tietokantaan

ExecuteReader()-menetelmä hakee tiedonlukijaobjektin, jonka avulla voit tarkastella SQL Select -käskyn tuloksia käyttämällä vain luku -muotoista tietovirtaa. Jos sinun on kuitenkin suoritettava SQL-lauseita, jotka muokkaavat tietotaulukkoa, sinun on kutsuttava menetelmä ExecuteNonQuery() tästä esineestä joukkueet. Tämä yksittäinen menetelmä on suunniteltu suorittamaan lisäyksiä, muutoksia ja poistoja komentotekstin muodosta riippuen.

Konsepti ei-kysely tarkoittaa SQL-käskyä, joka ei palauta tulosjoukkoa. Siten, Valitse lausunnot ovat kyselyitä, mutta Insert-, Update- ja Delete-käskyt eivät ole. Vastaavasti ExecuteNonQuery()-menetelmä palauttaa int-arvon, joka sisältää niiden rivien määrän, joihin nämä lausekkeet vaikuttavat, eikä uuden tietuejoukon.

Jos haluat näyttää, kuinka olemassa olevan tietokannan sisältöä muokataan käyttämällä vain ExecuteNonQuery()-kyselyä, seuraava vaihe on luoda oma tietojen käyttökirjasto, joka kapseloi AutoLot-tietokantaprosessin.

Todellisessa tuotantoympäristössä ADO.NET-logiikkasi eristetään lähes varmasti .NET .dll -kokoonpanossa yhdestä yksinkertaisesta syystä - koodin uudelleenkäytöstä! Tätä ei tehty aiemmissa artikkeleissa, jotta et häiritsisi sinua käsillä olevista tehtävistä. Mutta olisi ajanhukkaa kehittää sama yhteyslogiikka, sama tiedonlukulogiikka ja sama komentojen suorituslogiikka jokaiselle sovellukselle, jonka on toimittava AutoLot-tietokannan kanssa.

Eristämällä tietojen käyttölogiikka .NET-koodikirjastossa, eri sovellukset millä tahansa käyttöliittymällä (konsolityylinen, työpöytätyylinen, web-tyylinen jne.) voivat käyttää olemassa olevaa kirjastoa jopa kielestä riippumatta. Ja jos kehität tiedonkäyttökirjaston C#-kielellä, muut .NET-ohjelmoijat voivat luoda oman käyttöliittymät millä tahansa kielellä (esimerkiksi VB tai C++/CLI).

Tietojen käyttökirjastomme (AutoLotDAL.dll) sisältää yhden nimiavaruuden (AutoLotConnectedLayer), joka on vuorovaikutuksessa AutoLot-tietokannan kanssa käyttämällä ADO.NET-liitettyjä tyyppejä.

Aloita luomalla uusi C#-luokkakirjastoprojekti nimeltä AutoLotDAL (lyhenne sanoista "AutoLot Data Access Layer") ja vaihda sitten alkuperäinen C#-kooditiedoston nimi muotoon AutoLotConnDAL.cs.

Nimeä sitten nimiavaruuden laajuus uudelleen muotoon AutoLotConnectedLayer ja muuta alkuperäisen luokan nimeksi InventoryDAL, koska tämä luokka määrittää useita jäseniä, jotka ovat vuorovaikutuksessa AutoLot-tietokannan Inventory-taulukon kanssa. Tuo lopuksi seuraavat .NET-nimitilat:

Järjestelmän käyttö; käyttäen System.Collections.Generic; käyttäen System.Text; käyttäen System.Data; käyttäen System.Data.SqlClient; nimiavaruus AutoLotConnectedLayer ( julkinen luokka InventoryDAL ( ) )

Yhteyslogiikan lisääminen

Ensimmäinen tehtävämme on määrittää menetelmät, joiden avulla kutsuprosessi voi muodostaa yhteyden tietolähteeseen ja katkaista yhteyden siitä käyttämällä kelvollista yhteysmerkkijonoa. Koska AutoLotDAL.dll-kokoonpanomme on kovakoodattu käyttämään System.Data.SqlClient-luokkatyyppejä, määritä yksityinen SqlConnection-muuttuja, joka varataan, kun InventoryDAL-objekti luodaan.

Lisäksi määritä menetelmä OpenConnection() ja sitten toinen CloseConnection(), joka on vuorovaikutuksessa tämän muuttujan kanssa:

Julkinen luokka InventoryDAL ( yksityinen SqlConnection connect = null; public void OpenConnection(merkkijono yhteysString) ( connect = new SqlConnection(connectionString); connect.Open(); ) public void CloseConnection() ( connect.Close(); ) )

Lyhytyyden vuoksi InventoryDAL-tyyppi ei tarkista kaikkia mahdollisia poikkeuksia eikä anna mukautettuja poikkeuksia eri tilanteissa (esimerkiksi kun yhteysmerkkijono on virheellinen). Jos olet kuitenkin rakentamassa tuotantotietojen käyttöoikeuskirjastoa, joudut todennäköisesti käyttämään strukturoituja poikkeusten käsittelytekniikoita mahdollisten ajonaikaisten poikkeamien huomioimiseksi.

Lisätään lisäyslogiikkaa

Lisää uusi merkintä Inventory-taulukkoon liittyy SQL-käskyn muotoiluun Lisää(riippuen käyttäjän syötteestä) ja kutsumalla ExecuteNonQuery()-metodia komentoobjektin avulla. Voit tehdä tämän lisäämällä InventoryDAL-luokkaan julkinen InsertAuto()-metodi, joka ottaa neljä parametria, jotka vastaavat Inventory-taulukon neljää saraketta (CarID, Color, Make ja PetName). Luo näiden argumenttien perusteella rivi uuden merkinnän lisäämistä varten. Suorita lopuksi SQL-käsky käyttämällä SqlConnection-objektia:

Public void InsertAuto(int id, merkkijonon väri, merkkijonon merkki, merkkijonon lemmikin nimi) ( // SQL-lause string sql = string.Format("Lisää varastoon" + "(CarID, merkki, väri, lemmikin nimi) Arvot(@CarId, @Make, @Color, @PetName)"); käyttäen (SqlCommand cmd = new SqlCommand(sql, this.connect)) ( // Lisää parametrit cmd.Parameters.AddWithValue("@CarId", id); cmd.Parameters.AddWithValue("@Make", make); cmd. Parameters.AddWithValue("@väri", väri); cmd.Parameters.AddWithValue("@Lemmikinnimi", lemmikinnimi); cmd.SuoritaNonQuery(; ) )

Relaatiotietokannan tietueita edustavien luokkien määrittäminen on yleinen tapa luoda tiedonkäyttökirjasto. Itse asiassa ADO.NET Entity Framework luo automaattisesti vahvasti kirjoitetut luokat, joiden avulla voit olla vuorovaikutuksessa tietokantatietojen kanssa. Muuten, ADO.NETin itsenäinen kerros luo vahvasti kirjoitettuja DataSet-objekteja edustamaan tietoja tietystä taulukosta relaatiotietokannassa.

SQL-käskyn luominen merkkijonojen ketjutuksella voi olla turvallisuusriski (ajatella SQL-lisäyshyökkäyksiä). Komennon teksti on parempi luoda parametroidulla kyselyllä, jota kuvataan hieman myöhemmin.

Poistologiikan lisääminen

Poistaminen olemassa oleva tietue ei sen vaikeampaa kuin uuden tietueen lisääminen. Toisin kuin InsertAuto()-koodi, näytetään yksi tärkeä try/catch-alue, joka käsittelee mahdollista tilannetta, jossa yritetään poistaa joku jo tilaama auto Asiakkaat-taulukosta. Lisää seuraava menetelmä InventoryDAL-luokkaan:

Public void DeleteCar(int id) ( string sql = string.Format("Poista varastosta jossa CarID = "(0)"", id); käyttäen (SqlCommand cmd = new SqlCommand(sql, this.connect)) ( kokeile ( cmd.ExecuteNonQuery(); ) catch (SqlException ex) ( Poikkeusvirhe = new Exception("Anteeksi, tämä kone on jälkikäteen!", ex); heittovirhe; ) ) )

Muutoslogiikan lisääminen

Inventory-taulukon olemassa olevan tietueen päivittämisen yhteydessä herää heti selvä kysymys: mitä kutsuprosessissa tarkalleen ottaen voidaan antaa muuttua: auton väriä, ystävällistä nimeä, mallia vai kaikkia kolmea? Yksi tapa maksimoida joustavuus on määrittää menetelmä, joka käyttää parametrin merkkijonotyyppiä, joka voi sisältää minkä tahansa SQL-käskyn, mutta tämä on vähintäänkin riskialtista.

Ihannetapauksessa on parempi, että sinulla on joukko menetelmiä, joiden avulla kutsuprosessi voi muokata tietueita eri tavoilla. Kuitenkin yksinkertaiselle tiedonkäyttökirjastollemme määrittelemme yhden menetelmän, jonka avulla kutsuprosessi voi muuttaa määritetyn auton ystävällistä nimeä:

Public void UpdateCarPetName(int id, string newpetName) ( string sql = string.Format("Päivitä varastojoukko PetName = "(0)" Missä CarID = "(1)"", newpetName, id); käyttäen (SqlCommand cmd = new SqlCommand(sql, this.connect)) ( cmd.ExecuteNonQuery(); ) )

Näytteenottologiikan lisääminen

Nyt meidän on lisättävä menetelmä tietueiden valitsemiseksi. Kuten aiemmin esitettiin, tietyn tiedontarjoajan datanlukijaobjektin avulla voit valita tietueita käyttämällä vain luku -kohdistinta. Kutsumalla Read()-menetelmää voit käsitellä jokaisen tietueen yksitellen. Tämä kaikki on hienoa, mutta nyt meidän on selvitettävä, kuinka palauttaa nämä tietueet kutsuvaan sovelluskerrokseen.

Yksi tapa olisi noutaa tiedot Read()-menetelmällä ja sitten täyttää ja palauttaa moniulotteinen taulukko (tai jokin muu objekti, kuten yleinen lista ).

Toinen tapa on palauttaa System.Data.DataTable-objekti, joka todella kuuluu itsenäiseen ADO.NET-kerrokseen. DataTable on luokka, joka edustaa taulukkomuotoista tietolohkoa (kuten paperia tai laskentataulukkoa).

DataTable-luokka sisältää tiedot rivien ja sarakkeiden kokoelmana. Nämä kokoelmat voidaan täyttää ohjelmallisesti, mutta DataTable-tyypissä on Load()-metodi, joka voi täyttää ne automaattisesti käyttämällä tiedonlukijaobjektia! Tässä on esimerkki, jossa varastotaulukon tiedot palautetaan tietotaulukkona:

Julkinen tietotaulukko GetAllInventoryAsDataTable() ( DataTable inv = new DataTable(); string sql = "Valitse * Varastosta"; käyttäen (SqlCommand cmd = new SqlCommand(sql, this.connect)) ( SqlDataReader dr = cmd.ExecuteReader); .Load(dr); dr.Close(); ) return inv; )

Työskentely parametroitujen komentoobjektien kanssa

Toistaiseksi InventoryDAL-tyypin lisäys-, päivitys- ja poistologiikassa olemme käyttäneet kovakoodattuja merkkijonoliteraaaleja jokaiselle SQL-kyselylle. Olet luultavasti tietoinen parametroiduista kyselyistä, joiden avulla voit käsitellä SQL-parametreja objekteina pelkkänä tekstinä.

Työskentely SQL-kyselyiden kanssa oliokeskeisemmällä tavalla auttaa vähentämään kirjoitusvirheitä (joissa on vahvasti kirjoitetut ominaisuudet), vaan parametroidut kyselyt ovat yleensä paljon nopeampia kuin merkkijonokyselyt, koska ne jäsennetään vain kerran (eikä joka kerta). CommandText-ominaisuus on asetettu SQL-merkkijonoksi). Lisäksi parametroidut kyselyt suojaavat SQL-injektiohyökkäyksiltä (tuttu tietoturvaongelma).

Parametrisoitujen kyselyjen tukemiseksi ADO.NET-komentoobjektit ylläpitävät kokoelmaa yksittäisiä parametriobjekteja. Oletuksena tämä kokoelma on tyhjä, mutta voit lisätä minkä tahansa määrän vastaavia parametriobjekteja paikkamerkkiparametrit SQL-kyselyssä. Jos haluat liittää SQL-kyselyparametrin jonkin komentoobjektin parametrikokoelman jäseneen, SQL-parametrin edelle on @-symboli (ainakin käytettäessä Microsoftin kanssa SQL Server, vaikka kaikki DBMS:t eivät tue tätä nimitystä).

Parametrien asettaminen DbParameter-tyypin avulla

Ennen kuin alamme luoda parametroituja kyselyitä, tutustutaan DbParameter-tyyppiin (toimittajaparametriobjektien perusluokka). Tällä luokalla on useita ominaisuuksia, joiden avulla voit määrittää parametrin nimen, koon ja tyypin sekä muita ominaisuuksia, kuten parametrin katselusuuntaa. Alla on joitain tärkeitä DbParameter-tyypin ominaisuuksia:

DbType

Hakee tai asettaa tietotyypin parametrista, joka esitetään CLR-tyyppinä

Suunta

Palauttaa tai asettaa parametrin tyypin: vain tulo, vain lähtö, tulo ja lähtö tai parametri arvon palauttamiseksi

IsNullable

Palauttaa tai määrittää, voiko parametri hyväksyä tyhjiä arvoja

Parametrin nimi

Hakee tai asettaa DbParameter-nimen

Koko

Ongelmat tai asennukset enimmäiskoko parametrin tiedot (hyödyllinen vain tekstidatalle)

Arvo

Palauttaa tai asettaa parametrin arvon

Havainnollistaaksesi, kuinka komentoobjektien kokoelma täytetään DBParameter-yhteensopivilla objekteilla, kirjoitetaan InsertAuto()-metodi uudelleen siten, että se käyttää parametriobjekteja (kaikki muut menetelmät voidaan tehdä uudelleen samalla tavalla, mutta tämä esimerkki riittää meille):

Public void InsertAuto(int id, merkkijonon väri, merkkijonon merkki, merkkijonon petName) ( // SQL-lauseen merkkijono sql = string.Format("Lisää varastoon" + "(CarID, merkki, väri, lemmikin nimi) Arvot("(0) ""(1)","(2)","(3)")", id, merkki, väri, lemmikinnimi); // Parametrisoitu komento käyttämällä (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 = uusi SqlParameter(); param. ParameterName = "@Make"; param.Value = merkki; param.SqlDbType = SqlDbType.Char; param.Size = 10; cmd.Parameters.Add(param); param = new SqlParameter(); param.ParameterName = "@Color "; param.Arvo = väri; param.SqlDbType = SqlDbType.Char; param.Size = 10; cmd.Parameters.Add(param); param = new SqlParameter(); param.ParameterName = "@PetName"; param.Value = lemmikinnimi; param.SqlDbType = SqlDbType.Char; param.Size = 10; cmd.Parameters.Add(param); cmd.ExecuteNonQuery(); ) )

Huomaa, että SQL-kysely sisältää myös neljä paikkamerkkiä, joista jokaista edeltää @-symboli. SqlParameter-tyypin ParameterName-ominaisuuden avulla voit kuvata jokaista näistä paikkamerkeistä ja määrittää erilaisia ​​tietoja (arvo, tietotyyppi, koko jne.) voimakkaasti kirjoitetulla tavalla. Kun kaikki parametriobjektit on valmisteltu, ne lisätään komentoobjektikokoelmaan Add()-kutsulla.

Tässä käytetään erilaisia ​​ominaisuuksia parametriobjektien suunnitteluun. Huomaa kuitenkin, että parametriobjektit tukevat useita ylikuormitettuja konstruktoreita, joiden avulla voit asettaa eri ominaisuuksien arvot (mikä johtaa kompaktimpaan koodipohjaan). Huomaa myös, että Visual Studio 2010:ssä on useita graafisia suunnittelijoita, jotka luovat automaattisesti paljon tätä tylsää parametrien manipulointikoodia puolestasi.

Parametrisoidun kyselyn luominen johtaa usein enemmän koodiin, mutta tuloksena on kätevämpi tapa virittää SQL-käskyjä ohjelmallisesti ja parantaa suorituskykyä. Tätä tekniikkaa voidaan käyttää missä tahansa SQL-kyselyssä, vaikka parametroidut kyselyt ovat hyödyllisimpiä, jos sinun on suoritettava tallennettuja toimenpiteitä.

säännöt hakasulkeet tarkoittaa rakenteen [valinnaista osaa]. Pystypalkki ilmaisee valinnan vaihtoehtojen välillä (muuttuja1|muuttuja2). Ellipsi tarkoittaa mahdollista toistoa useita kertoja - 1 kerta, 2 kertaa [, …]

SELECT-lause

Kehottaa Microsoft Access -tietokantamoottoria palauttamaan tiedot tietokannasta tietueiden joukkona.

Syntaksi

VALITSE [ predikaatti] { * | pöytä.* | [pöytä.]kenttä1

[, [pöytä.]kenttä2 [, ...]]}
FROM taulukko_lauseke [, ...]




SELECT-käsky sisältää seuraavat elementit.

Elementti

Kuvaus

Predikaatti

Jokin seuraavista predikaateista: ALL, DISTINCT, DISTINCTROW tai TOP. Predikaatteja käytetään rajoittamaan palautettavien tietueiden määrää. Jos predikaattia ei anneta, oletusarvo on KAIKKI.

Osoittaa, että kaikki kentät on valittu määritetystä taulukosta tai taulukoista

Pöytä

Taulukon nimi, jonka kentistä tietueet valitaan

kenttä1, kenttä2

Haettavat tiedot sisältävien kenttien nimet. Jos määritetään useita kenttiä, tiedot haetaan siinä järjestyksessä, jossa niiden nimet on listattu

lempinimi1, lempinimi 2

Nimet, joita käytetään sarakeotsikoina alkuperäisten sarakkeiden nimien sijaan taulukoita

taulukko_lauseke

Yksi tai useampi taulukon nimi, joka sisältää noudettavat tiedot.

ulkoinen_tietokanta

Komponentissa määritetyt taulukot sisältävän tietokannan nimi taulukko_lauseke jos ne eivät ole nykyisessä tietokannassa

Huomautuksia

Tämän toiminnon suorittamiseksi Microsoft Access -tietokantakone etsii määritetyistä taulukoista, hakee halutut sarakkeet, valitsee määritetyt ehdot täyttävät rivit ja lajittelee tai ryhmittelee tuloksena olevat rivit määritettyyn järjestykseen.

SELECT-käskyt eivät muuta tietokannan tietoja.

SELECT-käsky on yleensä SQL-käskyn ensimmäinen sana (SQL-lause (merkkijono). Lauseke, joka määrittää SQL-komento, kuten SELECT, UPDATE tai DELETE, ja sisältää lausekkeita, kuten WHERE tai ORDER BY. SQL-lauseita/merkkijonoja käytetään yleisesti kyselyissä ja tilastofunktioissa.) Useimmat SQL-käskyt ovat joko SELECT- tai SELECT...INTO-käskyjä.

SELECT-lauseen vähimmäissyntaksi on seuraava:

VALITSE kentät FROM pöytä

Voit käyttää tähdellä (*) valitaksesi kaikki taulukon kentät. Seuraava esimerkki valitsee kaikki Työntekijät-taulukon kentät.

SELECT * FROM Työntekijät;

Jos kentän nimi sisältyy useisiin taulukoihin FROM-lauseessa, kirjoita sen eteen taulukon nimi ja käsky «.» (piste). Seuraavassa esimerkissä "Osasto"-kenttä on "Työntekijät"- ja "Esimiehet"-taulukoissa. SQL-käsky valitsee osastot Työntekijät-taulukosta ja esimiehen nimet Supervisors-taulukosta.

VALITSE Työntekijät. Osasto, johtajat. Johtajan nimi FROM Employees SISÄINEN LIITTYY Executives WHERE Työntekijät. Osasto = johtajat. osasto;

Kun luot RecordSet-objektin, Microsoft Access -tietokantamoottori käyttää taulukkokentän nimeä objektin "Field"-objektin nimenä. RecordSet. Jos kentän nimeä on muutettava tai kentän luova lauseke ei anna sitä, käytä varattua sanaa (Varattu sana. Sana, joka on kielen elementti, kuten Visual Basic. Varatut sanat sisältävät lausekkeiden nimet, sisäänrakennetut funktiot ja tietotyypit, menetelmät, operaattorit ja objektit.) AS. Seuraava esimerkki näyttää, kuinka "Päivä"-otsikkoa käytetään nimeämään palautettu objekti Ala vastaanotetussa esineessä RecordSet.

SELECT Birthday AS Day FROM työntekijöiltä;

Kun työskentelet koostefunktioiden tai kyselyjen kanssa, jotka palauttavat moniselitteisiä tai identtisiä objektien nimiä Ala, sinun tulee käyttää AS-lausetta luodaksesi eri objektinimen Ala. Seuraavassa esimerkissä palautettu objekti Ala vastaanotetussa esineessä RecordSet on annettu nimi "Census".

SELECT COUNT(Työntekijäkoodi) AS Census FROM työntekijöistä;

Kun työskentelet SELECT-käskyn kanssa, voit käyttää lisälauseita haettujen tietojen rajoittamiseen ja järjestämiseen. Lisätietoja on käyttämäsi tarjouksen ohjeaiheessa.

FROM lausekkeesta

Määrittää taulukot ja kyselyt, jotka sisältävät SELECT-käskyssä luetellut kentät.

Syntaksi

VALITSE kenttälista
FROM taulukko_lauseke

FROM-lauseen sisältävä SELECT-käsky sisältää seuraavat elementit:

Elementti

Kuvaus

kenttälista

taulukko_lauseke

Lauseke, joka määrittää yhden tai useamman taulukon - tietolähteet. Lauseke voi olla taulukon nimi, tallennetun kyselyn nimi tai tuloslauseke, joka on muodostettu käyttämällä INNER JOIN-, LEFT JOIN- tai RIGHT JOIN -operaattoria.

ulkoinen_tietokanta

Täysi polku ulkoiseen tietokantaan, joka sisältää kaikki kohdassa määritetyt taulukot taulukko_lauseke

Huomautuksia


FROM-lauseen läsnäolo vaaditaan SELECT-käskyn jälkeen.

Järjestys, jossa taulukot on listattu taulukko_lauseke ei väliä.

Linkitettyjen taulukoiden käyttäminen (Linkitetty taulukko. Taulukko, joka on tallennettu tiedostoon, joka ei ole osa avointa tietokantaa, mutta johon pääsee Microsoft Accessista. Käyttäjä voi lisätä, poistaa ja muuttaa tietueita linkitetyssä taulukossa, mutta ei voi muuttaa sen rakennetta .) lausekkeen IN sijaan voit tehdä tietojen noutamisesta ulkoisesta tietokannasta helpompaa ja tehokkaampaa.

Alla oleva esimerkki näyttää, kuinka tiedot noudetaan Työntekijät-taulukosta.

VALITSE Sukunimi, Etunimi

FROM Työntekijät;

Ilmaisee SQL-kyselyille valitut tietueet ( SQL-kieli(Strukturoitu kyselykieli). Strukturoitu kysely- ja tietokantaohjelmointikieli, jota käytetään laajasti tietojen hakemiseen, kyselyihin, päivittämiseen ja hallintaan relaatiotietokantajärjestelmissä.

Syntaksi

VALITSE ]]
FROM pöytä

Nämä predikaatit sisältävä SELECT-käsky sisältää seuraavat komponentit:

Komponentti

Kuvaus

Ilmaistu, jos predikaatteja ei ole mukana. Microsoft Access -tietokantamoottori valitsee kaikki tietueet, jotka vastaavat SQL-käskyn ehtoja (SQL-käsky (merkkijono). Lauseke, joka määrittää SQL-komennon, kuten SELECT, UPDATE tai DELETE, ja sisältää lauseita, kuten WHERE tai ORDER BY SQL-lauseita/merkkijonoja käytetään tyypillisesti kyselyissä ja tilastofunktioissa). Seuraavat kaksi identtistä esimerkkiä osoittavat, kuinka kaikki tietueet palautetaan Työntekijät-taulukosta.

Työntekijöiltä

TILAAMINEN EmployeeCode;

Työntekijöiltä

TILAAMINEN EmployeeCode;

Sulkee pois tietueet, jotka sisältävät päällekkäisiä tietoja valituissa kentissä. Vain kunkin SELECT-lauseessa luetellun kentän yksilölliset arvot sisällytetään kyselyn tuloksiin. Esimerkiksi joillakin Työntekijät-taulukossa luetelluilla työntekijöillä voi olla sama sukunimi. Jos kahdessa tietueessa on sukunimi "Ivanov" Sukunimi-kentässä, seuraava SQL-käsky palauttaa vain yhden tietueen, joka sisältää sukunimen "Ivanov".

SELECT DISTINCT Sukunimi

Jos DISTINCT-komponentti jätetään pois, kysely palauttaa molemmat tietueet sukunimellä "Ivanov".

Jos SELECT-lause sisältää useita kenttiä, kaikkien kenttäarvojen yhdistelmä sisällytetään kyselyn tuloksiin vain, jos se on yksilöllinen kyseiselle tietueelle.

DISTINCT-komponenttia käyttävän kyselyn tuloksia ei päivitetä muiden käyttäjien myöhempien muutosten mukaan.

Sulkee pois tiedot tietueista, jotka toistetaan kokonaisuudessaan sen sijaan, että ne sisältävät yksittäisiä kenttiä, joissa on samat tiedot. Oletetaan, että on luotu kysely, joka yhdistää "Asiakkaat"- ja "Tilaukset"-taulukot "Asiakaskoodi"-kentän avulla. Asiakkaat-taulukko ei sisällä päällekkäisiä asiakastunnuskenttiä, mutta ne ovat olemassa Tilaukset-taulukossa, koska jokaisella asiakkaalla voi olla useita tilauksia. Seuraava SQL-käsky näyttää, kuinka DISTINCTROW-komponenttia käytetään luetteloimaan organisaatiot, jotka ovat tehneet vähintään yhden tilauksen, mainitsematta näiden tilausten tietoja.

VALITSE DISTINCTROW Otsikko asiakkailta SISÄINEN LIITTYMINEN Tilaukset

ON asiakkaat. Asiakastunnus = tilaukset. Asiakaskoodi

JÄRJESTYS otsikon mukaan;

Jos DISTINCTROW-komponentti jätetään pois, kysely tuottaa useita rivejä jokaiselle organisaatiolle, joka on tilannut useita kertoja.

DISTINCTROW-komponentti tulee voimaan vain, kun valitaan kenttiä joistakin kyselyssä käytetyistä taulukoista. DISTINCTROW-komponentti ohitetaan, jos kysely sisältää vain yhden taulukon tai jos kentät haetaan kaikista taulukoista.

TOP n

Palauttaa määritetyn määrän tietueita, jotka ovat ORDER BY -lauseen määrittämän alueen ensimmäisten tai viimeisten tietueiden joukossa. Oletetaan, että haluat näyttää vuoden 1994 luokan 25 parhaan oppilaan nimet.

Etunimi Sukunimi

MISSÄ Valmistumisvuosi = 2003

TILAA GradePointAverage DESC:n mukaan;

Jos et sisällytä ORDER BY -lausetta, kysely palauttaa opiskelijataulukosta satunnaisen 25 tietueen joukon, joka täyttää WHERE-lauseen.

Predikaatti TOP ei sisällä valintaa yhtäläisten arvojen välillä. Jos edellisen esimerkin 25. ja 26. tietueella oli sama GPA, kysely palauttaisi 26 tietuetta.

Voit myös käyttää PROSENTTIA varattua sanaa hakeaksesi osan ORDER BY -lauseen määrittämän alueen ensimmäisistä tai viimeisistä tietueista. Oletetaan, että 25 parhaan sijasta haluat näyttää valmistuvan luokan oppilaista alimman 10 %.

VALITSE TOP 10 PROSENTTIA

Etunimi Sukunimi

MISSÄ Valmistumisvuosi = 2003

TILAA GradePointAverage ASC:n mukaan;

ASC-predikaatti määrittää arvojen tulostuksen alueen alaosasta. TOP-predikaattia seuraavan arvon on oltava Integer-tietotyyppi. Perustietotyyppi, jota käytetään kokonaislukuarvojen tallentamiseen. Kokonaisluku-muuttuja tallennetaan 64-bittisenä (8-tavuisena) numerona välillä -32768 - 32767. ) etumerkitön .

TOP-predikaatti ei vaikuta siihen, voidaanko kyselyä päivittää.

pöytä

Taulukon nimi, josta tietueet haetaan.

Katso myös

SELECT-lause

FROM lausekkeesta

WHERE-lauseke

Määrittää, mitkä FROM-lauseessa lueteltujen taulukoiden tietueet käsitellään SELECT-, UPDATE- tai DELETE-käskyillä.

Syntaksi

VALITSE kenttälista
FROM taulukko_lauseke
MISSÄ valintaehdot

WHERE-lauseen sisältävä SELECT-käsky sisältää seuraavat osat.

Osa

Kuvaus

kenttälista

Kentän tai kenttien nimi, jotka haetaan yhdessä mahdollisten aliasten kanssa (Alias ​​(SQL). Vaihtoehtoinen nimi lausekkeessa olevalle taulukolle tai kentälle. Aliasia käytetään yleensä lyhyempinä taulukoiden tai kenttien niminä, jotta niitä on helppo käyttää myöhemmin ohjelmia, jotta vältetään moniselitteiset viittaukset ja saadaan kuvaavampia nimiä kyselyn tuloksia näytettäessä.), predikaatit (ALL, DISTINCT, DISTINCTROW tai TOP) tai minkä tahansa muun SELECT-käskyn parametrin kanssa.

taulukko_lauseke

Taulukon tai taulukoiden nimi, joista tiedot haetaan.

valintaehdot

Lauseke (Lauseke. Yhdistelmä matemaattisia ja loogisia operaattoreita, vakioita, funktioita, kenttien nimiä, ohjausobjekteja ja ominaisuuksia, joka johtaa yhteen arvoon. Lauseke voi suorittaa laskutoimituksia, käsitellä tekstiä tai vahvistaa tietoja.), jonka on vastattava mukana olevia tietueita kyselyn tuloksissa.

Huomautuksia

Microsoft Access -tietokantakone valitsee tietueet, jotka täyttävät WHERE-lauseessa luetellut ehdot. Jos WHERE-lausetta ei ole määritetty, kysely palauttaa kaikki taulukon rivit. Jos kysely määrittää useita taulukoita, mutta ei määritä WHERE- tai JOIN-lausetta, kysely tuottaa karteesisen tuotteen (Carteesinen tuote. On tulos SQL SELECT -käskyn suorittamisesta, jossa on FROM-lause, joka viittaa kahteen tai useampaan taulukkoon, mutta ei WHERE- tai JOIN-lausetta. JOIN-lause, joka määrittää liittymistavan.) taulukoita.

WHERE-lausetta ei vaadita, mutta jos sitä käytetään, sen on seurattava FROM-lausetta. Voit esimerkiksi valita kaikki myyntiosaston työntekijät (WHERE Osasto = "Myynti") tai kaikki 18–30-vuotiaat asiakkaat (WHERE Ikä 18–30).

Jos JOIN-lausetta ei käytetä SQL-liitosoperaatioon useissa taulukoissa, tuloksena oleva objekti Ennätys asetettu sen päivittäminen on mahdotonta.

WHERE-lause on samanlainen kuin HAVING-lause ja määrittää valitut tietueet. Kun tietueet on ryhmitelty GROUP BY -lauseella, HAVING-lause määrittää myös näytettävän tietueen.

WHERE-lausetta käytetään sulkemaan pois tietueita, joita ei tarvitse ryhmitellä GROUP BY -lausekkeen avulla.

Käytä erilaisia ​​lausekkeita määrittääksesi, mitkä tietueet SQL-käsky palauttaa. Esimerkiksi seuraava SQL-käsky valitsee kaikki työntekijät, joiden palkka ylittää RUR:n.

SELECT Sukunimi, Palkka FROM Työntekijät WHERE Palkka > 21000;

WHERE-lause voi sisältää jopa 40 lauseketta, jotka on yhdistetty loogisilla operaattoreilla (esim. JA Ja TAI).

Jos annat kentän nimen, joka sisältää välilyöntejä tai välimerkkejä, sinun on suljettava se hakasulkeissa (). Esimerkiksi asiakastietotaulukko voi sisältää tietoja tietyistä asiakkaista.

VALITSE [Asiakkaan suosikkiravintola]

Argumentin määrittäminen valintaehdot, päivämääräliteraalit (Päiväkirjairaali. Mikä tahansa kelvollisessa muodossa oleva merkkijono, joka on suljettu numeromerkkeihin (#). Kelvolliset muodot ovat kieli- ja standardiasetuksissa sekä yleisessä päivämäärämuodossa määritetty päivämäärämuoto.) on esitettävä yhdysvaltalaisessa muodossa. Microsoft Access -tietokantamoottorin versio, vaikka käytettäisiinkin muuta kuin Yhdysvaltain päivämäärämuotoa. Esimerkiksi päivämäärä "10. toukokuuta 1996" on kirjoitettu 10/5/96 Isossa-Britanniassa ja 05/10/1996 Venäjällä. Muista liittää päivämääräliteraalit numeromerkkeihin (#), kuten alla olevissa esimerkeissä näkyy.

Voit etsiä tietueita 10. toukokuuta 1996 Yhdistyneen kuningaskunnan tietokannasta käyttämällä seuraavaa SQL-lausetta:

SELECT * FROM Tilaukset WHERE Lähetyspäivä = #10.05.1996#;

Voit myös käyttää toimintoa DateValue, tunnistaa kansainväliset parametrit, asentanut Microsoft Windows®. Käytä esimerkiksi Venäjälle tätä koodia:

SELECT * FROM Tilaukset WHERE Lähetyspäivä = DateValue("05/10/1996");

Ja seuraava koodi on Iso-Britannialle:

SELECT * FROM Tilaukset WHERE Lähetyspäivä = DateValue("10/5/96");

Huomautus. Jos valintakriteeririvillä määritetty sarake on tyyppiä GUID (Replica ID (GUID). 16-tavuinen kenttä Microsoft Access -tietokannassa, jota käytetään replikoinnin yksilöimiseen. GUID-tunnisteita käytetään replikoiden, replikajoukkojen, taulukoiden, tietueiden ja Microsoft Access -tietokannoista GUID-koodeja kutsutaan replikakoodeiksi.), valintaehdoissa käytetään hieman erilaista syntaksia.

WHERE ReplicaID = (GUID (AB-CDEF0ABCDEF))

Varmista, että sisäkkäiset sulut ja tavuviivat on sijoitettu oikein.

Lähdesivu: http://office. /ru-ru/access/HA.aspx? pid=CH

GROUP BY lauseke

Yhdistää tietueet, joilla on samat arvot kuin määritetyssä kenttäluettelossa, yhdeksi tietueeksi. Kullekin tietueelle luodaan yhteenvetoarvo, jos SELECT-käskyyn sisältyy SQL-koontifunktio, kuten esim. Summa tai Kreivi.

Syntaksi

VALITSE kenttälista
FROM pöytä
MISSÄ valintaehto

GROUP BY -lauseen sisältävä SELECT-käsky sisältää seuraavat elementit:

Elementti

Kuvaus

kenttälista

Kenttien nimet, jotka haetaan yhdessä mahdollisten aliasten kanssa (Alias ​​(SQL). Vaihtoehtoinen nimi lausekkeessa olevalle taulukolle tai kentälle. Aliaksia käytetään tyypillisesti lyhyempinä taulukoiden tai kenttien niminä, jotta niihin on helppo viitata ohjelmissa, moniselitteisten viittausten estämiseksi ja informatiivisempien nimien saamiseksi kyselyn tuloksia näytettäessä.) ja tilastolliset SQL-funktiot, predikaatit (ALL, DISTINCT, DISTINCTROW tai TOP) tai muita SELECT-käskyn parametreja

pöytä

valintaehdot

Valintaehto. Jos käsky sisältää WHERE-lauseen, sen jälkeen, kun se on otettu käyttöön tietueissa, Microsoft Access -tietokantamoottori ryhmittelee arvot.

group_field_list

group_field_list

Huomautuksia

GROUP BY -lauseke on valinnainen.

Jos SQL-tilastofunktiot eivät sisälly SELECT-käskyyn, yhteenvetoarvoja ei lasketa.

GROUP BY -kentän arvot, jotka ovat nolla (nolla. Arvo, joka voidaan syöttää kenttään tai käyttää lausekkeissa ja kyselyissä ilmaisemaan puuttuvat tai tuntemattomat tiedot. Visual Basicissa Null-avainsana määrittää Null-arvon. Jotkut kentät, kuten Ensisijaisena avainkenttinä ne eivät voi sisältää nolla-arvoja.), ryhmitellään eikä niitä jätetä pois. Kuitenkin arvot Tyhjä Mikään SQL-tilastofunktio ei arvioi niitä.

WHERE-lausetta käytetään sulkemaan pois rivit, joita ei tarvitse ryhmitellä. HAVING-lausetta käytetään tietueiden suodattamiseen ryhmittelyn jälkeen.

Kentät GROUP BY -kenttäluettelosta, jotka eivät sisällä Memo-tietotyyppiä (Memo Field -tietotyyppi. Kenttätietotyyppi Microsoft Access -tietokannassa. MEMO-kenttä voi sisältää enintään 65 535 merkkiä.) tai OLE-objekti (Kentän tietotyyppi OLE-objekti" Kenttätietotyyppi, jota käytetään objektien tallentamiseen muista Microsoft Access -tietokantaan linkitetyistä tai siihen upotetuista sovelluksista.) voi viitata mihin tahansa kenttiin missä tahansa FROM-lauseessa määritetyssä taulukossa, vaikka kenttä ei sisälly SELECT-käskyyn. Tätä varten riittää, että SELECT-käskyssä on vähintään yksi tilastollinen SQL-funktio. Microsoft Access -tietokantamoottori ei salli ryhmittelyä kenttien mukaan, jotka sisältävät MEMO-kenttä- tai OLE-objektitietoja.

Kaikkien SELECT-kenttäluettelon kenttien on joko sisällettävä GROUP BY -lausetta tai oltava argumentteja SQL-koostefunktiolle.

Katso myös

SELECT-lause

SELECT...INTO-lause

Predikaatit ALL, DISTINCT, DISTINCTROW, TOP

FROM lausekkeesta

ON TARJOUS

TILAA lausekkeen mukaan

WHERE-lauseke

SQL-tilastofunktiot

Lähdesivu: http://office. /ru-ru/access/HA.aspx? pid=CH

ON TARJOUS

Määrittää ryhmitellyt tietueet, joiden tulee näkyä SELECT-käskyssä, jossa on GROUP BY -lause. Kun tietueet on ryhmitelty GROUP BY -lauseella, HAVING-lause näyttää ne, jotka täyttävät sen ehdot.

Syntaksi

VALITSE kenttälista
FROM pöytä
MISSÄ valintaehdot
GROUP BY group_field_list

HAVING-lauseen sisältävä SELECT-käsky sisältää seuraavat elementit:

Elementti

Kuvaus

kenttälista

Kenttien nimet, jotka ladataan yhdessä mahdollisten aliasten kanssa (Alias ​​(SQL). Vaihtoehtoinen nimi lausekkeessa olevalle taulukolle tai kentälle. Aliaksia käytetään tyypillisesti lyhyempinä taulukoiden tai kenttien niminä, jotta niihin on helppo viitata ohjelmissa, estääksesi moniselitteiset viittaukset ja saadaksesi informatiivisempia nimiä kyselyn tuloksia näytettäessä.) ja SQL-tilastofunktioita, predikaatteja (ALL, DISTINCT, DISTINCTROW tai TOP) tai muita SELECT-käskyn parametreja.

pöytä

Taulukon nimi, josta tietueet ladataan

valintaehto

Valintaehto. Jos käsky sisältää WHERE-lauseen, Microsoft Access -tietokantamoottori ryhmittelee arvot sen jälkeen, kun se on otettu käyttöön tietueissa.

group_field_list

Tietueiden ryhmittelyyn käytettyjen kenttien nimet (enintään 10). Nimien järjestys group_field_list määrittää ryhmittelytason - korkeimmasta alimpaan

ryhmän_ehto

Lauseke, joka määrittää näytettävät tietueet

Huomautuksia

HAVING-lauseke on valinnainen.

HAVING-lauseke on samanlainen kuin WHERE-lause, joka määrittää tietueiden valinnan. Kun tietueet on ryhmitelty GROUP BY -lauseella, HAVING-lause määrittää näytettävät tietueet.

SELECT TypeCode,

Summa (varastossa)

FROM tuotteista

GROUP BY TypeCode

HAVING Sum (varastossa) > 100 ja kuten "TEL*";

HAVING-lause voi sisältää jopa 40 lauseketta, jotka on linkitetty loogisilla operaattoreilla, kuten Ja Ja Tai.

Lähdesivu: http://office. /ru-ru/access/HA.aspx? pid=CH

TILAA lausekkeen mukaan

Lajittelee kyselyn palauttamat tietueet nousevaan tai laskevaan järjestykseen määritettyjen kenttien arvojen mukaan.

Syntaksi

VALITSE kenttälista
FROM pöytä
MISSÄ valintaehto
[, kenttä2 ][, ...]]]

SELECT-käsky, joka sisältää ORDER BY -lauseen, sisältää seuraavat elementit.

Elementti

Kuvaus

kenttälista

Kenttien nimet, jotka haetaan yhdessä mahdollisten aliasten kanssa (Alias ​​(SQL). Vaihtoehtoinen nimi lausekkeessa olevalle taulukolle tai kentälle. Aliaksia käytetään tyypillisesti lyhyempinä taulukoiden tai kenttien niminä, jotta niihin on helppo viitata ohjelmissa, estääksesi moniselitteiset viittaukset ja saadaksesi informatiivisempia nimiä kyselyn tuloksia näytettäessä.) ja SQL-tilastofunktioita, predikaatteja (ALL, DISTINCT, DISTINCTROW tai TOP) tai muita SELECT-käskyn parametreja.

pöytä

Taulukon nimi, josta tietueet haetaan

valintaehdot

Valintaehdot. Jos käsky sisältää WHERE-lauseen, sen jälkeen kun se on otettu tietueisiin, Microsoft Access -tietokantakone järjestää tietueiden arvot

kenttä1, kenttä2

Kenttien nimet, joiden mukaan tietueet lajitellaan.

Huomautuksia

ORDER BY -lauseke on valinnainen. Sitä tulee käyttää, kun haluat näyttää tiedot lajiteltuna.

Oletuslajittelujärjestys on (Lajittelujärjestys. Tapa järjestää tiedot sen arvojen ja tyypin mukaan. Tiedot voidaan lajitella aakkosjärjestyksessä, numeeristen arvojen tai päivämäärän mukaan. Lajittelujärjestys voi olla nouseva (0 - 100, A - Z) tai laskeva (100:sta 0:aan, Z:sta A:hun).) nouseva (A:sta Z:hen, 0:sta 9:ään). Alla olevat esimerkit osoittavat työntekijöiden nimien lajittelun sukunimen mukaan.

VALITSE Sukunimi, Etunimi

Työntekijöiltä

TILAA Sukunimi;

VALITSE Sukunimi, Etunimi

Työntekijöiltä

TILAA Sukunimi ASC;

Jos haluat lajitella kentät laskevaan järjestykseen (Z - A, 9 - 0), lisää varattu sana DESC kunkin kentän nimeen. Seuraava esimerkki havainnollistaa lajittelua laskevassa järjestyksessä työntekijöiden palkkojen perusteella.

SELECT Sukunimi, Palkka

Työntekijöiltä

TILAUS PALKAN DESC:n mukaan, sukunimi;

Jos määrität ORDER BY -lauseessa kenttiä, jotka sisältävät MEMO-kenttä (Memo Field -tietotyyppi. Kentän tietotyyppi Microsoft Access -tietokannassa. MEMO-kenttä voi sisältää enintään 65 535 merkkiä) tai OLE-objektikenttä (OLE-objekti) Kentän tietotyyppi "Kenttätietotyyppi, jota käytetään objektien tallentamiseen muista Microsoft Access -tietokantaan linkitetyistä tai siihen upotetuista sovelluksista.), tämä aiheuttaa virheen. Microsoft Access -tietokantamoottori ei voi lajitella näitä kenttätyyppejä.

ORDER BY -lause on tyypillisesti SQL-käskyn viimeinen lauseke (SQL-lause (merkkijono). Lauseke, joka määrittää SQL-komennon, kuten SELECT, UPDATE tai DELETE, ja sisältää lauseita, kuten WHERE tai ORDER BY. SQL-käskyt /merkkijonoja käytetään yleisesti kyselyissä ja tilastofunktioissa.).

Voit sisällyttää ORDER BY -lauseeseen lisäkenttiä. Tietueet lajitellaan ensin ORDER BY -lauseessa ensimmäisenä määritetyn kentän mukaan. Tietueet, joilla on samat arvot ensimmäisessä kentässä, lajitellaan sitten toisen määrittämän kentän mukaan ja niin edelleen.
Katso myös

SELECT-lause

SELECT...INTO-lause

Predikaatit ALL, DISTINCT, DISTINCTROW, TOP

FROM lausekkeesta

GROUP BY lauseke

ON TARJOUS

WHERE-lauseke

SQL-tilastofunktiot

Lähdesivu: http://office. /ru-ru/access/HA.aspx? pid=CH

INNER JOIN -toiminto

Yhdistää tietueita kahdesta taulukosta, jos näiden taulukoiden yhdistävät kentät sisältävät samat arvot.

Syntaksi

FROM pöytä 1 SISÄLIITTYMINEN taulukko 2 PÄÄLLÄ pöytä 1.kenttä1 vertailu_operaattoritaulukko2.kenttä2

INNER JOIN -toiminto koostuu seuraavista elementeistä:

Elementti

Kuvaus

pöytä 1, taulukko 2

Liitettävien tietueiden sisältävien taulukoiden nimet

kenttä1, kenttä2

Linkittävien kenttien nimet. Ei-numeeristen kenttien on oltava samaa tietotyyppiä (Tietotyyppi. Kentän ominaisuus, joka määrittää, minkä tyyppisiä tietoja kenttä voi sisältää. Tietotyyppejä ovat: Boolean, Integer, Long, Currency, Single, Double, Date, String, ja Variant (oletus).) ja sisältävät samantyyppisiä tietoja. Näiden kenttien nimet voivat kuitenkin olla erilaisia

vertailu_operaattori

Mikä tahansa vertailuoperaattori: (=,<, >, <=, >= tai<>)




Yläosa