Maja, kujundus, renoveerimine, kujundus.  Hoov ja aed.  Oma kätega

Maja, kujundus, renoveerimine, kujundus. Hoov ja aed. Oma kätega

» Mis on andmebaas ja sbd? SQL päringukeel SQL -i keele kasutamise meetodid.

Mis on andmebaas ja sbd? SQL päringukeel SQL -i keele kasutamise meetodid.

Tunnis võetakse arvesse SQL päringukeelt: SQL keele süntaksi põhitõed, töö phpMyAdmin ja teenus sql -päringute veebipõhiseks kontrollimiseks

Andmebaas- tsentraliseeritud andmesalvestus, mis pakub salvestamist, juurdepääsu, esmast töötlemist ja teabe otsimist.

Andmebaasid jagunevad:

  • Hierarhiline
  • Võrk
  • Suhteline
  • Objektile orienteeritud

SQL (struktureeritud päringukeel)- on struktureeritud päringukeel (tõlgitud inglise keelest). Keel on keskendunud relatsiooniliste (tabelite) andmebaasidega töötamisele. Keel on lihtne ja koosneb tegelikult käskudest (tõlgendatud), mille kaudu saate töötada suurte andmemahtudega (andmebaasid), kustutada, lisada, muuta neis olevat teavet ja teha mugavat otsingut.

SQL -koodiga töötamiseks vajate andmebaasihaldussüsteemi (DBMS), mis pakub funktsioone andmebaasidega töötamiseks.

Andmebaasihaldussüsteem(DBMS) - keele- ja tarkvaratööriistade komplekt, mis on loodud paljude kasutajate andmebaasi loomiseks, hooldamiseks ja jagamiseks.

Tavaliselt kasutatakse seda koolituseks Microsoft Access DBMS, kuid me kasutame veebisfääris tavalisemat süsteemi -. Mugavuse huvides kasutab see SQL -päringute koostamiseks veebiliidest või võrguteenust, mille tööpõhimõtet kirjeldatakse allpool.

Tähtis: Relatsiooniliste või tabelite andmebaasidega töötamisel kutsutakse tabeli read välja rekordeid ja veerud on veerised.

Igal veerul peab olema oma andmetüüp, s.t. peaks olema ette nähtud teatud tüüpi andmete sisestamiseks. on kirjeldatud selle kursuse ühes õppetükis.

SQL keele komponendid

SQL -keel koosneb järgmistest komponentidest:

  1. andmete manipuleerimise keel (DML);
  2. Andmete määratluskeel (DDL)
  3. Andmekontrolli keel (DCL)

1.
Andmetöötluskeel koosneb neljast peamisest käsust:

  • andmete toomine andmebaasist -
  • andmete sisestamine andmebaasi tabelisse -
  • andmebaasi tabelite andmete uuendamine (muutmine) -
  • andmete kustutamine andmebaasist -

Andmete määratlemise keel kasutatakse andmebaasi struktuuri ja selle koostisosade - tabelite, indeksite, vaadete (virtuaalsete tabelite), samuti käivitajate ja salvestatud protseduuride - loomiseks ja muutmiseks.

Vaatleme vaid mõnda neist põhilised keelekäsud... Nemad on:

  • andmebaasi loomine - CATATE DATABASE
  • tabeli loomine - LOO TABEL
  • tabeli (struktuuri) muutmine - ALTER TABLE
  • laua kukutamine - TILKUTABEL

Andmehalduskeelt kasutatakse juurdepääsuõiguste haldamiseks andmetele ja protseduuride läbiviimisele mitme kasutaja keskkonnas.

Kuidas teha SQL päringut phpmyadminis

  1. Käivitage käivitamise otsetee.
  2. Tippige brauseri aadressiribale http: // localhost / tools / phpmyadmin.
  3. Valige akna vasakus osas huvipakkuv andmebaas või looge see (kui see pole juba loodud). Nüüd on käsitletud andmebaasi loomist rakenduses phpmyadmin.
  4. Kui teate tabelit, millega päring töötab, valige see tabel akna vasakus osas.
  5. Valige vahekaart SQL ja hakake päringut tippima.

Andmebaasi loomine rakenduses phpmyadmin

Kõigepealt peate täitma kaks esimest punkti.
Siis:

  • valige avatud veebiliideses sakk Andmebaas;
  • põllul Loo andmebaas sisestage baasi nimi;
  • klõpsake nuppu Loo;
  • nüüd saate navigeerida loodud andmebaasi, et jätkata tööd phpMyAdminis.

Töötamine sql viiuliteenuses

Teenust kasutades on võimalik SQL -päringuid veebis kontrollida.
Lihtsaim viis töö korraldamiseks on järgmised sammud:


Veel üks näide:


Nüüd vaatame mõnda punkti lähemalt.

Tabelite loomine:

Näide: luua kolm tabelit korraga (õpetajad, tunnid ja kursused); lisage igale tabelile mitu väärtust.

* neile, kes pole süntaksiga kursis - kopeerige lihtsalt kogu kood ja kleepige see teenuse vasakusse aknasse

* õppetund tabelite loomiseks SQL -is

/ * õpetajad * / CREATE TABLE "õpetajad" ("id" INT (11) NOT NULL, "name" VARCHAR (25) NOT NULL, "code" INT (11), "zarplata" INT (11), "premia" INT (11), ESIMENE VÕTTE ("id")); Sisesta õpetajatesse VÄÄRTUSED (1, "Ivanov", 1, 10000, 500), (2, "Petrov", 1, 15000, 1000), (3, "Sidorov", 1, 14000, 800), (4, " Bobrova ", 1, 11000, 800); / * õppetunnid * / CREATE TABLE `õppetunnid` (` id` INT (11) NOT NULL, `tid` INT (11),` course` VARCHAR (25), `date` VARCHAR (25), PRIMARY KEY (` id ")); INSERT INTO õppetunnid VÄÄRTUSED (1, 1, "php", "2015-05-04"), (2, 1, "xml", "2016-13-12"); / * kursused * / CREATE TABLE "kursused" ("id" INT (11) NOT NULL, "tid" INT (11), "title" VARCHAR (25), "length" INT (11), PRIMARY KEY ("id) ")); INSERT INTO kursused VÄÄRTUSED (1, 1, "php", 54), (2, 1, "xml", 72), (3, 2, "sql", 25);

/ * õpetajad * / CREATE TABLE "õpetajad" ("id" int (11) NOT NULL, "name" varchar (25) NOT NULL, "code" int (11), "zarplata" int (11), "premia" int (11), ESIMENE VÕTTE ("id")); sisestage õpetajatesse väärtused (1, "Ivanov", 1 10000 500), (2, "Petrov", 1,15000,1000), (3, "Sidorov", 1,14000,800), (4 , "Bobrov", 1 11000 800); / * õppetunnid * / CREATE TABLE "õppetunnid" ("id" int (11) NOT NULL, "tid" int (11), "course" varchar (25), "date" varchar (25), PRIMARY KEY ("id) ")); sisestage tundidesse väärtused (1,1, "php", "2015-05-04"), (2,1, "xml", "2016-13-12"); / * kursused * / CREATE TABLE `kursused` (` id` int (11) NOT NULL, `tid` int (11),` title` varchar (25), `length` int (11), PRIMARY KEY (` id ")); lisage kursustele väärtused (1,1, "php", 54), (2,1, "xml", 72), (3,2, "sql", 25);

Selle tulemusena saame tabelid andmetega:

Taotluse saatmine:
Kasutatavuse testimiseks lisage päringu kood paremasse aknasse.

Näide: kasutage päringut, et valida õpetajate tabelist kõik andmed perekonnanimega õpetaja jaoks Ivanov

Edasistes SQL tundides kasutatakse sama skeemi, nii et peate lihtsalt skeemi kopeerima ja kleepima teenuse vasakusse aknasse.

Andmebaasi skeemi veebis visualiseerimiseks võite kasutada teenust https://dbdesigner.net/:

  1. Looge oma konto (logige sisse, kui teil see juba on).
  2. Klõpsake nuppu Minge rakendusse.
  3. Menüü Skeem -> Import.
  4. Kopeerige ja kleepige kuvatavasse aknasse andmebaasi tabelite loomise ja täitmise kood

Programmeerimine sisse T- SQL

T-SQL süntaks ja konventsioonid

Identifikaatorite moodustamise reeglid

Kõigil SQL Serveri objektidel on nimed (identifikaatorid). Objektide näited on tabelid, vaated, salvestatud protseduurid jne. Identifikaatorid võivad olla kuni 128 tähemärki, näiteks tähed, _ @ $ # sümbolid ja numbrid.

Esimene märk peab alati olema tähestikuline. Muutujate ja ajutiste tabelite jaoks kasutatakse spetsiaalseid nimetamisskeeme. Objekti nimi ei tohi sisaldada tühikuid ega katta SQL Serveri reserveeritud märksõnaga, olenemata kasutatavast juhtumist. Objektinimedes saate kasutada ebaseaduslikke märke, lisades identifikaatorid nurksulgudesse.

Juhiste täitmine

ANSI SQL nõuab iga avalduse lõpus semikoolonit. Kuid T-SQL-is programmeerimisel on semikoolon vabatahtlik.

Kommentaarid (1)

T-SQL aktsepteerib kahte kommentaaristiili: ANCI ja C. Esimene algab kahe sidekriipsuga ja lõpeb rea lõpus:

See on ANSI stiilis ühe rea kommentaar

Samuti saab avalduse rea lõppu sisestada ANSI stiilis kommentaare:

VALI LinnaNimi - allalaaditud veerud

Linnast - allikatabel

KUS IdCity = 1; - liini piirang

SQL -redaktor saab rakendada ja eemaldada kommentaare kõigil valitud ridadel. Selleks valige menüüst sobivad käsud Muuda või tööriistaribal.

C -stiilis kommentaarid algavad kaldkriipsu ja tärniga (/ *) ning lõpevad samade märkidega vastupidises järjekorras. Seda tüüpi kommentaare on kõige parem kasutada ridade plokkide, näiteks päiste või suurte testpäringute kommenteerimiseks.

mitmerealine

kommentaar

C-stiilis kommentaaride üks peamisi eeliseid on see, et saate nendes käitada mitmerealisi päringuid isegi kommenteerimata.

T-SQL paketid

Päring on üks T-SQL lause ja partii on nende kogum. Kogu pakettkäskude jada saadetakse kliendirakendustest serverisse ühe lahutamatu üksusena.

SQL Server käsitleb kogu paketti tööühikuna. Tõrke olemasolu vähemalt ühes käsus muudab võimatuks kogu paketi täitmise. Samal ajal ei kontrolli parsimine objektide ja skeemide nimesid, kuna skeem ise võib avalduse täitmise ajal muutuda.

SQL -skriptifail ja päringuanalüsaatori aken võivad sisaldada mitut paketti. Sel juhul jagavad kõik paketid terminatorite märksõnu. Vaikimisi on see märksõna GO ja see peab olema real ainus. Kõik muud märgid (isegi kommentaarid) tühistavad pakettide eraldaja.

Silumine T-SQL

Kui SQL -i redaktoris ilmneb tõrge, kuvab see vea olemuse ja partii reanumbri. Veal topeltklõpsates saate kohe vastavale reale hüpata.

SQL Server 2005 Management Studio utiliit ei sisalda T-SQL silurit-see sisaldub Visual Studio paketis.

SQL Server pakub pakettide silumiseks mitmeid käske. Eelkõige saadab käsk PRINT sõnumi tulemuste andmestikku genereerimata. Käsu PRINT abil saab jälgida paketi kulgu. Kui päringuanalüsaator on võrgurežiimis, käivitage järgmine partii:

VALI LinnaNimi

Linnast

KUS IdCity = 1;

PRINT "Kontrollpunkt";

Saadud andmestik kuvatakse ruudustikus ja see on üks rida. Samal ajal kuvatakse vahekaardil Sõnumid järgmine tulemus:

(töödeldud read: 1)

Kontrollpunkt

Muutujad

T-SQL muutujad luuakse käsu DECLARE abil, millel on järgmine süntaks:

DECLARE @ Variable_Name Data_type [,

@ Variable_Name Data_type, ...]

Kõik kohalike muutujate nimed peavad algama @-ga. Näiteks kohaliku muutuja UStr deklareerimiseks, mis salvestab kuni 16 Unicode'i märki, võite kasutada järgmist lauset:

DECLARE @UStr varchar (16)

Muutujate jaoks kasutatud andmetüübid on täpselt samad, mis tabelites. Ühes käsus DECLARE saab komaga eraldatuna loetleda mitu muutujat. Täpsemalt loob järgmine näide kaks täisarvulist muutujat a ja b:

KUULUTAMA

@a int,

@b int

Muutujad hõlmavad ainult praeguse paketi ulatust (st nende eluiga). Vaikimisi sisaldavad äsja loodud muutujad null -NULL -väärtusi ja need tuleb enne avaldistesse lisamist lähtestada.

Muutuvate väärtuste seadmine

Praegu pakub SQL muutuja väärtuse määramiseks kahte võimalust - selleks võite kasutada lauset SELECT või SET. Funktsionaalsuse osas töötavad need avaldused peaaegu samamoodi, välja arvatud see, et SELECT -lause otsib SELECT -lauses määratud tabelist algselt omistatava väärtuse.

SET -lauset kasutatakse tavaliselt muutujate väärtuste määramiseks vormis, mis on protseduurikeeltes tavalisem. Selle operaatori kasutamise tüüpilised näited on järgmised:

SETa = 1;

SET @b = @a * 1.5

Pange tähele, et kõik need operaatorid täidavad otseselt ülesandeid, kasutades kas selgesõnalisi väärtusi või muid muutujaid. SET -lauset ei saa kasutada päringust saadud muutujale väärtuse määramiseks; päring tuleb täita eraldi ja alles siis saab saadud tulemuse määrata SET -lause abil. Näiteks katse sellise avalduse täitmiseks tekitab tõrke:

DEKLAREERI @c int

SET @c = COUNT (*) linnast

VALI @c

ja järgmine avaldus õnnestub üsna hästi:

DEKLAREERI @c int

SET @c = (SELECT COUNT (*) FROM City)

VALI @c

Lauset SELECT kasutatakse tavaliselt muutujatele väärtuste määramiseks, kui muutujale salvestatava teabe allikas pärineb päringust. Näiteks rakendatakse ülaltoodud koodis tehtud toiminguid palju sagedamini SELECT -lause abil:

DEKLAREERI @c int

SELECT @c = COUNT (*) Linnas

VALI @c

Pange tähele, et see kood on veidi selgem (eriti on see lakoonilisem, kuigi teeb sama).

Seega on võimalik sõnastada mõlema operaatori kasutamise kohta järgmine üldtunnustatud kokkulepe.

SET -lauset kasutatakse siis, kui tuleb teha muutujale lihtne määramine, s.t. kui määratud väärtus on juba selgesõnaliselt määratud kindla väärtuse või mõne muu muutuja kujul.

  • Lauset SELECT kasutatakse juhul, kui muutujale väärtuse määramine peab põhinema päringul.

Muutujate kasutamine SQL -päringutes

Üks T-SQL keele kasulikke omadusi on see, et muutujaid saab päringutes kasutada, ilma et oleks vaja luua keerukaid dünaamilisi stringe, mis muutujad programmi koodi sisse põimivad. Dünaamiline SQL eksisteerib jätkuvalt, kuid üksikut väärtust saab muutuja abil hõlpsamini muuta.

Kõikjal, kus päringus saab avaldist kasutada, saab kasutada ka muutujat. Järgmine näide näitab muutuja kasutamist klauslis WHERE:

DECLARE @IdProd int;

SET @IdProd = 1;

VALI

TOOTEST

KUS IdProd = @IdProd;

Globaalsed süsteemi muutujad

SQL Serveril on üle kolmekümne globaalse parameetriteta muutuja, mille süsteem määratleb ja haldab. Kõigi globaalsete muutujate ees on kaks sümbolit @. Saate nende väärtuse hankida lihtsa SELECT -päringuga, nagu järgmises näites:

VALI @@ ÜHENDUSED

See kasutab globaalset muutujat @@ CONNECTIONS, et hankida SQL Serveriga ühenduste arv pärast programmi käivitamist.

Mõned kõige sagedamini kasutatavad süsteemimuutujad on järgmised:

  • @@ ERROR - Sisaldab vea numbrit, mis ilmnes praeguse ühenduse viimase T -SQL -lause täitmisel. Kui viga ei leita, sisaldab see 0. Selle süsteemimuutuja väärtus lähtestatakse pärast iga järgmise avalduse täitmist. Kui soovite salvestada selles sisalduva väärtuse, tuleks see väärtus kohe pärast avalduse täitmist üle kanda kohalikule muutujale, mille veakood tuleks salvestada.
  • @@ IDENTITEET - Sisaldab viimast INSERT -lause tulemusena andmebaasi sisestatud viimast identifitseerimisväärtust. Kui viimases INSERT -avalduses ei loodud identifitseerimisväärtust, on süsteemimuutuja @@ IDENTITY NULL. See väide kehtib isegi siis, kui identifitseerimisväärtuse puudumise põhjustas ebatavaline lõpetamine avalduse täitmise ajal. Ja kui ühe avaldise abil tehakse mitu sisestust, määratakse sellele süsteemimuutujale ainult viimane identifitseerimisväärtus.
  • @@ ROWCOUNT - Üks laialdasemalt kasutatavaid süsteemimuutujaid. Tagastab teabe viimasest avaldusest mõjutatud ridade arvu kohta. Tavaliselt kasutatakse muude vigade kontrollimiseks kui need, mis kuuluvad käitamisetapi veakategooriasse. Näiteks kui programm leiab, et pärast DELETE -lause helistamist klausliga WHERE on mõjutatud ridade arv null, siis võime järeldada, et juhtus midagi ootamatut. Seejärel saab veateate käsitsi aktiveerida.

! Pange tähele, et alates SQL Server 2000 nimetatakse globaalseid muutujaid funktsioonideks. Nimi globaalne segas kasutajaid, mis viitab sellele, et selliste muutujate ulatus on laiem kui kohalike muutujate oma. Võimalus teavet salvestada, olenemata sellest, kas see on pakendis või mitte, omistati sageli ekslikult globaalsetele muutujatele, mis muidugi ei vastanud tegelikkusele.

Käskude voo juhtimine. Tarkvara konstruktsioonid

T-SQL keel pakub enamikku klassikalisi protseduurivahendeid programmi täitmise voo juhtimiseks, sh. tingimuslik ehitus ja silmused.

OperaatorKUI. ... ... MUU

IF avaldused. ... .ELSE toimib T-SQL-is samamoodi nagu mis tahes muu programmeerimiskeele puhul. Selle operaatori üldine süntaks on järgmine:

IF Boole'i ​​väljend

SQL -lause I BEGIN SQL -lausete plokk LÕPP

SQL -lause | BEGIN SQL -i lõpplauseplokk]

Peaaegu iga avaldise saab määrata loogilise avaldisena, mille tulemus on loogiline.

Tuleb meeles pidada, et tingimusena loetakse täidetuks ainult avaldus, mis järgneb vahetult IF avaldusele (sellele kõige lähemal). Ühe operaatori asemel saate tingimusel ette näha mitme operaatori täitmise, kombineerides need koodiplokiks, kasutades konstruktsiooni BEGIN ... END.

Allolevas näites ei ole IF tingimus täidetud, mis takistab järgmise avalduse täitmist.

KUI 1 = 0

PRINT "Esimene rida"

PRINT "Teine rida"

Valikuline ELSE käsk võimaldab määrata lause, mis tuleb täita, kui IF tingimus ei ole täidetud. Nagu IF, kontrollib ELSE lause ainult vahetult järgnevat käsku või koodiplokki BEGIN ... END vahel.

Kuigi IF -avaldus tundub piiratud, võib selle tingimuste klausel sisaldada võimsaid funktsioone, näiteks klauslit WHERE. Eelkõige on need väljendid KUI OLEMAS ().

Avaldis IF EXISTS () kasutab tingimusena SELECT -lausega tagastatava rea ​​olemasolu. Kuna otsitakse suvalisi ridu, saab SELECT -lause veergude loendi asendada tärniga. See meetod on kiirem kui @@ ROWCOUNT> 0 tingimuse kontrollimine, kuna ridade koguarvu pole vaja lugeda. Niipea kui vähemalt üks rida vastab tingimusele IF EXISTS (), saab päringut jätkata.

Järgmine näide kasutab IF EXISTS avaldist, et kontrollida, kas kliendikoodil 1 on enne andmebaasist kustutamist tellimusi. Kui selle kliendi kohta on teavet vähemalt ühe tellimuse kohta, siis seda ei kustutata.

KUI OLEMAS (VALI * KUST, KUS IdCust = 1)

PRINT "Klienti on võimatu kustutada, kuna andmebaasis on sellega seotud kirjeid"

MUU

KUS IdCust = 1

PRINT "Kustutamine õnnestus"

OperaatoridKUI, PAUS jaJÄTKA

Klausel WHILE töötab SQL -is umbes samamoodi nagu teistes keeltes, millega programmeerija tavaliselt peab töötama. Tegelikult kontrollitakse selles avalduses teatud tingimust enne iga silmuse läbimise algust. Kui enne järgmist tsüklit läbimist on tingimuse kontrollimisel tulemuseks TÕESE väärtus, siis silmus lingitakse läbi, vastasel juhul lõpetatakse avalduse täitmine.

Lausel WHILE on järgmine süntaks:

KUI Boole'i ​​väljend

SQL avaldus I

SQL -lausete plokk

Loomulikult saate WHILE lausega tagada, et ahelas täidetakse ainult üks avaldus (sarnaselt sellele, kuidas IF -lauset tavaliselt kasutatakse), kuid praktikas konstrueerib WHILE, millele ei järgne BEGIN -plokki. ... .END, mis vastab operaatori täielikule vormingule, on haruldane.

Lause BREAK võimaldab teil tsüklist viivitamatult väljuda, ootamata tsükli lõppu läbimist ja tingimusliku avaldise uuesti kontrollimist.

Lause CONTINUE võimaldab katkestada tsükli ühe iteratsiooni. Saate lühidalt kirjeldada lauset CONTINUE, nii et see hüppab WHILE -tsükli algusesse. Niipea kui operaator CONTINUE leitakse tsüklist, olenemata selle asukohast, läheb tsükkel silmuse algusesse ja tingimuslik avaldis hinnatakse uuesti (ja kui selle avaldise väärtus ei ole enam tõene, silmus on väljunud).

Järgmine lühiskript demonstreerib WHILE klausli kasutamist silmuse loomiseks:

DECLARE @Temp int;

SET @Temp = 0;

KUI @Temp< 3

ALUSTA

PRINT @Temp;

SET @Temp = @Temp + 1;

Siin, silmus, suurendatakse täisarvulist muutujat @Temp 0 -lt 3 -le ja selle väärtus kuvatakse igal iteratsioonil.

OperaatorTAGASI

RETURN -avaldust kasutatakse paketi täitmise peatamiseks, seega salvestatud protseduuri ja päästiku jaoks (seda käsitletakse järgmises laboris).

SQL -i keelt kasutatakse andmebaasist andmete hankimiseks. SQL on programmeerimiskeel, mis sarnaneb lähedalt inglise keelega, kuid on mõeldud andmebaasihaldusprogrammide jaoks. SQL -i kasutatakse Accessis igas päringus.

SQL -i toimimise mõistmine aitab teil luua täpsemaid päringuid ja hõlbustab valesid tulemusi tagastavate päringute parandamist.

See artikkel on osa SQL -i Accessi seeriast. Selles kirjeldatakse andmete toomisel SQL -i kasutamise põhitõdesid ja tuuakse näiteid SQL -i süntaksist.

Selles artiklis

Mis on SQL?

SQL on programmeerimiskeel faktide ja nendevaheliste seostega töötamiseks. Suhtelised andmebaasihaldusprogrammid, näiteks Microsoft Office Access, kasutavad andmetega manipuleerimiseks SQL -i. Erinevalt paljudest programmeerimiskeeltest on SQL loetav ja arusaadav isegi algajatele. Nagu paljud programmeerimiskeeled, on ka SQL rahvusvaheline standard, mida tunnustavad sellised standardikomiteed nagu ISO ja ANSI.

Andmekogumeid kirjeldatakse SQL -is, et aidata küsimustele vastata. SQL -i kasutamisel tuleb kasutada õiget süntaksit. Süntaks on reeglite kogum keele elementide õigeks ühendamiseks. SQL süntaks põhineb ingliskeelsel süntaksil ja jagab paljusid elemente Visual Basic for Applications (VBA) süntaksiga.

Näiteks võib lihtne SQL -lause, mis otsib Mary -nimeliste kontaktide perekonnanimede loendi, välja näha selline:

VALI perekonnanimi
Alates kontaktidest
WHERE First_Name = "Maarja";

Märge: SQL -i keelt kasutatakse mitte ainult andmetega toimingute tegemiseks, vaid ka andmebaasi objektide, näiteks tabelite struktuuri loomiseks ja muutmiseks. SQL -i osa, mida kasutatakse andmebaasi objektide loomiseks ja muutmiseks, nimetatakse DDL -iks. DDL -i see artikkel ei hõlma. Lisateavet leiate artiklist Tabelite või indeksite loomine ja muutmine andmete määratlemise päringu abil.

SELECT laused

Lauset SELECT kasutatakse SQL -i andmekogumi kirjeldamiseks. See sisaldab andmebaasist allalaaditava andmekogumi täielikku kirjeldust, sealhulgas järgmist:

    tabeleid, mis sisaldavad andmeid;

    seosed erinevatest allikatest pärit andmete vahel;

    väljad või arvutused, mille alusel andmed valitakse;

    valikutingimused, millele peavad vastama päringu tulemuses sisalduvad andmed;

    sorteerimise vajadus ja meetod.

SQL laused

SQL -lause koosneb mitmest osast, mida nimetatakse klausliteks. Igal SQL -lause klauslil on erinev eesmärk. Vaja on mõningaid soovitusi. Järgmises tabelis on loetletud kõige sagedamini kasutatavad SQL -klauslid.

SQL klausel

Kirjeldus

Kohustuslik

Määrab väljad, mis sisaldavad soovitud andmeid.

Määrab tabelid, mis sisaldavad klauslis SELECT määratud välju.

Määrab väljade valimise kriteeriumid, millele peavad vastama kõik tulemustes sisalduvad kirjed.

Määrab tulemuste sortimisjärjestuse.

Koondfunktsioone sisaldavas SQL -lauses tuvastab väljad, mille klausel SELECT ei arvuta kokkuvõtlikku väärtust.

Ainult siis, kui sellised väljad on olemas

Koondfunktsioone sisaldavas SQL -lauses määratleb tingimused, mis kehtivad väljadele, mille jaoks SELECT -klausel arvutab kokkuvõtva väärtuse.

SQL terminid

Iga SQL -lause koosneb terminitest, mida saab võrrelda kõne osadega. Järgmises tabelis on loetletud SQL -i terminite tüübid.

SQL termin

Kõne võrreldav osa

Määratlus

Näide

identifikaator

nimisõna

Andmebaasi objekti tuvastamiseks kasutatav nimi, näiteks välja nimi.

Kliendid. [Telefoninumber]

operaator

tegusõna või määrsõna

Märksõna, mis tähistab või muudab toimingut.

konstantne

nimisõna

Väärtus, mis ei muutu, näiteks number või NULL.

väljendus

omadussõna

Identifikaatorite, operaatorite, konstantide ja funktsioonide kombinatsioon, mis on ette nähtud ühe väärtuse arvutamiseks.

> = Kaup. [Hind]

Põhilised SQL -klauslid: SELECT, FROM ja WHERE

SQL -lausete üldine vorming:

VALI väli_1
FROM tabel_1
WHERE kriteerium_1
;

Märkused:

    Access ignoreerib reavahet SQL -lausetes. Sellest hoolimata on soovitatav alustada iga lause uue reaga, et SQL -lauset oleks lihtne lugeda nii selle kirjutanud isikule kui ka kõigile teistele.

    Iga SELECT -lause lõpeb semikooloniga (;). Semikoolon võib ilmuda kas viimase lause lõpus või SQL -lause lõpus eraldi real.

Näide Accessis

Järgmine näide näitab, milline võiks SQL -lause Accessis lihtsa valiku päringu jaoks välja näha.

1. SELECT klausel

2. Alates klauslist

3. WHERE klausel

Vaatame lausete kaupa näiteid, et mõista, kuidas SQL -i süntaks töötab.

Klausel SELECT

SELECT, ettevõte

See on klausel SELECT. See sisaldab avaldust (SELECT), millele järgneb kaks identifikaatorit ("[E -posti aadress]" ja "Ettevõte").

Kui identifikaator sisaldab tühikuid või erimärke (näiteks „E -posti aadress”), tuleb see lisada nurksulgudesse.

Klauslis SELECT ei pea te välju sisaldavaid tabeleid täpsustama ega valiku kriteeriume, millele peavad vastama tulemustes sisalduvad andmed.

SELECT -lauses on klausel SELECT alati FROM -klausli ees.

Alates klauslist

Alates kontaktidest

See on klausel FROM. See sisaldab operaatorit (FROM), millele järgneb identifikaator (kontaktid).

Valiku väljad ei ole klauslis FROM määratud.

Klausel WHERE

WHERE City = "Seattle"

See on WHERE klausel. See sisaldab operaatorit (WHERE), millele järgneb väljend (City = "Rostov").

Klauslitega SELECT, FROM ja WHERE saate teha palju asju. Nende soovituste kasutamise kohta leiate lisateavet järgmistest artiklitest:

Sortimistulemused: TELLI

Nagu Microsoft Exceli puhul, saab Access päringutulemusi tabelis sortida. Klauslit ORDER BY kasutades saate määrata ka päringu käivitamisel tulemuste sortimise viisi. Kui kasutatakse klauslit ORDER BY, peab see ilmuma SQL -lause lõpus.

Klausel ORDER BY sisaldab sorteeritavate väljade loendit samas järjekorras, milles sorteerimist rakendatakse.

Oletame näiteks, et soovite esmalt sortida tulemused ettevõtte välja järgi kahanevas järjekorras ja seejärel, kui on olemas kirjed sama ettevõtteväliväärtusega, sorteerige need kasvava järjekorra välja järgi E -posti aadress. Klausel ORDER BY näeks välja selline:

TELLI Ettevõte DESC,

Märge: Vaikimisi sorteerib Access väärtused kasvavas järjekorras (A kuni Z, väikseim kuni suurim). Väärtuste sortimiseks hoopis kahanevas järjekorras peate määrama DESC märksõna.

Klausli ORDER BY klausli kohta leiate lisateavet artiklist ORDER BY Klausel.

Pivoti andmetega töötamine: GROUP BY ja HAVING klauslid

Mõnikord peate töötama koondandmetega, näiteks igakuise kogumüügi või laos olevate kõige kallimate esemetega. Selleks rakendatakse klahvi SELECT väljale agregeerimisfunktsioon. Näiteks kui päringu eesmärk on hankida iga ettevõtte e -posti aadresside arv, võib klausel SELECT välja näha järgmine:

Konkreetse koondfunktsiooni kasutamise võimalus sõltub välja andmete tüübist ja soovitud avaldisest. Saadaolevate koondfunktsioonide kohta leiate lisateavet artiklist SQL koondfunktsioonid.

Täitmisväljade määramine, mida koondfunktsioonis ei kasutata: klausel GROUP BY

Koondfunktsioonide kasutamisel peate tavaliselt looma klausli GROUP BY. Klausel GROUP BY määrab kõik väljad, millele pole koondfunktsiooni rakendatud. Kui koondfunktsioone rakendatakse päringu kõikidele väljadele, ei pea te looma klauslit GROUP BY.

Klausel GROUP BY peab kohe järgima klauslit WHERE või FROM, kui WHERE klauslit pole. Klauslis GROUP BY on väljad määratud samas järjekorras nagu klauslis SELECT.

Jätkame eelmise näitega. Kui klausel SELECT rakendab koondfunktsiooni ainult väljale [E -posti aadress], näeb klausel GROUP BY välja järgmine:

GROUP BY Ettevõte

Lisateavet klausli GROUP BY kohta leiate artiklist klausel GROUP BY.

Liitväärtuste piiramine rühmitustingimuste abil: klausel HAVING

Kui teil on vaja täpsustada tingimusi tulemuste piiramiseks, kuid välja, mida soovite rakendada, kasutatakse koondfunktsioonis, ei saa te kasutada WHERE klauslit. Kasutage selle asemel klauslit HAVING. Klausel HAVING töötab samamoodi nagu klausel WHERE, kuid seda kasutatakse koondandmete jaoks.

Oletame näiteks, et klahvi SELECT esimesele väljale rakendatakse funktsiooni AVG (mis arvutab keskmise):

SELECT COUNT (), Company

Kui soovite piirata päringutulemusi funktsiooni COUNT väärtuse alusel, ei saa te WHERE klausli sellele väljale filtritingimust rakendada. Selle asemel tuleks tingimus paigutada klauslisse HAVING. Näiteks kui soovite, et päring tagastaks ridu ainult siis, kui ettevõttel on mitu e -posti aadressi, saate kasutada järgmist klauslit HAVING:

MIDA ON LOETUD ()> 1

Märge: Päring võib sisaldada nii klauslit WHERE kui ka klauslit HAVING, kriteeriume nende väljade jaoks, mida ei kasutata WHERE klauslis määratud koondfunktsioonides, ja tingimusi väljadele, mida kasutatakse klausli HAVING koondfunktsioonides.

Lisateavet klausli HAVING kohta leiate artiklist HAVING klausel.

Päringu tulemuste kombineerimine: UNION Operaator

UNION -operaatorit kasutatakse kõigi mitme sarnase valiku päringu tagastatud andmete vaatamiseks samaaegselt ühendatud komplektiga.

Operaator UNION võimaldab ühendada kaks SELECT -lauset üheks. Ühendatavatel avaldustel SELECT peab olema sama arv ja järjestus väljundvälju samade või ühilduvate andmetüüpidega. Päringu käivitamisel ühendatakse iga vastavate väljade komplekti andmed üheks väljundväljaks, nii et päringu väljundil on sama arv välju kui igal SELECT -lausel eraldi.

Märge: Liidupäringutes ühilduvad numbrilised ja tekstilised andmetüübid.

Kasutades operaatorit UNION, saate määrata, kas duplikaatridu, kui neid on, tuleks päringu tulemustesse lisada. Selleks kasutage märksõna KÕIK.

Päringul kahe SELECT -lause ühendamiseks on järgmine põhisüntaks:

VALI väli_1
FROM tabel_1
LIIT
VALI väli_a
Alates tabelist a
;

Oletame näiteks, et teil on kaks tabelit "Tooted" ja "Teenused". Mõlemas tabelis on väljad toote või teenuse nime, hinna- ja garantiiteabega, samuti väli, mis näitab pakutava toote või teenuse ainuõigust. Kuigi toodete ja teenuste tabelites on erinevat tüüpi garantiisid, on põhiteave sama (kas üksikute toodete või teenuste puhul on olemas kvaliteedigarantii). Järgmise liitumispäringu abil saate kombineerida kahe tabeli neli välja:

SELECT nimi, hind, garantii_ saadaval, eksklusiivne_pakkumine
Alates toodetest
LIIT KÕIK
SELECT nimi, hind, garantii_saatav, eksklusiivne_pakkumine
Teenustest
;

Lisateavet SELECT -lausete kombineerimise kohta UNION -operaatori abil leiate artiklist

Põhilised SQL -käsud, mida iga programmeerija peaks teadma

SQL -i ehk struktureeritud päringukeelt kasutatakse andmete manipuleerimiseks relatsioonilise andmebaasi süsteemis (RDBMS). See artikkel räägib tavaliselt kasutatavatest SQL -käskudest, mida iga programmeerija peaks tundma. See materjal on ideaalne neile, kes soovivad enne töövestlust oma SQL -i teadmisi täiendada. Selleks analüüsige artiklis toodud näiteid ja meenutage andmebaaside kaudu paarikaupa läbielatut.

Pange tähele, et mõned andmebaasisüsteemid nõuavad iga avalduse lõpus semikoolonit. Semikoolon on standardne kursor iga SQL -i avalduse lõppu. Näidetes kasutatakse MySQL -i, seega on vaja semikoolonit.

Näidete jaoks andmebaasi seadistamine

Looge andmebaas, et näidata, kuidas meeskonnad töötavad. Töötamiseks peate alla laadima kaks faili: DLL.sql ja InsertStatements.sql. Pärast seda avage terminal ja sisestage MySQL -i konsool järgmise käsuga (selles artiklis eeldatakse, et MySQL on juba süsteemi installitud):

Mysql -u juur -p

Seejärel sisestage parool.

Käivitage järgmine käsk. Nimetagem andmebaasi ülikooliks:

LOOGI DATABASE ülikool; USE ülikool; ALLIKAS ; ALLIKAS

Andmebaasi käsud

1. Vaadake saadaolevaid andmebaase

Näita andmebaase;

2. Uue andmebaasi loomine

LOOGI ANDMEBAASI;

3. Kasutatava andmebaasi valimine

KASUTA ;

4. SQL -käskude importimine failist.sql

ALLIKAS ;

5. Andmebaasi eemaldamine

TILGUANDMEBAAS ;

Töö laudadega

6. Andmebaasis saadaolevate tabelite vaatamine

Näita tabeleid;

7. Uue tabeli loomine

LOO TABEL ( , , ESIMENE VÕTTE ( ), VÄLISVÕTI ( ) VIITED ());

Aususe piirangud CREATE TABLE abil

Võimalik, et peate tabeli teatud veergudele looma piirangud. Tabeli loomisel saate seada järgmised piirangud.

  • tabeli lahter ei saa olla NULL;
  • esmane võti - PRIMARY KEY (veerunimi1, veerunimi2, ...);
  • välisvõti - VÄLISVÕTI (veerunimix1,…, veerunimixn) VIITED Tabeli_nimi (veerunimix1,…, veerunimixn).

Määrata saab rohkem kui ühe primaarvõtme. Sel juhul saate kombineeritud primaarvõtme.

Näide

Looge tabel "juhendaja":

CREATE TABLE juhendaja (ID CHAR (5), nimi VARCHAR (20) NOT NULL, osakonna_nimi VARCHAR (20), palk NUMERIC (8,2), PRIMARY KEY (ID), VÄLISVÕTI (osakonna_nimi) VIIDETE osakond (osakonna_nimi));

8. Tabeli teave

Tabeli veergude kohta saate vaadata mitmesugust teavet (väärtuse tüüp, võti või mitte) järgmise käsuga:

KIRJELDUS ;

9. Andmete lisamine tabelisse

INSERT INTO (, , , ...) VÄÄRTUSED ( , , , …);

Tabeli igasse veergu andmete lisamisel ei pea te veerunimesid täpsustama.

INSERT INTO VÄÄRTUSED ( , , , …);

10. Tabeli andmete uuendamine

UUENDA SET = , = , ... KUS ;

11. Tabelist kõigi andmete eemaldamine

KUSTUTA ;

12. Tabeli kustutamine

TILKUTABEL ;

Käsud taotluste esitamiseks

13. VALI

SELECT -i kasutatakse andmete hankimiseks konkreetsest tabelist:

VALI , ,… Alates ;

Järgmine käsk võib kuvada kõik tabeli andmed:

SELECT * FROM ;

14. SELECT DISTINCT

Tabeli veerud võivad sisaldada topeltandmeid. Kasutage valikut SELECT DISTINCT, et saada ainult mitte korduvaid andmeid.

VALI DISTINCT , ,… Alates ;

15. KUS

Saate päringus tingimuste määramiseks kasutada SELECT -i märksõna WHERE.

VALI , ,… Alates KUS ;

Taotluses saab määrata järgmised tingimused:

  • teksti võrdlus;
  • arvväärtuste võrdlus;
  • loogilised toimingud JA (ja), VÕI (või) ja MITTE (eitus).

Näide

Proovige järgmisi käske. Pöörake tähelepanu WHERE tingimustele:

SELECT * FROM course WHERE dept_name = 'Comp. Sci. '; SELECT * FROM course WHERE ainepunktid> 3; SELECT * FROM course WHERE dept_name = "Comp. Sci." JA krediiti> 3;

16. RÜHM BY

Klauslit GROUP BY kasutatakse väljundväärtuste rühmitamiseks sageli koos koondfunktsioonidega, näiteks COUNT, MAX, MIN, SUM ja AVG.

VALI , ,… Alates RÜHMITA ;

Näide

Kuvame iga teaduskonna kursuste arvu:

SELECT COUNT (kursuse_id), osakonna_nimi kursusest GROUP BY osakonna_nimi järgi;

17. OMA

Märksõna HAVING lisati SQL -i, kuna WHERE -d ei saa kasutada koos koondfunktsioonidega.

VALI , , ... Alates RÜHMITA Omades

Näide

Loetleme teaduskonnad, kus on rohkem kui üks kursus:

SELECT COUNT (kursuse_id), osakonna_nimi kursusest GROUP BY osakonna_nimi järgi HAVING COUNT (kursuse_id)> 1;

18. TELLI

ORDER BY kasutatakse päringutulemuste sortimiseks kahanevas või kasvavas järjekorras. ORDER BY sorteerib kasvavas järjekorras, kui ASC või DESC sortimismeetodit pole määratud.

VALI , ,… Alates TELLI , ,… ASC | DESC;

Näide

Kuvame kursuste loendi ainepunktide arvu kasvavas ja kahanevas järjekorras:

VALI * Alates kursusest TELLI krediidi järgi; SELECT * FROM kursus TELLI krediidi alusel DESC;

19. VAHEL

BETWEEN kasutatakse andmeväärtuste valimiseks määratud vahemikust. Kasutada saab nii numbrilisi ja tekstiväärtusi kui ka kuupäevi.

VALI , ,… Alates KUS VAHEL JA ;

Näide

Siin on nimekiri juhendajatest, kelle palk on üle 50 000, kuid alla 100 000:

VALI * ÕPETAJAST, KUS PALK 50000 JA 100000 VAHEL;

20. NAGU

Operaatorit LIKE kasutatakse WHERE -s sarnase väärtuse otsingumustri määramiseks.

LIKE -is kasutatakse kahte tasuta operaatorit:

  • % (puudub, üks või mitu tähemärki);
  • _ (üks märk).
VALI , ,… Alates KUS NAGU ;

Näide

Kuvame kursuste loendi, mille nimi sisaldab "kuni", ja kursuste loendi, mille nimi algab tähega "CS-":

SELECT * FROM course WHERE title like '% to%'; SELECT * FROM course WHERE course_id LIKE "CS -___";

21. IN

IN abil saate WHERE klauslile määrata mitu väärtust:

VALI , ,… Alates KUS IN ( , , …);

Näide

Kuvame Comp. Õpilaste nimekirja. Sci. Füüsika ja elek. Insener:

SELECT * FROM student WHERE dept_name IN ('Comp. Sci.', 'Physics', 'Elec. Eng.');

22. LIITU

JOINi kasutatakse kahe või enama tabeli linkimiseks, kasutades neis ühiseid atribuute. Allolev pilt näitab erinevaid SQL -i kombineerimise viise. Pange tähele erinevust vasaku välimise ja parema välimise liitekoha vahel:

VALI , ,… Alates LIITU PEAL = ;

Näide 1

Kuvame kõigi kursuste loendi ja vastava teabe teaduskondade kohta:

SELECT * FROM kursusest LIITU osakond ON course.dept_name = osakond.dept_name;

Näide 2

Loetleme kõik vajalikud kursused ja nende üksikasjad:

SELECT prereq.course_id, title, osakonna_nimi, ainepunktid, prereq_id FROM prereq LEFT OUTER JOIN course ON ON prereq.course_id = course.course_id;

Näide 3

Kuvame kõigi kursuste loendi, olenemata sellest, kas neid nõutakse või mitte:

SELECT course.course_id, title, osakonna_nimi, ainepunktid, prereq_id FROM prereq RIGHT OUTER JOIN kursus ON prereq.course_id = course.course_id;

23. Vaade

Vaade on avaldise täitmisel loodud virtuaalne SQL -tabel. See sisaldab ridu ja veerge ning on väga sarnane tavalise SQL -tabeliga. Vaade näitab alati andmebaasi uusimat teavet.

Loomine

LOO VAADE VALITUD , ,… Alates KUS ;

Kustutamine

TILGUVAADE ;

Näide

Loome vaate, mis koosneb 3 ainepunktiga kursustest:

24. Koondfunktsioonid

Neid funktsioone kasutatakse kõnealuste andmetega seotud koondtulemuse saamiseks. Tavaliselt kasutatakse järgmisi koondfunktsioone:

  • COUNT (veeru_nimi) - tagastab ridade arvu;
  • SUM (veeru_nimi) - tagastab antud veeru väärtuste summa;
  • AVG (veeru_nimi) - tagastab antud veeru keskmise väärtuse;
  • MIN (veeru_nimi) - tagastab antud veeru väikseima väärtuse;
  • MAX (veeru_nimi) - tagastab antud veeru suurima väärtuse.

25. Pesastatud alampäringud

Pesastatud alampäringud on SQL -päringud, mis sisaldavad teises päringus sisestatud klausleid SELECT, FROM ja WHERE.

Näide

Leiame kursused, mida õpetati 2009. aasta sügisel ja 2010. aasta kevadel:

SELECT DISTINCT course_id FROM jaotisest WHERE semester = 'Fall' AND year = 2009 AND course_id IN (SELECT course_id FROM section WHERE semester = 'Spring' AND year = 2010);

Kas vajate “SELECT * WHERE a = b FR c” või “SELECT WHERE a = b FR c c ON *”?

Kui sa oled nagu mina, siis nõustud: SQL on üks neist asjadest, mis esmapilgul tunduvad lihtsad (see loeb justkui inglise keeles!), Aga millegipärast tuleb õige süntaksi leidmiseks googeldada iga lihtsat päringut.


Ja siis liitumine, koondamine, alampäringud algavad ja see osutub täiesti jamaks. Tundub selline:


SELECT liikmed.nimi || "" || liikmed.perekonnanimi AS "Täisnimi" FROM laenud INNER JOIN liikmed ON members.memberid = laenud.memberid INNER JOIN raamatud ON books.bookid = laenud.bookid WHERE laenud.bookid IN (SELECT bookid FROM raamatutest WHERE laos> (SELECT keskm. (stock ) Raamatutest)) RÜHM BY liikmete järgi.nimi, liikmed.perekonnanimi;

Bue! See hirmutab iga algaja või isegi vahearendaja, kui ta näeb SQL -i esimest korda. Kuid kõik pole nii hull.


Intuitiivne on lihtne meelde jätta ja selle õpetuse abil loodan alandada algajate SQL -i sisenemiskünnist ja juba kogenud inimestele pakkuda uut viisi SQL -i vaatamiseks.


Kuigi SQL -i süntaks on erinevates andmebaasides peaaegu sama, kasutatakse selles artiklis päringute jaoks PostgreSQL -i. Mõned näited töötavad MySQL -is ja teistes andmebaasides.

1. Kolm võlusõna

SQL -is on palju märksõnu, kuid SELECT, FROM ja WHERE ilmuvad peaaegu igas päringus. Veidi hiljem saate aru, et need kolm sõna kujutavad endast andmebaasipäringute loomise kõige põhilisemaid aspekte ja muud keerukamad päringud on lihtsalt lisandmoodulid.

2. Meie baas

Vaatame andmebaasi, mida selles artiklis näitena kasutame:







Meil on raamatukogu ja inimesi. Välja antud raamatute raamatupidamiseks on olemas ka spetsiaalne tabel.

  • Raamatute tabelisse salvestatakse teave raamatu pealkirja, autori, avaldamiskuupäeva ja kättesaadavuse kohta. See on lihtne.
  • Tabelis „liikmed” on kõigi raamatukogusse registreerunud inimeste nimed ja perekonnanimed.
  • Tabelis “laenutus” on salvestatud teave raamatukogust laenutatud raamatute kohta. Veerg Bookid viitab raamatu ID -le tabelis „books” ja veerg Memberid viitab vastavale isikule tabelis „liikmed”. Meil on ka väljaandmise kuupäev ja kuupäev, millal raamat tuleb tagastada.

3. Lihtne taotlus

Alustame lihtsast päringust: me vajame nimed ja identifikaatorid(id) kõigi autori "Dan Browni" kirjutatud raamatute kohta


Taotlus saab olema järgmine:


SELECT bookid AS "id", pealkiri raamatutest WHERE autor = "Dan Brown";

Ja tulemus on selline:


id tiitel
2 Kadunud sümbol
4 Inferno

Päris lihtne. Heidame pilgu taotlusele, et aru saada, mis toimub.

3.1 FROM - kust me andmed saame

See võib praegu tunduda ilmne, kuid FROM on hiljem väga oluline, kui jõuame liitumiste ja alampäringute juurde.


FROM osutab tabelile, mille kohta päringu esitada. See võib olla olemasolev tabel (nagu ülaltoodud näites) või tabel, mis on loodud jooksvalt liitumiste või alampäringute kaudu.

3.2 KUS - milliseid andmeid näidata

WHERE lihtsalt käitub nagu filter stringid mida tahame väljastada. Meie puhul tahame näha ainult neid ridu, mille autori veeru väärtus on “Dan Brown”.

3.3 VALI - kuidas andmeid kuvada

Nüüd, kui meil on tabelist kõik vajalikud veerud olemas, peame otsustama, kuidas neid andmeid kuvada. Meie puhul on vaja ainult raamatute pealkirju ja identifikaatoreid, nii et seda me ja vali kasutades SELECT. Samal ajal saate veeru ümber nimetada AS -i abil.


Kogu päringut saab visualiseerida lihtsa diagrammi abil:


4. Ühendused (liitumised)

Nüüd tahame näha kõigi raamatust võetud Dan Browni raamatute pealkirju (mitte tingimata ainulaadseid) ja millal need raamatud tuleb tagastada:


VALI raamatud.pealkiri AS "Pealkiri";

Tulemus:


Pealkiri Tagastamise kuupäev
Kadunud sümbol 2016-03-23 00:00:00
Inferno 2016-04-13 00:00:00
Kadunud sümbol 2016-04-19 00:00:00

Enamasti on taotlus sarnane eelmisega. erandiga Alates sektsioonidest. See tähendab et palume andmeid teisest tabelist... Me ei pääse raamatute tabelisse ega laenude tabelisse. Selle asemel viitame uus laud mis loodi kahe tabeli ühendamisel.


laenutus LIITU raamatutega laenamistel.bookid = books.bookid on uus tabel, mis moodustati, ühendades kõik kirjed tabelitest "raamatud" ja "laenud", kus raamatupidamislikud väärtused on samad. Sellise ühendamise tulemus on järgmine:



Seejärel esitame päringu selle tabeli kohta samamoodi nagu ülaltoodud näites. See tähendab, et tabelite ühendamisel peate muretsema ainult selle liitmise üle. Ja siis saab taotlus sama selgeks kui punktis 3 toodud „lihtsa taotluse” puhul.


Proovime veidi keerukamat kahe lauaga liitumist.


Nüüd tahame saada nende inimeste ees- ja perekonnanimed, kes on võtnud autoriraamatu "Dan Brown" raamatukogust.


Seekord liigume alt üles:


Samm 1. samm- kust me andmed saame? Soovitud tulemuse saamiseks peame tabelid "liige" ja "raamatud" ühendama tabeliga "laenud". Jaotis JOIN näeb välja selline:


laenud JOIN raamatud ON laenud.bookid = raamatud.bookid JOIN liikmed ON liikmed.memberid = laenud.memberid

Ühenduse tulemust saab vaadata lingilt.


2. samm- milliseid andmeid me näitame? Meid huvitavad ainult need andmed, mille raamatu autor on “Dan Brown”


WHERE books.author = "Dan Brown"

3. samm- kuidas me andmeid kuvame? Nüüd, kui andmed on laekunud, peate lihtsalt kuvama raamatute vastu võtnud inimeste ees- ja perekonnanime:


VALI liikmed.nimi AS "Eesnimi", liikmed.perekonnanimi AS "Perekonnanimi"

Super! Jääb vaid ühendada kolm komponenti ja esitada vajalik soov:


VALI liikmed.nimi AS "Eesnimi", liikmed.perekonnanimi AS "Perekonnanimi" LAENUTUSTEST LIITU raamatud laenutusest.bookid = books.bookid LIITU liikmed ON liikmed.memberid = laenud.memberid WHERE books.author = "Dan Brown";

Mis annab meile:


Eesnimi Perekonnanimi
Mike Willis
Ellen Horton
Ellen Horton

Hästi! Kuid nimesid korratakse (need pole ainulaadsed). Parandame selle varsti.

5. Liitmine

Jämedalt öeldes, liitmikke on vaja mitme rea muutmiseks üheks... Samal ajal kasutatakse koondamise ajal erinevate veergude jaoks erinevat loogikat.


Jätkame oma näitega, kus ilmuvad duplikaatnimed. On näha, et Ellen Horton laenas rohkem kui ühe raamatu, kuid see pole parim viis selle teabe näitamiseks. Teise taotluse saab esitada:


VALI liikmed.nimi AS "Eesnimi", liikmed.perekonnanimi AS "Perekonnanimi", loendage (*) AS "Laenutatud raamatute arv" LAENUTUSTEST ÜHENDUGE raamatutega laenutusest.bookid = raamatud.bookid LIIGU liikmetega ON liige.liikmed = laenud .memberid WHERE raamatud.autor = "Dan Brown" RÜHM BY liikmete järgi.nimi, liikmed.perekonnanimi;

Mis annab meile soovitud tulemuse:


Eesnimi Perekonnanimi Laenutatud raamatute arv
Mike Willis 1
Ellen Horton 2

Peaaegu kõik agregaadid on varustatud klausliga GROUP BY. See asi muudab tabeli, mille päring võib alla laadida, tabelirühmadeks. Iga rühm vastab unikaalsele väärtusele (või väärtuste rühmale) veerus, mille määrasime grupis GROUP BY. Meie näites teisendame eelmise harjutuse tulemuse rearühmaks. Teeme ka agregeerimise koos loendusega, mis teisendab mitu rida täisarvuliseks väärtuseks (meie puhul on see ridade arv). Seejärel määratakse see väärtus igale rühmale.


Tulemuse iga rida on iga rühma liitmise tulemus.



Võite jõuda loogilisele järeldusele, et kõik tulemi väljad tuleks kas määrata grupis GROUP BY või teha nende jaoks liitmine. Kuna kõik muud väljad võivad erinevates ridades üksteisest erineda ja kui valite need nupuga SELECT, pole selge, milline võimalikest väärtustest tuleks võtta.


Ülaltoodud näites töötles loendamisfunktsioon kõiki ridu (kuna loendasime ridade arvu). Muud funktsioonid, nagu summa või max, töötlevad ainult määratud stringe. Näiteks kui tahame teada saada iga autori kirjutatud raamatute arvu, vajame sellist päringut:


VALI autor, summa (laos) raamatutest RÜHMITA autori järgi;

Tulemus:


autor summa
Robin sharma 4
Dan pruun 6
John roheline 3
Amishi tripathi 2

Siin töötleb summafunktsioon ainult laovarusid ja arvutab iga rühma kõigi väärtuste summa.

6. Alampäringud


Alampäringud on tavalised SQL -päringud, mis on manustatud suurematesse päringutesse. Need on jagatud kolmeks tüübiks vastavalt tagastatud tulemuse tüübile.

6.1 Kahemõõtmeline tabel

On päringuid, mis tagastavad mitu veergu. Hea näide on päring viimasest koondamisharjutusest. Alampäringuna tagastab see lihtsalt teise tabeli, mille kohta saab uusi päringuid teha. Jätkates eelmist harjutust, kui tahame teada saada "Robin Sharma" autori kirjutatud raamatute arvu, siis on üks võimalikest viisidest kasutada alampäringuid:


SELECT * FROM (SELECT autor, summa (stock) raamatutest GROUP BY author) AS results WHERE autor = "Robin Sharma";

Tulemus:



Võib kirjutada järgmiselt: ["Robin Sharma", "Dan Brown"]


2. Nüüd kasutame seda tulemust uues päringus:


SELECT pealkiri, bookid FROM raamatud WHERE autor IN (SELECT author FROM (SELECT author, summa (stock) FROM raamatud GROUP by Autor) AS results WHERE summa> 3);

Tulemus:


tiitel raamatuline
Kadunud sümbol 2
Kes nutab, kui sa sured? 3
Inferno 4

See on sama mis:


SELECT title, bookid FROM raamatud WHERE autor IN ("Robin Sharma", "Dan Brown");

6.3 Individuaalsed väärtused

On päringuid, mille tulemuseks on vaid üks rida ja üks veerg. Neid saab käsitleda püsiväärtustena ja neid saab kasutada kõikjal, kus väärtusi kasutatakse, näiteks võrdlusoperaatorites. Neid saab kasutada ka kahemõõtmeliste tabelite või üheelemendiliste massiividena.


Võtame näiteks teavet kõigi raamatukogus olevate raamatute kohta, mille arv on hetkel üle keskmise.


Keskmist saab saada järgmiselt:


vali raamatutest keskm.

Mis annab meile:


7. Kirjutage toiminguid

Enamik andmebaasi kirjutisi on keerukamate lugemistega võrreldes üsna lihtne.

7.1 Värskendus

UPDATE päringu süntaks on semantiliselt sama mis lugemispäringu puhul. Ainus erinevus on see, et veergude SELECT valimise asemel määrame SET väärtused.


Kui kõik Dan Browni raamatud on kadunud, peate koguse väärtuse lähtestama. Taotlus selle kohta oleks järgmine:


UPDATE raamatud SET stock = 0 WHERE autor = "Dan Brown";

WHERE teeb sama nagu varem: valib read. Lugemisel kasutatud SELECTi asemel kasutame nüüd SET. Kuid nüüd peate valitud ridades määrama mitte ainult veeru nime, vaid ka selle veeru uue väärtuse.


7.2 Kustuta

DELETE päring on lihtsalt SELECT või UPDATE päring ilma veerunimedeta. Tõsiselt. Nagu SELECT ja UPDATE puhul, jääb klausel WHERE samaks: see valib kustutatavad read. Kustutamistoiming hävitab kogu rea, seega pole mõtet eraldi veerge määrata. Seega, kui me otsustame Dan Browni raamatute arvu mitte lähtestada, vaid kõik kirjed täielikult kustutada, saame esitada järgmise taotluse:


KUSTUTA raamatutest, kus autor = "Dan Brown";

7.3 Sisesta

Võib -olla ainus asi, mis erineb teist tüüpi päringutest, on INSERT. Vorming on järgmine:


INSERT INTO x (a, b, c) VÄÄRTUSED (x, y, z);

Kus a, b, c on veergude nimed ning x, y ja z on nendesse veergudesse lisatavad väärtused samas järjekorras. See on põhimõtteliselt kõik.


Vaatame konkreetset näidet. Siin on INSERT päring, mis täidab kogu tabeli "raamatud":


INSERT INTO books Dan Brown "," 22.07.2010 ", 3), (3," Kes nutab, kui sa sured? "," Robin Sharma "," 15.06.2006 ", 4), (4," Inferno ") , "Dan Brown", "05.05.2014", 3), (5, "Viga meie tähtedes", "John Green", "01.03.2015", 3);

8. Kontrollimine

Oleme lõppenud, pakun välja väikese testi. Vaadake seda taotlust artikli alguses. Kas saate sellest aru? Proovige see jaotada klausliteks SELECT, FROM, WHERE, GROUP BY ja kaaluge alampäringute üksikuid komponente.


Siin on see loetavamal kujul:


SELECT liikmed.nimi || "" || liikmed.perekonnanimi AS "Täisnimi" FROM laenud INNER JOIN liikmed ON members.memberid = laenud.memberid INNER JOIN raamatud ON books.bookid = laenud.bookid WHERE laenud.bookid IN (SELECT bookid FROM raamatutest WHERE laos> (SELECT keskm. (stock ) Raamatutest)) RÜHM BY liikmete järgi.nimi, liikmed.perekonnanimi;

See päring tagastab loendi inimestest, kes on raamatukogust välja vaadanud raamatu, mille kogusumma on üle keskmise.


Tulemus:


Täisnimi
Lida tyler

Loodan, et teil õnnestus see probleemideta välja mõelda. Aga kui ei, siis oleksin tänulik teie kommentaaride ja tagasiside eest, et saaksin seda postitust täiustada.