Päringute loomine SQL-serveris. Päringud Accessis

Accessi päringud on peamine tööriist andmebaasi tabelites andmete valimiseks, värskendamiseks ja töötlemiseks. Access kasutab relatsiooniliste andmebaaside kontseptsiooni kohaselt päringute täitmiseks struktureeritud päringukeelt (SQL). SQL-lausete abil realiseeritakse kõik Accessi päringud.

Peamine päringu tüüp on valitud päring. Selle päringu tulemuseks on uus tabel, mis eksisteerib kuni päringu sulgemiseni. Kirjed moodustatakse nende tabelite kirjete kombineerimisel, millele päring on üles ehitatud. Tabelikirjete kombineerimise meetod määratakse kindlaks nende seose määratlemisel andmeskeemis või päringu loomisel. Päringus sõnastatud valikutingimused võimaldavad filtreerida kirjeid, mis moodustavad tabelite liitmise tulemuse.

Accessis saab luua mitut tüüpi päringuid.

  • näidistaotlus- valib andmeid ühest tabelist või päringust või mitmest seotud tabelist ja muudest päringutest. Tulemuseks on tabel, mis eksisteerib kuni päringu sulgemiseni. Tulemustabeli kirjete moodustamine toimub vastavalt määratud valikutingimustele ja mitme tabeli kasutamisel nende kirjeid kombineerides;
  • päring tabeli loomiseks- valib andmeid seotud tabelitest ja muudest päringutest, kuid erinevalt valikupäringust salvestab tulemuse uude püsitabelisse;
  • uuendamise, lisamise, kustutamise taotlused- on toimingupäringud, mille tulemusena muudetakse tabelites olevaid andmeid.

Kujundusrežiimis Accessis olevad päringud sisaldavad andmeskeemi, mis kuvab kasutatud tabeleid ja päringuvormi, milles konstrueeritakse päringutabeli struktuur ja kirjete valimise tingimused (joonis 4.1).

Päringu abil saate teostada järgmist tüüpi andmetöötlust:

  • kaasama kasutaja valitud tabeliväljad päringutabelisse;
  • teha arvutusi igas vastuvõetud kirjes;
  • valida kirjed, mis vastavad valikutingimustele;
  • moodustada seotud tabelite kirjete liite põhjal uus virtuaalne tabel;
  • rühmitada kirjed, millel on ühel või mitmel väljal samad väärtused, mis täidavad samaaegselt statistilisi funktsioone rühma teistel väljadel ja lisavad tulemusesse iga rühma kohta ühe kirje;
  • luua uus andmebaasitabel, kasutades olemasolevate tabelite andmeid;
  • värskendage kirjete valitud alamhulga välju;
  • kustutada andmebaasi tabelist valitud kirjete alamhulk;
  • lisada valitud kirjete alamhulk teise tabelisse.

Accessi päringud toimivad muude päringute, vormide ja aruannete kirjeallikatena. Päringu abil saate koguda täielikku teavet, et moodustada teatud teemavaldkonna dokument mitmest tabelist, seejärel luua selle abil vorm - selle dokumendi elektrooniline esitus. Kui viisard loob vormi või aruande mitme omavahel seotud tabeli põhjal, genereeritakse nende jaoks automaatselt päring kirjeallikana.
Parandamiseks vaadake videoõpetust.

Päringud on kirjutatud ilma jutumärkideta, sest MySQL, MS SQL ja PostGree nad on erinevad.

SQL päring: määratud (nõutud) väljade hankimine tabelist

SELECT ID, riigi_pealkiri, inimeste arv FROM tabeli_nimi

Saame rekordite nimekirja: KÕIK riigid ja nende elanikkond. Nõutavate väljade nimed eraldatakse komadega.

SELECT * FROM tabeli_nimi

* tähistab kõiki välju. See tähendab, et tulevad väljapanekud KÕIKE andmeväljad.

SQL-päring: kirjete kuvamine tabelist, välja arvatud duplikaadid

VALI tabeli_nimi ERALDI riik_pealkiri

Saame kirjete loendi: riigid, kus meie kasutajad asuvad. Ühest riigist võib olla palju kasutajaid. Sel juhul on see teie soov.

SQL päring: kirjete kuvamine tabelist vastavalt etteantud tingimusele

SELECT id, riigi_pealkiri, linna_pealkiri FROM tabeli_nimi WHERE arv_inimesi>100000000

Saame rekordite nimekirja: riigid, kus inimeste arv on üle 100 000 000.

SQL päring: kirjete kuvamine tabelist koos järjestusega

SELECT id, city_title FROM tabeli_nimi ORDER BY linna_pealkiri

Saame kirjete loendi: linnad tähestikulises järjekorras. A alguses, Z lõpus.

SELECT id, city_title FROM tabeli_nimi ORDER BY city_title DESC

Saame kirjete loendi: linnad tagurpidi ( DESC) on hea. Alguses mina, lõpus A.

SQL-päring: kirjete arvu loendamine

SELECT COUNT(*) FROM tabeli_nimi

Saame tabelis olevate kirjete arvu (arvu). Sel juhul EI OLE kirjete loendit.

SQL-päring: soovitud kirjete vahemiku kuvamine

SELECT * FROM tabeli_nimi LIMIT 2, 3

Tabelist saame 2 (teine) ja 3 (kolmas) kirjet. Päring on kasulik veebilehtedel navigeerimise loomisel.

SQL-päringud tingimustega

Kirjete kuvamine tabelist vastavalt etteantud tingimusele loogiliste operaatorite abil.

SQL-päring: JA konstruktsioon (AND)

SELECT id, city_title FROM table_name WHERE country="Russia" AND oil=1

Kirjete loendi hankimine: linnad Venemaalt JA on juurdepääs naftale. Millal operaatorit kasutatakse? JA, siis peavad mõlemad tingimused ühtima.

SQL-päring: VÕI ehitus (OR)

SELECT id, city_title FROM table_name WHERE country="Russia" OR country="USA"

Hankige rekordite loend: kõik Venemaa linnad VÕI USA. Millal operaatorit kasutatakse? VÕI, siis peab VÄHEMALT üks tingimus vastama.

SQL-päring: AND NOT construct (AND NOT)

SELECT id, kasutaja_sisselogimine FROM tabeli_nimi WHERE country="Russia" AND NOT count_comments<7

Hankige kirjete loend: kõik kasutajad Venemaalt JA tehtud MITTE VÄHEM 7 kommentaari.

SQL-päring: IN-konstruktsioon (B)

SELECT id, user_login FROM table_name WHERE country IN ("Venemaa", "Bulgaaria", "Hiina")

Saame kirjete loendi: kõik kasutajad, kes elavad ( IN) (Venemaa või Bulgaaria või Hiina)

SQL-päring: NOT IN konstruktsioon (NOT IN)

SELECT id, user_login FROM table_name WHERE country NOT IN ("Venemaa","Hiina")

Saame kirjete loendi: kõik kasutajad, kes ei ela ( EI SISSE) (Venemaa või Hiina).

SQL-päring: IS NULL konstruktsioon (tühjad või MITTE tühjad väärtused)

SELECT id, kasutaja_sisselogimine FROM tabeli_nimi WHERE olek ON NULL

Saame kirjete loendi: kõik kasutajad, kelle olek pole määratletud. NULL on eraldi teema ja seetõttu kontrollitakse seda eraldi.

SELECT id, kasutaja_sisselogimine FROM tabeli_nimi WHERE olek EI OLE NULL

Saame kirjete loendi: kõik kasutajad, kelle olek on määratletud (MITTE NULL).

SQL-päring: LIKE konstruktsioon

SELECT id, kasutaja_sisselogimine FROM tabeli_nimi WHERE perekonnanimi LIKE "John%"

Saame kirjete loendi: kasutajad, kelle perekonnanimi algab kombinatsiooniga "Ivan". Märk % tähendab MIS TAHES MÄRKI märke. Märgi % leidmiseks tuleb kasutada paoklahvi "Ivan\%".

SQL päring: BETWEEN konstruktsioon

SELECT id, kasutaja_sisselogimine FROM tabeli_nimi WHERE palk 25000 JA 50000

Saame kirjete loendi: kasutajad, kes saavad palka 25 000 kuni 50 000 (kaasa arvatud).

Loogilisi operaatoreid on VÄGA palju, seega uurige üksikasjalikult SQL-serveri dokumentatsiooni.

Keerulised SQL-päringud

SQL-päring: ühendage mitu päringut

(SELECT id, kasutaja_sisselogimine FROM tabeli_nimi1) UNION (SELECT id, user_login FROM tabeli_nimi2)

Saame kirjete nimekirja: nii süsteemis registreeritud kasutajad kui ka eraldi foorumisse registreerunud kasutajad. UNION operaator saab kombineerida mitu päringut. UNION toimib nagu SELECT DISTINCT, st loobub dubleerivatest väärtustest. Absoluutselt kõigi kirjete saamiseks peate kasutama operaatorit UNION ALL.

SQL-päring: välja väärtuste MAX, MIN, SUM, AVG, COUNT arvutamine

Ühe väljund, loenduri maksimaalne väärtus tabelis:

SELECT MAX(loendur) FROM tabeli_nimi

Ühe väljund, loenduri minimaalne väärtus tabelis:

SELECT MIN(loendur) FROM tabeli_nimi

Kõigi loenduri väärtuste summa kuvamine tabelis:

SELECT SUM(loendur) FROM tabeli_nimi

Loenduri keskmise väärtuse kuvamine tabelis:

SELECT AVG(loendur) FROM tabeli_nimi

Loendurite arvu kuvamine tabelis:

VALI COUNT(loendur) tabeli_nimi

Järeldus arvestite arvu kohta kaupluses nr 1, tabelis:

SELECT COUNT(counter) FROM table_name WHERE office="Workshop #1"

Need on kõige populaarsemad käsud. Soovitatav on võimalusel kasutada arvutustes sedalaadi SQL-päringuid, kuna andmetöötluse kiiruselt ei saa võrrelda ühtegi programmeerimiskeskkonda kui SQL-server ise oma andmete töötlemisel.

SQL päring: kirjete rühmitamine

SELECT kontinent, SUM(riik_piirkond) FROM riigist GROUP BY kontinendi järgi

Saame rekordite nimekirja: koos kontinendi nimega ja kõigi nende riikide pindalade summaga. See tähendab, et kui on olemas riikide kataloog, kus iga riigi pindala on registreeritud, siis GROUP BY konstruktsiooni kasutades saate teada iga kontinendi suuruse (mandrite kaupa rühmitamise alusel).

SQL-päring: mitme tabeli kasutamine aliase (aliase) kaudu

SELECT o.order_no, o.amount_paid, c.company FROM orders AS o, klient AS koos WHERE o.custno=c.custno AND c.city="Tyumen"

Saame kirjete loendi: tellimused ostjatelt, kes elavad ainult Tjumenis.

Tegelikult on seda tüüpi õigesti kujundatud andmebaasi puhul päring kõige sagedasem, nii et MySQL võttis kasutusele spetsiaalse operaatori, mis töötab mitu korda kiiremini kui ülal kirjutatud kood.

VALI o.tellimuse_nr, o.makstud summa, z.ettevõte tellimustest AS o LEFT JOIN klient AS z SEES (z.custno=o.custno)

Pesastatud alampäringud

SELECT * FROM tabeli_nimi WHERE palk=(SELECT MAX(palk) FROM töötaja)

Saame ühe kirje: info maksimaalse palgaga kasutaja kohta.

Tähelepanu! Pesastatud alampäringud on SQL-serverite üks kitsaskohti. Koos oma paindlikkuse ja võimsusega suurendavad need oluliselt ka serveri koormust. Mis põhjustab teiste kasutajate jaoks katastroofilist aeglustumist. Väga sageli esineb pesastatud päringutega rekursiivseid kõnesid. Seetõttu soovitan tungivalt MITTE kasutada pesastatud päringuid, vaid jagada need väiksemateks. Või kasutage ülalkirjeldatud LEFT JOIN kombinatsiooni. Lisaks seda tüüpi taotlustele on need turvarikkumiste hulgas suurem. Kui otsustate kasutada pesastatud alampäringuid, peate need väga hoolikalt kavandama ja tegema esialgsed käivitamised andmebaasi koopiatel (testandmebaasidel).

SQL-päringud, mis muudavad andmeid

SQL-päring: INSERT

Juhend LISA võimaldab teil tabelisse kirjeid sisestada. Lihtsamalt öeldes looge tabelisse andmetega rida.

Valik number 1. Sageli kasutatav juhis:

INSERT INTO tabeli_nimi (id, kasutaja_sisselogimine) VÄÄRTUSED (1, "ivanov"), (2, "petrov")

Laual " tabeli_nimi» lisab 2 (kaks) kasutajat korraga.

Valik number 2. Stiili on mugavam kasutada:

SISESTAGE tabeli_nimi SET id=1, kasutaja_sisselogimine="ivanov"; SISESTAGE tabeli_nimi SET id=2, kasutaja_sisselogimine="petrov";

Sellel on oma eelised ja puudused.

Peamised puudused:

  • Paljud väikesed SQL-päringud on veidi aeglasemad kui üks suur SQL-päring, kuid teised päringud seatakse teenuse saamiseks järjekorda. See tähendab, et kui suur SQL-päring töötab 30 minutit, siis kogu selle aja jooksul suitsetavad ülejäänud päringud bambust ja ootavad oma järjekorda.
  • Taotlus on ulatuslikum kui eelmine versioon.

Peamised eelised:

  • Väikeste SQL-päringute ajal ei blokeerita teisi SQL-päringuid.
  • Lugemise lihtsus.
  • Paindlikkus. Selle valiku korral ei saa te struktuuri jälgida, vaid lisada ainult vajalikud andmed.
  • Sel viisil arhiive luues saate hõlpsalt kopeerida ühe rea ja käivitada selle käsurealt (konsooli), mis ei taasta kogu ARHIIVI.
  • Kirjutamisstiil sarnaneb UPDATE lausega, mida on lihtsam meeles pidada.

SQL-päring: UPDATE

UPDATE tabeli_nimi SET user_login="ivanov", user_pername="Ivanov" WHERE id=1

Laual " tabeli_nimi» kirjes numbriga id=1 muudetakse väljade kasutaja_sisselogimine ja kasutaja_perekonnanimi väärtused määratud väärtusteks.

SQL-päring: DELETE

DELETE FROM tabeli_nimi WHERE id=3

Kirje ID-ga 3 kustutatakse tabelist tabeli_nimi.

  1. Erinevate programmeerimiskeeltega, nagu Delphi, Perl, Python ja Ruby, ühilduvuse huvides on soovitatav kirjutada kõik väljanimed väikeste tähtedega ja vajaduse korral eraldada need tühikuga "_".
  2. SQL-käsud kirjutatakse loetavuse huvides SUURtähtedega. Pidage alati meeles, et teised inimesed saavad koodi lugeda pärast teid, kuid tõenäoliselt teie ise N aja pärast.
  3. Nimetage väljad esmalt nimisõnaga ja seejärel toiminguga. Näiteks: city_status, user_login, user_name.
  4. Püüdke vältida reservisõnu erinevates keeltes, mis võivad SQL-is, PHP-s või Perlis probleeme tekitada, näiteks (nimi, arv, link). Näiteks: linki saab kasutada MS SQL-is, kuid see on reserveeritud MySQL-is.

See materjal on lühike viide igapäevatööks ega pretendeeri ülimega autoriteetse allikana, mis on konkreetse andmebaasi SQL-päringute esmane allikas.

Igaüks meist puutub regulaarselt kokku ja kasutab erinevaid andmebaase. Kui valime e-posti aadressi, töötame andmebaasiga. Andmebaasid kasutavad otsinguteenuseid, pangad kliendiandmete salvestamiseks jne.

Kuid hoolimata andmebaaside pidevast kasutamisest on isegi paljude tarkvarasüsteemide arendajate jaoks palju "valgeid kohti", mis on tingitud samade mõistete erinevast tõlgendusest. Enne SQL-keelega tutvumist anname andmebaasi põhiterminite lühikese definitsiooni. Niisiis.

Andmebaas - fail või failide komplekt järjestatud andmestruktuuride ja nende seoste salvestamiseks. Väga sageli nimetatakse andmebaasi haldussüsteemiks - see on ainult teatud formaadis teabe hoidla ja võib töötada koos erinevate DBMS-idega.

laud - Kujutagem ette kausta, mis salvestab teatud atribuudi järgi rühmitatud dokumente, näiteks viimase kuu tellimuste loendit. See on tabel arvutis Eraldi tabelil on oma kordumatu nimi.

Andmetüüp - millist teavet on lubatud konkreetsesse veergu või reale salvestada. See võib olla teatud vormingus numbrid või tekst.

Veerg ja rida- oleme kõik töötanud arvutustabelitega, millel on ka read ja veerud. Iga relatsiooniline andmebaas töötab tabelitega samal viisil. Ridu nimetatakse mõnikord kirjeteks.

esmane võti- igal tabelireal võib selle ainulaadseks tuvastamiseks olla üks või mitu veergu. Ilma primaarvõtmeta on soovitud ridu väga raske värskendada, muuta ja kustutada.

Mis on SQL?

SQL(inglise keel – struktureeritud päringukeel) töötati välja ainult andmebaasidega töötamiseks ja on praegu kõigi populaarsete DBMS-ide standard. Keele süntaks koosneb vähesest arvust operaatoritest ja seda on lihtne õppida. Kuid vaatamata välisele lihtsusele võimaldab see luua SQL-päringuid keeruliste toimingute jaoks mis tahes suurusega andmebaasiga.

Alates 1992. aastast on olemas üldtunnustatud standard nimega ANSI SQL. See määratleb operaatorite põhisüntaksi ja funktsioonid ning seda toetavad kõik DBMS-i turuliidrid nagu ORACLE. Keele kõiki võimalusi on võimatu ühes väikeses artiklis käsitleda, seega käsitleme lühidalt ainult põhilisi SQL-päringuid. Näited näitavad selgelt keele lihtsust ja võimalusi:

  • andmebaaside ja tabelite loomine;
  • andmete valimi võtmine;
  • kirjete lisamine;
  • teabe muutmine ja kustutamine.

SQL-i andmetüübid

Andmebaasi tabeli kõik veerud salvestavad sama tüüpi andmeid. SQL-i andmetüübid on samad, mis teistes programmeerimiskeeltes.

Tabelite ja andmebaaside loomine

Uute andmebaaside, tabelite ja muude päringute loomiseks SQL-is on kaks võimalust:

  • DBMS-i konsooli kaudu
  • Andmebaasiserveriga kaasasolevate interaktiivsete haldustööriistade kasutamine.

Operaator loob uue andmebaasi LOO ANDMEBAAS<наименование базы данных>; . Nagu näete, on süntaks lihtne ja lühike.

Loome andmebaasis tabeleid, kasutades käsku CREATE TABLE järgmiste parameetritega:

  • tabeli nimi
  • veergude nimed ja andmetüübid

Näiteks loome kaubatabeli järgmiste veergudega:

Koostame tabeli:

LOO TABEL Kaup

(kauba_id CHAR(15) EI OLE NULL,

tarnija_id CHAR(15) EI OLE NULL,

kauba_nimi CHAR(254) NULL,

commodity_price DECIMAL(8,2) NULL,

kauba_desc VARCHAR(1000) NULL);

Tabelis on viis veergu. Nime järel tuleb andmetüüp, veerud eraldatakse komadega. Veeru väärtus võib olla tühi (NULL) või täita (NOT NULL) ja see määratakse tabeli loomisel.

Andmete valimine tabelist

Andmete valiku operaator on kõige sagedamini kasutatav SQL-päring. Info saamiseks tuleb täpsustada, mida me sellisest tabelist valida tahame. Esiteks lihtne näide:

SELECT kauba_nimi Kaubast

Pärast SELECT-lauset määrame teabe saamiseks veeru nime ja FROM määrab tabeli.

Päringu täitmise tulemuseks on kõik kauba_nimi väärtustega tabeliread selles järjekorras, milles need andmebaasi sisestati, st. ilma igasuguse sorteerimiseta. Tulemuse tellimiseks kasutatakse lisaklauslit ORDER BY.

Mitme välja kohta päringu tegemiseks loetlege need komadega eraldatuna, nagu järgmises näites:

SELECT kauba_id, kauba_nimi, kauba_hind Kaubast

Päringutulemusena on võimalik saada rea ​​kõigi veergude väärtus. Selleks kasutatakse märki "*":

VALI * Kaubast

  • Lisaks toetab SELECT:
  • Andmete sortimine (ORDER BY avaldus)
  • Valige vastavalt tingimustele (KUS)
  • Grupeerimistermin (GROUP BY)

Rea lisamine

Tabelisse rea lisamiseks kasutatakse SQL-päringuid INSERT-lausega. Lisamist saab teha kolmel viisil:

  • lisage uus terve rida;
  • osa stringist;
  • päringu tulemused.

Täieliku rea lisamiseks peate määrama tabeli nime ja uue rea veergude (väljade) väärtused. Siin on näide:

INSERT INTO Kauba väärtused ("106", "50", "Coca-Cola", "1.68", "Alkoholivaba ,)

Näide lisab tabelisse uue toote. Väärtused määratakse iga veeru jaoks pärast VALUES-i. Kui veerul puudub vastav väärtus, siis tuleb määrata NULL. Veerud täidetakse väärtustega tabeli loomisel määratud järjekorras.

Kui lisate ainult osa reast, peate selgesõnaliselt määrama veergude nimed, nagu näites:

INSERT INTO Kauba (kauba_id, tarnija_id, kauba_nimi)

VÄÄRTUSED("106 ", '50", "Coca Cola")

Sisestasime ainult toote, tarnija ja selle nime identifikaatorid ning ülejäänud väljad jätsime tühjaks.

Päringu tulemuste lisamine

INSERT-i kasutatakse peamiselt ridade lisamiseks, kuid seda saab kasutada ka SELECT-lause tulemuste lisamiseks.

Muuda andmeid

Andmebaasi tabeli väljade teabe muutmiseks peate kasutama käsku UPDATE. Operaatorit saab kasutada kahel viisil:

  • Kõiki tabeli ridu värskendatakse.
  • Ainult teatud rea jaoks.

UPDATE koosneb kolmest põhielemendist:

  • tabel, milles on vaja muudatusi teha;
  • väljade nimed ja nende uued väärtused;
  • muudetavate ridade valimise tingimused.

Kaaluge näidet. Oletame, et ID=106 toote hind on muutunud, seega tuleb seda rida värskendada. Kirjutame järgmise avalduse:

VÄRSKENDUS Kauba SET kauba_hind = "3,2" KUS kauba_id = "106"

Täpsustasime tabeli nime, meie puhul Commodity, kus värskendamine toimub, seejärel pärast SET - veeru uue väärtuse ja leidsime soovitud kirje, määrates soovitud ID väärtuse WHERE-s.

Mitme veeru muutmiseks määrake SET-lause järel mitu veeru-väärtuste paari, eraldades need komadega. Vaatame näidet, milles toote nime ja hinda uuendatakse:

UPDATE Kauba SET commodity_name='Fanta', kauba_hind = "3.2" WHERE kauba_id = "106"

Veerus oleva teabe kustutamiseks saate määrata selle väärtuseks NULL, kui tabeli struktuur seda võimaldab. Tuleb meeles pidada, et NULL on täpselt "ei" väärtus, mitte null teksti või numbri kujul. Eemalda toote kirjeldus:

UPDATE Kauba SET commodity_desc = NULL WHERE kauba_id = "106"

Ridade eemaldamine

SQL-päringud tabeli ridade kustutamiseks käivitatakse DELETE-lausega. Kasutusjuhtumeid on kaks:

  • teatud read tabelist kustutatakse;
  • kõik tabelis olevad read kustutatakse.

Tabelist ühe rea kustutamise näide:

DELETE FROM Commodity WHERE kauba_id = "106"

Pärast DELETE FROM määrame tabeli nime, milles read kustutatakse. WHERE-klausel sisaldab tingimust, mille alusel valitakse read kustutamiseks. Näites kustutame tooterea ID=106. KUS täpsustamine on väga oluline. selle lause väljajätmine kustutab tabelist kõik read. See kehtib ka väljade väärtuse muutmise kohta.

DELETE avaldus ei määra veergude nimesid ega metamärke. See eemaldab read täielikult, kuid ei saa eemaldada ühtki veergu.

SQL-i kasutamine Microsoft Accessis

Tavaliselt kasutatakse interaktiivselt tabelite, andmebaaside loomiseks, andmebaasis olevate andmete haldamiseks, muutmiseks, analüüsimiseks ja SQL Accessi päringute juurutamiseks mugava interaktiivse päringukujundaja (Query Designer) kaudu, mille abil saate koostada ja kohe käivitada mis tahes keerukusega SQL-lauseid.

Toetatud on ka serveri juurdepääsurežiim, milles Access DBMS-i saab kasutada mis tahes ODBC andmeallika SQL päringute generaatorina. See võimalus võimaldab Accessi rakendustel suhelda mis tahes vorminguga.

SQL-i laiendused

Kuna SQL-päringutel pole kõiki protseduuriliste programmeerimiskeelte funktsioone, nagu tsüklid, harud jne, arendavad DBMS-i müüjad SQL-i oma versiooni koos täiustatud funktsioonidega. Esiteks on see salvestatud protseduuride ja protseduurikeelte standardoperaatorite tugi.

Keele levinumad murded:

  • Oracle'i andmebaas – PL/SQL
  • Interbase, Firebird – PSQL
  • Microsoft SQL Server – Transact-SQL
  • PostgreSQL – PL/pgSQL.

SQL veebi

MySQL DBMS-i levitatakse GNU üldise avaliku litsentsi all. Kohandatud moodulite väljatöötamise võimalusega on olemas kommertslitsents. Selle lahutamatu osana on see kaasatud Interneti-serverite populaarseimatesse komplektidesse, nagu XAMPP, WAMP ja LAMP, ning on kõige populaarsem DBMS-i rakenduste arendamiseks Internetis.

Selle töötas välja Sun Microsystems ja seda haldab praegu Oracle Corporation. Toetab kuni 64 terabaidiseid andmebaase, SQL:2003 süntaksistandardit, andmebaaside replikatsiooni ja pilveteenuseid.

Tabeliväljendid nimetatakse alampäringuteks, mida kasutatakse seal, kus oodatakse tabelit. Tabeliavaldisi on kahte tüüpi:

    tuletatud tabelid;

    üldistatud tabeliväljendid.

Neid kahte tabeliavaldiste vormi käsitletakse järgmistes alajaotistes.

Tuletatud tabelid

Tuletatud tabel on tabeliavaldis, mis sisaldub päringu FROM-klauslis. Tuletatud tabeleid saab kasutada siis, kui veergude varjunimede kasutamine pole võimalik, kuna SQL-i tõlkija töötleb teise avalduse enne, kui varjunimi on teada. Allolev näide näitab katset kasutada veeru pseudonüümi olukorras, kus enne varjunime teada saamist töödeldakse teist klauslit:

KASUTAGE SampleDb; SELECT MONTH(EnterDate) as enter_month FROM Works_on GROUP BY sisestamise_kuu;

Selle päringu sooritamise katse tagastab järgmise tõrketeate:

Sõnum 207, tase 16, olek 1, rida 5 Kehtetu veeru nimi "enter_month". (Sõnum 207: tase 16, olek 1, rida 5 Kehtetu veeru nimi sisesta_kuu)

Vea põhjuseks on see, et klauslit GROUP BY töödeldakse enne SELECT-lause vastava loendi töötlemist ja veeru enter_month pseudonüüm pole rühma töötlemisel teada.

Selle probleemi saab lahendada, kasutades vaadet, mis sisaldab eelnevat päringut (ilma GROUP BY-klauslita), kuna klausel FROM käivitatakse enne GROUP BY-klauslit:

KASUTAGE SampleDb; SELECT enter_month FROM (SELECT MONTH(EnterDate) as enter_month FROM Works_on) AS m GROUP BY enter_month;

Selle päringu tulemus on järgmine:

Tavaliselt saab tabeliavaldise paigutada suvalisse kohta SELECT-lauses, kus tabeli nimi võib ilmuda. (Tabeliavaldise tulemuseks on alati tabel või erijuhtudel avaldis.) Järgmine näide näitab tabeliavaldise kasutamist SELECT-lause valikuloendis:

Selle päringu tulemus on:

Üldised tabeliväljendid

Common Table Expression (OTB) (lühendatult CTE) on nimega tabeliavaldis, mida toetab Transact-SQL keel. Levinud tabeliavaldisi kasutatakse kahte järgmist tüüpi päringutes:

    mitterekursiivne;

    korduv.

Neid kahte tüüpi taotlusi käsitletakse järgmistes jaotistes.

OTB ja mitterekursiivsed päringud

OTB mitterekursiivset vormi saab kasutada tuletatud tabelite ja vaadete alternatiivina. Tavaliselt on OTB määratletud KOOS klauslitega ja lisapäring, mis viitab WITH-klauslis kasutatud nimele. Transact-SQL-is on märksõna WITH tähendus mitmetähenduslik. Ebaselguse vältimiseks tuleks WITH-lausele eelnev lause lõpetada semikooloniga.

KASUTAGE AdventureWorks2012; SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue > (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") AND Freight > (SELECT AVG(TotalDue) FROM Sales.SalesOrderHea2) ")/2,5;

Selle näite päring valib tellimused, mille kogumaksud (TotalDue) on suuremad kui kõigi maksude keskmine ja mille Freight on suurem kui 40% keskmistest maksudest. Selle päringu peamine omadus on selle mahukus, kuna pesastatud päring tuleb kirjutada kaks korda. Üks võimalik viis päringukonstruktsiooni ulatuse vähendamiseks oleks luua alampäringut sisaldav vaade. Kuid see lahendus on pisut keeruline, kuna see nõuab vaate loomist ja seejärel kustutamist pärast päringu lõpetamist. Parim viis oleks OTB loomine. Allolev näide näitab mitterekursiivse OTB kasutamist, mis lühendab ülaltoodud päringu definitsiooni:

KASUTAGE AdventureWorks2012; WITH hind_arvutus(aasta_2005) AS (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue > (SELECT year_hinna_2005) FROM_ccal0c) FROM_c. /2,5;

WITH-klausli süntaks mitterekursiivsetes päringutes on järgmine:

Parameeter cte_name on OTB nimi, mis määratleb saadud tabeli, ja veergude_loendi parameeter on tabeliavaldise veergude loend. (Ülaltoodud näites on OTB nimi hind_arvutus ja sellel on üks veerg, aasta_2005.) Parameeter inner_query tähistab SELECT-lauset, mis määrab vastava tabeliavaldise tulemuskomplekti. Määratletud tabeliavaldist saab seejärel kasutada päringus outer_query. (Ülaltoodud näite välimine päring kasutab topeltpesastatud päringu lihtsustamiseks veergu OTB price_calc ja selle aasta_2005 veergu.)

OTB ja rekursiivsed päringud

See jaotis esitab keerukama materjali. Seetõttu on esmakordsel lugemisel soovitatav see vahele jätta ja hiljem selle juurde tagasi pöörduda. OTB-d võivad olla rekursiivsed, kuna OTB-d võivad sisaldada viiteid iseendale. Rekursiivse päringu põhiline OTB süntaks näeb välja järgmine:

Parameetritel cte_name ja column_list on sama tähendus, mis OTB-s mitterekursiivsete päringute puhul. WITH-klausli põhiosa koosneb kahest päringust, mis on lausega ühendatud LIIT KÕIK. Esimest päringut kutsutakse ainult üks kord ja see hakkab koguma rekursiooni tulemust. Operaatori UNION ALL esimene operand ei viita OTB-le. Seda päringut nimetatakse viitepäringuks või allikaks.

Teine päring sisaldab linki OTB-le ja esindab selle rekursiivset osa. Seetõttu nimetatakse seda rekursiivseks liikmeks. Rekursiivse osa esimeses kõnes esindab OTB viide viitepäringu tulemust. Rekursiivne liige kasutab päringu esimese kõne tulemust. Pärast seda kutsub süsteem uuesti välja rekursiivse osa. Kõne rekursiivsele liikmele lõpeb, kui eelmine kõne sellele tagastab tühja tulemuskomplekti.

Operaator UNION ALL ühendab nii seni kogunenud read kui ka praeguse kõne poolt rekursiivsele liikmele lisatud täiendavad read. (Tehteri UNION ALL olemasolu tähendab, et tulemusest ei eemaldata korduvaid ridu.)

Lõpuks määrab parameeter outer_query välise päringu, mida OTB kasutab kõigi kõnede saamiseks mõlema liikme liitu.

OTB rekursiivse vormi demonstreerimiseks kasutame lennukitabelit, mis on määratletud ja täidetud allolevas näites näidatud koodiga:

KASUTAGE SampleDb; CREATE TABLE Lennuk (ContainingAssembly VARCHAR(10), ContainedAssembly VARCHAR(10), QuantityContained INT, UnitCost DECIMAL(6,2)); INSERT INTO Airplane VALUES ("Lennuk", "Kere", 1, 10); INSERT INTO Airplane VALUES ("Lennuk", "Tiivad", 1, 11); INSERT INTO Airplane VALUES ("Airplane", "Tail", 1, 12); INSERT INTO Airplane VALUES ("Kere", "Salong", 1, 13); INSERT INTO Airplane VALUES ("Fuselag", "Cockpit", 1, 14); INSERT INTO Airplane VALUES ("kere", "nina", 1, 15); INSERT INTO Lennuki VALUES("Salong", NULL, 1,13); INSERT INTO Lennuki VALUES("kabiin", NULL, 1, 14); INSERT INTO Lennuki VALUES("Nina", NULL, 1, 15); INSERT INTO Lennuki VALUES("Tiivad", NULL,2, 11); INSERT INTO Lennuki VALUES("Tail", NULL, 1, 12);

Lennuki tabelis on neli veergu. Veerg ContainingAssembly määratleb koostu ja veerg ContainedAssembly määratleb osad (ükshaaval), mis moodustavad vastava koostu. Alloleval joonisel on kujutatud graafiliselt võimalikku tüüpi õhusõiduki ja selle koostisosi:

Lennukite tabel koosneb järgmisest 11 reast:

Järgmises näites kasutatakse WITH-klauslit, et määratleda päring, mis arvutab iga järgu kogumaksumuse:

KASUTAGE SampleDb; WITH_osade_loend(koost1, kogus, maksumus) AS (SELECT ContainingAssembly, QuantityContained, UnitCost FROM Airplane WHERE Contained Assembly IS NULL UNION ALL SELECT a.ContainingAssembly, a.Quantity Contained, CAST(l.quantity) *DECl. ) FROM osade_loend l, lennuk a WHERE l.koost1 = a.ContainedAssembly) SELECT koost1 "Osa", kogus "Kogus", maksumus "Hind" FROM_osade_loendist;

WITH-klausel määratleb OTB-loendi nimega osade_loend, mis koosneb kolmest veerust: koost1, kogus ja maksumus. Näite esimest SELECT-lauset kutsutakse välja ainult üks kord, et salvestada rekursiooniprotsessi esimese etapi tulemused. Näite viimasel real olev SELECT-lause kuvab järgmise tulemuse.

Viimane uuendus: 05.07.2017

Viimases teemas tehti SQL Management Studios lihtne ühe tabeliga andmebaas. Nüüd defineerime ja käivitame esimese SQL-päringu. Selleks avage SQL Management Studio, paremklõpsake Object Exploreri ülataseme elemendil (serveri nimi) ja valige ilmuvast kontekstimenüüst Uus päring:

Pärast seda avaneb programmi keskosas aken SQL-käskude sisestamiseks.

Teeme eelmises teemas loodud tabelisse päringu, täpsemalt saame sealt kõik andmed. Meie andmebaasi nimetatakse ülikooliks ja tabeliks on dbo.Students , nii et tabelist andmete saamiseks sisestame järgmise päringu:

VALI * Ülikool.dbo.Õpilased

SELECT-lause võimaldab valida andmeid. FROM määrab allika, kust andmeid hankida. Tegelikult ütleme selle päringuga "VALI kõik tabelist ülikool.dbo.Õpilased". Tasub tähele panna, et tabeli nimetusena kasutatakse tabeli täisteekonda, mis näitab andmebaasi ja skeemi.

Pärast päringu sisestamist klõpsake tööriistariba nuppu Käivita või võite vajutada klahvi F5.

Päringu täitmise tulemusena ilmub programmi allossa väike tabel, kus kuvatakse päringu tulemused – ehk siis kõik andmed tabelist Õpilased.

Kui meil on vaja teha mitu päringut sama andmebaasi kohta, saame andmebaasi kinnitamiseks kasutada käsku USE. Sel juhul piisab tabelite päringute tegemisel nende nime määramisest ilma andmebaasi nime ja skeemita:

KASUTAGE ülikooli SELECT * FROM üliõpilastest

Sel juhul täidame päringu serveri jaoks tervikuna, pääseme juurde mis tahes serveri andmebaasile. Kuid päringuid saame täita ka ainult konkreetse andmebaasi piires. Selleks paremklõpsake soovitud andmebaasil ja valige kontekstimenüüst Uus päring:

Kui sel juhul sooviksime teha päringuid ülal kasutatud õpilaste tabelist, siis ei peaks me päringus määrama andmebaasi nime ja skeemi, kuna need väärtused oleksid juba selged.