Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Qasja në SQL. Konceptet bazë, fjalori dhe sintaksa

Çdo zhvillues i uebit duhet të dijë SQL për të shkruar pyetjet e bazës së të dhënave. Dhe, megjithëse phpMyAdmin nuk është anuluar, shpesh është e nevojshme të ndotni duart për të shkruar SQL të nivelit të ulët.

Kjo është arsyeja pse ne kemi përgatitur një turne të shkurtër të bazave të SQL. Le të fillojmë!

1. Krijo një tabelë

Deklarata CREATE TABLE përdoret për të krijuar tabela. Argumentet duhet të jenë emrat e kolonave, si dhe llojet e tyre të të dhënave.

Le të krijojmë një tabelë të thjeshtë me emrin muaj. Ai përbëhet nga 3 kolona:

  • id– Numri i muajit në vitin kalendarik (numër i plotë).
  • emri– Emri i muajit (vargu, maksimumi 10 karaktere).
  • ditë– Numri i ditëve në këtë muaj (numër i plotë).

Kjo është se si do të duket pyetja përkatëse SQL:

KRIJO TABELA muaj (id int, emri varchar(10), ditë int);

Gjithashtu, kur krijoni tabela, këshillohet të shtoni një çelës primar për njërën nga kolonat. Kjo do t'i mbajë të dhënat unike dhe do të shpejtojë kërkesat e tërheqjes. Në rastin tonë, emri i muajit le të jetë unik (kolona emri)

KRIJO TABELE muaj (id int, emri varchar(10), ditë int, PRIMARY KEY (emri));

Data dhe ora
Lloji i të dhënavePërshkrim
DATAVlerat e datës
DATA KOHAVlerat e datës dhe kohës janë të sakta në minutë
KOHAVlerat kohore

2. Futja e rreshtave

Tani le të plotësojmë tabelën tonë muaj informacione të dobishme. Shtimi i të dhënave në një tabelë bëhet duke përdorur deklaratën INSERT. Ka dy mënyra për të shkruar këtë udhëzim.

Metoda e parë nuk është të specifikoni emrat e kolonave ku do të futen të dhënat, por të specifikoni vetëm vlerat.

Kjo metodë regjistrimi është e thjeshtë, por e pasigurt, pasi nuk ka asnjë garanci që ndërsa projekti zgjerohet dhe tabela redaktohet, kolonat do të jenë në të njëjtin rend si më parë. Një mënyrë e sigurt (dhe në të njëjtën kohë më e rëndë) për të shkruar një deklaratë INSERT kërkon specifikimin e vlerave dhe renditjes së kolonave:

Këtu është vlera e parë në listë VLERAT përputhet me emrin e kolonës së parë të specifikuar, etj.

3. Nxjerrja e të dhënave nga tabelat

Deklarata SELECT është miku ynë më i mirë kur duam të marrim të dhëna nga një bazë të dhënash. Përdoret shumë shpesh, prandaj kushtojini shumë vëmendje këtij seksioni.

Përdorimi më i thjeshtë i deklaratës SELECT është një pyetje që kthen të gjitha kolonat dhe rreshtat nga një tabelë (për shembull, tabelat sipas emrit personazhet):

ZGJIDH * NGA "personazhet"

Simboli i yllit (*) do të thotë që ne duam të marrim të dhëna nga të gjitha kolonat. Meqenëse bazat e të dhënave SQL zakonisht përbëhen nga më shumë se një tabelë, është e nevojshme të specifikohet fjala kyçe FROM, e ndjekur nga emri i tabelës, të ndarë me një hapësirë.

Ndonjëherë ne nuk duam të marrim të dhëna nga jo të gjitha kolonat në një tabelë. Për ta bërë këtë, në vend të një ylli (*), duhet të shkruajmë emrat e kolonave të dëshiruara, të ndara me presje.

SELECT ID, emri FROM muaj

Për më tepër, në shumë raste duam që rezultatet që rezultojnë të renditen në një rend të caktuar. Në SQL ne e bëjmë këtë duke përdorur ORDER BY. Mund të pranojë një modifikues opsional - renditjen ASC (default) në rend rritës ose DESC, renditje në rend zbritës:

ZGJIDH ID-në, emrin NGA muaji RENDOSJE SIPAS emrit DESC

Kur përdorni ORDER BY, sigurohuni që të jetë i fundit në deklaratën SELECT. Përndryshe do të shfaqet një mesazh gabimi.

4. Filtrimi i të dhënave

Ju keni mësuar se si të zgjidhni kolona specifike nga një bazë të dhënash duke përdorur një pyetje SQL, por po sikur të na duhet gjithashtu të marrim rreshta të veçantë? Klauzola WHERE vjen në shpëtim këtu, duke na lejuar të filtrojmë të dhënat në varësi të gjendjes.

Në këtë pyetje ne po zgjedhim vetëm ata muaj nga tabela muaj, në të cilat ka më shumë se 30 ditë duke përdorur operatorin më të madh se (>).

SELECT ID, emri NGA muaji WHERE ditë > 30

5. Filtrim i avancuar i të dhënave. AND dhe OSE operatorët

Më parë, ne përdornim filtrimin e të dhënave duke përdorur një kriter të vetëm. Për filtrim më kompleks të të dhënave, mund të përdorni operatorët AND dhe OR dhe operatorët e krahasimit (=,<,>,<=,>=,<>).

Këtu kemi një tabelë që përmban katër albumet më të shitura të të gjitha kohërave. Le të zgjedhim ato që klasifikohen si rock dhe kanë shitur më pak se 50 milionë kopje. Kjo mund të bëhet lehtësisht duke vendosur një operator AND midis këtyre dy kushteve.


ZGJIDH * NGA albumet WHERE zhanri = "rock" DHE shitje_në_miliona<= 50 ORDER BY released

6. Në/Midis/Pëlqyer

WHERE gjithashtu mbështet disa komanda speciale, duke ju lejuar të kontrolloni shpejt pyetjet e përdorura më shpesh. Këtu ata janë:

  • IN – shërben për të treguar një sërë kushtesh, secila prej të cilave mund të plotësohet
  • BETWEEN – kontrollon nëse një vlerë është brenda intervalit të specifikuar
  • LIKE – kërkon modele specifike

Për shembull, nëse duam të zgjedhim albume me pop Dhe shpirti muzikë, mund të përdorim IN("vlera1","vlera2") .

SELECT * NGA albumet WHERE zhanri IN ("pop", "soul");

Nëse duam të marrim të gjitha albumet e lëshuara midis 1975 dhe 1985, duhet të shkruajmë:

SELECT * NGA albumet WHERE të publikuara MES VITIT 1975 DHE 1985;

7. Funksionet

SQL është e mbushur me funksione që bëjnë të gjitha llojet e gjërave të dobishme. Këtu janë disa nga më të përdorurat:

  • COUNT() – kthen numrin e rreshtave
  • SUM() - kthen shumën totale të një kolone numerike
  • AVG() - kthen mesataren e një grupi vlerash
  • MIN() / MAX() – Merr vlerën minimale/maksimale nga një kolonë

Për të marrë vitin më të fundit në tabelën tonë, duhet të shkruajmë pyetjen e mëposhtme SQL:

SELECT MAX (lëshuar) NGA albumet;

8. Nënpyetje

Në paragrafin e mëparshëm, mësuam se si të bëjmë llogaritje të thjeshta me të dhëna. Nëse duam të përdorim rezultatin nga këto llogaritje, nuk mund të bëjmë pa pyetje të ndërlidhura. Le të themi se duam të nxjerrim artist, album Dhe viti i lëshimit për albumin më të vjetër në tabelë.

Ne e dimë se si t'i marrim këto kolona specifike:

SELECT artist, album, i publikuar nga albumet FROM;

Ne gjithashtu dimë se si të marrim vitin më të hershëm:

SELECT MIN (lëshuar) NGA albumi;

Gjithçka që nevojitet tani është të kombinohen dy pyetjet duke përdorur WHERE:

ZGJIDH artistin,albumin,lëshuar NGA albumet WHERE lëshuar = (SELECT MIN(lëshuar) FROM albume);

9. Bashkimi i tabelave

Në bazat e të dhënave më komplekse, ka tabela të shumta të lidhura me njëra-tjetrën. Për shembull, më poshtë janë dy tabela rreth lojërave video ( video_lojëra) dhe zhvilluesit e lojërave video ( zhvilluesit e lojës).


Ne tavoline video_lojëra ka një kolonë zhvilluesi ( ID_ja e zhvilluesit), por ai përmban një numër të plotë, jo emrin e zhvilluesit. Ky numër përfaqëson identifikuesin ( id) të zhvilluesit përkatës nga tabela e zhvilluesve të lojërave ( zhvilluesit e lojës), duke lidhur logjikisht dy lista, duke na lejuar të përdorim informacionin e ruajtur në të dyja në të njëjtën kohë.

Nëse duam të krijojmë një pyetje që kthen gjithçka që duhet të dimë për lojërat, mund të përdorim një BASHKIM TË BRENDSHËM për të lidhur kolonat nga të dyja tabelat.

ZGJIDH video_games.name, video_games.zhanri, game_developers.name, game_developers.country NGA video_lojërat BASHKOHU INNER lojën_zhvilluesit ON video_games.developer_id = game_developers.id;

Ky është lloji më i thjeshtë dhe më i zakonshëm JOIN. Ka disa opsione të tjera, por këto vlejnë për rastet më pak të zakonshme.

10. Pseudonimet

Nëse shikoni shembullin e mëparshëm, do të vini re se janë dy kolona të quajtura emri. Kjo është konfuze, kështu që le të vendosim një pseudonim në një nga kolonat e përsëritura, si kjo emri nga tavolina zhvilluesit e lojës do të thirret zhvilluesi.

Ne gjithashtu mund ta shkurtojmë pyetjen duke emërtuar emrat e tabelës: video_lojëra le të thërrasim lojërat, zhvilluesit e lojës - zhvilluesit:

ZGJIDH lojërat.emri, zhanri i lojërave, emri i devs. AS zhvillues, devs.vend NGA video_lojërat SI lojëra BASHKOHU I BRENDSHËM lojë_zhvilluesit AS zhvillues ON lojërat.zhvilluesi_id = devs.id;

11. Përditësimi i të dhënave

Shpesh na duhet të ndryshojmë të dhënat në disa rreshta. Në SQL kjo bëhet duke përdorur deklaratën UPDATE. Deklarata UPDATE përbëhet nga:

  • Tabela në të cilën ndodhet vlera e zëvendësimit;
  • Emrat e kolonave dhe vlerat e tyre të reja;
  • Rreshtat e zgjedhur duke përdorur WHERE që duam të përditësojmë. Nëse kjo nuk është bërë, të gjitha rreshtat në tabelë do të ndryshojnë.

Më poshtë është tabela seri_tv me serialet televizive dhe vlerësimet e tyre. Sidoqoftë, një gabim i vogël hyri në tabelë: megjithëse seria Loja e froneve dhe përshkruhet si komedi, në të vërtetë nuk është. Le ta rregullojmë këtë!

Të dhënat e tabelës tv_seriali PËRDITËSIM SET_Seriali zhanër = "dramë" WHERE id = 2;

12. Fshirja e të dhënave

Fshirja e një rreshti tabele duke përdorur SQL është një proces shumë i thjeshtë. E tëra çfarë ju duhet të bëni është të zgjidhni tabelën dhe rreshtin që dëshironi të fshini. Le të fshijmë rreshtin e fundit në tabelë nga shembulli i mëparshëm seri_tv. Kjo bëhet duke përdorur udhëzimin >DELETE.

FSHI NGA Seriali_tv WHERE id = 4

Kini kujdes kur shkruani deklaratën DELETE dhe sigurohuni që klauzola WHERE të jetë e pranishme, përndryshe të gjitha rreshtat në tabelë do të fshihen!

13. Fshij një tabelë

Nëse duam të fshijmë të gjitha rreshtat, por të lëmë vetë tabelën, atëherë përdorim komandën TRUNCATE:

TRUNCATE TABLE - emri i tabelës;

Në rastin kur në të vërtetë duam të fshijmë të dhënat dhe vetë tabelën, atëherë komanda DROP do të jetë e dobishme për ne:

HIQ TABELA_Emri i tabelës;

Jini shumë të kujdesshëm me këto komanda. Ato nuk mund të anulohen!/p>

Kjo përfundon tutorialin tonë SQL! Ka shumë gjëra që nuk i kemi mbuluar, por ajo që dini tashmë duhet të jetë e mjaftueshme për t'ju dhënë disa aftësi praktike për karrierën tuaj në internet.

Si mund të zbuloj numrin e modeleve të PC-ve të prodhuara nga një furnizues i caktuar? Si të përcaktohet çmimi mesatar i kompjuterëve me të njëjtat karakteristika teknike? Këto dhe shumë pyetje të tjera që lidhen me disa informacione statistikore mund të përgjigjen duke përdorur funksionet përfundimtare (agregate).. Standardi ofron funksionet e mëposhtme agregate:

Të gjitha këto funksione kthejnë një vlerë të vetme. Në të njëjtën kohë, funksionet COUNT, MIN Dhe MAX i zbatueshëm 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 disponueshëm të kompjuterëve të prodhuar 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 të prodhuara nga prodhuesi A. Pyetja është e ngjashme me atë të mëparshme, në të cilën kërkohej të përcaktohet numri i përgjithshëm i modeleve të prodhuara nga prodhuesi A. Këtu duhet të gjeni edhe numrin e modeleve të ndryshme në tabela e PC-së (d.m.th., ato të disponueshme 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 të prodhuara të gjithë prodhuesi, do t'ju duhet të përdorni GRUPI PËR klauzolë, duke ndjekur në mënyrë sintaksore KU klauzolat.

GRUPI PËR klauzolë

GRUPI PËR klauzolë përdoret për të përcaktuar grupet e linjave të daljes që 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ërfshihet 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ë specifikohen në klauzolën GROUP BY. Si rezultat, të gjitha rreshtat e pyetjeve të daljes 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. Ju lutemi vini re se për GROUP BY të gjitha vlerat NULL trajtohen si të barabarta, d.m.th. kur grupohet sipas një fushe 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ë një grup rezultatesh.
Le të shohim një shembull të thjeshtë:
SELECT model, COUNT(model) AS Qty_model, AVG(çmim) AS çmim_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ëjtën vlerë modeli formojnë një grup, dhe prodhimi i SELECT llogarit numrin e vlerave dhe vlerat mesatare të çmimeve për secilin grup. Rezultati i pyetjes do të jetë tabela 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ë data, atëherë do të ishte e mundur të llogariteshin këta tregues për çdo datë specifike. Për ta bërë këtë, ju duhet të shtoni datën si një kolonë grupimi dhe më pas do të llogariten funksionet e përgjithshme për çdo kombinim vlerash (model-datë).

Ka disa specifike rregullat për kryerjen e funksioneve agregate:

  • Nëse si rezultat i kërkesës asnjë rresht nuk është marrë(ose më shumë se një rresht për një grup të caktuar), atëherë nuk ka të dhëna burimore për llogaritjen e ndonjë prej funksioneve agregate. Në këtë rast, rezultati i funksioneve COUNT do të jetë zero, dhe rezultati i të gjitha funksioneve të tjera do të jetë NULL.
  • Argumenti funksion agregat nuk mund të përmbajë në vetvete funksione agregate(funksioni nga funksioni). ato. në një pyetje është e pamundur, të themi, të merret maksimumi i vlerave mesatare.
  • 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ërpunojnë.
  • Nëse funksioni SUM prodhon një rezultat që është më i madh se vlera maksimale e llojit të të dhënave të përdorur, gabim.

Pra, nëse kërkesa nuk përmban GRUP SIPAS klauzolave, Kjo funksionet agregate të përfshira në Klauzola SELECT, ekzekutohen në të gjitha rreshtat e pyetjeve që rezultojnë. Nëse kërkesa përmban GRUPI PËR klauzolë, çdo grup rreshtash që ka të njëjtat vlera të një kolone ose grupi kolonash të specifikuara në GRUPI PËR klauzolë, përbën një grup dhe funksionet agregate kryhen për secilin grup veç e veç.

Duke pasur ofertë

Nëse Klauzola WHERE përcakton një kallëzues për filtrimin e rreshtave, më pas Duke pasur ofertë zbatohet pas grupimit për të përcaktuar një kallëzues të ngjashëm që filtron grupet sipas vlerave funksionet agregate. Kjo klauzolë është e nevojshme për të vërtetuar vlerat që janë marrë duke përdorur funksion agregat jo nga rreshtat individualë 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 me të cilat do të renditen; numëroj- numri i rreshtave për të ngarkuar.
* Kërkesa në kllapa katrore nuk kërkohet për të marrë të dhëna.

Shembuj të thjeshtë të përdorimit të përzgjedhjes

1. Mostra normale e të dhënave:

> ZGJIDH * NGA përdoruesit

2. Kampionimi i të dhënave me bashkimin e dy tabelave (JOIN):

SELECT u.emrin, r.* NGA shfrytëzuesit u JOIN users_rights r ON r.user_id=u.id

* në këtë shembull, të dhënat janë kampionuar me tabela të bashkuara 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). Fusha e emrit merret nga tabela e parë dhe të gjitha fushat nga e dyta.

3. Marrja e mostrave me intervale kohe dhe/ose data

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) dihet data e fillimit dhe data e përfundimit:

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) nxjerr të dhëna për një muaj dhe vit të caktuar:

* nxirrni të dhënat ku jeni në fushë datë ka vlera për Prill 2018 i vitit.

4. Marrja e mostrave të vlerave maksimale, minimale dhe mesatare:

> ZGJIDH maksimumi (zona), min (zona), mesatare (zona) NGA shteti

* maksimumi- vlera maksimale; min- minimale; mesatare- mesatare.

5. Përdorimi i gjatësisë së vargut:

* Ky pyetje duhet të tregojë të gjithë përdoruesit, emri i të cilëve përbëhet nga 5 karaktere.

Shembuj të pyetjeve që janë më komplekse ose të përdorura rrallë

1. Lidhja me grupimin e të dhënave të zgjedhura në një rresht (GROUP_CONCAT):

* nga tabela përdoruesit merren të dhënat në terren id, vendosen të gjitha në një rresht, vlerat janë të ndara presje.

2. Grupimi i të dhënave sipas dy ose më shumë fushave:

> ZGJIDH * NGA përdoruesit GROUP BY CONCAT (titulli, "::", lindja)

* në përmbledhje, në këtë shembull ne do të ngarkojmë të dhëna nga tabela e përdoruesve dhe do t'i grupojmë ato sipas fushave titullin Dhe lindjen. Para grupimit, ne i kombinojmë fushat në një rresht me një kufizues :: .

3. Rezultatet e bashkimit nga dy tabela (UNION):

> (ZGJIDH ID-në, fio, adresën, "Përdoruesit" si lloji i përdoruesve FROM)
BASHKIM
(ZGJIDH ID-në, fio, adresën, "Klientë" sipas llojit FROM klientët)

* në këtë shembull, të dhënat janë marrë nga tabelat përdoruesit Dhe klientët.

4. Shembull i vlerave mesatare të grupuara për çdo orë:

SELECT mesatare (temperaturë), DATE_FORMAT (përditësim i datës, "%Y-%m-%d %H") si ora_date NGA arkivi GROUP BY DATE_FORMAT(dita e përditësimit, "%Y-%m-%d %H")

*këtu nxjerrim vlerën mesatare të fushës temperatura nga tavolina Arkivi dhe grup sipas fushës përditësimi i datës(me ndarje kohore për çdo orë).

INSERT

Sintaksa 1:

> INSERT INTO

() VLERAT ( )

Sintaksa 2:

> INSERT INTO

VLERAT ( )

* Ku tabela- emri i tabelës në të cilën futim të dhënat; fusha— listimi i fushave të ndara me presje;vlerat- renditja e vlerave të ndara me presje.
* opsioni i parë do t'ju lejojë të futni vetëm fushat e listuara - pjesa tjetër do të marrë vlerat e paracaktuara. Opsioni i dytë do të kërkojë futje për të gjitha fushat.

Shembuj të përdorimit të insertit

1. Futja e shumë rreshtave me një pyetje:

> INSERT NË qytete ("emri", "vendi") VLERA ("Moskë", "Rusi"), ("Paris", "Francë"), ("Funafuti" , "Tuvalu");

* në këtë shembull do të shtojmë 3 regjistrime në një pyetje SQL.

2. Futja nga një tabelë tjetër (duke kopjuar rreshtat, INSERT + SELECT):

* nxirrni të gjitha të dhënat nga tabela qytetet, emrat e të cilëve fillojnë me "M" dhe futini në tabelë qytete-të reja.

Përditëso (UPDATE)

Sintaksë:

* Ku tabela- emri i tabelës; fushë— fusha për të cilën do të ndryshojmë vlerën; vlerë- kuptimi i ri; kushtet— kushti (pa të, bërja e një përditësimi është e rrezikshme - mund të zëvendësoni të gjitha të dhënat në të gjithë tabelën).

Përditëso duke përdorur zëvendësimin (REPLACE):

PËRDITËSOJE

SET = ZËVENDËso( , "<что меняем>", "<на что>");

Përditëso qytetet SET emri = REPLACE (emri, "Maskva", "Moscow");

Nëse duam ta luajmë të sigurt, fillimisht mund të kontrollojmë rezultatin e zëvendësimit duke përdorur SELECT:

Fshi (DELETE)

Sintaksë:

* Ku tabela- emri i tabelës; kushtet— kusht (si në rastin e UPDATE, përdorimi i DELETE pa kusht është i rrezikshëm - DBMS nuk do të kërkojë konfirmim, por thjesht do të fshijë të gjitha të dhënat).

Krijimi i një tabele

Sintaksë:

> KRIJO TABELE

( , )

> KRIJO TABELE NËSE NUK EKZISTON `të drejtat_përdoruesit` (
`id` int(10) i panënshkruar JO NULL,
`user_id` int(10) i panënshkruar NUK NULL,
`të drejtat` int(10) të panënshkruara NOT NULL
) MOTORI=InnoDB SEKTORI I DEFAULTAR=utf8;

* Ku tabela- emri i tabelës (në shembull të drejtat_përdoruesit); fusha1, fusha2- emri i fushave (në shembull, krijohen 3 fusha - id, user_id, të drejtat); opsionet 1, opsionet 2- parametrat e fushës (në shembull int(10) i panënshkruar NUK NULL); opsionet e tavolinës- parametrat e përgjithshëm të tabelës (në shembull MOTORI=InnoDB SEKTORI I PARAKTUAR=utf8).

Përdorimi i kërkesave në PHP

Lidhja me bazën e të dhënave:

mysql_connect("localhost", "login", "password") ose die("Gabim i lidhjes MySQL");
mysql_select_db ("emri_db");
mysql_query("VENDOSI EMRAT "utf8"");

* ku lidhja bëhet me një bazë të dhënash në një server lokal ( localhost); kredencialet e lidhjes - identifikimi Dhe fjalëkalimin(përkatësisht, login dhe fjalëkalimin); përdoret si bazë db_emri; kodimi i përdorur UTF-8.

Ju gjithashtu mund të krijoni një lidhje të vazhdueshme:

mysql_pconnect("localhost", "login", "password") ose die("Gabim i lidhjes MySQL");

* megjithatë, ekziston mundësia për të arritur kufirin maksimal të lejuar të pritjes. Kjo metodë duhet të përdoret në serverët tanë, ku ne vetë mund të kontrollojmë situatën.

Lidhja e plotë:

* në PHP kryhet automatikisht, përveç lidhjeve të vazhdueshme (mysql_pconnect).

Një pyetje në MySQL (Mariadb) në PHP bëhet me funksionin mysql_query() dhe marrja e të dhënave nga pyetja bëhet me mysql_fetch_array():

$rezultat = mysql_query("SELECT * FROM përdoruesit");
ndërsa ($mass = mysql_fetch_array($rezultat)) (
jehonë $mass . "
";
}

* në këtë shembull u bë një pyetje në tabelë përdoruesit. Rezultati i pyetjes vendoset në një variabël $rezultat. Më pas përdoret lak derisa, çdo përsëritje e të cilit merr një grup të dhënash dhe e vendos atë në një ndryshore $ masë— në çdo përsëritje ne punojmë me një rresht të bazës së të dhënave.

Funksioni mysql_fetch_array() i përdorur kthen një grup shoqërues, i cili është i përshtatshëm për të punuar me të, por ekziston gjithashtu një alternativë - mysql_fetch_row (), e cila kthen një grup të rregullt të numëruar.

Mbrojtja

Nëse keni nevojë të përfshini një karakter të veçantë në vargun e pyetjes, për shembull, %, ju duhet të përdorni escapeing duke përdorur karakterin backslash - \

Për shembull:

* nëse e drejtoni një pyetje të tillë pa ikur, shenja % do të interpretohet si çdo numër karakteresh pas 100.

Kjo eshte e gjitha. Nëse keni nevojë për ndihmë për plotësimin e një kërkese, ju lutem më dërgoni email

Shprehjet e tabelës quhen nënpyetje që përdoren aty ku pritet prania e një tabele. Ekzistojnë dy lloje të shprehjeve të tabelës:

    tabela të prejardhura;

    shprehjet e përgjithësuara të tabelës.

Këto dy forma të shprehjeve të tabelës diskutohen në nënseksionet e mëposhtme.

Tabelat e prejardhura

Tabela e prejardhurështë një shprehje tabele e përfshirë në klauzolën FROM të një pyetjeje. Tabelat e prejardhura mund të përdoren në rastet kur përdorimi i pseudonimeve të kolonave nuk është i mundur sepse përkthyesi SQL përpunon një deklaratë tjetër përpara se pseudonimi të njihet. Shembulli i mëposhtëm tregon një përpjekje për të përdorur një pseudonim kolone në një situatë ku një klauzolë tjetër po përpunohet përpara se të njihet pseudonimi:

PËRDORIMI SampleDb; ZGJIDH MUAJIN(EnterDate) si hyrje_muaj FROM Works_on GROUP BY enter_month;

Përpjekja për të ekzekutuar këtë pyetje do të prodhojë mesazhin e mëposhtëm të gabimit:

Msg 207, Niveli 16, Shteti 1, Rreshti 5 Emri i kolonës "enter_month" është i pavlefshëm. (Mesazhi 207: Niveli 16, Gjendja 1, Rreshti 5 Emri i pavlefshëm i kolonës enter_month)

Arsyeja e gabimit është se klauzola GROUP BY përpunohet përpara se të përpunohet lista përkatëse e deklaratës SELECT dhe pseudonimi i kolonës enter_month është i panjohur kur grupi përpunohet.

Ky problem mund të zgjidhet duke përdorur një tabelë të prejardhur që përmban pyetjen e mëparshme (pa klauzolën GROUP BY) sepse klauzola FROM ekzekutohet përpara klauzolës GROUP BY:

PËRDORIMI SampleDb; SELECT enter_month FROM (SELECT MUAJ(EnterDate) as enter_month FROM Works_on) AS m GROUP BY enter_month;

Rezultati i kësaj pyetjeje do të jetë si ky:

Në mënyrë tipike, një shprehje e tabelës mund të vendoset kudo në një deklaratë SELECT ku mund të shfaqet një emër tabele. (Rezultati i një shprehjeje tabele është gjithmonë një tabelë ose, në raste të veçanta, një shprehje.) Shembulli i mëposhtëm tregon përdorimin e një shprehjeje tabele në listën e përzgjedhjes së një deklarate SELECT:

Rezultati i kësaj pyetjeje:

Shprehje gjenerike të tabelës

Shprehje e zakonshme e tabelës (OTB)është një shprehje e emërtuar e tabelës e mbështetur nga gjuha Transact-SQL. Shprehjet e zakonshme të tabelës përdoren në dy llojet e mëposhtme të pyetjeve:

    jo-rekurzive;

    rekursive.

Këto dy lloje kërkesash diskutohen në seksionet e mëposhtme.

OTB dhe pyetje jo-rekurzive

Forma jo-rekursive e OTB mund të përdoret si një alternativë ndaj tabelave dhe pamjeve të prejardhura. Në mënyrë tipike OTB përcaktohet nga ME klauzola dhe një pyetje shtesë që referon emrin e përdorur në klauzolën WITH. Në Transact-SQL, kuptimi i fjalës kyçe WITH është i paqartë. Për të shmangur paqartësinë, deklarata që i paraprin deklaratës ME duhet të përfundojë me një pikëpresje.

PËRDORIMI AdventureWorks2012; SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue > (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") AND Freight > (SELECT AVG(TotalDue)HederaRHE)FROM 005 ")/2.5;

Kërkesa në këtë shembull zgjedh porositë, taksat totale të të cilave (TotalDue) janë më të mëdha se mesatarja e të gjitha taksave dhe tarifat e transportit të të cilave (Mallrat) janë më të mëdha se 40% e taksave mesatare. Vetia kryesore e këtij pyetësori është gjatësia e tij, pasi nënpyetja duhet të shkruhet dy herë. Një mënyrë e mundshme për të reduktuar sasinë e ndërtimit të pyetjeve është krijimi i një pamjeje që përmban një nënpyetje. Por kjo zgjidhje është paksa e komplikuar sepse kërkon krijimin e një pamjeje dhe më pas fshirjen e saj pasi pyetja të ketë përfunduar ekzekutimin. Një qasje më e mirë do të ishte krijimi i një OTB. Shembulli i mëposhtëm tregon përdorimin e OTB jo-rekurzive, i cili shkurton përkufizimin e pyetjes më sipër:

PËRDORIMI AdventureWorks2012; WITH price_calc(viti_2005) AS (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") SELECT SalesOrderID FROM Sales.SalesOrderHeader WHEREOrderHeader WHERE FrekuencaDue > FREE_05Cmimi SELECTRO TotalM0_005cVit. Çmimi ROM_cal c ) /2.5;

Sintaksa e klauzolës WITH në pyetjet jo-rekurzive është si më poshtë:

Parametri cte_name përfaqëson emrin OTB që përcakton tabelën që rezulton, dhe parametri kolonë_list paraqet listën e kolonave të shprehjes së tabelës. (Në shembullin e mësipërm, OTB quhet price_calc dhe ka një kolonë, viti_2005.) Parametri inner_query përfaqëson një deklaratë SELECT që specifikon grupin e rezultateve të shprehjes përkatëse të tabelës. Shprehja e përcaktuar e tabelës mund të përdoret më pas në pyetësorin_outer. (Kërkesa e jashtme në shembullin e mësipërm përdor OTB price_calc dhe kolonën e saj viti_2005 për të thjeshtuar pyetjen e dyfishtë të mbivendosur.)

OTB dhe pyetje rekursive

Ky seksion paraqet material me kompleksitet të shtuar. Prandaj, kur e lexoni për herë të parë, rekomandohet ta anashkaloni dhe t'i ktheheni më vonë. OTB-të mund të përdoren për të zbatuar rekursione sepse OTB-të mund të përmbajnë referenca për veten e tyre. Sintaksa bazë OTB për një pyetje rekursive duket si kjo:

Parametrat cte_name dhe column_list kanë të njëjtin kuptim si në OTB për pyetjet jo-rekurzive. Trupi i një klauzole WITH përbëhet nga dy pyetje të kombinuara nga operatori UNION TË GJITHA. Pyetja e parë thirret vetëm një herë dhe fillon të grumbullojë rezultatin e rekursionit. Operandi i parë i operatorit UNION ALL nuk i referohet OTB-së. Ky pyetje quhet një pyetje referencë ose burim.

Pyetja e dytë përmban një referencë për OTB dhe përfaqëson pjesën e tij rekursive. Për shkak të kësaj, ai quhet një anëtar rekurziv. Në thirrjen e parë në pjesën rekursive, referenca OTB përfaqëson rezultatin e pyetjes së referencës. Anëtari rekurziv përdor rezultatin e thirrjes së parë të pyetjes. Pas kësaj, sistemi thërret përsëri pjesën rekursive. Një thirrje për një anëtar rekurziv ndalon kur një thirrje e mëparshme ndaj tij kthen një grup të zbrazët të rezultateve.

Operatori UNION ALL bashkohet me rreshtat e akumuluar aktualisht, si dhe me rreshtat shtesë të shtuara nga thirrja aktuale te anëtari rekurziv. (Prania e operatorit UNION ALL do të thotë që rreshtat e kopjuar nuk do të hiqen nga rezultati.)

Së fundi, parametri outer_query specifikon pyetjen e jashtme që përdor OTB për të rikthyer të gjitha thirrjet në bashkimin e të dy anëtarëve.

Për të demonstruar formën rekursive të OTB, ne përdorim tabelën Aeroplan të përcaktuar dhe të mbushur me kodin e treguar në shembullin më poshtë:

PËRDORIMI SampleDb; KRIJO TABELA Aeroplani (Përmban montim VARCHAR(10), Përmbajtur montim VARCHAR(10), Sasia e Përmbajtur INT, Kostoja Njësi DECIMAL (6,2)); INSERT INTO INTO Aeroplane VALUES ("Airplane", "Fuselage", 1, 10); INSERT INTO VALUES Aeroplane ("Airplane", "Wings", 1, 11); INSERT INTO VALUES Aeroplan ("Airplane", "Tail", 1, 12); INSERT INTO VALUES Aeroplan ("Fuselage", "Salon", 1, 13); INSERT INTO VLERAT E Aeroplanit ("Fuselage", "Cockpit", 1, 14); INSERT INTO VALUES Aeroplan ("Fuselage", "Nose",1, 15); INSERT INTO VALUES Aeroplan ("Kabina", NULL, 1,13); INSERT INTO VALUES Aeroplan ("Cockpit", NULL, 1, 14); INSERT INTO VALUES Aeroplan ("Hundë", NULL, 1, 15); INSERT INTO VALUES Aeroplan ("Wings", NULL,2, 11); INSERT INTO VALUES Aeroplan ("Tail", NULL, 1, 12);

Tabela e aeroplanit ka katër kolona. Kolona ContainingAssembly identifikon asamblenë dhe kolona ContainedAssembly identifikon pjesët (një nga një) që përbëjnë asamblenë përkatëse. Figura më poshtë tregon një ilustrim grafik të një lloji të mundshëm avioni dhe pjesëve përbërëse të tij:

Tabela e aeroplanit përbëhet nga 11 rreshtat e mëposhtëm:

Shembulli i mëposhtëm përdor klauzolën WITH për të përcaktuar një pyetje që llogarit koston totale të çdo ndërtimi:

PËRDORIMI SampleDb; ME listën_e_pjesëve(asambleja1, sasia, kostoja) AS (ZGJIDHNI që përmban montimin, sasinë e përmbajtur, koston e njësisë FROM aeroplan WHERE ContainedAssembly IS NULL UNION ALL SELECT a.Përmban Montimin, a.SasinëDHQ,Contained. ) FROM list_of_parts l, Airplane a WHERE l.assembly1 = a.ContainedAssembly) SELECT assembly1 "Pjes", sasia "Sasia", kosto "Çmimi" NGA lista_e_pjeseve;

Klauzola WITH përcakton një listë OTB të quajtur list_of_parts, e përbërë nga tre kolona: montimi1, sasia dhe kostoja. Deklarata e parë SELECT në shembull thirret vetëm një herë për të ruajtur rezultatet e hapit të parë të procesit të rekursionit. Deklarata SELECT në rreshtin e fundit të shembullit shfaq rezultatin e mëposhtëm.

Gjuha SQL përdoret për të marrë të dhëna nga baza e të dhënave. SQL është një gjuhë programimi që i ngjan shumë anglishtes, por është menduar për programet e menaxhimit të bazës së të dhënave. SQL përdoret në çdo pyetje në Access.

Të kuptuarit se si funksionon SQL ju ndihmon të krijoni pyetje më të sakta dhe e bën më të lehtë korrigjimin e pyetjeve që japin rezultate të pasakta.

Ky është një artikull nga një seri artikujsh rreth gjuhës SQL për Access. Ai përshkruan bazat e përdorimit të SQL për të marrë të dhëna dhe ofron shembuj të sintaksës SQL.

Në këtë artikull

Çfarë është SQL?

SQL është një gjuhë programimi e krijuar për të punuar me grupe faktesh dhe marrëdhëniet ndërmjet tyre. Programet e menaxhimit të bazës së të dhënave relacionale si Microsoft Office Access përdorin SQL për të manipuluar të dhënat. Ndryshe nga shumë gjuhë programimi, SQL është i lexueshëm dhe i kuptueshëm edhe për fillestarët. Ashtu si shumë gjuhë programimi, SQL është një standard ndërkombëtar i njohur nga komitetet e standardeve si ISO dhe ANSI.

Grupet e të dhënave përshkruhen në SQL për të ndihmuar në përgjigjen e pyetjeve. Kur përdorni SQL, duhet të përdorni sintaksën e duhur. Sintaksa është një grup rregullash që lejojnë kombinimin e saktë të elementeve të një gjuhe. Sintaksa SQL bazohet në sintaksën angleze dhe ndan shumë elementë me sintaksën e Visual Basic for Applications (VBA).

Për shembull, një deklaratë e thjeshtë SQL që merr një listë të mbiemrave për kontaktet me emrin Mary mund të duket kështu:

ZGJIDH mbiemrin
NGA Kontaktet
WHERE Emri_Emri = "Maria";

Shënim: Gjuha SQL përdoret jo vetëm për të kryer operacione mbi të dhënat, por edhe për të krijuar dhe ndryshuar strukturën e objekteve të bazës së të dhënave, siç janë tabelat. Pjesa e SQL që përdoret për të krijuar dhe modifikuar objektet e bazës së të dhënave quhet DDL. DDL nuk mbulohet në këtë artikull. Për më shumë informacion, shihni Krijoni ose modifikoni tabelat ose indekset duke përdorur një pyetje për përkufizimin e të dhënave.

ZGJIDHni deklaratat

Deklarata SELECT përdoret për të përshkruar një grup të dhënash në SQL. Ai përmban një përshkrim të plotë të grupit të të dhënave që duhet të merren nga baza e të dhënave, duke përfshirë sa vijon:

    tabelat që përmbajnë të dhëna;

    lidhjet ndërmjet të dhënave nga burime të ndryshme;

    fushat ose llogaritjet në bazë të të cilave përzgjidhen të dhënat;

    kushtet e përzgjedhjes që duhet të plotësojnë të dhënat e përfshira në rezultatin e pyetjes;

    nevoja dhe mënyra e renditjes.

Deklaratat SQL

Një deklaratë SQL përbëhet nga disa pjesë të quajtura klauzola. Çdo klauzolë në një deklaratë SQL ka një qëllim. Kërkohen disa oferta. Tabela më poshtë tregon deklaratat SQL më të përdorura.

Deklarata SQL

Përshkrim

E detyrueshme

Përcakton fushat që përmbajnë të dhënat e kërkuara.

Përcakton tabela që përmbajnë fushat e specifikuara në klauzolën SELECT.

Përcakton kushtet e përzgjedhjes së fushës që duhet të plotësojnë të gjitha të dhënat e përfshira në rezultate.

Përcakton rendin e renditjes së rezultateve.

Në një deklaratë SQL që përmban funksione grumbullimi, specifikon fushat për të cilat një vlerë përmbledhëse nuk llogaritet në klauzolën SELECT.

Vetëm nëse fusha të tilla janë të pranishme

Një deklaratë SQL që përmban funksione grumbullimi përcakton kushtet që zbatohen për fushat për të cilat një vlerë përmbledhëse llogaritet në klauzolën SELECT.

Kushtet SQL

Çdo fjali SQL përbëhet nga terma që mund të krahasohen me pjesë të të folurit. Tabela më poshtë tregon llojet e termave SQL.

Termi SQL

Pjesë e krahasueshme e të folurit

Përkufizimi

Shembull

identifikues

emër

Një emër i përdorur për të identifikuar një objekt të bazës së të dhënave, siç është emri i fushës.

Klientët.[Numri i telefonit]

operatori

folje ose ndajfolje

Një fjalë kyçe që përfaqëson ose modifikon një veprim.

konstante

emër

Një vlerë që nuk ndryshon, si një numër ose NULL.

shprehje

mbiemër

Një kombinim i identifikuesve, operatorëve, konstanteve dhe funksioneve të krijuara për të llogaritur një vlerë të vetme.

>= Produktet.[Çmimi]

Klauzolat bazë SQL: SELECT, FROM dhe WHERE

Formati i përgjithshëm i deklaratave SQL është:

ZGJIDH fushën_1
NGA tabela_1
kriteri WHERE_1
;

Shënime:

    Qasja nuk respekton ndërprerjet e linjës në deklaratat SQL. Pavarësisht kësaj, rekomandohet të filloni çdo fjali në një rresht të ri në mënyrë që deklarata SQL të jetë e lehtë për t'u lexuar si për personin që e ka shkruar atë ashtu edhe për të gjithë të tjerët.

    Çdo deklaratë SELECT përfundon me një pikëpresje (;). Pikëpresja mund të shfaqet ose në fund të fjalisë së fundit ose në një rresht të veçantë në fund të deklaratës SQL.

Shembull në Access

Shembulli më poshtë tregon se si mund të duket një deklaratë SQL për një pyetje të thjeshtë të përzgjedhjes në Access.

1. Klauzola SELECT

2. Klauzola NGA

3. Klauzola WHERE

Le të shohim shembullin fjali për fjali për të kuptuar se si funksionon sintaksa SQL.

Klauzola SELECT

SELECT,Kompania

Kjo është një klauzolë SELECT. Ai përmban një deklaratë (SELECT) e ndjekur nga dy identifikues ("[Adresa Email]" dhe "Kompania").

Nëse identifikuesi përmban hapësira ose karaktere të veçanta (për shembull, "Adresa e emailit"), ai duhet të vendoset në kllapa drejtkëndëshe.

Klauzola SELECT nuk kërkon që ju të specifikoni tabelat që përmbajnë fushat dhe nuk mund të specifikoni kushtet e përzgjedhjes që duhet të plotësohen nga të dhënat e përfshira në rezultate.

Në një deklaratë SELECT, klauzola SELECT gjithmonë vjen përpara klauzolës FROM.

Klauzola NGA

NGA Kontaktet

Kjo është një klauzolë FROM. Ai përmban një deklaratë (FROM) e ndjekur nga një identifikues (Kontaktet).

Klauzola FROM nuk specifikon fushat për të zgjedhur.

Klauzola WHERE

WHERE City = "Seattle"

Kjo është klauzola WHERE. Ai përmban një deklaratë (KU) e ndjekur nga shprehja (Qyteti = "Rostov").

Ka shumë gjëra që mund të bëni me klauzolat SELECT, FROM dhe WHERE. Për më shumë informacion rreth përdorimit të këtyre ofertave, shihni artikujt e mëposhtëm:

Renditja e rezultateve: ORDER BY

Ashtu si Microsoft Excel, Access ju lejon të renditni rezultatet e një pyetjeje në një tabelë. Duke përdorur klauzolën ORDER BY, mund të specifikoni gjithashtu se si renditen rezultatet kur pyetja ekzekutohet. Nëse përdoret një klauzolë ORDER BY, ajo duhet të shfaqet në fund të deklaratës SQL.

Klauzola ORDER BY përmban një listë fushash për të renditur, në të njëjtin rend në të cilin do të aplikohet renditja.

Për shembull, supozoni se fillimisht dëshironi të renditni rezultatet sipas fushës së kompanisë në rend zbritës dhe më pas, nëse ka regjistrime me të njëjtën vlerë të fushës së Kompanisë, renditini ato sipas fushës Adresa e Email-it në rend rritës. Klauzola ORDER BY do të duket kështu:

POROSI NGA Kompania DESC,

Shënim: Si parazgjedhje, Access i rendit vlerat në rend rritës (A në Z, nga më i vogli në më i madhi). Për të renditur vlerat në rend zbritës, duhet të specifikoni fjalën kyçe DESC.

Për më shumë informacion rreth klauzolës ORDER SIPAS klauzolës, shihni artikullin ORDER BY clause.

Puna me të dhënat përmbledhëse: klauzola GROUP BY dhe HAVING

Ndonjëherë ju duhet të punoni me të dhëna përmbledhëse, të tilla si shitjet totale për muajin ose artikujt më të shtrenjtë në magazinë. Për ta bërë këtë, klauzola SELECT aplikon një funksion agregat në fushë. Për shembull, nëse do të drejtonit një pyetje për të marrë numrin e adresave të emailit për secilën kompani, klauzola SELECT mund të duket si kjo:

Aftësia për të përdorur një funksion të caktuar agregat varet nga lloji i të dhënave në fushë dhe shprehja e dëshiruar. Për më shumë informacion rreth funksioneve të disponueshme të agregatit, shihni Funksionet Statistikore SQL.

Specifikimi i fushave që nuk përdoren në një funksion agregat: klauzola GROUP BY

Kur përdorni funksione agregate, zakonisht duhet të krijoni një klauzolë GROUP BY. Klauzola GROUP BY specifikon të gjitha fushat në të cilat funksioni agregat nuk zbatohet. Nëse funksionet agregate zbatohen në të gjitha fushat në pyetje, nuk keni nevojë të krijoni një klauzolë GROUP BY.

Klauzola GROUP BY duhet të ndjekë menjëherë klauzolën WHERE ose FROM nëse nuk ka klauzolë WHERE. Klauzola GROUP BY rendit fushat në të njëjtin rend si klauzola SELECT.

Le të vazhdojmë shembullin e mëparshëm. Në klauzolën SELECT, nëse funksioni agregat zbatohet vetëm në fushën [Adresa Email], atëherë klauzola GROUP BY do të duket kështu:

GRUPI SIPAS Kompanisë

Për më shumë informacion rreth klauzolës GROUP BY, shihni artikullin GROUP BY clause.

Kufizimi i vlerave të grumbulluara duke përdorur kushtet e grupimit: klauzola HAVING

Nëse duhet të specifikoni kushte për të kufizuar rezultatet, por fusha në të cilën dëshironi t'i zbatoni ato përdoret në një funksion agregat, nuk mund të përdorni një klauzolë WHERE. Në vend të kësaj duhet të përdoret klauzola HAVING. Klauzola HAVING funksionon njësoj si klauzola WHERE, por përdoret për të dhënat e grumbulluara.

Për shembull, supozoni se funksioni AVG (i cili llogarit mesataren) zbatohet në fushën e parë në klauzolën SELECT:

SELECT COUNT(), Kompani

Nëse dëshironi të kufizoni rezultatet e pyetjeve bazuar në vlerën e funksionit COUNT, nuk mund të aplikoni një kusht përzgjedhjeje në këtë fushë në klauzolën WHERE. Në vend të kësaj, kushti duhet të vendoset në klauzolën HAVING. Për shembull, nëse dëshironi që pyetja juaj të kthejë rreshtat vetëm nëse një kompani ka adresa të shumta emaili, mund të përdorni klauzolën e mëposhtme HAVING:

HAVING COUNT()>1

Shënim: Një pyetje mund të përfshijë një klauzolë WHERE dhe një klauzolë HAVING, me kushte përzgjedhjeje për fushat që nuk përdoren në funksionet statistikore të specifikuara në klauzolën WHERE dhe kushtet për fushat që përdoren në funksionet statistikore në klauzolën HAVING.

Për më shumë informacion rreth klauzolës HAVING, shihni artikullin HAVING clause.

Kombinimi i rezultateve të pyetjes: operatori UNION

Operatori UNION përdoret për të parë njëkohësisht të gjitha të dhënat e kthyera nga shumë pyetje të ngjashme të përzgjedhura si një grup i kombinuar.

Operatori UNION ju lejon të kombinoni dy deklarata SELECT në një. Deklaratat SELECT që bashkohen duhet të kenë të njëjtin numër dhe rend të fushave të daljes me të njëjtat ose të përputhshme lloje të dhënash. Kur një pyetje ekzekutohet, të dhënat nga çdo grup fushash që përputhen kombinohen në një fushë të vetme dalëse, kështu që dalja e pyetjes ka aq fusha sa çdo deklaratë individuale SELECT.

Shënim: Në pyetjet e bashkimit, llojet e të dhënave numerike dhe tekstuale janë të pajtueshme.

Duke përdorur operatorin UNION, mund të specifikoni nëse rreshtat e kopjuar, nëse ka, duhet të përfshihen në rezultatet e pyetjes. Për ta bërë këtë, përdorni fjalën kyçe ALL.

Një pyetje për të kombinuar dy deklarata SELECT ka sintaksën bazë të mëposhtme:

ZGJIDH fushën_1
NGA tabela_1
BASHKIM
ZGJIDH fushën_a
NGA tabela_a
;

Për shembull, supozoni se keni dy tabela të quajtura "Produkte" dhe "Shërbime". Të dyja tabelat përmbajnë fusha me emrin e produktit ose shërbimit, çmimin dhe informacionin e garancisë, si dhe një fushë që tregon ekskluzivitetin e produktit ose shërbimit të ofruar. Megjithëse tabelat e Produkteve dhe Shërbimeve ofrojnë lloje të ndryshme garancish, informacioni bazë është i njëjtë (nëse produktet ose shërbimet individuale janë të garantuara). Ju mund të përdorni pyetjen e mëposhtme të bashkimit për të bashkuar katër fusha nga dy tabela:

ZGJIDH emrin, çmimin, garancinë_e disponueshme, ofertën_ekskluzive
NGA Produktet
UNION TË GJITHA
ZGJIDH emrin, çmimin, garancinë_e disponueshme, ofertën ekskluzive
NGA Shërbimet
;

Për më shumë informacion rreth kombinimit të deklaratave SELECT duke përdorur operatorin UNION, shihni

Artikujt më të mirë mbi këtë temë