Ms sql serveri päringud. Näide päringu (Query) loomisest MS SQL Serveri andmebaasis

Viimane uuendus: 05.07.2017

Eelmises teemas tehti SQL Management Studios lihtne ühe tabeliga andmebaas. Nüüd määratleme 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.

Käitame konkreetselt eelmises teemas loodud tabelis päringu, sealt saame 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 andmed võtta. Tegelikult ütleme selle päringuga "VALI kõik tabelist ülikool.dbo.Õpilased". Väärib märkimist, et tabeli nimi kasutab kogu andmebaasi ja skeemi tähistavat teed.

Pärast päringu sisestamist klõpsake tööriistaribal 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 sama andmebaasi kohta mitu päringut, saame andmebaasi sissekandmiseks 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õpilased

Sel juhul täidame päringu serveri jaoks tervikuna, pääseme juurde mis tahes serveri andmebaasile. Kuid päringuid saame teha 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, ei peaks me päringus määrama andmebaasi nime ja skeemi, kuna need väärtused oleksid juba selged.

SQL Server Management Studio pakub täielikku tööriista igat tüüpi päringute loomiseks. Selle abiga saate päringuid luua, salvestada, laadida ja redigeerida. Lisaks saate päringute kallal töötada ilma ühegi serveriga ühendust loomata. See tööriist võimaldab ka erinevate projektide jaoks päringuid välja töötada.

Päringutega saate töötada kas päringuredaktoriga või lahendusuurijaga. See artikkel hõlmab mõlemat tööriista. Lisaks neile kahele SQL Server Management Studio komponendile vaatleme SQL-koodi silumist sisseehitatud siluri abil.

Päringu redaktor

Päringuredaktori paneeli avamiseks Päringu redaktor, klõpsake SQL Server Management Studio tööriistaribal nuppu Uus päring. Seda paneeli saab laiendada, et kuvada nupud kõigi võimalike päringute, mitte ainult andmebaasimootori päringute loomiseks. Vaikimisi luuakse uus andmebaasimootori päring, kuid saate luua ka MDX, XMLA ja muid päringuid, klõpsates tööriistaribal vastavat nuppu.

Päringuredaktori paneeli allosas asuv olekuriba näitab redaktori serveriga ühenduse olekut. Kui te ei loo serveriga automaatselt ühendust, kuvatakse päringuredaktori käivitamisel dialoogiboks Ühenda serveriga, mis võimaldab teil valida serveri, millega ühenduse luua, ja autentimisrežiimi.

Päringute võrguühenduseta redigeerimine pakub suuremat paindlikkust kui serveriga ühenduses olles. Päringute redigeerimiseks ei ole vaja ühendust luua serveriga ning päringuredaktori akna saab lahti ühendada ühe serveriga (kasutades menüükäsku Päring --> Ühendus --> Katkesta ühendus) ja ühendada teisega ilma teist redaktori akent avamata. Võrguühenduseta redigeerimisrežiimi valimiseks klõpsake serveriühenduse dialoogiaknas, mis avaneb konkreetse päringutüübi redaktori käivitamisel, lihtsalt nuppu Tühista.

Päringuredaktorit saate kasutada järgmiste toimingute tegemiseks.

    Transact-SQL lausete loomine ja täitmine;

    loodud Transact-SQL keele lausete salvestamine faili;

    levinumate päringute täitmisplaanide koostamine ja analüüsimine;

    graafiliselt illustreerides valitud päringu täitmisplaani.

Päringuredaktor sisaldab sisseehitatud tekstiredaktorit ja tööriistariba nuppude komplektiga erinevate toimingute jaoks. Peamine päringuredaktori aken on jagatud horisontaalselt päringupaneeliks (ülaosas) ja tulemuste paneeliks (allosas). Täitatavad Transact-SQL-i avaldused (st päringud) sisestatakse ülemisele paanile ja alumisel paanil kuvatakse nende päringute süsteemi töötlemise tulemused. Alloleval joonisel on näide päringu sisestamise kohta päringuredaktorisse ja selle päringu täitmise tulemused:

Esimene USE taotluse avaldus määrab praeguse andmebaasina SampleDb andmebaasi kasutamise. Teine lause SELECT hangib kõik read tabelist Töötaja. Selle päringu käivitamiseks ja tulemuste kuvamiseks klõpsake päringuredaktori tööriistaribal nuppu Käivita või vajutage klahvi F5.

Saate avada mitu päringuredaktori akent, s.t. luua mitu ühendust ühe või mitme andmebaasimootori eksemplariga. Uus ühendus luuakse, klõpsates SQL Server Management Studio tööriistaribal nuppu Uus päring.

Päringuredaktori akna allosas oleval olekuribal kuvatakse päringulausete täitmisega seotud järgmine teave.

    praeguse toimingu olek (näiteks "Taotlus edukalt lõpetatud");

    andmebaasiserveri nimi;

    praegune kasutajanimi ja serveri protsessi ID;

    praegune andmebaasi nimi;

    viimase päringu täitmiseks kulunud aeg;

    leitud ridade arv.

SQL Server Management Studio üks peamisi eeliseid on selle kasutusmugavus, mis kehtib ka päringuredaktori puhul. Päringuredaktor pakub palju funktsioone, mis muudavad Transact-SQL-i lausete kodeerimise lihtsamaks. Eelkõige kasutab see süntaksi esiletõstmist, et parandada Transact-SQL-i lausete loetavust. Kõik reserveeritud sõnad kuvatakse sinisega, muutujad mustaga, stringid punasega ja kommentaarid rohelisega.

Lisaks on päringuredaktor varustatud kontekstitundliku abiga, mida kutsutakse Dünaamiline abi, mille kaudu saate teavet konkreetse juhise kohta. Kui te ei tea käsu süntaksit, valige see redaktoris ja vajutage klahvi F1. Saate esile tõsta ka erinevate Transact-SQL-i lausete parameetreid, et nende kohta Books Online'ist abi saada.

SQL Management Studio toetab SQL Intellisense'i, mis on teatud tüüpi automaatse täitmise tööriist. Teisisõnu, see moodul soovitab osaliselt sisestatud Transact-SQL-lause elementide kõige tõenäolisemat lõpetamist.

Objektiuurija võib aidata teil ka päringuid redigeerida. Näiteks kui soovite teada, kuidas luua tabeli Töötaja jaoks lauset CREATE TABLE, paremklõpsake tabelit Object Exploreris ja valige kontekstimenüüst Script Table As --> CREATE to --> New Query Editor Window, ilmub tabelid --> CREATE kasutamine --> uus päringuredaktori aken). Sel viisil loodud lauset CREATE TABLE sisaldav päringuredaktori aken on näidatud alloleval joonisel. See funktsioon kehtib ka muude objektide, näiteks salvestatud protseduuride ja funktsioonide puhul.

Objektibrauser on väga kasulik konkreetse päringu täitmisplaani graafiliseks kuvamiseks. Päringu täitmisplaan on täitmissuvand, mille päringu optimeerija valib konkreetse päringu täitmiseks mitme võimaliku valiku hulgast. Sisestage redaktori ülemisele paneelile vajalik päring, valige menüüst Päring --> Kuva hinnanguline täitmisplaan käskude jada ja selle päringu täitmiskava kuvatakse redaktori akna alumisel paneelil.

Lahenduste uurija

Päringu redigeerimine SQL Server Management Studios põhineb lahendusmeetodil. Kui loote nupu Uus päring abil tühja päringu, põhineb see tühjal lahendusel. Seda näete, käivitades käskude jada menüüst Vaade --> Lahendusuurija kohe pärast tühja päringu avamist.

Otsus võib olla seotud ühegi, ühe või mitme projektiga. Tühi lahendus, mis pole seotud ühegi projektiga. Projekti sidumiseks lahendusega sulgege tühi lahendus, Solution Explorer ja Query Editor ning looge uus projekt, käivitades menüü Fail --> Uus --> Projekt. Avanevas aknas New Project valige keskmisel paanil suvand SQL Serveri skriptid. Projekt on viis failide korraldamiseks kindlas kohas. Saate määrata projektile nime ja valida selle asukoha asukoha kettal. Kui loote uue projekti, käivitatakse automaatselt uus lahendus. Saate lisada projekti olemasolevale lahendusele, kasutades Solution Explorerit.

Iga loodud projekti puhul kuvab Solution Explorer kaustad Ühendused, Päringud ja Mitmesugused. Antud projekti jaoks uue päringuredaktori akna avamiseks paremklõpsake selle kaustal Päringud ja valige kontekstimenüüst Uus päring.

SQL serveri silumine

SQL Serveril, alates SQL Server 2008-st, on sisseehitatud koodisiluja. Silumisseansi alustamiseks valige SQL Server Management Studio peamenüüst Silumine --> Alusta silumist. Vaatame, kuidas silur töötab, kasutades näidet, mis kasutab käskude komplekti. Partii on SQL-lausete ja protseduurilaiendite loogiline jada, mis saadetakse andmebaasimootorile kõigi selles sisalduvate avalduste täitmiseks.

Alloleval joonisel on näha pakett, mis loeb projekti p1 kallal töötavate töötajate arvu. Kui see arv on 4 või rohkem, kuvatakse vastav teade. Vastasel juhul kuvatakse töötajate ees- ja perekonnanimed.

Paketi täitmise peatamiseks konkreetse käsu korral saate määrata katkestuspunktid, nagu on näidatud joonisel. Selleks klõpsake reast, millel soovite peatuda, vasakul. Kui silumine algab, peatub täitmine koodi esimesel real, mis on tähistatud kollase noolega. Käitamise ja silumise jätkamiseks valige menüükäsk Silumine --> Jätka. Partiijuhiste täitmine jätkub kuni esimese katkestuspunktini ja kollane nool peatub sellel hetkel.

Silumisprotsessiga seotud teave kuvatakse päringuredaktori akna allosas kahel paneelil. Teave erinevat tüüpi silumisteabe kohta on nendel paneelidel rühmitatud mitmele vahelehele. Vasakpoolne paan sisaldab vahekaarti Autod, vahekaarti Kohalikud ja kuni viit vahekaarti Vaata. Parempoolne paan sisaldab vahekaarte Call Stack, Threads, Breakpoints, Command Window, Immediate Window ja Output. Vahekaardil Kohalikud kuvatakse muutujaväärtused, vahekaardil Kõnevirn kuvatakse kõnevirna väärtused ja vahekaardil Katkestuspunktid kuvatakse katkestuspunktide teave.

Silumisprotsessi lõpetamiseks käivitage peamenüüst Silumine --> Peata silumine käskude jada või klõpsake siluri tööriistaribal sinist nuppu.

SQL Server 2012 lisab SQL Server Management Studio sisseehitatud silurile mitu uut funktsiooni. Nüüd saate selles teha mitmeid järgmisi toiminguid:

    Määrake katkestuspunkti tingimus. Murdepunkti seisund on SQL-avaldis, mille hinnatud väärtus määrab, kas koodi täitmine peatub antud punktis või mitte. Katkestuspunkti tingimuse määramiseks paremklõpsake punast katkestuspunkti ikooni ja valige kontekstimenüüst Tingimus. Avaneb dialoogiboks Breakpoint Condition, mis võimaldab sisestada vajaliku Boole'i ​​avaldise. Lisaks, kui teil on vaja täitmist peatada, kui avaldis on tõene, peaksite seadma lüliti On True. Kui avaldise muutmise korral tuleb täitmine peatada, peate määrama lüliti Kui muudetud.

    Määrake katkestuspunkti tabamuste arv. Tabamuste arv on tingimus täitmise peatamiseks antud punktis, mis põhineb murdepunkti tabamuste arvul täitmise ajal. Kui saavutatakse määratud arv läbimisi ja mis tahes muu antud katkestuspunkti jaoks määratud tingimus, sooritab silur määratud toimingu. Täitmise katkestamise tingimus, mis põhineb tabamuste arvul, võib olla üks järgmistest:

    1. tingimusteta (vaiketoiming) (Katke alati);

      kui tabamuste arv on võrdne määratud väärtusega (Katkestada, kui tema arv võrdub määratud väärtusega);

      kui tabamuste arv on määratud väärtuse kordne (Katke, kui tabamuste arv võrdub määratud väärtuse kordsega);

      Katkesta, kui tema arv on suurem või võrdne määratud väärtusega.

    Silumisel tabamuste arvu määramiseks paremklõpsake vahekaardil Breakpoints soovitud katkestuspunkti ikooni, valige kontekstimenüüst Tabamuste arv, seejärel valige eelmisest loendist avanevas dialoogiboksis Breakpoint Hit Count üks tingimustest. Väärtust nõudvate valikute puhul sisestage see tingimuste ripploendist paremal asuvasse tekstikasti. Määratud tingimuste salvestamiseks klõpsake nuppu OK.

    Määrake murdepunkti filter. Katkestuspunkti filter piirab katkestuspunkti toimimist ainult määratud arvutite, protsesside või lõimedega. Katkestuspunkti filtri määramiseks paremklõpsake soovitud katkestuspunkti ja valige kontekstimenüüst Filter. Seejärel määrake avanevas dialoogiboksis Katkestuspunkti filtrid ressursid, millega soovite selle katkestuspunkti täitmist piirata. Määratud tingimuste salvestamiseks klõpsake nuppu OK.

    Määrake katkestuspunktis toiming. Tingimus Kui tabamus määrab toimingu, mis tuleb teha, kui partii täitmine jõuab antud katkestuspunkti. Vaikimisi katkestatakse täitmine, kui nii tabamuste loenduse kui ka peatamise tingimus on täidetud. Teise võimalusena saab kuvada eelnevalt määratud teate.

    Katkestuspunkti tabamise korral tehtavate toimingute määramiseks paremklõpsake murdepunkti punasel ikoonil ja valige kontekstimenüüst Kui tabamine. Avanevas dialoogiboksis Kui murdepunkt on tabatud, valige toiming, mida soovite teha. Määratud tingimuste salvestamiseks klõpsake nuppu OK.

    Kasutage Quick Watchi akent. Saate vaadata Transact-SQL-i avaldise väärtust QuickWatchi aknas ja seejärel salvestada avaldise jälgimisaknas. Quick Watchi akna avamiseks valige silumismenüüst Quick Watch. Selles aknas oleva avaldise saab valida ripploendist Avaldis või sisestada sellele väljale.

    Kasutage kiirteabe tööriistavihjet. Kui hõljutate kursorit koodi ID kohal, kuvab kiirteabe tööriist selle deklaratsiooni hüpikaknas.

Tabeliväljendid nimetatakse alampäringuteks, mida kasutatakse seal, kus eeldatakse tabeli olemasolu. 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 juhtudel, kui veergude varjunimede kasutamine ei ole võimalik, kuna SQL-i tõlkija töötleb teist lauset enne, kui varjunime 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 käivitamisel kuvatakse järgmine tõrketeade:

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 tuletatud tabelit, 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 täitmise tulemus on järgmine:

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

Selle päringu tulemus:

Üldised tabeliväljendid

Ühine tabeliavaldis (OTB) on nimega tabeliavaldis, mida toetab Transact-SQL keel. Tavalisi 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 määrab OTB 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.SalesOrderHeader2 ")/2,5;

Selle näite päring valib tellimused, mille kogumaksud (TotalDue) on suuremad kui kõigi maksude keskmine ja mille veotasud (Freight) on suuremad kui 40% keskmistest maksudest. Selle päringu peamine omadus on selle pikkus, kuna alampäring tuleb kirjutada kaks korda. Üks võimalik viis päringukonstruktsiooni suuruse vähendamiseks on luua alampäringut sisaldav vaade. Kuid see lahendus on pisut keeruline, kuna see nõuab vaate loomist ja selle kustutamist pärast päringu täitmise lõpetamist. Parem lähenemisviis 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_hinna_2005 FROM ) /2,5;

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

Parameeter cte_name tähistab OTB nime, mis määratleb saadud tabeli, ja parameeter column_list tähistab tabeliavaldise veergude loendit. (Ülaltoodud näites nimetatakse OTB-d hind_arvutus ja sellel on üks veerg, aasta_2005.) Parameeter inner_query esindab 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 veergu year_2005.)

OTB ja rekursiivsed päringud

Selles jaotises on esitatud keerukamad materjalid. Seetõttu on esmakordsel lugemisel soovitatav see vahele jätta ja hiljem selle juurde tagasi pöörduda. OTB-sid saab kasutada rekursioonide rakendamiseks, 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õhi koosneb kahest operaatoriga ühendatud päringust 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 viidet 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 esimese päringukõne tulemust. Pärast seda kutsub süsteem uuesti välja rekursiivse osa. Kõne rekursiivsele liikmele peatub, kui eelmine kõne sellele tagastab tühja tulemuskomplekti.

Operaator UNION ALL ühendab parajasti kogutud read ja ka täiendavad read, mis on praeguse kutsega rekursiivsele liikmele lisatud. (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 mõlema liikme liitumiskõnede toomiseks.

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

KASUTAGE SampleDb; CREATE TABLE Lennuk(sisaldab koost VARCHAR(10), sisaldab koost VARCHAR(10), kogusSisaldub INT, ühikukulu DECIMAL(6,2)); INSERT INTO Airplane VALUES ("Lennuk", "Fuselaaž", 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 Airplane VALUES ("Kabiin", NULL, 1,13); INSERT INTO Airplane VALUES ("Cockpit", NULL, 1, 14); INSERT INTO Airplane VALUES ("Nina", NULL, 1, 15); INSERT INTO Airplane VALUES ("Wings", NULL,2, 11); INSERT INTO Airplane VALUES ("Tail", NULL, 1, 12);

Lennuki tabelis on neli veergu. Veerg ContainingAssembly identifitseerib koostu ja veerg ContainedAssembly identifitseerib osad (ükshaaval), mis moodustavad vastava koostu. Alloleval joonisel on kujutatud võimaliku õhusõiduki tüübi ja selle osade graafiline illustratsioon:

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.Cuantity Contained, CAST(l.quantity)*,DECl.quantity6 ) 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.

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

Kuid hoolimata pidevast andmebaaside kasutamisest on isegi paljude tarkvarasüsteemide arendajate jaoks endiselt palju pimealasid, mis on tingitud samade mõistete erinevast tõlgendusest. Enne SQL-keele käsitlemist anname andmebaasi põhiterminite lühikirjelduse. Niisiis.

Andmebaas - fail või failide kogum järjestatud andmestruktuuride ja nende seoste salvestamiseks. Väga sageli nimetatakse haldussüsteemi andmebaasiks – see on vaid kindlas vormingus teabe hoidla ja võib töötada koos erinevate DBMS-idega.

Tabel - Kujutagem ette kausta, kuhu hoitakse dokumendid, mis on rühmitatud teatud tunnuse järgi, näiteks viimase kuu tellimuste loend. See on tabel arvutis. Eraldi tabelil on oma kordumatu nimi.

Andmetüüp - eraldi veerus või reale salvestatava teabe tüüp. Need võivad olla teatud vormingus numbrid või tekst.

Veerg ja rida- Oleme kõik töötanud arvutustabelitega, millel on ka ridu ja veerge. Iga relatsiooniline andmebaas töötab tabelitega sarnaselt. Ridu nimetatakse mõnikord kirjeteks.

Esmane võti- Igal tabelireal võib olla üks või mitu veergu, et seda unikaalselt tuvastada. 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 näilisele 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, näiteks ORACLE. Keele kõiki võimalusi pole võimalik ühes lühikeses 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

Kõik andmebaasi tabeli veerud salvestavad sama tüüpi andmesid. SQL-i andmetüübid on samad, mis teistes programmeerimiskeeltes.

Loome tabeleid ja andmebaase

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:

Looge tabel:

LOO TABEL Kaup

(kauba_id CHAR(15) EI OLE NULL,

tarnija_id CHAR(15) NOT NULL,

kauba_nimi CHAR(254) NULL,

commodity_price DECIMAL(8,2) NULL,

kauba_desc VARCHAR(1000) NULL);

Tabel koosneb viiest veerust. Nime järel tuleb andmetüüp, veerud eraldatakse komadega. Veeru väärtus võib aktsepteerida tühje väärtusi (NULL) või peab olema täidetud (NOT NULL) ja see määratakse tabeli loomisel.

Andmete otsimine tabelist

Andmete toomise operaator on kõige sagedamini kasutatav SQL-päring. Teabe saamiseks peame märkima, mida 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ääratleb tabeli.

Päringu tulemuseks on kõik tabeli read kauba_nimi väärtustega nende andmebaasi sisestamise järjekorras, st. ilma igasuguse sorteerimiseta. Tulemuse järjestamiseks 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äringu tulemuseks on võimalik saada rea ​​kõigi veergude väärtus. Selleks kasutage "*" märki:

VALI * Kaubast

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

Lisage rida

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

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

Täisrea 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", "Alcogol puudub ,)

Näide lisab tabelisse uue toote. Iga veeru väärtused on loetletud VÄÄRTUSTE järel. 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.

Andmete muutmine

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

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

UPDATE koosneb kolmest põhielemendist:

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

Vaatame näidet. Oletame, et ID=106 toote hind on muutunud, seega tuleb seda rida uuendada. Kirjutame järgmise operaatori:

VÄRSKENDAMINE 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 uus väärtus ja leidsime soovitud kirje, määrates WHERE vajaliku ID väärtuse.

Mitme veeru muutmiseks järgneb SET-lausele mitu veeru-väärtuste paari, mis on eraldatud komadega. Vaatame näidet, kus uuendatakse toote nime ja hinda:

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

Veerus oleva teabe eemaldamiseks saate määrata sellele väärtuse 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. Eemaldame tootekirjelduse:

VÄRSKENDUS Kauba SET commodity_desc = NULL WHERE kauba_id = "106"

Ridade eemaldamine

SQL-päringud tabeli ridade kustutamiseks käivitatakse DELETE-lause abil. 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ärgime tabeli nime, milles read kustutatakse. WHERE-klausel sisaldab tingimust, mille alusel read kustutamiseks valitakse. Näites kustutame tooterea ID=106. KUS täpsustamine on väga oluline, sest 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 kustutab read täielikult, kuid ei saa kustutada ü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 funktsioon võimaldab Accessi rakendustel suhelda mis tahes vorminguga.

SQL-laiendid

Kuna SQL-päringutel pole kõiki protseduuriliste programmeerimiskeelte võimalusi, nagu tsüklid, hargnemised jne, arendavad DBMS-i tootjad oma täiustatud võimalustega SQL-i versiooni. 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 Internetis

MySQL DBMS-i levitatakse tasuta GNU üldise avaliku litsentsi alusel. Olemas on kommertslitsents, mis võimaldab arendada kohandatud mooduleid. Komponentina 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 toetab praegu Oracle Corporation. Toetatud on kuni 64 terabaidi suurused andmebaasid, SQL:2003 süntaksistandard, andmebaaside replikatsioon ja pilveteenused.

SQL – Struktureeritud päringu keel.
Selles ülevaates vaatleme kõige levinumaid SQL-päringute tüüpe.
SQL-standard on määratletud ANSI(Ameerika Riiklik Standardiinstituut).
SQL on keel, mis on mõeldud spetsiaalselt relatsioonilistele andmebaasidele.

SQL-i partitsioonid:


DDL
(Andmete määratlemise keel) - ANSI niinimetatud skeemi kirjelduskeel, mis koosneb käskudest, mis loovad andmebaasis objekte (tabeleid, indekseid, vaateid jne).
DML(Andmetöötluskeel) on käskude kogum, mis määrab, milliseid väärtusi tabelites igal ajahetkel esitatakse.
DCD(Andmehalduskeel) koosneb vahenditest, mis määravad, kas lubada kasutajal teatud toiminguid teha või mitte. Need on osa ANSI DDL-ist. Ärge unustage neid nimesid. Need ei ole erinevad keeled, vaid SQL-käskude osad, mis on rühmitatud nende funktsioonide järgi.

Andmetüübid:

SQL Server – andmetüübid

Kirjeldus

bigint (vahev 8)

bigint (vahev 8)

binaarne(n)

binaarne(n) või pilt

iseloomu
(sünonüüm char)

rahvuslik iseloomu või ntekst

iseloom varieeruv(sünonüüm söe varieeruv varchar)

rahvuslik iseloom on erinev või ntekst

Kuupäev Kellaaeg

kuupäev Kellaaeg

kümnend

aka numbriline

kahekordne täpsus

kahekordne täpsus

täisarv (int 4) (sünonüüm: int)

täisarv (int 4)

rahvuslik iseloom(sünonüüm: rahvuslik iseloom, nchar)

rahvuslik iseloom

Numbriline(sünonüümid: kümnend, dets)

rahvuslik iseloom on erinev(sünonüümid: rahvuslik märk varieeruv, nvarchar)

Rahvuslik iseloom varieeruv

Väike kuupäev

kuupäev Kellaaeg

smallint (int 2)

smallint (int 2)

Väike raha

sql_variant

Enam ei toetata

Ntext
Alates SQL Server 2005-st pole seda soovitatav kasutada.

Ajatempel

Ei toetata

tilluke (int 1)

tilluke (int 1)

Unikaalne identifikaator

unikaalne identifikaator

varbinaarne(n)

varbinaarne(n) või pilt

väike kuupäev

kuupäev Kellaaeg

smallint (int 2)

smallint (int 2)

väike raha

sql_variant

Ei toetata

ajatempel

Ei toetata

tilluke (int 1)

tilluke (int 1)

unikaalne identifikaator

unikaalne identifikaator

varbinaarne(n)

varbinaarne(n) või pilt

Andmetüüpide tabel SQL Server 2000-s

MIS ON TAOTLUS?

Taotlus on käsk, mille annate oma andmebaasiprogrammile. Päringud on osa DML-keelest. Kõik SQL-päringud koosnevad ühest käsust. Selle käsu struktuur on petlikult lihtne, kuna peate seda laiendama, et teostada väga keerulisi hindamisi ja andmetega manipuleerimist.

SELECT käsk:

VALI"Select" on kõige sagedamini kasutatav käsk, mida kasutatakse tabelist andmete valimiseks.
Päringu tüüp, kasutades valikut SELECT:

SELECT ID, kasutajanimi, linn, sünnipäev kasutajate_baasist;

Selline päring kuvab tabelis Users_base kõik määratud veergude väärtused eraldatuna komadega pärast käsku SELECT. Samuti saate kuvada kõik veerud ühe märgiga, * st. SELECT * FROM kasutajate_baas ; - selline päring kuvab kõik tabelis olevad andmed.

SELECT käsustruktuur:

SELECT (Komadega eraldatud veergude nimed, mida tuleb päringus kuvada) FROM (tabeli nimi andmebaasis)
- See on kõige lihtsam taotlus. Mugavaks andmete otsimiseks on lisakäsud (vt allpool "Funktsioonid")

DML-käsud:

Väärtusi saab väljadele paigutada ja sealt eemaldada, kasutades kolme DML (Data Manipulation Language) käsku:
LISA(Sisesta)
VÄRSKENDAMINE(värskendus, muudatus),
KUSTUTA(Kustuta)

INSERT käsk:

INSERT INTO kasutajate_baas (kasutaja_nimi, linn, sünnipäev) VÄÄRTUSED ('Aleksandr', 'Rostov', '06/20/1991');

Käsk INSERT tuleb koos eesliitega INTO (in to), siis sulgudes on veergude nimed, kuhu peame andmed sisestama, siis tuleb käsk VALUES (väärtused) ja sulgudes tulevad väärtused kordamööda (see on väärtuste järjekorra jälgimiseks veergudega peavad väärtused olema teie määratud veergudega samas järjekorras).

UPDATE käsk:

UPDATE users_base SET user_name = 'Aleksei';

Käsk UPDATE värskendab tabelis olevaid väärtusi. Kõigepealt tuleb käsk UPDATE ise, seejärel tabeli nimi, pärast käsku SET (set), seejärel veeru nimi ja selle väärtus jutumärkides (jutumärgid pannakse, kui väärtus on stringi vormingus, kui see on arvväärtus ja veerg ei ole seotud andmetüübiga vchar ega mõne muu stringitüübiga, pole jutumärkidel tähendust.)

DELETE käsk:

DELETE FROM users_base WHERE user_name = 'Vassili';

Käsk DELETE kustutab kogu rea ja tuvastab rea WHERE-kriteeriumi abil. Sel juhul kustutaks see päring kõik read, mille veeru kasutaja_nimi väärtus oli Vassili. KUS-kriteeriumist ja teistest räägime veidi hiljem.

Kriteeriumid, funktsioonid, tingimused jne. mis meid SQL-is aitab:

WHERE-klausel on SELECT-käsu ja teiste DML-käskude klausel, mis võimaldab määrata predikaate, mille tingimus võib olla kas tõene või väär iga tabeli rea jaoks. Käsk otsib tabelist ainult need read, mille puhul see väide on tõene.
Näide:
SELECT id, linn, sünnipäev FROM kasutajate_baas WHERE kasutajanimi = 'Aleksei';- selline päring kuvab ainult need read, mis vastavad tingimusele WHERE, nimelt kõik read, milles veerus user_name on väärtus Aleksei.

ORDER BY - tingimus valitud ridade sortimiseks. Sellel on 2 kriteeriumi ASC ja DESC. ASC (sorteerimine A-st Z-ni või 0-st 9-ni)

DESC (ASC vastand).
Näide:
SELECT id, linn, sünnipäev FROM kasutajate_baas ORDER BY kasutajanimi ASC; - selline päring kuvab väärtused, mis on sorteeritud veeru user_name järgi vahemikus A kuni Z (A-Z; 0-9)

Seda tingimust saab kasutada ka koos WHERE-klausliga.
Näide:
SELECT id, linn, sünnipäev FROM kasutajate_baas WHERE kasutajanimi = 'Aleksei' ORDER BY id ASC;

DISTINCT on argument, mis annab teile võimaluse kõrvaldada SELECT-klauslist topeltväärtused. Need. kui teil on veerus dubleeritud väärtused, oletame, et kasutajanimi, siis DISTINCT näitab teile ainult ühte väärtust, näiteks teie andmebaasis on 2 inimest nimega Aleksei, siis funktsiooni DISTINCT kasutav päring näitab teile ainult ühte väärtust millega esimesena kokku puututakse...
Näide:
SELECT DISTINCT kasutajanimi kasutajate_baasist;- selline päring näitab meile kõigi veerus user_name olevate kirjete väärtusi, kuid neid ei korrata, st. kui sul oli lõpmatu arv korduvaid väärtusi, siis neid ei kuvata...

JA - võtab argumendiks kaks Boole'i ​​(kujul A JA B) ja hindab neid tõe vastu, kas need mõlemad on tõesed.
Näide:
SELECT * FROM users_base WHERE linn = 'Rostov' AND user_name = 'Aleksandr';- kuvab kõik väärtused tabelist, kus linna nimi on ühel real (antud juhul Rostov ja kasutajanimi Aleksander.

VÕI - võtab argumendiks kaks Boole'i ​​(kujul A VÕI B) ja hindab, kas üks neist on õige.

SELECT * FROM users_base WHERE linn = 'Rostov' VÕI kasutajanimi = 'Aleksander';- kuvab kõik väärtused tabelist, kus real on Rostovi linna nimi või kasutajanimi Aleksander.

EI – võtab argumentidena ühe Boole'i ​​(kujul NOT A) ja muudab selle väärtuse väärast tõeseks või tõeseks vääraks.
SELECT * FROM users_base WHERE linn = 'Rostov' OR NOT user_name = 'Aleksander';- kuvab kõik väärtused tabelist, kus Rostovi linna nimi on ühel real või kasutajanimi pole täpselt Aleksander.

IN - määrab väärtuste komplekti, millesse antud väärtus võib olla või mitte.
SELECT * FROM users_base WHERE city IN ('Vladivostok', 'Rostov');- selline päring kuvab kõik tabeli väärtused, mis sisaldavad linna veerus määratud linnade nimesid

Vahel on sarnane IN operaatoriga. Erinevalt hulga arvude järgi määramisest, nagu IN, määratleb BETWEEN vahemiku, mille väärtused peavad predikaadi tõeseks muutmiseks vähenema.
SELECT * FROM kasutajate_baas WHERE id BETWEEN 1 JA 10;- kuvab kõik väärtused tabelist, mis jäävad id veerus vahemikku 1 kuni 10

COUNT – loob päringu valitud väljade reanumbrid või mitteNULL-väärtused.
VALI COUNT (*) kasutajate_baasist ;- kuvab selle tabeli ridade arvu.
VALI COUNT (ERINEV kasutajanimi) kasutajate_baasist ;- kuvab kasutajanimedega ridade arvu (ei korrata)

SUM – toodab antud välja kõigi valitud väärtuste aritmeetilise summa.
SELECT SUM (id) FROM kasutajate_baas ;- kuvab id veeru kõigi ridade väärtuste summa.

AVG – võtab selle välja kõigi valitud väärtuste keskmise.
SELECT AVG (id) FROM kasutajate_baas ;- kuvab kõigi ID veerus valitud väärtuste keskmise

MAX – loob selle välja jaoks valitud väärtustest suurima.

MIN – loob selle välja jaoks valitud väärtustest väikseima.

Tabelite koostamine:

CREATE TABLE user_base (id täisarv, kasutajanime tekst, linna tekst, sünnipäev datetime);- sellise käsu täitmine viib tabeli loomiseni, mille kohta tõin näiteid... Siin on kõik lihtne, kirjutame käsu CREATE TABLE, millele järgneb loodava tabeli nimi, seejärel sulgudes, eraldatud komadega, veergude nimed ja nende andmetüübid. See on tavapärane viis tabeli loomiseks SQL-is. Nüüd toon näite tabelite loomisest SQL Server 2005-s:

SEES ANSI_NULLS
MINNA
SET QUOTED_IDENTIFIER SISSE
MINNA
KUI EI OLEMAS (SELECT * FROM sys.objects WHERE objekti_id = OBJEKTI_ID(N."") JA tippige (N"U"))
ALUSTA
LOO TABEL .(

MITTE NULL,
MITTE NULL,
MITTE NULL,
ESMANE VÕTI KOMBERITUD
A.S.C.


LÕPP
MINNA
SEES ANSI_NULLS
MINNA
SET QUOTED_IDENTIFIER SISSE
MINNA
KUI EI OLEMAS (SELECT * FROM sys.objects WHERE objekti_id = OBJEKTI_ID(N."") JA tippige (N"U"))
ALUSTA
LOO TABEL .(
IDENTITEET (1, 1) EI OLE NULL,
NULL,
NULL,
ESMANE VÕTI KOMBERITUD
A.S.C.
)SISESES (IGNORE_DUP_KEY = VÄLJAS).
) SEES TEXTIMAGE_ON
LÕPP
MINNA
SEES ANSI_NULLS
MINNA
SET QUOTED_IDENTIFIER SISSE
MINNA
KUI EI OLEMAS (SELECT * FROM sys.objects WHERE objekti_id = OBJEKTI_ID(N."") JA tippige (N"U"))
ALUSTA
LOO TABEL .(
IDENTITEET (1, 1) EI OLE NULL,
NULL,
NULL,
ESMANE VÕTI KOMBERITUD
A.S.C.
)SISESES (IGNORE_DUP_KEY = VÄLJAS).
) PEAL
LÕPP

Süntaks SQL Server 2005-s on teine ​​teema, tahtsin lihtsalt näidata, et kirjeldasin SQL-i programmeerimise põhitõdesid, põhitõdesid teades saab ise tippu jõuda.

Kui teil on selle teema kohta küsimusi, kirjutage mulle