sql-kysely ms accessissa. Johdanto

SQL - Oppitunti 4. Tietojen valinta - SELECT-käsky

Joten foorumitietokannassamme on kolme taulukkoa: käyttäjät (käyttäjät), aiheet (aiheet) ja viestit (viestit). Ja haluamme nähdä, mitä tietoja ne sisältävät. Tätä varten SQL:ssä on operaattori VALITSE. Sen käytön syntaksi on seuraava:

SELECT select_mitä FROM select_from;


"what_to_select" sijaan meidän on määritettävä joko sen sarakkeen nimi, jonka arvot haluamme nähdä, tai useiden pilkuilla eroteltujen sarakkeiden nimet tai tähtimerkki (*), joka tarkoittaa kaikkien sarakkeiden valintaa. pöytä. "from_choose" sijaan sinun tulee määrittää taulukon nimi.

Katsotaanpa ensin kaikkia käyttäjätaulukon sarakkeita:

SELECT * FROM käyttäjiltä;

Nämä ovat kaikki tietomme, jotka syötimme tähän taulukkoon. Mutta oletetaan, että haluamme tarkastella vain id_user-saraketta (esimerkiksi viime oppitunnilla meidän piti tietää, mitä id_users ovat käyttäjätaulukossa voidaksemme täyttää aihetaulukon). Tätä varten määritämme tämän sarakkeen nimen kyselyyn:

SELECT id_user FROM käyttäjiltä;

No, jos haluamme nähdä esimerkiksi käyttäjiemme nimet ja sähköpostit, luettelemme kiinnostavat sarakkeet pilkuilla erotettuina:

VALITSE nimi, sähköpostiosoite käyttäjiltä;

Vastaavasti näet, mitä tietoja muut taulukomme sisältävät. Katsotaanpa mitä aiheita meillä on:

SELECT * FROM aiheista;

Nyt meillä on vain 4 aihetta, ja jos niitä on 100? Haluaisin, että ne näkyvät esimerkiksi aakkosjärjestyksessä. SQL:ssä on tälle avainsana. TILAA perässä sen sarakkeen nimi, jonka mukaan lajittelu tapahtuu. Syntaksi on seuraava:

SELECT sarakkeen_nimi FROM taulukon_nimi ORDER BY lajittelun_sarakkeen_nimi;



Oletuslajittelu on nouseva, mutta sitä voidaan muuttaa lisäämällä avainsana DESC

Nyt tietomme on lajiteltu laskevaan järjestykseen.

Voit lajitella usean sarakkeen mukaan kerralla. Esimerkiksi seuraava kysely lajittelee tiedot aiheen_nimi-sarakkeen mukaan, ja jos tässä sarakkeessa on useita identtisiä rivejä, id_author-sarake lajitellaan laskevassa järjestyksessä:

Vertaa tulosta edellisen kyselyn tulokseen.

Hyvin usein emme tarvitse kaikkia tietoja taulukosta. Haluamme esimerkiksi tietää, mitkä aiheet käyttäjä sveta (id=4) on luonut. SQL:ssä on tälle avainsana. MISSÄ, tällaisen pyynnön syntaksi on seuraava:

Esimerkissämme ehto on käyttäjätunnus, ts. haluamme vain rivejä, joiden id_author-sarakkeessa on 4 (käyttäjätunnus sveta):

Tai haluamme tietää, kuka loi "polkupyörät"-teeman:

Tietysti olisi mukavampaa näyttää tekijän nimi tekijän id:n sijaan, mutta nimet tallennetaan toiseen taulukkoon. Myöhemmillä oppitunneilla opimme valitsemaan tietoja useista taulukoista. Sillä välin opitaan, mitä ehtoja voidaan määrittää WHERE-avainsanalla.

Operaattori Kuvaus
= (yhtä) Valitut arvot ovat yhtä suuret kuin määritetty

Esimerkki:

SELECT * FROM aiheista WHERE id_author=4;

Tulos:

> (lisää) Määritettyä suuremmat arvot valitaan

Esimerkki:

SELECT * FROM aiheista WHERE id_author>2;

Tulos:

< (меньше) Määritettyä pienemmät arvot valitaan

Esimerkki:

SELECT * FROM aiheista WHERE id_author
Tulos:

>= (suurempi tai yhtä suuri kuin) Arvot, jotka ovat suurempia tai yhtä suuria kuin määritetty arvo, valitaan.

Esimerkki:

SELECT * FROM aiheista WHERE id_author>=2;

Tulos:

<= (меньше или равно) Arvot, jotka ovat pienempiä tai yhtä suuria kuin määritetty arvo, valitaan.

Esimerkki:

SELECT * FROM aiheista WHERE id_author
Tulos:

!= (ei yhtä suuri) Arvot, jotka eivät ole yhtä suuria kuin määritetty, valitaan

Esimerkki:

SELECT * FROM aiheista WHERE id_author!=1;

Tulos:

EI OLE NULL Rivit, joilla on arvoja määritetyssä kentässä, valitaan

Esimerkki:

SELECT * FROM aiheista WHERE id_author EI OLE NULL;

Tulos:

ON NULL Rivit, joilla ei ole arvoa määritetyssä kentässä, valitaan

Esimerkki:

SELECT * FROM aiheista WHERE id_author IS NULL;

Tulos:

Tyhjä sarja - ei tällaisia ​​merkkijonoja.

VÄLILLÄ (välillä) Määritettyjen arvojen väliset arvot valitaan.

Esimerkki:

SELECT * FROM aiheista WHERE id_author BETWEEN 1 JA 3;

Tulos:

IN (sisältyy arvon) Määritettyjä arvoja vastaavat

Esimerkki:

SELECT * FROM aiheista WHERE id_author IN (1, 4);

Tulos:

NOT IN (arvo ei sisällä) Muut kuin määritetyt valitut arvot

Esimerkki:

SELECT * FROM aiheista WHERE id_author NOT IN (1, 4);

Tulos:

Tykkää (ottelu) Esimerkkiarvot valitaan

Esimerkki:

SELECT * FROM aiheista WHERE aiheen_nimi LIKE "vel%";

Tulos:

LIKE-operaattorin mahdollisia metamerkkejä käsitellään alla.

EI NIIN KUIN Arvot, jotka eivät vastaa näytettä, valitaan

Esimerkki:

SELECT * FROM aiheista WHERE aiheen_nimi EI LIKE "vel%";

Tulos:

LIKE-operaattorin metamerkit

Metamerkkihakuja voidaan tehdä vain tekstikentissä.

Yleisin metahahmo on % . Se tarkoittaa mitä tahansa merkkejä. Jos esimerkiksi haluamme löytää sanoja, jotka alkavat kirjaimilla "vel", kirjoitamme LIKE "vel%", ja jos haluamme löytää sanoja, jotka sisältävät merkit "club", niin kirjoitamme LIKE "% klubi%". Esimerkiksi:

Toinen yleisesti käytetty metamerkki on _ . Toisin kuin %, joka tarkoittaa vähän tai ei ollenkaan merkkejä, alaviiva tarkoittaa täsmälleen yhtä merkkiä. Esimerkiksi:

Kiinnitä huomiota metamerkin ja "kalan" väliseen tilaan, jos ohitat sen, pyyntö ei toimi, koska metahahmo _ tarkoittaa täsmälleen yhtä merkkiä, ja välilyönti on myös merkki.

Se riittää tälle päivälle. Seuraavalla oppitunnilla opimme tekemään kyselyitä kahdesta tai useammasta taulukosta. Yritä sillä välin tehdä omia kyselyjäsi viestitaulukkoon (viestiin).

Tämä oppitunti koskee SQL-kyselyt tietokantaan VBA pääsy. Tarkastellaan kuinka VBA-kyselyt INSERT, UPDATE, DELETE tietokantaan suoritetaan, ja opimme myös kuinka saada tietty arvo SELECT-kyselystä.

Ne jotka ohjelmoivat VBA pääsy ja työskennellessään SQL-palvelintietokannan kanssa he kohtaavat usein 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 koskenut myös hieman materiaalia Tietojen lataaminen Accessista Word- ja Excel-malliin, mutta tavalla tai toisella pohdimme sitä pinnallisesti, ja tänään ehdotan, että puhumme siitä hieman yksityiskohtaisemmin.

Huomautus! Kaikki alla olevat esimerkit on käsitelty käyttämällä Access 2003 ADP -projektia ja MSSql 2008 -tietokantaa.

Alkutiedot esimerkkejä varten

Oletetaan, että meillä on taulukko testi_taulukko, joka sisältää kuukauden kuukausien numerot ja nimet (kyselyt tehdään johtamisstudio)

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

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

Tietokantakyselyt INSERT, UPDATE, DELETE VBA:ssa

Aloitetaan, jotta se ei kestäisi pitkään, sanotaan, että meidän on lisättävä rivi testitaulukkoomme ( koodia on kommentoitu)/

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 se DoCmd:llä RunSQL sql_query End Sub

Tässä tapauksessa kysely suoritetaan käyttämällä nykyisiä tietokantayhteysasetuksia. 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, joka pitää kyselymerkkijonon Dim sql_query As String "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.

Tietojen päivittämiseksi kirjoitamme päivityskyselyn sql_query-muuttujaan, 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

Yksityinen Sub start_Click() "Muuttujien ilmoittaminen "Tietuejoukolle tietokannasta Dim RS As ADODB.Recordset "Kyselymerkkijono Dim sql_query As String "Merkkijono viestien kokonaistietojen näyttämiseen Dim str As String "Uuden objektin luominen tietuejoukolle RS = Uusi ADODB .Recordset "Query string sql_query = "SELECT id, name_mon FROM test_table" "Suorita kysely nykyisten projektiyhteysasetusten avulla näyttääksesi viestin str = str & RS.Fields("id") & "-" & RS. Fields("name_mon") & vbnewline "siirry seuraavaan tietueeseen RS.MoveNext Wend "Lähtöviesti msgbox str End Sub

Täällä käytämme jo VBA Access Loops -silmukoita kaikkien tietuejoukossamme olevien arvojen läpikäymiseen.

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

Private Sub start_Click() "Muuttujien ilmoittaminen "Tietuejoukolle tietokannasta Dim RS As ADODB.Recordset "Kyselymerkkijono Dim sql_query As String "Loppuarvon näyttämiseen tarkoitettu merkkijono Dim str As String "Uuden objektin luominen tietuejoukolle RS = Uusi ADODB.Recordset "Query string sql_query = "SELECT name_mon FROM test_table WHERE id = 5" "Suorita kysely nykyisillä projektin yhteysasetuksella RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic = "Get.Fields(RS0 ) msgbox str end sub

Universaalisuuden vuoksi olemme jo käsitelleet tässä ei solun nimen, vaan sen indeksin, ts. 0, joka 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, että tulostat kaiken koodin erillisessä funktiossa (funktion kirjoittaminen VBA Access 2003:ssa) yhdellä syöttöparametrilla, esimerkiksi kuukausikoodilla ( esimerkkiämme ajatellen) ja yksinkertaisesti, jos tämä arvo on tarpeen näyttää, kutsu tarvitsemamme funktio tarvittavalla parametrilla, ja siinä kaikki, 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_income - tavaroiden vastaanottaminen

m_outcome - tavaroiden kulutus

m_product - hakemisto, tuotteen kuvaus

m_supplier - hakemisto; toimittajan tiedot

m_yksikkö - hakemisto; yksiköitä

Jotta voit testata tässä opetusohjelmassa annettuja esimerkkejä käytännössä, sinulla on oltava käytettävissäsi seuraavat ohjelmistot:

Microsoft Access 2003 tai uudempi.

SQL-kysely MS Accessissa. alkaa

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

Voit vaihtaa taulukkokentän muokkaustilaan valitsemalla yläpaneelista Suunnittelutila:

Näytä SQL-kyselyn tulos kaksoisnapsauttamalla kyselyn nimeä vasemmassa ruudussa:

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

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ä SQL-kyselyesimerkissä tähtimerkkiä (*) käytetään näyttämään m_product-taulukon kaikki sarakkeet, toisin sanoen saadakseen kaikki m_product-relaation kentät:

VALITSE *
FROM m_product;

PyyntöSQLQ003. DISTINCT-lausetta käytetään poistamaan päällekkäisiä tietueita ja hankkimaan monia ainutlaatuisia tietueita:

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 seuraa ORDER BY -lausetta:

VALITSE *
M_tulolta


TILAA hinnan mukaan;

SQL-kysely Q005. ASC-käskyä käytetään ORDER BY -käskyn lisäksi, ja sitä käytetään nousevan lajittelun määrittämiseen. 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 tulee WHERE-lauseen jälkeen. Esimerkki kaikkien tietueiden saamisesta m_income-taulukosta, joiden summan arvo on suurempi kuin 200:

VALITSE *
M_tulolta


WHERE määrä>200;

SQL-kysely Q007. Monimutkaisten ehtojen ilmaisemiseen käytetään loogisia operaatioita 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. Jos haluat yhdistää kahden tai useamman taulukon tiedot, käytä INNER JOIN-, LEFT JOIN- ja RIGHT JOIN -käskyjä. Seuraava esimerkki hakee dt-, product_id-, summa-, hinta-kentät m_tulotaulukosta ja otsikkokentät m_tuotetaulukosta. M_tulotaulukon tietue yhdistetään m_tuotetaulukon tietueeseen, 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ä sinun on kiinnitettävä huomiota kahteen asiaan: 1) hakuteksti on suljettu lainausmerkkeihin ("); 2) päivämäärä on muodossa #Month/Day/Year#, mikä on oikein MS:lle Pääsy. Muissa järjestelmissä päivämäärän muoto voi olla erilainen. Esimerkki maidon vastaanoton tietojen näyttämisestä 12. kesäkuuta 2011. Kiinnitä huomiota päivämäärän muotoon #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-ohjetta käytetään testaamaan, kuuluuko jokin arvoalue sille. Esimerkki SQL-kyselystä, joka näyttää tietoja 1.–30.6.2011 vastaanotetuista tuotteista:

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

Pyydä Q011. Näyttää tiedot tuotteista m_tuotetaulukosta, jonka koodit ovat myös m_income-taulukossa:

VALITSE *
FROM m_product


WHERE id IN (SELECT tuotetunnus FROM m_tulo);

Pyydä 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 palauttaa yksilöllisen luettelon koodeista ja tuotenimistä, joiden koodit 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);

Pyydä Q014. Ainutlaatuinen luettelo luokista näytetään m_category-taulukosta, jonka nimet alkavat kirjaimella M:

SELECT DISTINCT otsikko


FROM m_product
MISSÄ otsikko LIKE "M*";

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


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

Pyydä 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. INNER JOIN -käskyn avulla voit yhdistää tietoja useista taulukoista. 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. Funktioita, kuten SUM - summa, COUNT - määrä, AVG - aritmeettinen keskiarvo, MAX - maksimiarvo, MIN - minimiarvo, kutsutaan yhdistelmäfunktioiksi. Ne ottavat useita arvoja ja palauttavat yhden arvon käsiteltäessä. Esimerkki kenttien summan ja hinnan tulon summan laskemisesta SUM-aggregaattifunktiolla:

SELECT SUM(summa*hinta) AS Total_Sum


FROM m_tulo;

Pyydä 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 kesäkuussa 2011 vastaanotettujen koodilla 1 olevien nimikkeiden summa:

SELECT Sum(summa*hinta) AS tulon_summa


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

Pyydä Q021. Seuraava SQL-kysely laskee, kuinka paljon tavarat koodilla 4 tai 6 myytiin:

SELECT Sum(summa*hinta) tulokseksi_summa


FROM m_outcome
WHERE tuotteen_tunnus=4 TAI tuotteen_tunnus=6;

Pyydä Q022. Lasketaan, kuinka paljon 12.6.2011 myytiin tavaroita koodilla 4 tai 6:

SELECT Summa(summa*hinta) AS lopputuloksen_summa


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

Pyydä Q023. Tehtävä on tämä. Laske kokonaissumma, jolla luokan "Leivotut tuotteet" tuotteet hyvitettiin.

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


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

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


- luokkakoodin "Leivotut tuotteet" määrittäminen taulukosta m_category alikyselyn avulla;
- m_income- ja m_product-taulukoiden yhdistäminen kunkin hyvitettävän tuotteen luokan määrittämiseksi;
- vastaanottosumman (= määrä * hinta) laskeminen tavaroille, joiden kategoriakoodi 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="Leivotut tuotteet"); !}

Pyydä Q024. Luokan "Leivotut tuotteet" hyvitettyjen tuotteiden kokonaismäärän laskentaongelma ratkaistaan ​​seuraavalla algoritmilla:
- jokainen m_income-taulukon tietue, riippuen sen product_id-arvon arvosta, m_category-taulukosta vastaa luokan nimeä;
- valitse tietueita, joiden luokka on sama kuin "Leivotut tuotteet";
- laske tulon 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="Leivonnaiset"; !}

Pyydä Q025. Tämä esimerkki laskee, kuinka monta tuotetta kulutettiin:

SELECT COUNT(product_id) AS product_cnt


FROM (SELECT DISTINCT product_id FROM m_outcome) AS t;

Pyydä Q026. GROUP BY -lausetta käytetään tietueiden ryhmittelyyn. Tyypillisesti tietueet ryhmitellään yhden tai useamman kentän arvon mukaan, ja kuhunkin ryhmään sovelletaan koontitoimintoa. Esimerkiksi seuraava kysely luo raportin tavaroiden myynnistä. Toisin sanoen luodaan taulukko, joka sisältää tavaroiden nimet ja määrän, jolla niitä myydään:

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 tavaroita myydään, ja keskimääräisen myynnin. ROUND-funktiota käytetään pyöristämään keskiarvo lähimpään sadasosaan (toinen desimaali 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;

Pyydä Q028. Jokaiselle tuotteelle lasketaan sen kuittien kokonais- ja keskimääräinen määrä 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;

Pyydä Q029. Tämä kysely laskee kullekin nimikkeelle sen vuoden 2011 toisella neljänneksellä saatujen tulojen summan ja keskiarvon. Jos tavaran vastaanoton kokonaismäärä on vähintään 1000, tiedot tästä tuotteesta 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;

Pyydä Q030. Joissakin tapauksissa on tarpeen sovittaa kunkin taulukon jokainen tietue toisen taulukon jokaiseen tietueeseen; mitä kutsutaan karteesiseksi tuotteeksi. Tällaisen liitoksen tuloksena olevaa taulukkoa kutsutaan Descartes-taulukoksi. Jos esimerkiksi jossain taulukossa A on 100 merkintää ja taulukossa B on 15 merkintää, niiden karteesinen taulukko koostuu 100*15=150 merkinnästä. Seuraava kysely yhdistää jokaisen m_income-taulukon merkinnän jokaisen m_outcome-taulukon merkinnän kanssa:
FROM m_tulo, m_tulos;

Pyydä 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;

Pyydä Q033. Tässä esimerkissä kahta yllä olevaa kyselyä (q031 ja q032) käytetään alikyselyinä. Näiden kyselyjen tulokset yhdistetään yhdeksi raportiksi LEFT JOIN -menetelmällä. Seuraava kysely näyttää raportin kunkin toimittajan vastaanotettujen ja myytyjen tuotteiden määrästä ja määrästä. Kannattaa kiinnittää huomiota siihen, että jos jokin tuote on jo saapunut, mutta sitä ei ole vielä myyty, tämän tietueen 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);

Pyydä Q034. Tässä esimerkissä kahta yllä olevaa kyselyä (q031 ja q032) käytetään alikyselyinä. Näiden kyselyiden tulokset yhdistetään yhdeksi raportiksi RIGTH JOIN -menetelmällä. Seuraava kysely tulostaa raportin kunkin asiakkaan käyttämien maksujärjestelmien maksujen määrästä ja tekemien investointien määrästä. Seuraava kysely näyttää raportin kunkin toimittajan vastaanotettujen ja myytyjen tuotteiden määrästä ja määrästä. Huomaa, että jos tuote on jo myyty, mutta sitä ei ole vielä vastaanotettu, tämän merkinnän tulo_summa-solu on tyhjä. Tällaisten tyhjien solujen esiintyminen on merkki virheestä myynnin kirjanpidossa, koska ennen myyntiä on ensin välttämätöntä, että vastaava tuote saapuu:

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);

Pyydä Q035. Näkyviin tulee raportti tuottojen ja kulujen määrästä tuotekohtaisesti. Tätä varten luodaan luettelo tuotteista m_income- ja m_outcome-taulukoiden mukaan, sitten jokaiselle tämän luettelon tuotteelle lasketaan sen tulojen summa m_tulotaulukon mukaan 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;

Pyydä 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 siinä ei ole alkioita. Seuraava kysely palauttaa tuotekoodit, jotka sisältyvät sekä m_income- että m_outcome-taulukkoon:

VALITSE ERI tuotteen_tunnus


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

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

VALITSE ERI tuotteen_tunnus


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

Pyydä 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);

Pyydä Q039. Näkyviin tulee luettelo tuotteista, joilla on eniten myyntiä. Algoritmi on tämä. Jokaiselle tuotteelle lasketaan sen myynnin summa. Sitten määritetään näiden summien enimmäismäärä. Sitten jokaiselle tuotteelle lasketaan jälleen sen myynnin summa ja näytetään koodi ja tavaroiden myynnin summa, jonka myynnin summa on yhtä suuri kuin 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));

Pyydä Q040. Varattua sanaa IIF (ehdollinen operaattori) käytetään arvioimaan loogista lauseketta ja suorittamaan toiminto tuloksen mukaan (TOSI tai EPÄTOSI). Seuraavassa esimerkissä tuotteen toimitus katsotaan "pieneksi", jos määrä on pienempi kuin 500. Muussa tapauksessa eli vastaanottomää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-käskyä käytetään useammin kuin kerran, on kätevämpää korvata se SWITCH-käskyllä. SWITCH-operaattoria (monivalintaoperaattoria) käytetään loogisen lausekkeen arvioimiseen ja toimenpiteen suorittamiseen 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"iso") AS-merkki
FROM m_tulo;

Pyydä Q042. Seuraavassa kyselyssä, jos tavaramäärä saapuvassa erässä on alle 300, erää pidetään "pienenä". Muuten, eli jos ehdon määrä SELECT dt, product_id, summa,
IIF(määrä IIF(määrä M_tulo;

SQL-kysely Q043. Seuraavassa kyselyssä, jos tavaramäärä saapuvassa erässä on alle 300, erää pidetään "pienenä". Muuten, eli jos ehdon määrä SELECT dt, product_id, summa,
SWITCH(summa summa>=1000"iso") 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 ja enemmän). Seuraavaksi jokaiselle ryhmälle lasketaan 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 kuukausi päivämäärään dt-kentästä ja näytä uusi päivämäärä 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ä tavaran 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. Kuukausi_viimeinen1-sarake laskee kuukausien absoluuttisen lukumää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 vastaanotettujen tavaroiden määrästä ja määrästä vuodelta 2011 näytetään:

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 estää;

Pyydä Q051. Seuraava kysely auttaa selvittämään, onnistuivatko käyttäjät syöttämään järjestelmään tietoa tavaroiden kulutuksesta tavaroiden vastaanottoa suuremmalle summalle:

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)
Pyydä 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 se 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;

Pyydä Q053. Tuotteiden viisi parasta myyntimäärien mukaan näytetään. Viiden ensimmäisen tietueen tulostus suoritetaan TOP-käskyn avulla:

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


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

Pyydä Q054. Tuotteiden viisi parasta 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(*);

Pyydä 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

Pyydä U001. Seuraava SQL-muutoskysely nostaa m_income-taulukon koodilla 3 olevien tuotteiden 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 "Butter":

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-muutoskysely m_outcome-taulukossa alentaa kaikkien OOO Sladkoen 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="OOO"Сладкое"");. !}

Lab #1

SQL: RETRIEVE DATA - komentoVALITSE

Työn tavoite:

  • Tutustu 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 valintakysely SQL-tilassa kaikille STUDENTS-taulukon sarakkeille.

VALITSE *

OPISKELIJAILTA;


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

VALITSE ERILAINEN KAUPUNGIN

FROM [HENKILÖTIEDOT];

Tehtävä numero 4. Luo SQL-tilassa valintakysely, joka valitsee kaikkien niiden opiskelijoiden nimet, joilla on sukunimi Ivanov ja joiden tiedot ovat OPPILAS-taulukossa.

VALITSE SUKUNIMI, NIMI

OPISKELIJAILTA

WHERE SURNAME="Ivanov";

Tehtävä numero 5. Luo kysely SQL-tilassa valintaa varten saadaksesi UIT-22-ryhmässä budjettirahoitteisessa koulutusmuodossa opiskelevien opiskelijoiden nimet ja sukunimet.

VALITSE SUKUNIMI, NIMI

OPISKELIJAILTA

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

Tehtävä numero 6. Luo kysely SQL-tilassa. Esimerkki TEKETTEEN LÄPISTYS -taulukosta, tiedot opiskelijoista, joiden arvosanat ovat vain 4 ja 5.

VALITSE *

FROM[MUUTTAAKOKEET]

MISSÄARVOSANAIN (4,5);

Tehtävä numero 7. Luo zanpoc- ja SQL-tila näytetiedoille opiskelijoista, joiden koearvosana on 3 IOSU-aiheesta.

VALITSE *

FROM[MUUTTAAKOKEET]

MISSÄKOHDE=" ISSU"JaARVOSANAEi sisällä (4.5);

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

VALITSE *

FROMTAVARAT

MISSÄKATSELLA100-130 VÄLILLÄ;


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

VALITSE *

FROMOPISKELIJAT

MISSÄSUKUNIMIKUTEN"KANSSA*";

Johtopäätös: Laboratoriotyön aikana tutustuimme SQL-käskyihin, opimme luomaan yksinkertaisia ​​SQL-kyselyitä Accessissa SELECT-komennolla IN, BETWEEN, LIKE -operaattoreiden avulla.

SQL-kyselyesimerkkejä voidaan käyttää oppimaan ja harjoittelemaan SQL-kyselyjen kirjoittamista MS Accessissa.

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

Pyydä Q011. Näyttää tiedot tuotteista m_tuotetaulukosta, jonka koodit ovat myös m_income-taulukossa:

VALITSE *
FROM m_product
WHERE id IN (SELECT tuotetunnus FROM m_tulo);

Pyydä 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 palauttaa yksilöllisen luettelon koodeista ja tuotenimistä, joiden koodit 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);

Pyydä Q014. Ainutlaatuinen luettelo luokista näytetään m_category-taulukosta, jonka nimet alkavat kirjaimella M:

SELECT DISTINCT otsikko
FROM m_product
MISSÄ otsikko LIKE "M*";

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


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

Pyydä 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. INNER JOIN -käskyn avulla voit yhdistää tietoja useista taulukoista. 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. Funktioita, kuten SUM - summa, COUNT - määrä, AVG - aritmeettinen keskiarvo, MAX - maksimiarvo, MIN - minimiarvo, kutsutaan yhdistelmäfunktioiksi. Ne ottavat useita arvoja ja palauttavat yhden arvon käsiteltäessä. Esimerkki kenttien summan ja hinnan tulon summan laskemisesta SUM-aggregaattifunktiolla.