Kjo shtojcë përmban një përshkrim më konciz të komandave të ndryshme SQL. Qëllimi është t'ju japim një referencë dhe përkufizim të shpejtë dhe të saktë të SQL. Seksioni i parë i kësaj shtojce përcakton elementët e përdorur për të krijuar komanda SQL; së dyti, detaje sintaksore dhe fjali me një përshkrim të shkurtër të vetë komandave. Më poshtë janë konventat standarde (të quajtura terma BNF):
Përveç kësaj, ne do të përdorim sekuencën e mëposhtme (., ..) për të treguar se ajo e mëparshme mund të përsëritet çdo numër herë, me ngjarje individuale të ndara me presje. Atributet që nuk janë pjesë e standardit zyrtar do të shënohen si (* jo standarde *) në përshkrim.
JU LUTEM KUJDES: Terminologjia që përdorim këtu nuk është terminologji zyrtare ANSI. Terminologjia zyrtare mund të jetë shumë konfuze, ndaj e kemi thjeshtuar pak.
Për këtë arsye, ne ndonjëherë përdorim terma të ndryshëm nga ANSI, ose përdorim të njëjtat terma në një mënyrë paksa të ndryshme. Për shembull, përkufizimi ynë është -< predicate >ndryshon nga kombinimi i përkufizimit standard ANSI< predicate >Me< search condition >.
SQL ELEMENTET
Ky seksion përcakton elementet e komandave SQL. Ato ndahen në dy kategori: Elementet bazë të gjuhës, dhe Elementet funksionale të gjuhës.
Elementet thelbësore- këto janë blloqet e gjuhës që do të krijohen; kur SQL ekzaminon një komandë, së pari vlerëson çdo karakter në tekstin e komandës për sa i përket atyre elementeve. Ndarësit< separator >ndani një pjesë të ekipit nga një tjetër; çdo gjë ndërmjet kufijve< separator >trajtohet si modul. Bazuar në këtë ndarje, SQL interpreton komandën.
Elementet funksionale janë gjëra të ndryshme përveç fjalëve kyçe që mund të interpretohen si module. Këto janë pjesët e komandës, të ndara me ndarës.< separator >që kanë kuptim të veçantë në SQL. Disa prej tyre janë specifike për komanda të caktuara dhe do të përshkruhen me këto komanda më vonë në këtë shtojcë. Këtu janë renditur elementë të zakonshëm për të gjitha komandat e përshkruara. Artikujt mund të përcaktohen në terma të njëri-tjetrit, apo edhe në termat e tyre. Për shembull, kallëzuesi< predicate >, rasti ynë i fundit dhe më i vështirë, përmban një kallëzues brenda përkufizimit të vet. Kjo për shkak se kallëzuesi< predicate >përdorimi i DHE ose OSE mund të përmbajë çdo numër kallëzuesish< predicate >të cilat mund të punojnë në mënyrë autonome. Ju kemi paraqitur kallëzuesin< predicate >në një pjesë të veçantë në këtë shtojcë, për shkak të shumëllojshmërisë dhe kompleksitetit të këtij elementi funksional të gjuhës. Ai do të jetë vazhdimisht i pranishëm kur diskuton pjesë të tjera funksionale të komandave.
ELEMENTET E GJUHËS BAZË
PËRKUFIZIMI I SENDIT< separator > < comment > | < space > | < newline > < comment > --< string > < newline > < space >hapësirë< newline >fundi i përcaktuar nga zbatimi i një vargu karakteresh< identifier > < letter >[{< letter or digit > | < underscore}... ] < ИМЕЙТЕ ВВИДУ: Следу строгому стандарту ANSI, символы должны быть набраны в верхнем регистра, а идентификатор < identifier >nuk duhet të jetë më i gjatë se 18 karaktere. PËRKUFIZIMI I SENDIT< underscore > - < percent sign > % < delimiter >ndonjë nga sa vijon:, ()< > . : = + " - | <> > = < = или < string > < string >[çdo tekst i printueshëm në thonjëza të vetme] Shënim: Në< string >, dy thonjëza të njëpasnjëshme të vetme ("") interpretohen si një (").< SQL term >mbaresa në varësi të gjuhës kryesore. (* vetëm me fole *)
ELEMENTET FUNKSIONALE
Tabela e mëposhtme tregon elementet funksionale të komandave SQL dhe përkufizimet e tyre: PËRKUFIZIMI I ITEM< query >Klauzola SELECT< subquery >Një klauzolë SELECT e mbyllur në kllapa brenda një klauzole tjetër, e cila, në fakt, vlerësohet veçmas për çdo rresht kandidat të klauzolës tjetër.< value expression > < primary > | < primary > < operator > < primary > | < primary > < operator > < value expression > < operator >ndonjë nga sa vijon: + - / *< primary > < column name > | < literal > | < aggregate function > | < built-in constant > | < nonstandard function > < literal > < string > | < mathematical expressio ЭЛЕМЕНТ ОПРЕДЕЛЕНИЕ < built-in constant >PËRDORIMI |< implementation-dehned constant > < table name > < identifier > < column spec > [< table name > | < alias >.]< column name > < grouping column > < column spec > | < integer > < ordering column > < column spec > | < integer > < colconstraint >JO NULL | UNIKE | KONTROLLO (< predicate >) | ÇELËSI PRIMAR | REFERENCAT< table name >[(< column name >)] < tabconstraint >UNIK (< column list >) | KONTROLLO (< predicate >) | ÇELESI PRIMAR (< column list >) | ÇELËSI I HUAJ (< column list >) REFERENCAT< table name >[(< column list >)] < defvalue >VLERA E PARAKTUAR =< value expression > < data type >Lloji i vlefshëm i të dhënave (Shih Shtojcën B për përshkrimet e llojeve të ofruara nga ANSI ose Shtojcën C për lloje të tjera gjenerike.)< size >Vlera varet nga< data type >(Shih Shtojcën B.)< cursor name > < identifier > < index name > < identifier > < synonym > < identifier >(* jostandarde *)< owner > < Authorization ID > < column list > < column spec > .,.. < value list > < value expression > .,.. < table reference > { < table name > [< alias >] } .,..PREDIKATET
Më poshtë përcakton një listë të llojeve të ndryshme të kallëzuesit< predicate >përshkruar në faqet e mëposhtme:
< predicate > ::=
{ < comparison predicate > | < in predicate > | < null predicate > | < between predicate > | < like predicate > | < quantified predicate > | < exists predicate > } < predicate >është një shprehje që mund të jetë e vërtetë, e rreme ose e panjohur, përveç< exists predicate >dhe< null predicate >që mund të jetë vetëm e vërtetë ose e rreme.
Nuk do të dihet nëse vlerat NULL parandalojnë daljen e përgjigjes së kthyer. Kjo do të ndodhë sa herë që një vlerë NULL krahasohet me ndonjë vlerë. Operatorët standardë Boolean AND, OR, dhe NOT mund të përdoren me një kallëzues. JO e vërtetë = e rreme, JO e rreme = e vërtetë dhe JO e panjohur = e panjohur. Rezultatet e DHE dhe OR në kombinim me kallëzues janë paraqitur në tabelat e mëposhtme:
DHE DHE E vërtetë E gabuar E panjohur E vërtetë E vërtetë E gabuar E panjohur E vërtetë E gabuar E panjohur E gabuar E panjohur E panjohur e panjohur e panjohur OSE E vërtetë e gabuar E panjohur E vërtetë e vërtetë e vërtetë E vërtetë e gabuar e vërtetë e pasaktë e panjohur e panjohur e vërtetë e panjohur e panjohur e panjohur
Këto tabela lexohen në një mënyrë të ngjashme me një tabelë shumëzimi: ju bashkoni vlerat e vërteta, të pasakta ose të panjohura nga rreshtat me kolonat e tyre për të marrë rezultatin në vijën e tërthortë. Në një tabelë AND, për shembull, kolona e tretë (E panjohur) dhe rreshti i parë (E vërtetë) në kryqëzimin në këndin e sipërm djathtas japin rezultatin - të panjohur, me fjalë të tjera: E vërtetë DHE e panjohur = e panjohur. Rendi i llogaritjeve specifikohet në kllapa. Ata nuk prezantohen çdo herë. NUK vlerësohet së pari, e ndjekur nga DHE dhe OSE. Lloje të ndryshme kallëzuesish< predicate >diskutohen veçmas në pjesën tjetër.
< comparison predicate >(kallëzues krahasues)
Sintaksë
< value expresslon > < relational op > < value expresslon >
|
< subquery >
< relatlonal op > :: =
=
| <
|
>
| <
| >=
| < >
Nëse ose< value expression >= NULL, ose< comparison predicate
>= i panjohur; me fjalë të tjera, është e vërtetë nëse krahasimi është i vërtetë ose i gabuar nëse krahasimi është i rremë.
< relational op >ka kuptime standarde matematikore për vlerat numerike; për llojet e tjera të vlerave, këto vlera janë specifike për zbatimin.
te dyja< value expression >duhet të ketë lloje të krahasueshme të dhënash. Nëse nënpyetja< subquery >përdoret, duhet të përmbajë një shprehje< value expression >në klauzolën SELECT vlera e së cilës do të zëvendësojë shprehjen e dytë< value
expression >në kallëzuesin krahasues< comparision predicate >, çdo herë kur< subquery >me të vërtetë është përmbushur.
< between predicate >
Sintaksë
< value expression >NDËRMJET< value expression >
DHE< value expression >
< between predicate >- A MES B DHE C, ka të njëjtin kuptim si< predicate >- (A> = B DHE< = C). < between predicate >për të cilat A NOT BETWEEN B DHE C ka të njëjtin kuptim si NOT (MIJS B DHE C).< value expression >mund të dalë duke përdorur një pyetje jo standarde< subquery >(* jostandarde *).
< in prediicate >
Sintaksë
< value expression >NË< value list > | < subquery
>
Lista e vlerave< value list >do të përbëhet nga një ose më shumë nga vlerat e listuara në kllapa dhe të ndara me presje që janë të krahasueshme me< value expression >lloji i të dhënave. Nëse përdoret një nënpyetje< subquery >, duhet të përmbajë vetëm një shprehje< value expression >në klauzolën SELECT (ndoshta më shumë, por kjo do të jetë jashtë standardit ANSI). Nënpyetje< subquery >në fakt, ai ekzekutohet veçmas për secilën rresht kandidat të pyetjes kryesore dhe vlerat që nxjerr do të formojnë një listë vlerash< value list >për këtë linjë. Në çdo rast, kallëzuesi< in predicate >do të jetë e vërtetë nëse shprehja< value expression >të përfaqësuar në një listë vlerash< value list >nëse NUK është specifikuar. Fraza A NOT IN (B, C) është ekuivalente me togfjalëshin NOT (A IN (B, C)).
< like predicate >
Sintaksë
< charvalue >LIKE< pattern >
< charvalue >është çdo shprehje * jo standarde *< value expression >lloji alfanumerik.< charvalue >ndoshta, sipas standardit, vetëm një kolonë specifike< column spec >... Mostra< pattern >përbëhet nga një varg që do të kontrollohet< charvalue >... Simboli i përfundimit< escapechar >është një karakter i vetëm alfanumerik. Një përputhje do të ndodhë nëse kushtet e mëposhtme janë të vërteta:
Nëse ndodh një ndeshje,< like predicate >- e vërtetë nëse JO nuk është specifikuar. Fraza NOT LIKE "tekst" është e barabartë me NOT (A LIKE "tekst").
< null predicate >
Sintaksë
< column spec >ËSHTË NULL
< column spec >= ËSHTË NULL nëse një vlerë NULL është e pranishme në këtë kolonë. Kjo do të bëjë< null predicate >e vlefshme nëse nuk është specifikuar NULL. Frazë< column spec >NUK ËSHTË NULL, ka të njëjtin efekt si NUK (< column spec >ËSHTË NULL).
< quantified predicate >
Sintaksë
< value expression > < relational op >
< quantifier >
< subquery >
< quantifier >:: = NDONJË | ALL | DISA
SELECT klauzolë të një nënpyetjeje< subquery >duhet të përmbajë një dhe vetëm një shprehje me vlerë< value expression >... Të gjitha vlerat janë kthyer nga nënpyetje< subquery >përpiloni një grup rezultatesh< result set >. < value expression >krahasuar duke përdorur transportuesin< relational operator >, me secilin anëtar të grupit të rezultateve< result set >... Ky krahasim vlerësohet si më poshtë:
< exists predicate >
Sintaksë:
EKZISTON (< subquery >)
Nëse nënpyetja< subquery >printon një ose më shumë rreshta të prodhimit,< exists predicate >- eshte e sakte; dhe është e pasaktë nëse është ndryshe.
KOMANDA SQL
Ky seksion detajon sintaksën e komandave të ndryshme SQL. Kjo do t'ju japë mundësinë për të kërkuar shpejt një komandë, për të gjetur sintaksën e saj dhe një përshkrim të shkurtër se si funksionon.
BE INSIGHT Komandat që fillojnë me fjalë - EXEC SQL, dhe komandat ose fjalitë që përfundojnë me një fjalë - mund të përdoren vetëm në SQL të mbivendosur.
FILLO SEKSIONIN E DEKLARAVE
Sintaksë
EXEC SQL FILLO SEKSIONI DEKLAROJ< SQL term > < host-language variable declarations >EXEC SQL FUND SEKSIONI I DEKLARAVE< SQL term >
Kjo komandë krijon një seksion të programit të gjuhës kryesore për të deklaruar variablat kryesore në të, të cilat do të përdoren në deklaratat e mbivendosura SQL. Ndryshorja SQLCODE duhet të përfshihet si një nga variablat e deklaruar të gjuhës pritës.
MBYLL KURSORIN
Sintaksë
EXEC SQL CLOSE KURSOR< cursor name > < SQL term >;
Kjo komandë i thotë kursorit të mbyllet, pas së cilës nuk mund të zgjidhet asnjë vlerë prej tij derisa të rihapet.
ANGOSHUNI (PUNË)
Sintaksë
Kjo komandë lë të pandryshuara të gjitha ndryshimet e bëra në bazën e të dhënave derisa transaksioni i filluar të përfundojë dhe të fillojë një transaksion i ri.
KRIJONI INDEKS
(* JO STANDARD *) (JO STANDARD)
Sintaksë
KRIJONI INDEKS< Index name >
AKTIV< table name > (<
column list >);
Kjo komandë krijon një rrugë efikase të aksesit të shpejtë për gjetjen e rreshtave që përmbajnë kolonat e përcaktuara. Nëse specifikohet UNIQUE, tabela nuk mund të përmbajë dublikatë (binjake) vlerash në këto kolona.
KRIJO SINONIM (* JO STANDARD *)
(KRIJO SINONIM) (* JO STANDARD *)
Sintaksë
KRIJO SINONIM IPUBLICl< synonym >PËR
< owner >.< table
name >;
Kjo komandë krijon një alternativë (sinonim) ndaj tyre për tabelën. Sinonimi i përket krijuesit të tij, dhe vetë tabela, zakonisht një përdoruesi tjetër. Duke përdorur një sinonim, pronari i saj nuk duhet t'i referohet tabelës me emrin e plotë (përfshirë pronarin). Nëse specifikohet PUBLIC, sinonimi i përket drejtorisë SYSTEM dhe për këtë arsye është i disponueshëm për të gjithë përdoruesit.
KRIJONI TABELA
Sintaksë
KRIJONI TABELA< table name >
({< column name > < data type
>[< size >]
[< colconstralnt > . . .]
[< defvalue
>]} . , . . < tabconstraint > . , . .);
Komanda krijon një tabelë në bazën e të dhënave. Kjo tabelë do të jetë në pronësi të krijuesit të saj. Kolonat do të konsiderohen në një renditje sipas emrit.< data type
>- përcakton llojin e të dhënave që do të përmbajë kolona. Standard< data
type >përshkruar në Shtojcën B; të gjitha llojet e tjera të të dhënave të përdorura< data type >diskutuar në Shtojcën C. Vlera e madhësisë< size >varet nga lloji i të dhënave< data type
>.
< colconstraint >dhe< tabconstraint >vendos kufizime në vlerat që mund të futen në një kolonë.
< defvalue >përcakton vlerën (e parazgjedhur) që do të futet automatikisht nëse nuk specifikohet asnjë vlerë tjetër për këtë rresht. (Shih Kapitullin 17 për detaje mbi vetë komandën CREATE TABLE dhe Kapitullin 18 DHE për detaje mbi kufizimet dhe< defvalue >).
KRIJO PAMJE
Sintaksë
KRIJO PAMJE< table name >
AS< query >
;
Skanimi trajtohet si çdo tabelë në komandat SQL. Kur një komandë i referohet një emri tabele< table name >, hetim< query >ekzekutohet dhe dalja e saj përputhet me përmbajtjen e tabelës së specifikuar në këtë komandë.
Disa pamje mund të modifikohen, që do të thotë se komandat e modifikimit mund të ekzekutohen në këto pamje dhe t'i kalohen tabelës që është referuar në pyetje< query >... Nëse specifikohet OPTION ME KONTROLLI, ky modifikim duhet të plotësojë gjithashtu kushtin e kallëzuesit< predicate >në kërkesë< query >.
DEKLARONI KURSORIN
Sintaksë
EXEC SQL DEKLAROJ< cursor name >KURSOR PËR
< query >< SQL
term >
Kjo komandë i lidh ato me kursorin< cursor name >, me kërkesën< query >... Kur kursori është i hapur (shih HAPUR KURSORIN), pyetja< query >ekzekutohet dhe rezultati i tij mund të zgjidhet (me komandën FETCH) për dalje. Nëse kursori është i modifikueshëm, tabela referohet nga pyetësori< query >, mund të marrë një ndryshim të përmbajtjes duke përdorur një operacion modifikimi në kursor (Shih Kapitullin 25 për kursorët e modifikueshëm).
FSHIJE
Sintaksë
FSHIJE NGA< table name >
{ ; }
| KU AKTUALE E< cursorname >< SQL term >
Nëse nuk ka klauzolë WHERE, TË GJITHA rreshtat në tabelë fshihen. Nëse fjalia WHERE përdor kallëzuesin< predicate >, rreshta që plotësojnë kushtin e këtij kallëzuesi< predicate >hequr. Nëse klauzola WHERE ka AKTUALE E argumentit në emrin e kursorit< cursor name >, rresht nga tabela< table name >e cila aktualisht referohet duke përdorur emrin e kursorit< cursor name >do të fshihet. Formulari WHERE CURRENT mund të përdoret vetëm në SQL të mbivendosur dhe vetëm me kursorë të modifikueshëm.
EXEC SQL
Sintaksë
EXEC SQL< embedded SQL command > < SQL term >
EXEC SQL përdoret për të treguar fillimin e të gjitha komandave SQL të vendosura në një gjuhë tjetër.
MARRE
Sintaksë
EXEC SQL FETCH< cursorname >
NË< host-varlable llst ><
SQL term >
FETCH merr dalje nga vargu aktual i pyetjes< query >, e fut atë në listën e variablave kryesore< host-variable list >, dhe zhvendos kursorin në rreshtin tjetër. Listë< host-variable list >mund të përfshijë treguesin e ndryshores si një variabël objektiv (Shih Kapitullin 25.)
GRANT
Sintaksa (standarde)
GRANTO TË GJITHA
| (ZGJIDH
| INSERT
| FSHIJE
| PËRDITËSO [(< column llst >)]
| REFERENCAT [(< column llst >) l). ,. ...
AKTIV< table name > . , . .
NË PUBLIK |< Authorization ID > .
, . .
;
Argumenti ALL, me ose pa PRIVILEGJET, përfshin çdo privilegj në listën e privilegjeve. PUBLIC përfshin të gjithë përdoruesit ekzistues dhe të gjithë përdoruesit e ardhshëm. Kjo komandë bën të mundur transferimin e të drejtave për të kryer veprime në tabelë me emrin e specifikuar. REFERENCAT ju lejon të jepni të drejta për të përdorur kolonat në listën e kolonave< column list >si çelës prind për çelësin e huaj. Privilegjet e tjera përbëhen nga e drejta për të ekzekutuar komandat për të cilat privilegjet tregohen me emrat e tyre në tabelë. UPDATE është i ngjashëm me REFERENCAT dhe mund të zbatojë kufizime në kolona specifike. GRANT OPTION ju lejon t'i transferoni këto privilegje te përdoruesit e tjerë.
Sintaksë (jo standarde)
GRANT DBA
| BURIM
| LIDHUR ....
TE< Authorization ID
> . , . .
| < privilege > . , . . }
NGA (PUBLIKE
| < Authorization ID > . , . . };
Privilegj< privelege >mund të jetë ndonjë nga ato të specifikuara në komandën GRANT. Përdoruesi që jep REVOKE duhet të ketë të njëjtat privilegje si përdoruesi që ka dhënë GRANT. Klauzola ON mund të përdoret nëse përdoret një privilegj i tipit të veçantë për një objekt specifik.
KTHIMI (PUNË)
(RIKTHIM) (TRANSAKSIONET)
Sintaksë
Komanda anulon të gjitha ndryshimet e bëra në bazën e të dhënave gjatë transaksionit aktual. Ai gjithashtu përfundon atë aktual dhe fillon një transaksion të ri.
ZGJIDH
Sintaksë
SELECT (IDISTINCT | TË GJITHA]< value expression > . , . . } / *
NGA< table reference
> . , . .
. , . . ];
Kjo klauzolë organizon pyetjen dhe nxjerr vlerat nga baza e të dhënave (shih Kapitullin 3 - Kapitulli 14). Zbatohen rregullat e mëposhtme:
Klauzola SELECT vlerëson çdo rresht kandidat të një tabele në të cilën rreshtat shfaqen në mënyrë të pavarur. Vargu i kandidatit përcaktohet si më poshtë:
Çdo rresht kandidat prodhon vlera që bëjnë kallëzuesin<
predicate >në fjalinë WHERE e vërtetë, e pasaktë ose e panjohur. Nëse GROUP BY nuk përdoret, secili< value expression >aplikohet me radhë për çdo varg kandidat vlera e të cilit e bën kallëzuesin të vlefshëm dhe rezultati i këtij operacioni është dalja.
Nëse përdoret GROUP BY, rreshtat kandidatë kombinohen duke përdorur funksionet agregate. Nëse nuk ka kallëzues<
predicate >jo i vendosur, çdo shprehje< value expression >zbatohet për çdo linjë ose grup kandidat. Nëse specifikohet DISTINCT, linjat e kopjuara do të hiqen nga dalja.
UNION
Sintaksë
< query >(UNION< query > } . . . ;
Duke shfaqur dy ose më shumë pyetje< query >do të bashkohen. Çdo kërkesë< query >duhet të përmbajë të njëjtin numër< value expression >në klauzolën SELECT dhe në mënyrë të tillë që 1 .. n nga secila, lloji i të dhënave të përputhet< data type >dhe madhësisë< size >me 1 .. n gjithë të tjerët.
PËRDITËSOJE
Sintaksë
PËRDITËSOJE< table name >
SET (< column name > = < value
expression > } . , . .
([KU< predlcate >]; }
| {
< SQL term >]}
UPDATE ndryshon vlerat në secilën kolonë të emërtuar< column name >me vlerën përkatëse< value expression >... Nëse fjalia WHERE përdor kallëzuesin< predicate >, pastaj vetëm rreshtat e tabelës, vlerat aktuale të të cilave e bëjnë atë kallëzues< predicate >e saktë, mund të ndryshojë. Nëse WHERE përdor klauzolën CURRENT OF, atëherë vlerat në rreshtin e tabelës me emrin< table name >ndodhet në kursorin me emrin< cursor name >ndryshim. WHERE CURRENT OF është i përdorshëm vetëm në SQL të mbivendosur dhe vetëm me kursorë të modifikueshëm. Nëse nuk ka klauzolë WHERE, të gjitha rreshtat ndryshohen.
kurdoherë
Sintaksë
EXEC SQL kurdoherë< SQLcond > < actlon > < SQL term
>
< SQLcond >:: = SQLERROR | NUK GJETUR | PARALAJMËRIM SQL
(kjo e fundit është jo standarde)
< action >:: = VAZHDIM | SHKO< target >| SHKO< target >
< target >:: = varet nga gjuha kryesore
Secili prej nesh has dhe përdor rregullisht baza të të dhënave të ndryshme. Kur zgjedhim një adresë emaili, ne jemi duke punuar me një bazë të dhënash. Bazat e të dhënave përdorin motorë kërkimi, banka për të ruajtur të dhënat e klientëve, etj.
Por, megjithë përdorimin e vazhdueshëm të bazave të të dhënave, edhe për shumë zhvillues të sistemeve softuerike ka shumë "pika boshe" për shkak të interpretimeve të ndryshme të të njëjtave terma. Ne do të japim një përkufizim të shkurtër të termave bazë të bazës së të dhënave përpara se të shikojmë gjuhën SQL. Kështu që.
Baza e të dhënave - një skedar ose grup skedarësh për ruajtjen e strukturave të renditura të të dhënave dhe marrëdhëniet e tyre. Shumë shpesh një sistem kontrolli quhet një bazë të dhënash - është vetëm një ruajtje e informacionit në një format të caktuar dhe mund të funksionojë me DBMS të ndryshme.
tabela - Imagjinoni një dosje që ruan dokumente të grupuara sipas një kriteri të caktuar, për shembull, një listë porosish për muajin e fundit. Kjo është tabela në kompjuter.Një tabelë e veçantë ka emrin e saj unik.
Lloji i të dhënave - lloji i informacionit që lejohet të ruhet në një kolonë ose rresht të veçantë. Këto mund të jenë numra ose tekst në një format specifik.
Kolona dhe rreshti- të gjithë kemi punuar me spreadsheets, të cilat gjithashtu kanë rreshta dhe kolona. Çdo bazë e të dhënave relacionale punon me tabela në një mënyrë të ngjashme. Linjat nganjëherë quhen rekorde.
Çelesi primar- çdo rresht i tabelës mund të ketë një ose më shumë kolona për identifikimin e tij unik. Pa një çelës primar, është shumë e vështirë të përditësosh, modifikosh dhe fshish rreshtat e kërkuar.
Çfarë është SQL?
SQL(Anglisht - gjuhë e strukturuar e pyetjeve) u zhvillua vetëm për të punuar me bazat e të dhënave dhe aktualisht është standardi për të gjitha DBMS-të e njohura. Sintaksa e gjuhës përbëhet nga një numër i vogël operatorësh dhe është i lehtë për t'u mësuar. Por, megjithë thjeshtësinë e jashtme, ai lejon krijimin e pyetjeve sql për operacione komplekse me një bazë të dhënash të çdo madhësie.
Që nga viti 1992, ekziston një standard i pranuar përgjithësisht i quajtur ANSI SQL. Ai përcakton sintaksën bazë dhe funksionet e operatorëve dhe mbështetet nga të gjithë liderët e tregut DBMS, si ORACLE. Është e pamundur të merren parasysh të gjitha tiparet e gjuhës në një artikull të vogël, kështu që do të shqyrtojmë shkurtimisht vetëm SQL-në bazë. pyetje. Shembujt tregojnë qartë thjeshtësinë dhe aftësitë e gjuhës:
- krijimi i bazave të të dhënave dhe tabelave;
- marrjen e të dhënave;
- shtimi i të dhënave;
- modifikimin dhe fshirjen e informacionit.
Llojet e të dhënave SQL
Të gjitha kolonat në një tabelë të bazës së të dhënave ruajnë të njëjtin lloj të dhënash. Llojet e të dhënave në SQL janë të njëjta si në gjuhët e tjera të programimit.
Krijoni tabela dhe baza të të dhënave
Ekzistojnë dy mënyra për të krijuar baza të dhënash të reja, tabela dhe pyetje të tjera në SQL:
- Deklaratat SQL nëpërmjet konsolës DBMS
- Përdorimi i mjeteve të administrimit në internet të përfshirë me serverin e bazës së të dhënave.
Një bazë e re e të dhënave krijohet nga operatori KRIJON BAZA E TË DHËNAVE<наименование базы данных>; ... Siç mund ta shihni, sintaksa është e thjeshtë dhe koncize.
Ne krijojmë tabela brenda bazës së të dhënave me deklaratën CREATE TABLE me parametrat e mëposhtëm:
- emri i tabelës
- emrat e kolonave dhe llojet e të dhënave
Si shembull, le të krijojmë një tabelë Mallrash me kolonat e mëposhtme:
Ne krijojmë një tabelë:
KRIJO TABELA Mall
(id_i_mallrave CHAR (15) JO NULL,
shitës_id CHAR (15) JO NULL,
emri i mallit CHAR (254) NULL,
mall_çmimi DECIMAL (8,2) NULL,
commodity_desc VARCHAR (1000) NULL);
Tabela ka pesë kolona. Emri ndiqet nga lloji i të dhënave, kolonat ndahen me presje. Vlera e kolonës mund të jetë null (NULL) ose duhet të plotësohet (NOT NULL), dhe kjo përcaktohet kur krijohet tabela.
Marrja e të dhënave nga një tabelë
Operatori i përzgjedhjes së të dhënave është pyetësi SQL më i përdorur. Për të marrë informacion, është e nevojshme të tregojmë se çfarë duam të zgjedhim nga një tabelë e tillë. Le të fillojmë me një shembull të thjeshtë:
ZGJIDHni emrin e mallit NGA Mall
Pas deklaratës SELECT, ne specifikojmë emrin e kolonës për të marrë informacionin dhe FROM përcakton tabelën.
Rezultati i ekzekutimit të pyetjes do të jenë të gjitha rreshtat e tabelës me vlerat e emrit të mallrave në rendin në të cilin janë futur në bazën e të dhënave, d.m.th. pa asnjë renditje. Një klauzolë shtesë ORDER BY përdoret për të renditur rezultatin.
Për një pyetje në disa fusha, ne i rendisim ato të ndara me presje, si në shembullin e mëposhtëm:
ZGJIDH ID_në e mallit, emri_mall, çmimi_mall NGA malli
Është e mundur të merret vlera e të gjitha kolonave të një rreshti si rezultat i një pyetjeje. Për ta bërë këtë, përdorni shenjën "*":
ZGJIDH * NGA Mallrat
- Për më tepër, SELECT mbështet:
- Renditja e të dhënave (ORDER SIPAS operatorit)
- Përzgjedhja sipas kushteve (KU)
- Termi i grupimit (GROUP BY)
Shtoni rreshtin
Për të shtuar një rresht në tabelë, përdoren pyetjet SQL me deklaratën INSERT. Shtimi mund të bëhet në tre mënyra:
- shtoni një linjë të re të tërë;
- pjesë e një vargu;
- rezultatet e pyetjes.
Për të shtuar një rresht të plotë, duhet të specifikoni emrin e tabelës dhe vlerat e kolonave (fushave) të rreshtit të ri. Le të japim një shembull:
INSERT NË VLERAT E Mallrave ("106", "50", "Coca-Cola", "1.68", "Pa Alkogol,)
Shembulli shton një produkt të ri në tabelë. Vlerat përcaktohen pas VALUES për secilën kolonë. Nëse nuk ka vlerë përkatëse për kolonën, atëherë duhet të specifikohet NULL. Kolonat janë të mbushura me vlera në rendin e specifikuar kur është krijuar tabela.
Nëse shtoni vetëm një pjesë të një rreshti, duhet të specifikoni në mënyrë eksplicite emrat e kolonave, si në shembullin:
INSERT INTO Commodity (id_i_mallrit, shitësi_id, emri_mallrit)
VLERAT ("106", '50 "," Coca-Cola ",)
Ne kemi futur vetëm identifikuesit e produktit, furnizuesin dhe emrin e tij, dhe pjesa tjetër e fushave i kemi lënë bosh.
Shtimi i rezultateve të pyetjeve
INSERT përdoret kryesisht për të shtuar rreshta, por mund të përdoret gjithashtu për të shtuar rezultatet e një deklarate SELECT.
Ndryshimi i të dhënave
Për të ndryshuar informacionin në fushat e tabelës së bazës së të dhënave, duhet të përdorni deklaratën UPDATE. Operatori mund të përdoret në dy mënyra:
- Të gjitha rreshtat në tabelë janë përditësuar.
- Vetëm për një linjë specifike.
UPDATE ka tre elementë kryesorë:
- tabelën në të cilën duhet të bëni ndryshime;
- emrat e fushave dhe vlerat e tyre të reja;
- kushtet për zgjedhjen e rreshtave për të ndryshuar.
Le të shohim një shembull. Le të themi se kostoja e një artikulli me ID = 106 ka ndryshuar, kështu që kjo linjë duhet të përditësohet. Ne shkruajmë operatorin e mëposhtëm:
PËRDITËSONI SETin e mallit commodity_price = "3.2" WHERE commodity_id = "106"
Ne treguam emrin e tabelës, në rastin tonë Commodity, ku do të kryhet përditësimi, pastaj pas SET - vlerën e re të kolonës dhe gjetëm rekordin e kërkuar duke specifikuar vlerën e kërkuar ID në WHERE.
Për të modifikuar kolona të shumta, çifte të shumta kolone-vlera specifikohen pas deklaratës SET, të ndara me presje. Le të shohim një shembull që përditëson emrin dhe çmimin e një produkti:
PËRDITËZO SET-in e mallit emri_commodity = 'Fanta', commodity_price = "3.2" WHERE commodity_id = "106"
Për të hequr informacionin në një kolonë, mund ta vendosni atë në NULL nëse struktura e tabelës e lejon atë. Duhet mbajtur mend se NULL është saktësisht vlera "jo" dhe jo zero në formën e tekstit ose numrave. Le të fshijmë përshkrimin e produktit:
PËRDITËSO KOSOVËN e mallrave commodity_desc = NULL WHERE commodity_id = "106"
Fshirja e rreshtave
Pyetjet SQL për të fshirë rreshtat në një tabelë ekzekutohen nga deklarata DELETE. Ka dy raste përdorimi:
- disa rreshta fshihen në tabelë;
- të gjitha rreshtat në tabelë janë fshirë.
Një shembull i fshirjes së një rreshti nga një tabelë:
FSHI NGA malli WHERE commodity_id = "106"
Pas DELETE FROM ne specifikojmë emrin e tabelës në të cilën do të fshihen rreshtat. Klauzola WHERE përmban një kusht me të cilin do të zgjidhen rreshtat për fshirje. Në shembull, ne po fshijmë rreshtin për produktin me ID = 106. Është shumë e rëndësishme të specifikoni KU. Heqja e kësaj deklarate do të fshijë të gjitha rreshtat në tabelë. Kjo vlen edhe për ndryshimin e vlerës së fushave.
Deklarata DELETE nuk përfshin emrat e kolonave ose metakarakteret. Ai fshin rreshtat tërësisht, por nuk mund të fshijë një kolonë të vetme.
Përdorimi i SQL në Microsoft Access
Zakonisht përdoret në mënyrë interaktive për të krijuar tabela, baza të të dhënave, për të menaxhuar, modifikuar, analizuar të dhënat në një bazë të dhënash dhe për të futur pyetjet e SQL Access përmes një projektuesi të përshtatshëm interaktiv të pyetjeve (Query Designer), duke përdorur të cilin mund të ndërtoni dhe ekzekutoni menjëherë deklaratat SQL të çdo kompleksiteti...
Mbështetet gjithashtu mënyra e aksesit në server, në të cilën Access DBMS mund të përdoret si gjenerues i pyetjeve SQL për çdo burim të dhënash ODBC. Kjo aftësi lejon që aplikacionet Access të ndërveprojnë me çdo format.
Shtesat SQL
Meqenëse pyetjet SQL nuk i kanë të gjitha aftësitë e gjuhëve të programimit procedural, të tilla si unazat, degët, etj., shitësit e bazës së të dhënave zhvillojnë versionin e tyre të SQL me aftësi të avancuara. Para së gjithash, kjo është mbështetje për procedurat e ruajtura dhe operatorët standardë të gjuhëve procedurale.
Dialektet më të zakonshme të gjuhës:
- Baza e të dhënave Oracle - PL / SQL
- Interbase, Firebird - PSQL
- Microsoft SQL Server - Transact-SQL
- PostgreSQL - PL / pgSQL.
SQL në internet
MySQL shpërndahet nën Licencën e Përgjithshme Publike GNU. Ekziston një licencë tregtare me aftësinë për të zhvilluar module me porosi. Si pjesë integrale, ai përfshihet në asambletë më të njohura të serverëve të internetit, si XAMPP, WAMP dhe LAMP, dhe është DBMS më i njohur për zhvillimin e aplikacioneve në internet.
Ai u zhvillua nga Sun Microsystems dhe aktualisht mbështetet nga Oracle Corporation. Mbështetet bazat e të dhënave deri në 64 terabajt, standardi sintaksor SQL: 2003, riprodhimi i bazës së të dhënave dhe shërbimet cloud.
Si mund të zbuloj numrin e modeleve të PC-ve të prodhuara nga një shitës i caktuar? Si të përcaktohet çmimi mesatar për kompjuterët me të njëjtat specifika? Këto dhe shumë pyetje të tjera që lidhen me disa informacione statistikore mund të përgjigjen duke përdorur funksionet përmbledhëse (agregate).... Standardi parashikon funksionet e mëposhtme agregate:
Të gjitha këto funksione kthejnë një vlerë të vetme. Në këtë rast, funksionet COUNT, MIN dhe MAX janë të zbatueshme për çdo lloj të dhënash, ndërsa SHUMË dhe AVG përdoren vetëm për fushat numerike. Dallimi midis funksionit COUNT (*) dhe COUNT (<имя поля>) është se e dyta nuk merr parasysh vlerat NULL gjatë llogaritjes.
Shembull. Gjeni çmimin minimal dhe maksimal për kompjuterët personalë:
Shembull. Gjeni numrin e kompjuterëve të disponueshëm nga prodhuesi A:
Shembull. Nëse jemi të interesuar për numrin e modeleve të ndryshme të prodhuara nga prodhuesi A, atëherë pyetja mund të formulohet si më poshtë (duke përdorur faktin se në tabelën e produktit çdo model regjistrohet një herë):
Shembull. Gjeni numrin e modeleve të ndryshme të disponueshme nga prodhuesi A. Pyetja është e ngjashme me atë të mëparshme, në të cilën kërkohej të përcaktohej numri total i modeleve të prodhuara nga prodhuesi A. Këtu duhet të gjeni edhe numrin e modeleve të ndryshme në Tavolinë PC (dmth në dispozicion për shitje).
Për të siguruar që përdoren vetëm vlera unike kur merren tregues statistikorë, kur argumenti i funksioneve agregate mund të përdoret Parametri DISTINCT... Një tjetër parametri ALLështë parazgjedhja dhe supozon që të gjitha vlerat e kthyera në kolonë janë numëruar. Operator,
Nëse duhet të marrim numrin e modeleve të PC-ve të prodhuara çdo prodhuesi, do t'ju duhet të përdorni GRUPI PËR klauzolë në vijim sintaksor KU klauzolat.
GRUPI PËR klauzolë
GRUPI PËR klauzolë përdoret për të përcaktuar grupet e linjave të daljes në të cilat mund të aplikohen funksionet e përgjithshme (COUNT, MIN, MAX, AVG dhe SUM)... Nëse kjo klauzolë mungon dhe përdoren funksionet e përgjithshme, atëherë të gjitha kolonat me emrat e përmendur në ZGJIDH duhet të përfshihen në funksionet agregate, dhe këto funksione do të aplikohen në të gjithë grupin e rreshtave që plotësojnë kallëzuesin e pyetjes. Përndryshe, të gjitha kolonat e listës SELECT, nuk përfshihen në funksionet agregate, duhet të specifikohet në klauzolë GRUPI SIPAS... Si rezultat, të gjitha linjat e daljes së pyetjes ndahen në grupe të karakterizuara nga të njëjtat kombinime vlerash në këto kolona. Pas kësaj, funksionet agregate do të aplikohen për secilin grup. Vini re se për GROUP BY të gjitha vlerat NULL trajtohen si të barabarta, d.m.th. kur grupohen nga një fushë që përmban vlera NULL, të gjitha rreshtat e tillë do të bien në një grup.Nëse nëse ka një klauzolë GROUP BY, në klauzolën SELECT nuk ka funksione agregate, atëherë pyetja thjesht do të kthejë një rresht nga secili grup. Kjo veçori, së bashku me fjalën kyçe DISTINCT, mund të përdoret për të eliminuar rreshtat e dyfishta në grupin e rezultateve.
Le të hedhim një vështrim në një shembull të thjeshtë:
SELECT model, COUNT (modeli) AS Qty_model, AVG (çmimi) AS çmimi mesatar NGA PC GRUPI SIPAS modelit; |
Në këtë kërkesë, për çdo model PC, përcaktohet numri i tyre dhe kostoja mesatare. Të gjitha rreshtat me të njëjtat vlera modeli formojnë një grup, dhe dalja SELECT llogarit numrin e vlerave dhe vlerat mesatare të çmimeve për secilin grup. Kërkesa do të rezultojë në tabelën e mëposhtme:
model | Sasia_model | Çmimi_mesatar |
1121 | 3 | 850.0 |
1232 | 4 | 425.0 |
1233 | 3 | 843.33333333333337 |
1260 | 1 | 350.0 |
Nëse SELECT kishte një kolonë me një datë, atëherë do të ishte e mundur të llogariteshin këta tregues për çdo datë specifike. Për ta bërë këtë, duhet të shtoni një datë si një kolonë grupimi, dhe më pas do të llogariten funksionet e përmbledhura për çdo kombinim vlerash (model-datë).
Ka disa specifike rregullat për kryerjen e funksioneve agregate:
- Nëse si rezultat i pyetjes asnjë rresht nuk është marrë(ose më shumë se një rresht për një grup të caktuar), atëherë mungojnë të dhënat fillestare për llogaritjen e ndonjë prej funksioneve agregate. Në këtë rast, rezultati i ekzekutimit të funksioneve COUNT do të jetë zero, dhe rezultati i të gjitha funksioneve të tjera do të jetë NULL.
- Argumenti funksioni agregat vetë nuk mund të përmbajë funksione agregate(funksioni nga funksioni). ato. në një pyetje, ju nuk mund të merrni, të themi, vlerat mesatare maksimale.
- Rezultati i ekzekutimit të funksionit COUNT është numër i plotë(SHUMË I PLOTË). Funksionet e tjera agregate trashëgojnë llojet e të dhënave të vlerave që përpunohen.
- Nëse, gjatë ekzekutimit të funksionit SUM, është marrë një rezultat që tejkalon vlerën maksimale të llojit të të dhënave të përdorur, gabim.
Pra, nëse kërkesa nuk përmban GRUP SIPAS klauzolave, pastaj funksionet agregate të përfshira në Klauzola SELECT, ekzekutohen në të gjitha linjat e pyetjeve që rezultojnë. Nëse kërkesa përmban GRUPI PËR klauzolë, çdo grup rreshtash që ka të njëjtat vlera të grupit të kolonave ose kolonave të specifikuara në GRUPI PËR klauzolë, përbën një grup, dhe funksionet agregate kryhen për secilin grup veç e veç.
Klauzola e PASJES
Nëse Klauzola WHERE përcakton një kallëzues për filtrimin e rreshtave, më pas Duke pasur ofertë aplikuar pas grupimit për të përcaktuar një grup të ngjashëm filtrues kallëzues sipas vlerave funksionet agregate... Kjo klauzolë është e nevojshme për të testuar vlerat që janë marrë duke përdorur funksioni agregat jo nga linja të veçanta të burimit të regjistrimit të përcaktuar në Klauzola NGA, dhe nga grupe të linjave të tilla... Prandaj, një kontroll i tillë nuk mund të përfshihet Klauzola WHERE.
Sintaksë:
* ku fushat 1- fushat për përzgjedhje, të ndara me presje, gjithashtu mund të specifikoni të gjitha fushat me një *; tabela- emri i tabelës nga e cila nxjerrim të dhënat; kushtet- kushtet e kampionimit; fushat2- fushë ose fusha të ndara me presje, sipas të cilave do të renditet; numëroj- numri i rreshtave për të shkarkuar.
* pyetja në kllapa katrore është opsionale për përzgjedhjen e të dhënave.
Shembuj të thjeshtë të përdorimit të selektimit
1. Mostra normale e të dhënave:
> ZGJIDH * NGA përdoruesit
2. Marrja e të dhënave me bashkimin e dy tabelave (JOIN):
ZGJIDHni emrin, r. * NGA përdoruesit u BASHKOHUni të drejtat_përdoruesit r ON r.user_id = u.id
* në këtë shembull ne po marrim të dhëna me bashkim të tabelave përdoruesit dhe të drejtat_përdoruesit... Ata janë të bashkuar nga fushat user_id(në tabelën e të drejtave të përdoruesve) dhe id(përdoruesit). Merr fushën e emrit nga tabela e parë dhe të gjitha fushat nga e dyta.
3. Marrja e mostrave me një interval kohe dhe/ose datë
a) dihet pika e fillimit dhe një interval i caktuar kohor:
* Do të zgjidhen të dhënat për orën e fundit (fusha datë).
b) data e fillimit dhe data e përfundimit janë të njohura:
25.10.2017 dhe 25.11.2017 .
c) dihen datat e fillimit dhe mbarimit + ora:
* zgjidhni të dhënat ndërmjet 25.03.2018 0 orë 15 minuta dhe 25.04.2018 15 orë 33 minuta e 9 sekonda.
d) nxjerrim të dhëna për një muaj dhe vit të caktuar:
* nxjerr të dhënat, ku në fushë datë ka vlera për Prill 2018 i vitit.
4. Marrja e mostrave të vlerave maksimale, minimale dhe mesatare:
> SELECT max (zona), min (zona), mesatare (zona) NGA vendi
* maksimumi- vlera maksimale; min- minimale; mesatare- mesatar.
5. Përdorimi i gjatësisë së linjës:
* Kjo pyetje duhet të tregojë të gjithë përdoruesit, emri i të cilëve përbëhet nga 5 karaktere.
Shembuj të pyetjeve më komplekse ose të përdorura rrallë
1. Kombinoje me grupimin e të dhënave të përzgjedhura në një rresht (GROUP_CONCAT):
* nga tabela përdoruesit merr të dhëna sipas fushës id, të gjitha përshtaten në një rresht, vlerat janë të ndara presje.
2. Grupimi i të dhënave sipas dy ose më shumë fushave:
> ZGJIDH * NGA përdoruesit GRUPI SIPAS CONCAT (titulli, "::", lindja)
* total, në këtë shembull ne do të shkarkojmë të dhënat nga tabela e përdoruesve dhe do t'i grupojmë ato sipas fushave titullin dhe lindjen... Para grupimit, ne bëjmë bashkimin e fushave në një rresht me një ndarës :: .
3. Kombinimi i rezultateve nga dy tabela (UNION):
> (ZGJIDH ID-në, fio, adresën, "Përdoruesit" si lloji i përdoruesve FROM)
UNION
(ZGJIDH ID-në, fio, adresën, "Klientë" sipas llojit FROM klientët)
* në këtë shembull, të dhënat merren nga tabelat përdoruesit dhe klientët.
4. Mostra e mesatareve, të grupuara për çdo orë:
ZGJIDH mesataren (temperaturën), DATE_FORMAT (përditësimi i datës, "% Y-% m-% d% H") si ora_datë nga arkivi GROUP BY DATE_FORMAT (përditësimi i datës, "% Y-% m-% d% H")
* këtu nxjerrim mesataren e fushës temperatura nga tavolina Arkivi dhe grup sipas fushës përditësimi i datës(me ndarjen e kohës për çdo orë).
Fut (INSERT)
Sintaksa 1:
> INSERT INTO