Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Windows 7, XP
  • Tutorial i ilustruar SQL për fillestarët. SQL "për dummies": çfarë duhet të dinë fillestarët

Tutorial i ilustruar SQL për fillestarët. SQL "për dummies": çfarë duhet të dinë fillestarët

Leran2002 9 Prill 2015 ora 12:31

Një libër shkollor mbi gjuhën SQL (DDL, DML) duke përdorur si shembull dialektin MS SQL Server. Pjesa e pare

  • Microsoft SQL Server,
  • SQL
  • Tutorial

Për çfarë është ky tutorial?

Ky tutorial është diçka si një "vulë e kujtesës sime" në gjuhën SQL (DDL, DML), d.m.th. Ky është informacion që është grumbulluar gjatë aktiviteteve të mia profesionale dhe ruhet vazhdimisht në kokën time. Ky është një minimum i mjaftueshëm për mua, i cili përdoret më shpesh kur punohet me bazat e të dhënave. Nëse ka nevojë për të përdorur konstruksione më të plota SQL, atëherë zakonisht i drejtohem bibliotekës MSDN që ndodhet në internet për ndihmë. Sipas mendimit tim, është shumë e vështirë të mbash gjithçka në kokën tënde, dhe nuk ka nevojë të veçantë për këtë. Por njohja e strukturave bazë është shumë e dobishme, sepse... ato janë të aplikueshme pothuajse në të njëjtën formë në shumë baza të dhënash relacionale, si Oracle, MySQL, Firebird. Dallimet janë kryesisht në llojet e të dhënave, të cilat mund të ndryshojnë në detaje. Nuk ka shumë konstruksione bazë SQL, dhe me praktikë të vazhdueshme ato memorizohen shpejt. Për shembull, për të krijuar objekte (tabela, kufizime, indekse, etj.), Mjafton të keni në dorë një mjedis redaktues teksti (IDE) për të punuar me bazën e të dhënave dhe nuk ka nevojë të studioni mjete vizuale të përshtatura për të punuar me një lloj specifik i bazës së të dhënave (MS SQL, Oracle, MySQL, Firebird, ...). Kjo është gjithashtu e përshtatshme sepse i gjithë teksti është para syve tuaj dhe nuk keni nevojë të kaloni nëpër skeda të shumta për të krijuar, për shembull, një indeks ose kufizim. Kur punoni vazhdimisht me një bazë të dhënash, krijimi, ndryshimi dhe veçanërisht rikrijimi i një objekti duke përdorur skriptet është shumë herë më i shpejtë sesa nëse e bëni atë në modalitetin vizual. Gjithashtu në modalitetin e shkrimit (dhe, në përputhje me rrethanat, me kujdesin e duhur), është më e lehtë të vendosni dhe kontrolloni rregullat për emërtimin e objekteve (mendimi im subjektiv). Për më tepër, skriptet janë të përshtatshme për t'u përdorur kur ndryshimet e bëra në një bazë të dhënash (për shembull, testi) duhet të transferohen në të njëjtën formë në një bazë të dhënash tjetër (produktive).

Gjuha SQL është e ndarë në disa pjesë, këtu do të shikoj 2 pjesët më të rëndësishme:
  • DML – Gjuha e manipulimit të të dhënave, e cila përmban konstruktet e mëposhtme:
    • SELECT – përzgjedhja e të dhënave
    • INSERT – futja e të dhënave të reja
    • UPDATE – përditësimi i të dhënave
    • DELETE - fshirja e të dhënave
    • MERGE – bashkimi i të dhënave
Sepse Unë jam një praktikues; do të ketë pak teori si e tillë në këtë libër shkollor dhe të gjitha ndërtimet do të shpjegohen duke përdorur shembuj praktikë. Për më tepër, unë besoj se një gjuhë programimi, dhe veçanërisht SQL, mund të zotërohet vetëm përmes praktikës, duke e përjetuar vetë dhe duke kuptuar se çfarë ndodh kur ekzekutoni këtë apo atë konstrukt.

Ky tekst shkollor është krijuar sipas parimit Hap pas Hapi, d.m.th. ju duhet ta lexoni atë në mënyrë sekuenciale dhe mundësisht të ndiqni menjëherë shembujt. Por nëse gjatë rrugës duhet të mësoni më shumë për një komandë të caktuar, atëherë përdorni një kërkim specifik në internet, për shembull, në bibliotekën MSDN.

Kur shkruajta këtë tutorial, përdora bazën e të dhënave MS SQL Server versioni 2014 dhe përdora MS SQL Server Management Studio (SSMS) për të ekzekutuar skriptet.

Shkurtimisht rreth MS SQL Server Management Studio (SSMS)

SQL Server Management Studio (SSMS) është një mjet për Microsoft SQL Server për konfigurimin, menaxhimin dhe administrimin e komponentëve të bazës së të dhënave. Ky mjet përmban një redaktues skripti (të cilin do ta përdorim kryesisht) dhe një program grafik që punon me objektet dhe cilësimet e serverit. Mjeti kryesor i SQL Server Management Studio është Object Explorer, i cili lejon përdoruesin të shikojë, të marrë dhe të menaxhojë objektet e serverit. Ky tekst është huazuar pjesërisht nga Wikipedia.

Për të krijuar një redaktues të ri skripti, përdorni butonin "New Query":

Për të ndryshuar bazën aktuale të të dhënave, mund të përdorni listën rënëse:

Për të ekzekutuar një komandë specifike (ose grup komandash), zgjidhni atë dhe shtypni butonin "Execute" ose butonin "F5". Nëse ka vetëm një komandë aktualisht në redaktues, ose ju duhet të ekzekutoni të gjitha komandat, atëherë nuk keni nevojë të zgjidhni asgjë.

Pas ekzekutimit të skripteve, veçanërisht atyre që krijojnë objekte (tabela, kolona, ​​indekse), për të parë ndryshimet, përdorni rifreskimin nga menyja e kontekstit duke theksuar grupin e duhur (për shembull, Tabelat), vetë tabelën ose grupin Kolona në të.

Në fakt, kjo është gjithçka që duhet të dimë për të plotësuar shembujt e dhënë këtu. Pjesa tjetër e programit SSMS është e lehtë për t'u mësuar vetë.

Pak teori

Një bazë të dhënash relacionale (RDB, ose më tej në kontekst thjesht DB) është një koleksion tabelash të ndërlidhura. Përafërsisht, një bazë të dhënash është një skedar në të cilin të dhënat ruhen në një formë të strukturuar.

DBMS – Sistemi i Menaxhimit të Bazave të të Dhënave, d.m.th. ky është një grup mjetesh për të punuar me një lloj specifik të bazës së të dhënave (MS SQL, Oracle, MySQL, Firebird, ...).

shënim
Sepse në jetë, në fjalimin bisedor, më së shumti themi: “Oracle DB”, apo edhe thjesht “Oracle”, në të vërtetë do të thotë “Oracle DBMS”, atëherë në kontekstin e këtij teksti mësimor ndonjëherë do të përdoret termi DB. Nga konteksti, mendoj se do të jetë e qartë se për çfarë saktësisht po flasim.

Një tabelë është një koleksion kolonash. Kolonat mund të quhen gjithashtu fusha ose kolona; të gjitha këto fjalë do të përdoren si sinonime që shprehin të njëjtën gjë.

Tabela është objekti kryesor i RDB; të gjitha të dhënat RDB ruhen rresht pas rreshti në kolonat e tabelës. Linjat dhe regjistrimet janë gjithashtu sinonime.

Për secilën tabelë, si dhe kolonat e saj, specifikohen emrat me të cilët ato aksesohen më pas.
Emri i objektit (emri i tabelës, emri i kolonës, emri i indeksit, etj.) në MS SQL mund të ketë një gjatësi maksimale prej 128 karakteresh.

Per referim– në bazën e të dhënave ORACLE, emrat e objekteve mund të kenë një gjatësi maksimale prej 30 karaktere. Prandaj, për një bazë të dhënash specifike, duhet të zhvilloni rregullat tuaja për emërtimin e objekteve në mënyrë që të përmbushni kufirin në numrin e karaktereve.

SQL është një gjuhë që ju lejon të kërkoni një bazë të dhënash duke përdorur një DBMS. Në një DBMS specifike, gjuha SQL mund të ketë një zbatim specifik (dialektin e vet).

DDL dhe DML janë një nëngrup i gjuhës SQL:

  • Gjuha DDL përdoret për të krijuar dhe modifikuar strukturën e bazës së të dhënave, d.m.th. për të krijuar/modifikuar/fshirë tabela dhe marrëdhënie.
  • Gjuha DML ju lejon të manipuloni të dhënat e tabelës, d.m.th. me linjat e saj. Kjo ju lejon të zgjidhni të dhëna nga tabelat, të shtoni të dhëna të reja në tabela, si dhe të përditësoni dhe fshini të dhënat ekzistuese.

Në SQL, mund të përdorni 2 lloje komentesh (me një rresht dhe me shumë rreshta):

Koment me një rresht
Dhe

/* koment me shumë rreshta */

Në fakt, kjo do të mjaftojë për teorinë.

DDL – Gjuha e përkufizimit të të dhënave

Për shembull, merrni parasysh një tabelë me të dhëna për punonjësit, në një formë të njohur për një person që nuk është programues:

Në këtë rast, kolonat e tabelës kanë këto emra: Numri i personelit, Emri i plotë, Data e lindjes, E-mail, Pozicioni, Departamenti.

Secila prej këtyre kolonave mund të karakterizohet nga lloji i të dhënave që përmban:

  • Numri i personelit – numër i plotë
  • Emri i plotë - varg
  • Data e lindjes - data
  • Email - varg
  • Pozicioni - varg
  • Departamenti - linjë
Lloji i kolonës është një karakteristikë që tregon se çfarë lloji të të dhënave mund të ruajë një kolonë e caktuar.

Për të filluar, do të jetë e mjaftueshme të mbani mend vetëm llojet e mëposhtme të të dhënave bazë të përdorura në MS SQL:

Kuptimi Shënimi në MS SQL Përshkrim
Varg me gjatësi të ndryshueshme varchar(N)
Dhe
nvarchar(N)
Duke përdorur numrin N, ne mund të specifikojmë gjatësinë maksimale të mundshme të vargut për kolonën përkatëse. Për shembull, nëse duam të themi se vlera e kolonës “Emri” mund të përmbajë maksimumi 30 karaktere, atëherë duhet të vendosim llojin e saj në nvarchar(30).
Dallimi midis varchar dhe nvarchar është se varchar ju lejon të ruani vargjet në formatin ASCII, ku një karakter zë 1 bajt dhe nvarchar ruan vargjet në formatin Unicode, ku çdo karakter zë 2 bajt.
Lloji varchar duhet të përdoret vetëm nëse jeni 100% i sigurt se fusha nuk do të ketë nevojë të ruajë karaktere Unicode. Për shembull, varchar mund të përdoret për të ruajtur adresat e emailit sepse... ato zakonisht përmbajnë vetëm karaktere ASCII.
Varg me gjatësi fikse char (N)
Dhe
nchar(N)
Ky lloj ndryshon nga një varg me gjatësi të ndryshueshme në atë që nëse gjatësia e vargut është më e vogël se N karaktere, atëherë ai gjithmonë mbushet në të djathtë në një gjatësi prej N me hapësira dhe ruhet në bazën e të dhënave në këtë formë, d.m.th. në bazën e të dhënave merr saktësisht N karaktere (ku një karakter merr 1 bajt për char dhe 2 bajt për nchar). Në praktikën time ky lloj përdoret shumë rrallë dhe nëse përdoret përdoret kryesisht në formatin char(1), d.m.th. kur një fushë përcaktohet nga një karakter i vetëm.
Numër i plotë ndër Ky lloj na lejon të përdorim vetëm numra të plotë në kolonë, si pozitivë ashtu edhe negativë. Për referencë (tani kjo nuk është aq e rëndësishme për ne), diapazoni i numrave që lejon lloji int është nga -2,147,483,648 në 2,147,483,647. Zakonisht ky është lloji kryesor që përdoret për të specifikuar identifikuesit.
Numër real ose real noton Me fjalë të thjeshta, këta janë numra që mund të përmbajnë një pikë dhjetore (presje).
datë datë Nëse kolona duhet të ruajë vetëm datën, e cila përbëhet nga tre komponentë: Dita, Muaji dhe Viti. Për shembull, 15.02.2014 (15 shkurt 2014). Ky lloj mund të përdoret për kolonën "Data e pranimit", "Data e lindjes" etj., d.m.th. në rastet kur është e rëndësishme për ne të regjistrojmë vetëm datën, ose kur komponenti i kohës nuk është i rëndësishëm për ne dhe mund të hidhet poshtë ose nëse nuk dihet.
Koha koha Ky lloj mund të përdoret nëse kolona duhet të ruajë vetëm të dhëna kohore, d.m.th. Orë, minuta, sekonda dhe milisekonda. Për shembull, 17:38:31.3231603
Për shembull, çdo ditë "Ora e nisjes së fluturimit".
Data dhe ora ora e datës Ky lloj ju lejon të ruani njëkohësisht datën dhe kohën. Për shembull, 02/15/2014 17:38:31.323
Për shembull, kjo mund të jetë data dhe ora e një ngjarjeje.
Flamuri pak Ky lloj është i përshtatshëm për t'u përdorur për të ruajtur vlerat e formës "Po"/"Jo", ku "Po" do të ruhet si 1 dhe "Jo" do të ruhet si 0.

Gjithashtu, vlera e fushës, nëse nuk është e ndaluar, mund të mos specifikohet; fjala kyçe NULL përdoret për këtë qëllim.

Për të ekzekutuar shembujt, le të krijojmë një bazë të dhënash testimi të quajtur Test.

Një bazë të dhënash e thjeshtë (pa specifikuar parametra shtesë) mund të krijohet duke ekzekutuar komandën e mëposhtme:

Testi i KRIJIMIT TË BAZAVE TË TË DHËNAVE
Mund ta fshini bazën e të dhënave me komandën (duhet të jeni shumë të kujdesshëm me këtë komandë):

DOP DATABASE Test
Për të kaluar në bazën tonë të të dhënave, mund të ekzekutoni komandën:

Testi i PËRDORIMIT
Përndryshe, zgjidhni bazën e të dhënave Test nga lista rënëse në zonën e menysë SSMS. Kur punoj, unë shpesh përdor këtë metodë të kalimit midis bazave të të dhënave.

Tani në bazën tonë të të dhënave mund të krijojmë një tabelë duke përdorur përshkrimet ashtu siç janë, duke përdorur hapësira dhe karaktere cirilike:

KRIJO TABELE [Punonjës]([Numri i personelit] int, [Emri] nvarchar(30), [Data e lindjes] data, nvarchar(30), [Pozicioni] nvarchar(30), [Departamenti] nvarchar(30))
Në këtë rast, do të na duhet t'i vendosim emrat në kllapa katrore […].

Por në bazën e të dhënave, për lehtësi më të madhe, është më mirë të specifikoni të gjithë emrat e objekteve në latinisht dhe të mos përdorni hapësira në emra. Në MS SQL, zakonisht në këtë rast secila fjalë fillon me një shkronjë të madhe, për shembull, për fushën "Numri i personelit", mund të vendosim emrin Numri i personelit. Ju gjithashtu mund të përdorni numra në emër, për shembull, PhoneNumber1.

Në një shënim
Në disa DBMS, formati i mëposhtëm i emërtimit "PHONE_NUMBER" mund të jetë më i preferueshëm; për shembull, ky format përdoret shpesh në bazën e të dhënave ORACLE. Natyrisht, kur specifikoni një emër fushe, është e dëshirueshme që ai të mos përkojë me fjalët kyçe të përdorura në DBMS.

Për këtë arsye, mund të harroni sintaksën e kllapave katrore dhe të fshini tabelën [Punonjësit]:

TABELA E SHQYRTIMIT [Punonjësit]
Për shembull, një tabelë me punonjës mund të quhet "Punonjës" dhe fushave të saj mund të jepen emrat e mëposhtëm:

  • ID – Numri i personelit (ID-ja e punonjësit)
  • Emri - emri i plotë
  • Ditëlindja - Data e lindjes
  • Email – Email
  • Pozicioni - Pozicioni
  • Departamenti - Departamenti
Shumë shpesh fjala ID përdoret për të emërtuar një fushë identifikuese.

Tani le të krijojmë tabelën tonë:

KRIJON TABELA Punonjësit(ID int, Emri nvarchar(30), Data e ditëlindjes, Email nvarchar(30), Pozicioni nvarchar(30), Departamenti nvarchar(30))
Për të specifikuar kolonat e kërkuara, mund të përdorni opsionin NOT NULL.

Për një tabelë ekzistuese, fushat mund të ripërcaktohen duke përdorur komandat e mëposhtme:

Përditëso fushën ID ALTER TABLE Punonjësit ALTER KOLUMN ID int NOT NULL -- përditëso fushën e emrit ALTER TABLE Punonjësit ALTER COLUMN Emri nvarchar(30) NOT NULL

Në një shënim
Koncepti i përgjithshëm i gjuhës SQL mbetet i njëjtë për shumicën e DBMS-ve (të paktën, kjo është ajo që unë mund të gjykoj nga DBMS-të me të cilat kam punuar). Dallimet midis DDL në DBMS të ndryshme kryesisht qëndrojnë në llojet e të dhënave (jo vetëm emrat e tyre mund të ndryshojnë këtu, por edhe detajet e zbatimit të tyre), dhe vetë specifikat e zbatimit të gjuhës SQL gjithashtu mund të ndryshojnë pak (d.m.th. thelbi i komandave është i njëjtë, por mund të ketë dallime të vogla në dialekt, mjerisht, por nuk ka një standard). Pasi të keni zotëruar bazat e SQL, mund të kaloni lehtësisht nga një DBMS në një tjetër, sepse... Në këtë rast, do t'ju duhet vetëm të kuptoni detajet e zbatimit të komandave në DBMS-në e re, d.m.th. në shumicën e rasteve, mjafton thjesht të vizatoni një analogji.

Krijimi i një tabele CREATE TABLE Employees(ID int, -- në ORACLE lloji int është ekuivalenti (mbështjellësi) për numrin(38) Emri nvarchar2(30), -- nvarchar2 në ORACLE është ekuivalent me nvarchar në MS SQL Data e ditëlindjes, Email nvarchar2(30) , Pozicioni nvarchar2(30), Departamenti nvarchar2(30)); -- përditësimi i fushave ID dhe Emri (këtu përdoret MODIFY(...) në vend të ALTER COLUMN) ALTER TABLE Punonjësit MODIFY(ID int NOT NULL,Emri nvarchar2(30) NOT NULL); -- duke shtuar PK (në këtë rast konstruksioni duket i njëjtë si në MS SQL, do të tregohet më poshtë) ALTER TABLE Punonjësit SHTO KUFIZIM PK_Punonjësit PRIMARY KEY(ID);
Për ORACLE ka dallime në drejtim të zbatimit të llojit varchar2; kodimi i tij varet nga cilësimet e bazës së të dhënave dhe teksti mund të ruhet, për shembull, në kodimin UTF-8. Për më tepër, gjatësia e fushës në ORACLE mund të specifikohet si në bajt ashtu edhe në karaktere; për këtë përdoren opsione shtesë BYTE dhe CHAR, të cilat specifikohen pas gjatësisë së fushës, për shembull:

EMRI varchar2(30 BYTE) -- kapaciteti i fushës do të jetë 30 bajtë EMRI varchar2(30 CHAR) -- kapaciteti i fushës do të jetë 30 karaktere
Cili opsion do të përdoret si parazgjedhje BYTE ose CHAR, në rastin e thjesht specifikimit të llojit varchar2(30) në ORACLE, varet nga cilësimet e bazës së të dhënave dhe ndonjëherë mund të vendoset në cilësimet IDE. Në përgjithësi, ndonjëherë mund të ngatërroheni lehtësisht, kështu që në rastin e ORACLE, nëse përdoret lloji varchar2 (dhe kjo ndonjëherë justifikohet këtu, për shembull, kur përdorni kodimin UTF-8), unë preferoj të shkruaj në mënyrë eksplicite CHAR (pasi zakonisht është më i përshtatshëm për të llogaritur gjatësinë e vargut në karaktere).

Por në këtë rast, nëse tashmë ka disa të dhëna në tabelë, atëherë për ekzekutim të suksesshëm të komandave është e nevojshme që fushat ID dhe Emri të plotësohen në të gjitha rreshtat e tabelës. Le ta demonstrojmë këtë me një shembull: futni të dhënat në tabelë në fushat ID, Pozicioni dhe Departamenti; kjo mund të bëhet me skriptin e mëposhtëm:

INSERT Punonjësit(ID,Pozicioni,Departamenti) VALUES (1000,N"Drejtor",N"Administrim"), (1001,N"Programues",N"IT"), (1002,N"Kontabilist",N"Kontabilitet" ), (1003,N"Programues i vjetër",N"IT")
Në këtë rast, komanda INSERT do të gjenerojë gjithashtu një gabim, sepse Gjatë futjes, ne nuk specifikuam vlerën e fushës së kërkuar Emri.
Nëse këto të dhëna i kishim tashmë në tabelën origjinale, atëherë komanda "ALTER TABLE Punonjësit ALTER COLUMN ID int NOT NULL" do të ekzekutohej me sukses dhe komanda "ALTER TABLE Employees ALTER COLUMN Emri int NOT NULL" do të prodhonte një mesazh gabimi. që fusha Emri përmban vlera NULL (të paspecifikuara).

Le të shtojmë vlera për fushën Emri dhe të plotësojmë përsëri të dhënat:


Opsioni NOT NULL mund të përdoret drejtpërdrejt edhe kur krijoni një tabelë të re, d.m.th. në kontekstin e komandës CREATE TABLE.

Së pari, fshini tabelën duke përdorur komandën:

TABELA E GJITHSHME Punonjësit
Tani le të krijojmë një tabelë me kolonat e kërkuara ID dhe Emri:

KRIJO TABELA E Punonjësve(ID-ja NUK NULL, Emri nvarchar(30) JO NULL, Data e ditëlindjes, Email nvarchar(30), Pozicioni nvarchar(30), Departamenti nvarchar(30))
Ju gjithashtu mund të shkruani NULL pas emrit të kolonës, që do të thotë se vlerat NULL (të paspecifikuara) do të lejohen në të, por kjo nuk është e nevojshme, pasi kjo karakteristikë nënkuptohet si parazgjedhje.

Nëse, përkundrazi, dëshironi të bëni një kolonë ekzistuese opsionale, atëherë përdorni sintaksën e mëposhtme të komandës:

ALTER TABLE Punonjësit ALTER COLUMN Emri nvarchar(30) NULL
Ose thjesht:

ALTER TABLE Punonjësit ALTER COLUMN Emri nvarchar(30)
Me këtë komandë mund të ndryshojmë edhe llojin e fushës në një lloj tjetër të pajtueshëm, ose të ndryshojmë gjatësinë e saj. Për shembull, le të zgjerojmë fushën Emri në 50 karaktere:

ALTER TABLE Punonjësit ALTER COLUMN Emri nvarchar(50)

Çelesi primar

Kur krijoni një tabelë, është e dëshirueshme që ajo të ketë një kolonë unike ose një grup kolonash që është unike për secilën prej rreshtave të saj - një rekord mund të identifikohet në mënyrë unike nga kjo vlerë unike. Kjo vlerë quhet çelësi kryesor i tabelës. Për tabelën tonë të Punonjësve, një vlerë e tillë unike mund të jetë kolona ID (e cila përmban "Numrin e personelit të punonjësit" - edhe pse në rastin tonë kjo vlerë është unike për çdo punonjës dhe nuk mund të përsëritet).

Ju mund të krijoni një çelës primar për një tabelë ekzistuese duke përdorur komandën:

ALTER TABLE Punonjësit SHTO KUFIZIM PK_Punonjësit ÇELËSI PRIMAR(ID)
Ku "PK_Employees" është emri i kufizimit përgjegjës për çelësin primar. Në mënyrë tipike, çelësi kryesor emërtohet duke përdorur prefiksin "PK_" i ndjekur nga emri i tabelës.

Nëse çelësi kryesor përbëhet nga disa fusha, atëherë këto fusha duhet të renditen në kllapa, të ndara me presje:

Ndrysho emrin e tabelës TABELA_SHTO SHTO KUFIZIM kufizimin_emrin ÇELËSI KRYESOR (fusha1,fusha2,…)
Vlen të theksohet se në MS SQL, të gjitha fushat që përfshihen në çelësin primar duhet të kenë karakteristikën NOT NULL.

Çelësi primar mund të përcaktohet drejtpërdrejt edhe gjatë krijimit të një tabele, d.m.th. në kontekstin e komandës CREATE TABLE. Le të fshijmë tabelën:

TABELA E GJITHSHME Punonjësit
Dhe më pas do ta krijojmë duke përdorur sintaksën e mëposhtme:

KRIJO TABELËN Punonjësit(ID int NOT NULL, Emri nvarchar(30) JO NULL, Data e ditëlindjes, Email nvarchar(30), Pozicioni nvarchar(30), Departamenti nvarchar(30), KUFIZIMI PK_Punonjësit ÇELËSI PRIMAR (ID) -- përshkruaj të gjitha fushat si kufizim)
Pas krijimit, plotësoni tabelën me të dhëna:

INSERT Punonjësit(ID,Pozicioni,Departamenti,Emri) VLERAT (1000,N"Drejtor",N"Administrim",N"Ivanov I.I."), (1001,N"Programues",N"IT",N" Petrov P.P." ), (1002,N"Kontabilist",N"Kontabilitet",N"Sidorov S.S."), (1003,N"Programues i Larte",N"IT",N"Andreev A. A.")
Nëse çelësi kryesor në një tabelë përbëhet vetëm nga vlerat e një kolone, atëherë mund të përdorni sintaksën e mëposhtme:

KRIJON TABELA Punonjës (ID int NUK NULL KUFIZIM PK_Punonjësit ÇELËSI PRIMAR, -- specifiko si karakteristikë të fushës Emri nvarchar(30) NOT NULL, Data e ditëlindjes, Email nvarchar(30), Pozicioni nvarchar(30), Departamenti nvar (30) )
Në fakt, nuk duhet të specifikoni emrin e kufizimit, në të cilin rast do t'i caktohet një emër sistemi (si "PK__Employee__3214EC278DA42077"):

KRIJO TABELËZE Punonjësit(ID int NUK NULL, Emri nvarchar(30) JO NULL, Data e ditëlindjes, Email nvarchar(30), Pozicioni nvarchar(30), Departamenti nvarchar(30), ÇELËSI PRIMAR (ID)
Ose:

KRIJO TABELËN E Punonjësve (ID int NOT NULL ÇELËSI KRYESOR, Emri nvarchar(30) JO NULL, Data e ditëlindjes, Email nvarchar(30), Pozicioni nvarchar(30), Departamenti nvarchar(30))
Por unë do të rekomandoja që për tabelat e përhershme të vendosni gjithmonë në mënyrë eksplicite emrin e kufizimit, sepse Me një emër të specifikuar në mënyrë eksplicite dhe të kuptueshme, do të jetë më e lehtë ta manipuloni më vonë; për shembull, mund ta fshini:

ALTER TABLE Punonjësit HIQET KUFIZIMIN PK_Punonjësit
Por një sintaksë e tillë e shkurtër, pa specifikuar emrat e kufizimeve, është e përshtatshme për t'u përdorur kur krijoni tabela të përkohshme të bazës së të dhënave (emri i tabelës së përkohshme fillon me # ose ##), të cilat do të fshihen pas përdorimit.

Le të përmbledhim

Deri më tani ne kemi parë komandat e mëposhtme:
  • KRIJONI TABELA emri_tabela (lista e fushave dhe llojet e tyre, kufizimet) – përdoret për të krijuar një tabelë të re në bazën aktuale të të dhënave;
  • TABELA E RREZIMIT emri_tabela – përdoret për të fshirë një tabelë nga baza aktuale e të dhënave;
  • TABELA ALTER emri_tabele KOLONA ALTER kolona_emri... – përdoret për të përditësuar llojin e kolonës ose për të ndryshuar cilësimet e saj (për shembull, për të vendosur karakteristikën NULL ose NOT NULL);
  • TABELA ALTER emri_tabele SHTO KUFIZIM emri i kufizimit ÇELESI PRIMAR(fusha1, fusha2,...) – shtimi i një çelësi primar në një tabelë ekzistuese;
  • TABELA ALTER emri_tabele KUFIZIMI I RËZIMIT constraint_name – heq një kufizim nga tabela.

Pak për tavolinat e përkohshme

Ekstrakt nga MSDN. Ekzistojnë dy lloje tabelash të përkohshme në MS SQL Server: lokale (#) dhe globale (##). Tabelat e përkohshme lokale janë të dukshme vetëm për krijuesit e tyre derisa sesioni i lidhjes me shembullin e SQL Server përfundon kur ato krijohen për herë të parë. Tabelat e përkohshme lokale fshihen automatikisht pasi një përdorues shkëputet nga shembulli i SQL Server. Tabelat e përkohshme globale janë të dukshme për të gjithë përdoruesit gjatë çdo sesioni lidhjeje pas krijimit të atyre tabelave dhe fshihen kur të gjithë përdoruesit që u referohen atyre tabelave shkëputen nga shembulli i SQL Server.

Tabelat e përkohshme krijohen në bazën e të dhënave të sistemit tempdb, d.m.th. Duke i krijuar ato, ne nuk bllokojmë bazën e të dhënave kryesore; përndryshe, tabelat e përkohshme janë plotësisht identike me tabelat e zakonshme; ato gjithashtu mund të fshihen duke përdorur komandën DROP TABLE. Tabelat e përkohshme lokale (#) përdoren më shpesh.

Për të krijuar një tabelë të përkohshme, mund të përdorni komandën CREATE TABLE:

KRIJO TABELE #Temp(ID int, Emri nvarchar(30))
Meqenëse një tabelë e përkohshme në MS SQL është e ngjashme me një tabelë të rregullt, ajo gjithashtu mund të fshihet duke përdorur komandën DROP TABLE:

TABELA E RËZIMIT #Temp

Ju gjithashtu mund të krijoni një tabelë të përkohshme (si një tabelë e zakonshme) dhe ta plotësoni menjëherë me të dhënat e kthyera nga pyetja duke përdorur sintaksën SELECT ... INTO:

SELECT ID, Emri INTO #Temp FROM Punonjësit

Në një shënim
Zbatimi i tabelave të përkohshme mund të ndryshojë në DBMS të ndryshme. Për shembull, në DBMS ORACLE dhe Firebird, struktura e tabelave të përkohshme duhet të përcaktohet paraprakisht nga komanda CREATE GLOBAL TEMPORARY TABLE, duke treguar specifikat e ruajtjes së të dhënave në të, atëherë përdoruesi e sheh atë midis tabelave kryesore dhe punon me të. si me një tryezë të rregullt.

Normalizimi i bazës së të dhënave - ndarja në nëntabela (drejtori) dhe identifikimi i lidhjeve

Tabela jonë aktuale e punonjësve ka disavantazhin që në fushat Pozicioni dhe Departamenti përdoruesi mund të fusë çdo tekst, i cili kryesisht është i mbushur me gabime, pasi për një punonjës ai thjesht mund të tregojë "IT" si departament, dhe për një punonjës të dytë, për shembull, shkruani "Departamenti IT", i treti ka "IT". Si rezultat, do të jetë e paqartë se çfarë do të thoshte përdoruesi, d.m.th. A janë këta punonjës punonjës të të njëjtit departament, apo përdoruesi e ka përshkruar veten dhe këto janë 3 departamente të ndryshme? Për më tepër, në këtë rast, ne nuk do të mund të grupojmë saktë të dhënat për ndonjë raport, ku mund të jetë e nevojshme të tregohet numri i punonjësve nga secili departament.

Disavantazhi i dytë është vëllimi i ruajtjes së këtij informacioni dhe dyfishimi i tij, d.m.th. Për çdo punonjës, tregohet emri i plotë i departamentit, i cili kërkon hapësirë ​​në bazën e të dhënave për të ruajtur çdo karakter nga emri i departamentit.

E meta e tretë është vështirësia e përditësimit të këtyre fushave nëse emri i një pozicioni ndryshon, për shembull, nëse duhet të riemërtoni pozicionin "Programues" në "Programues i ri". Në këtë rast, do të duhet të bëjmë ndryshime në çdo rresht të tabelës, pozicioni i së cilës është i barabartë me "Programues".

Për të shmangur këto mangësi, përdoret i ashtuquajturi normalizimi i bazës së të dhënave - duke e ndarë atë në nëntabela dhe tabela referuese. Nuk është e nevojshme të futemi në xhunglën e teorisë dhe të studiojmë se cilat janë format normale; mjafton të kuptojmë thelbin e normalizimit.

Le të krijojmë 2 tabela drejtorie "Pozicionet" dhe "Departamentet", le t'i quajmë Pozicionet e para, dhe të dytin, përkatësisht, Departamentet:

KRIJO POZICIONET TABELE (ID int IDENTITY(1,1) NOT NULL KUFIZIM PK_Pozicionet ÇELËSI PRIMAR, Emri nvarchar(30) NOT NULL) KRIJO TABLE Departamentet(ID int IDENTITY(1,1) NOT NULL KUNSTRAINT Nam3MARYnEY ) JO NULL)
Vini re se këtu kemi përdorur opsionin e ri IDENTITY, i cili thotë se të dhënat në kolonën ID do të numërohen automatikisht, duke filluar nga 1, me rritje prej 1, d.m.th. Kur shtoni rekorde të reja, atyre do t'u caktohen vlerat 1, 2, 3, etj. Fusha të tilla zakonisht quhen auto-incrementing. Një tabelë mund të ketë vetëm një fushë të përcaktuar me veçorinë IDENTITY, dhe zakonisht, por jo domosdoshmërisht, kjo fushë është çelësi kryesor për atë tabelë.

Në një shënim
Në DBMS të ndryshme, zbatimi i fushave me një numërues mund të bëhet ndryshe. Në MySQL, për shembull, një fushë e tillë përcaktohet duke përdorur opsionin AUTO_INCREMENT. Në ORACLE dhe Firebird, ky funksionalitet mund të imitohej më parë duke përdorur SEQUENCE. Por me sa di unë, ORACLE tani ka shtuar opsionin GENERATED AS IDENTITY.

Le t'i plotësojmë këto tabela automatikisht, bazuar në të dhënat aktuale të regjistruara në fushat e Pozicionit dhe Departamentit të tabelës së Punonjësve:

Mbushim fushën Emri të tabelës Pozicionet me vlera unike nga fusha e pozicionit të tabelës së punonjësve INSERT Pozicionet(Emri) ZGJIDH Pozicionin e dallueshëm NGA Punonjësit WHERE Pozicioni NUK ËSHTË NULL - hidhni të dhënat për të cilat pozicioni nuk është specifikuar
Le të bëjmë të njëjtën gjë për tabelën e Departamenteve:

INSERT Departamentet(Emri) ZGJIDH Departamentin e NDRYSHEM NGA Punonjësit KU Departamenti NUK ËSHTË NULL
Nëse tani hapim tabelat Pozicionet dhe Departamentet, do të shohim një grup vlerash të numëruara për fushën ID:

SELECT * NGA Pozicionet

ZGJIDH * NGA Departamentet

Këto tabela tani do të luajnë rolin e librave të referencës për specifikimin e pozicioneve dhe departamenteve. Tani do t'i referohemi ID-ve të punës dhe departamentit. Para së gjithash, le të krijojmë fusha të reja në tabelën Punonjësit për të ruajtur të dhënat e identifikuesit:

Shto një fushë për pozicionin ID ALTER TABLE Punonjësit ADD PositionID int -- shto një fushë për ID-në e departamentit ALTER TABLE Punonjësit SHTO ID e Departamentit int
Lloji i fushave të referencës duhet të jetë i njëjtë si në drejtori, në këtë rast është int.

Ju gjithashtu mund të shtoni disa fusha në tabelë menjëherë me një komandë, duke renditur fushat e ndara me presje:

ALTER TABLE Punonjësit ADD PositionID int, DepartmentID int
Tani le të shkruajmë lidhje (kufizimet e referencës - ÇELËSI I HUAJ) për këto fusha në mënyrë që përdoruesi të mos ketë mundësinë të shkruajë në këto fusha vlera që nuk janë ndër vlerat e ID-së që gjenden në drejtori.

ALTER TABLE Punonjësit SHTO KUFIZIM FK_Employees_PositionID ÇELËSI I HUAJ(Pozicioni ID) REFERENCAT Pozicionet(ID)
Dhe ne do të bëjmë të njëjtën gjë për fushën e dytë:

ALTER TABLE Punonjësit SHTO KUFIZIM FK_Employees_DepartmentID ÇELËSI I HUAJ(ID Departamentit) REFERENCAT Departamentet(ID)
Tani përdoruesi do të jetë në gjendje të fusë vetëm vlerat e ID-së nga drejtoria përkatëse në këto fusha. Prandaj, për të përdorur një departament ose pozicion të ri, ai së pari do të duhet të shtojë një hyrje të re në drejtorinë përkatëse. Sepse Pozicionet dhe departamentet tani ruhen në drejtori në një kopje të vetme, kështu që për të ndryshuar emrin, mjafton ta ndryshoni atë vetëm në drejtori.

Emri i një kufizimi referencë është zakonisht një emër i përbërë, i përbërë nga prefiksi "FK_", i ndjekur nga emri i tabelës dhe i ndjekur nga një nënvizim, i ndjekur nga emri i fushës që i referohet identifikuesit të tabelës së referencës.

Një identifikues (ID) është zakonisht një vlerë e brendshme që përdoret vetëm për marrëdhëniet dhe ajo vlerë që ruhet atje është plotësisht indiferente në shumicën e rasteve, kështu që nuk ka nevojë të përpiqeni të hiqni qafe vrimat në sekuencën e numrave që lindin gjatë punës. me tabelën, për shembull, pas fshirjes së të dhënave nga drejtoria.

Ndrysho tabelën e tabelës SHTO KUFIZIM kufizimin_emrin ÇELËSI I HUAJ(fusha1,fusha2,…) REFERENCAT tabela_referenciale(fusha1,fusha2,…)
Në këtë rast, në tabelën “reference_tabela”, çelësi primar përfaqësohet nga një kombinim i disa fushave (fusha1, fusha2,...).

Në fakt, tani le të përditësojmë fushat PositionID dhe DepartmentID me vlerat e ID-së nga drejtoritë. Le të përdorim komandën DML UPDATE për këtë qëllim:

UPDATE e SET PositionID=(SELECT ID FROM Positions WHERE Name=e.Position), DepartmentID=(SELECT ID FROM Departments WHERE Name=e.Department) FROM Employees e
Le të shohim se çfarë ndodh duke ekzekutuar kërkesën:

SELECT * NGA Punonjësit

Kjo është e gjitha, fushat PositionID dhe DepartmentID janë të mbushura me identifikuesit që korrespondojnë me pozicionet dhe departamentet; fushat Pozicioni dhe Departamenti nuk nevojiten më në tabelën e Punonjësve, mund t'i fshini këto fusha:

ALTER TABLE Punonjësit DOP KOLONA Pozicioni,Departamenti
Tani tabela jonë duket si kjo:

SELECT * NGA Punonjësit

ID Emri ditëlindjen Email ID e pozicionit ID e Departamentit
1000 Ivanov I.I. I PAVLEFSHËM I PAVLEFSHËM 2 1
1001 Petrov P.P. I PAVLEFSHËM I PAVLEFSHËM 3 3
1002 Sidorov S.S. I PAVLEFSHËM I PAVLEFSHËM 1 2
1003 Andreev A.A. I PAVLEFSHËM I PAVLEFSHËM 4 3

Ato. Më në fund u hoqëm nga ruajtja e informacionit të tepërt. Tani, bazuar në numrat e punës dhe departamentit, ne mund të përcaktojmë pa mëdyshje emrat e tyre duke përdorur vlerat në tabelat e referencës:

SELECT e.ID,e.Emri,p.Emri PozicioniEmri,d.Emri Emri i Departamentit FROM Employees e LEFT JOIN Departamentet d ON d.ID=e.ID Departamentit LEFT JOIN Pozicionet p ON p.ID=e.Pozicioni ID

Në inspektorin e objekteve mund të shohim të gjitha objektet e krijuara për një tabelë të caktuar. Nga këtu mund të kryeni manipulime të ndryshme me këto objekte - për shembull, riemërtoni ose fshini objektet.

Vlen gjithashtu të theksohet se tabela mund t'i referohet vetvetes, d.m.th. ju mund të krijoni një lidhje rekursive. Për shembull, le të shtojmë një fushë tjetër ManagerID në tabelën tonë me punonjës, e cila do të tregojë punonjësin të cilit i raporton ky punonjës. Le të krijojmë një fushë:

ALTER TABLE Punonjësit SHTO ID e menaxherit int
Kjo fushë lejon një vlerë NULL; fusha do të jetë bosh nëse, për shembull, nuk ka eprorë mbi punonjësin.

Tani le të krijojmë një ÇELËS TË HUAJ për tabelën e Punonjësve:

ALTER TABLE Punonjësit SHTO KUFIZIM FK_Employees_ManagerID ÇELËSI I HUAJ (ID Menaxheri) REFERENCAT Punonjësit(ID)
Tani le të krijojmë një diagram dhe të shohim se si duken në të marrëdhëniet midis tabelave tona:

Si rezultat, ne duhet të shohim foton e mëposhtme (tabela e punonjësve është e lidhur me tabelat e pozicioneve dhe departamenteve, dhe gjithashtu i referohet vetes):

Së fundi, vlen të thuhet se çelësat e referencës mund të përfshijnë opsione shtesë ON DELETE CASCADE dhe ON UPDATE CASCADE, të cilat tregojnë se si të silleni kur fshini ose përditësoni një rekord që është referuar në tabelën e referencës. Nëse këto opsione nuk janë të specifikuara, atëherë ne nuk mund ta ndryshojmë ID-në në tabelën e drejtorisë për një rekord që është referuar nga një tabelë tjetër dhe gjithashtu nuk do të jemi në gjendje ta fshijmë një regjistrim të tillë nga drejtoria derisa të fshijmë të gjitha rreshtat që i referohen këtij rekord ose, Le të përditësojmë referencat në këto rreshta në një vlerë tjetër.

Për shembull, le të rikrijojmë tabelën duke specifikuar opsionin ON DELETE CASCADE për FK_Employees_DepartmentID:

DROP TABLE Punonjësit CREATE TABLE Punonjësit(ID int NOT NULL, Emri nvarchar(30), Data e ditëlindjes, Email nvarchar(30), PositionID int, DepartmentID int, ManagerID int, CONSTRAINT PK_Punonjësit KRYESOR KRYESOR (IDK_DeployNedparte), CONSTRAINT ) REFERENCAT Departamentet(ID) MBI FSHIJEN KASCADE, KUFIZIM FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCAT Pozicione(ID), KUFIZUAR FK_Employees_ManagerID FOREIGN KEY (MenaxheriID) PunonjësinEployeIDREFERENCE dita, ID e pozicionit, ID e Departamentit, ID e menaxherit )VLERA (1000,N"Ivanov I.I.","19550219",2,1,NULL), (1001,N"Petrov P.P.","19831203",3,3,1003), (1002 ,N"Sidorov S.S." "19760607", 1,2,1000), (1003, N"Andreev A.A.","19820417",4,3,1000)
Le të fshijmë departamentin me ID 3 nga tabela e Departamenteve:

FSHI Departamentet KU ID=3
Le të shohim të dhënat në tabelën e punonjësve:

SELECT * NGA Punonjësit

ID Emri ditëlindjen Email ID e pozicionit ID e Departamentit ID-ja e menaxherit
1000 Ivanov I.I. 1955-02-19 I PAVLEFSHËM 2 1 I PAVLEFSHËM
1002 Sidorov S.S. 1976-06-07 I PAVLEFSHËM 1 2 1000

Siç mund ta shihni, të dhënat për departamentin 3 nga tabela e punonjësve u fshinë gjithashtu.

Opsioni ON UPDATE CASCADE sillet në mënyrë të ngjashme, por është efektiv kur përditësohet vlera e ID-së në drejtori. Për shembull, nëse ndryshojmë ID-në e një pozicioni në drejtorinë e pozicioneve, atëherë në këtë rast ID-ja e Departamentit në tabelën Employees do të përditësohet në vlerën e re të ID-së që kemi vendosur në drejtori. Por në këtë rast thjesht nuk do të jetë e mundur të demonstrohet kjo, sepse kolona ID në tabelën Departamentet ka opsionin IDENTITY, i cili nuk do të na lejojë të ekzekutojmë pyetjen e mëposhtme (ndryshojmë ID-në e departamentit 3 në 30):

PËRDITËSONI Departamentet SET ID=30 KU ID=3
Gjëja kryesore është të kuptoni thelbin e këtyre 2 opsioneve ON DELETE CASCADE dhe ON UPDATE CASCADE. Unë i përdor këto opsione shumë rrallë dhe rekomandoj që të mendoni me kujdes përpara se t'i specifikoni në një kufizim referimi, sepse nëse fshini aksidentalisht një hyrje nga një tabelë drejtorie, kjo mund të çojë në probleme të mëdha dhe të krijojë një reaksion zinxhir.

Le të rivendosim departamentin 3:

Ne japim leje për të shtuar/ndryshuar vlerën e IDENTITY SET IDENTITY_INSERT Departamentet ON INSERT Departamentet(ID,Emri) VALUES(3,N"IT") -- ne ndalojmë shtimin/ndryshimin e vlerës së IDENTITY SET IDENTITY_INSERT Departamentet OFF
Le të pastrojmë plotësisht tabelën e punonjësve duke përdorur komandën TRUNCATE TABLE:

TRUNCATE TABLE Punonjësit
Dhe përsëri ne do t'i ngarkojmë të dhënat në të duke përdorur komandën e mëparshme INSERT:

INSERT Punonjësit (ID, Emri, Ditëlindja, Pozicioni ID, ID Departamenti, ID e menaxherit) VLERAT (1000,N"Ivanov I.I.","19550219",2,1,NULL), (1001,N"Petrov P.P." "19831203", ,3,1003), (1002,N"Sidorov S.S.","19760607",1,2,1000), (1003,N"Andreev A.A.","19820417" ,4,3,1000)

Le të përmbledhim

Për momentin, disa komanda të tjera DDL janë shtuar në njohuritë tona:
  • Shtimi i vetive IDENTITY në një fushë – ju lejon ta bëni këtë fushë një fushë të plotësuar automatikisht (fushë numërues) për tabelën;
  • TABELA ALTER emri_tabele SHTO list_of_fields_with_characteristics – ju lejon të shtoni fusha të reja në tabelë;
  • TABELA ALTER emri_tabele KOLONA RREGULLORE list_fields – ju lejon të hiqni fushat nga tabela;
  • TABELA ALTER emri_tabele SHTO KUFIZIM emri i kufizimit ÇELËSI I HUAJ(fushat) REFERENCAT Tabela_referenca (fushat) – ju lejon të përcaktoni marrëdhëniet ndërmjet tabelës dhe tabelës së referencës.

Kufizime të tjera - UNIKE, PARAKONGUAR, KONTROLLO

Duke përdorur një kufizim UNIQUE, mund të thoni se vlera për çdo rresht në një fushë të caktuar ose grup fushash duhet të jetë unike. Në rastin e tabelës Employees, ne mund të vendosim një kufizim të tillë në fushën Email. Thjesht plotësoni paraprakisht Email-in me vlera nëse ato nuk janë përcaktuar tashmë:

UPDATE Punonjësit SET Email=" [email i mbrojtur]" WHERE ID=1000 UPDATE Punonjësit SET Email=" [email i mbrojtur]" WHERE ID=1001 UPDATE Punonjësit SET Email=" [email i mbrojtur]" WHERE ID=1002 UPDATE Punonjësit SET Email=" [email i mbrojtur]“KU ID=1003
Tani mund të vendosni një kufizim unike në këtë fushë:

ALTER TABLE Punonjësit SHTO KUFIZIM UQ_Employees_Email UNIQUE(Email)
Tani përdoruesi nuk do të jetë në gjendje të fusë të njëjtin E-Mail për disa punonjës.

Një kufizim unik zakonisht emërtohet si më poshtë - së pari vjen prefiksi "UQ_", pastaj emri i tabelës dhe pas nënvizimit vjen emri i fushës në të cilën zbatohet ky kufizim.

Prandaj, nëse një kombinim i fushave duhet të jetë unik në kontekstin e rreshtave të tabelës, atëherë ne i rendisim ato të ndara me presje:

Ndrysho emrin e tabelës TABELA_SHTO SHTO KUFIZIM kufizimin_emrin UNIK (fusha1,fusha2,…)
Duke shtuar një kufizim DEFAULT në një fushë, ne mund të specifikojmë një vlerë të paracaktuar që do të zëvendësohet nëse, kur futni një rekord të ri, kjo fushë nuk është e listuar në listën e fushave të komandës INSERT. Ky kufizim mund të vendoset drejtpërdrejt gjatë krijimit të tabelës.

Le të shtojmë një fushë të re Data e punësimit në tabelën e punonjësve dhe ta quajmë atë HireDate dhe të themi se vlera e paracaktuar për këtë fushë do të jetë data aktuale:

ALTER TABLE Punonjësit SHTO Data e punësimit NOT NULL DEFAULT SYSDATETIME()
Ose nëse kolona HireDate ekziston tashmë, atëherë mund të përdoret sintaksa e mëposhtme:

Punonjësit e ALTER TABLE SHTO SYSDATETIME() DEFAULT FOR HireDate
Këtu nuk e specifikova emrin e kufizimit, sepse ... në rastin e DEFAULT-it, kam mendimin se kjo nuk është aq kritike. Por nëse e bëni në një mënyrë të mirë, atëherë mendoj se nuk keni nevojë të jeni dembel dhe duhet të vendosni një emër normal. Kjo bëhet si më poshtë:

ALTER TABLE Punonjësit SHTO KUFIZIM DF_Employees_HireDate DEFAULT SYSDATETIME() FOR HireDate
Meqenëse kjo kolonë nuk ekzistonte më parë, kur të shtohet në çdo regjistrim, vlera e datës aktuale do të futet në fushën HireDate.

Kur shtoni një hyrje të re, data aktuale do të futet gjithashtu automatikisht, natyrisht, përveç nëse e vendosim në mënyrë eksplicite, d.m.th. Ne nuk do ta tregojmë atë në listën e kolonave. Le ta tregojmë këtë me një shembull pa specifikuar fushën HireDate në listën e vlerave të shtuara:

INSERT Punonjësit(ID,Emri,Email)VALUES(1004,N"Sergeev S.S."," [email i mbrojtur]")
Le të shohim se çfarë ndodhi:

SELECT * NGA Punonjësit

ID Emri ditëlindjen Email ID e pozicionit ID e Departamentit ID-ja e menaxherit Data e punësimit
1000 Ivanov I.I. 1955-02-19 [email i mbrojtur] 2 1 I PAVLEFSHËM 2015-04-08
1001 Petrov P.P. 1983-12-03 [email i mbrojtur] 3 4 1003 2015-04-08
1002 Sidorov S.S. 1976-06-07 [email i mbrojtur] 1 2 1000 2015-04-08
1003 Andreev A.A. 1982-04-17 [email i mbrojtur] 4 3 1000 2015-04-08
1004 Sergeev S.S. I PAVLEFSHËM [email i mbrojtur] I PAVLEFSHËM I PAVLEFSHËM I PAVLEFSHËM 2015-04-08

Kufizimi i kontrollit CHECK përdoret kur është e nevojshme të kontrollohen vlerat e futura në një fushë. Për shembull, le të vendosim këtë kufizim në fushën e numrit të personelit, që për ne është një identifikues punonjësi (ID). Duke përdorur këtë kufizim, themi se numrat e personelit duhet të kenë një vlerë nga 1000 deri në 1999:

ALTER TABLE Punonjësit SHTO KUFIZIM CK_Employees_ID CHECK(ID MES 1000 DHE 1999)
Kufizimi zakonisht emërtohet në të njëjtën mënyrë, fillimisht me parashtesën "CK_", pastaj emrin e tabelës dhe emrin e fushës në të cilën vendoset ky kufizim.

Le të përpiqemi të fusim një rekord të pavlefshëm për të kontrolluar nëse kufizimi funksionon (duhet të marrim gabimin përkatës):

INSERT Punonjësit (ID, Email) VALUES (2000" [email i mbrojtur]")
Tani le ta ndryshojmë vlerën e futur në 1500 dhe të sigurohemi që rekordi të jetë futur:

INSERT Punonjësit (ID, Email) VALUES (1500" [email i mbrojtur]")
Ju gjithashtu mund të krijoni kufizime UNIK dhe CHECK pa specifikuar një emër:

Punonjësit e ALTER TABLE SHTO UNIK (Email) ALTER TABLE Punonjësit ADD CHECK (ID MES VITIT 1000 DHE 1999)
Por kjo nuk është një praktikë shumë e mirë dhe është më mirë të specifikohet emri i kufizimit në mënyrë eksplicite, sepse Për ta kuptuar më vonë, gjë që do të jetë më e vështirë, do t'ju duhet të hapni objektin dhe të shikoni se për çfarë është përgjegjës.

Me një emër të mirë, shumë informacione rreth kufizimit mund të mësohen drejtpërdrejt nga emri i tij.

Dhe, në përputhje me rrethanat, të gjitha këto kufizime mund të krijohen menjëherë kur krijoni një tabelë, nëse ajo nuk ekziston ende. Le të fshijmë tabelën:

TABELA E GJITHSHME Punonjësit
Dhe ne do ta rikrijojmë atë me të gjitha kufizimet e krijuara me një komandë CREATE TABLE:

KRIJO TABLETË Punonjësit(ID int NOT NULL, Emri nvarchar(30), Data e ditëlindjes, Email nvarchar(30), PositionID int, DepartmentID int, Data e punësimit NOT NULL DEFAULT SYSDATETIME(), -- për DEFAULT do të bëj një përjashtim PK_Employees ÇELËSI PRIMARY (ID), CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) REFERENCAT Departamentet(ID), CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Pozicionet(ID), CONSTRAINTEmployeesQUETRAINE-mail es_ID CHECK (ID BETW EEN 1000 DHE 1999) )

INSERT Punonjësit (ID, Emri, Ditëlindja, Emaili, ID e Pozicionit, ID e Departamentit) VLERAT (1000,N"Ivanov I.I.","19550219"," [email i mbrojtur]",2,1), (1001,N"Petrov P.P.","19831203"," [email i mbrojtur]",3,3), (1002,N"Sidorov S.S.","19760607"," [email i mbrojtur]",1,2), (1003,N"Andreev A.A.","19820417"," [email i mbrojtur]",4,3)

Pak për indekset e krijuara gjatë krijimit të kufizimeve PRIMARY KEY dhe UNIQUE

Siç mund ta shihni në pamjen e mësipërme, kur krijohen kufizimet PRIMARY KEY dhe UNIQUE, indekset me të njëjtët emra (PK_Employees dhe UQ_Employees_Email) u krijuan automatikisht. Si parazgjedhje, indeksi për çelësin primar krijohet si TË GRUPTUAR, dhe për të gjitha indekset e tjera si NONCLUSTERED. Vlen të thuhet se koncepti i një indeksi grupor nuk është i disponueshëm në të gjitha DBMS-të. Një tabelë mund të ketë vetëm një indeks të GRUPTUAR. CLUSTERED – do të thotë që të dhënat e tabelës do të renditen sipas këtij indeksi, gjithashtu mund të themi se ky indeks ka qasje të drejtpërdrejtë në të gjitha të dhënat në tabelë. Ky është indeksi kryesor i tabelës, si të thuash. Për ta thënë edhe më përafërsisht, ky është një indeks i bashkangjitur në një tabelë. Një indeks i grupuar është një mjet shumë i fuqishëm që mund të ndihmojë në optimizimin e pyetjeve, por le ta kujtojmë këtë tani për tani. Nëse duam t'i themi indeksit të grupuar që të përdoret jo në çelësin primar, por në një indeks tjetër, atëherë kur krijojmë çelësin primar duhet të specifikojmë opsionin NONCLUSTERED:

Ndrysho emrin e tabelës TABELA_SHTO SHTO KUFIZIM kufizimin_emrin ÇELËSI PRIMAR PA GJITHË (fusha1,fusha2,…)
Për shembull, le ta bëjmë indeksin e kufizimeve PK_Employees jo të grupuar dhe indeksin e kufizimit UQ_Employees_Email të grumbulluar. Para së gjithash, le të heqim këto kufizime:

ALTER TABLE Punonjësit LËQEN KUFIZIMIN PK_Punonjësit ALTER TABLE Punonjësit DOP CONSTRAINT UQ_Employees_Email
Tani le t'i krijojmë ato me opsionet E GRUPTUAR dhe JO CLUSTERED:

ALTER TABLE Punonjësit SHTO KUFIZIM PK_Punonjësit ÇELËSI KRYESOR NONCLUSTERED (ID) ALTER TABLE Punonjësit SHTO KUFIZIM UQ_Employees_Email UNIQUE CLUSTERED (Email)
Tani, duke zgjedhur nga tabela Employees, do të shohim se të dhënat janë renditur sipas indeksit të grupuar UQ_Employees_Email:

SELECT * NGA Punonjësit

ID Emri ditëlindjen Email ID e pozicionit ID e Departamentit Data e punësimit
1003 Andreev A.A. 1982-04-17 [email i mbrojtur] 4 3 2015-04-08
1000 Ivanov I.I. 1955-02-19 [email i mbrojtur] 2 1 2015-04-08
1001 Petrov P.P. 1983-12-03 [email i mbrojtur] 3 3 2015-04-08
1002 Sidorov S.S. 1976-06-07 [email i mbrojtur] 1 2 2015-04-08

Më parë, kur indeksi i grupuar ishte indeksi PK_Employees, të dhënat u renditën sipas fushës ID si parazgjedhje.

Por në këtë rast, ky është vetëm një shembull që tregon thelbin e një indeksi të grupuar, sepse Me shumë mundësi, pyetjet do të bëhen në tabelën e punonjësve duke përdorur fushën ID dhe në disa raste, ndoshta, ajo vetë do të veprojë si një direktori.

Për drejtoritë, zakonisht këshillohet që indeksi i grupuar të ndërtohet në çelësin primar, sepse në kërkesat shpesh i referohemi identifikuesit të drejtorisë për të marrë, për shembull, emrin (Pozicioni, Departamenti). Le të kujtojmë këtu atë që shkrova më lart, se një indeks i grupuar ka qasje të drejtpërdrejtë në rreshtat e tabelës, dhe rrjedh se ne mund të marrim vlerën e çdo kolone pa shpenzime shtesë.

Është e dobishme të aplikohet një indeks grupimi në fushat që janë mostruar më shpesh.

Ndonjëherë tabelat krijohen me një çelës bazuar në një fushë zëvendësuese; në këtë rast, mund të jetë e dobishme të ruani opsionin e indeksit CLUSTERED për një indeks më të përshtatshëm dhe të specifikoni opsionin NONCLUSTERED kur krijoni një çelës primar zëvendësues.

Le të përmbledhim

Në këtë fazë, ne jemi njohur me të gjitha llojet e kufizimeve, në formën e tyre më të thjeshtë, të cilat krijohen nga një komandë si “ALTER TABLE tabela_name ADD CONSTRAINT constraint_name...”:
  • ÇELESI PRIMAR- çelesi primar;
  • ÇELËSI I HUAJ– vendosja e lidhjeve dhe monitorimi i integritetit referencial të të dhënave;
  • UNIK– ju lejon të krijoni unike;
  • KONTROLLO– ju lejon të siguroni korrektësinë e të dhënave të futura;
  • PARALAKTUAR– ju lejon të vendosni një vlerë të paracaktuar;
  • Vlen gjithashtu të përmendet se të gjitha kufizimet mund të hiqen duke përdorur komandën " TABELA ALTER emri_tabele KUFIZIMI I RËZIMIT emri_kufizues".
Ne gjithashtu prekëm pjesërisht temën e indekseve dhe shqyrtuam konceptin e grupimit ( TË GRUPTUARA) dhe jo të grupuara ( PA KONTROLLER) indeksi.

Krijimi i indekseve të pavarura

Me të pavarur këtu nënkuptojmë indekse që nuk krijohen nën kufizimin PRIMARY KEY ose UNIQUE.

Indekset në një fushë ose fusha mund të krijohen me komandën e mëposhtme:

KRIJO INDEX IDX_Employees_Name ON Punonjësit(Emri)
Gjithashtu këtu mund të specifikoni opsionet TË GRUPTUARA, TË JO CLUSTERED, UNIKE, dhe gjithashtu mund të specifikoni drejtimin e renditjes së secilës fushë individuale ASC (parazgjedhja) ose DESC:

KRIJONI INDEKS UNIK JO TË GJITHSHËM UQ_Employees_EmailDesc ON Employees (Email DESC)
Kur krijoni një indeks jo të grupuar, opsioni NONCLUSTERED mund të hiqet, sepse nënkuptohet si parazgjedhje dhe tregohet këtu thjesht për të treguar pozicionin e opsionit CLUSTERED ose NONCLUSTERED në komandë.

Mund ta fshini indeksin me komandën e mëposhtme:

HIQ INDEX IDX_Employees_Name ON Punonjësit
Indekse të thjeshta, si dhe kufizime, mund të krijohen në kontekstin e komandës CREATE TABLE.

Për shembull, le të fshijmë përsëri tabelën:

TABELA E GJITHSHME Punonjësit
Dhe ne do ta rikrijojmë atë me të gjitha kufizimet dhe indekset e krijuara me një komandë CREATE TABLE:

KRIJO TABLETË Punonjësit(ID int NOT NULL, Emri nvarchar(30), Data e ditëlindjes, Email nvarchar(30), ID e Pozicionit int, ID e Departamentit int, Data e punësimit NUK KUSHTET NULL DF_Employees_HireData DEFAULT SYSDATEtEYTREQID,Menaxheri K. ), CONSTRAINT FK_Punonjësit_ID Departamentit ID FOREIGN KEY(DepartmentID) REFERENCES Departamentet(ID), CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Pozicionet(ID), CONSTRAINT FK_Punonjës (PunonjësMOREIGNEIDAna) KUFIZIM UQ_Emp loyees_Email UNIQUE(Email), KUFIZUAR CK_Employees_ID CHECK(ID MES 1000 DHE 1999), INDEX IDX_Employees_Name(Emri))
Së fundi, le t'i fusim punonjësit tanë në tabelë:

INSERT Punonjësit (ID, Emri, Ditëlindja, Emaili, ID e Pozicionit, ID e Departamentit, ID e menaxherit) VLERAT (1000,N"Ivanov I.I.","19550219"," [email i mbrojtur]",2,1,NULL), (1001,N"Petrov P.P.","19831203"," [email i mbrojtur]",3,3,1003), (1002,N"Sidorov S.S.","19760607"," [email i mbrojtur]",1,2,1000), (1003,N"Andreev A.A.","19820417"," [email i mbrojtur]",4,3,1000)
Për më tepër, vlen të përmendet se mund t'i përfshini vlerat në një indeks jo të grupuar duke i specifikuar ato në INCLUDE. Ato. në këtë rast, indeksi INCLUDE do të kujtojë disi një indeks të grupuar, vetëm tani indeksi nuk është i bashkangjitur në tabelë, por vlerat e nevojshme i janë bashkangjitur indeksit. Prandaj, indekse të tilla mund të përmirësojnë shumë performancën e pyetjeve të përzgjedhjes (SELECT); nëse të gjitha fushat e listuara janë në indeks, atëherë qasja në tabelë mund të mos jetë fare e nevojshme. Por kjo natyrisht rrit madhësinë e indeksit, sepse vlerat e fushave të listuara dublikohen në indeks.

Ekstrakt nga MSDN. Sintaksa e përgjithshme e komandës për krijimin e indekseve

KRIJONI [UNIK] [TË KLUSTRUAR | PA GJITHË ] Emri i indeksit INDEX AKTIV (kolona [ ASC | DESC ] [ ,...n ]) [ PËRFSHI (emrin e_kolonës [ ,...n ]) ]

Le të përmbledhim

Indekset mund të rrisin shpejtësinë e rikthimit të të dhënave (SELECT), por indekset zvogëlojnë shpejtësinë e modifikimit të të dhënave të tabelës, sepse Pas çdo modifikimi, sistemi do të duhet të rindërtojë të gjithë indekset për një tabelë specifike.

Në secilin rast, këshillohet të gjendet zgjidhja optimale, mesatarja e artë, në mënyrë që performanca e marrjes së mostrave dhe modifikimit të të dhënave të jetë në nivelin e duhur. Strategjia për krijimin e indekseve dhe numri i indekseve mund të varet nga shumë faktorë, si për shembull sa shpesh ndryshojnë të dhënat në tabelë.

Përfundim mbi DDL

Siç mund ta shihni, DDL nuk është aq e komplikuar sa mund të duket në shikim të parë. Këtu munda të tregoja pothuajse të gjitha strukturat e tij kryesore duke përdorur vetëm tre tabela.

Gjëja kryesore është të kuptojmë thelbin, dhe pjesa tjetër është çështje praktike.

Fat të mirë në zotërimin e kësaj gjuhe të mrekullueshme të quajtur SQL.

Programet e klientëve

Protokolli TFTP

TFTP- gjithashtu protokollin FTP, por në krye të protokollit UDP (d.m.th., një protokoll pa dorëzim të garantuar). Mund të përdoret në një rrjet lokal ku shpejtësia e transmetimit është më e rëndësishme. Në praktikë përdoret rrallë.

FTP- programi niset nga linja e komandës.

Komandanti i Windows- mund të punojë si klient FTP. Ju lejon të punoni me drejtoritë në distancë në të njëjtën mënyrë si me ato lokale.

NetVampire - Një klient i specializuar FTP që ju lejon të shkarkoni skedarë të mëdhenj dhe të shkarkoni përmes kanaleve të këqija.

SQL (Structured Query Language) është një gjuhë e strukturuar e pyetjeve për bazat e të dhënave relacionale. Në këtë gjuhë, ju mund të formuloni shprehje (pyetje) që marrin të dhënat e kërkuara, modifikojnë ato, krijojnë tabela dhe ndryshojnë strukturat e tyre, përcaktojnë të drejtat e aksesit në të dhëna dhe shumë më tepër.

Pyetjet ekzekutohen nga një sistem i menaxhimit të bazës së të dhënave (DBMS). Nëse nuk jeni specialist në zhvillimin dhe administrimin e bazës së të dhënave, atëherë mund të jeni një përdorues i bazës së të dhënave që shikon dhe/ose ndryshon të dhënat në tabelat ekzistuese. Në shumë raste, këto dhe operacione të tjera të bazës së të dhënave kryhen duke përdorur aplikacione speciale që i ofrojnë përdoruesit një ndërfaqe të përshtatshme. Në mënyrë tipike, aplikacionet shkruhen në gjuhë të veçanta programimi (C, Pascal, Visual Basic, etj.) dhe më së shpeshti krijohen duke përdorur mjedise të integruara zhvillimi, për shembull, Delphi, C++ Builder, etj. Megjithatë, qasja në bazën e të dhënave mund të jetë të marra pa to - duke përdorur vetëm SQL. Duhet të theksohet gjithashtu se aplikacionet e specializuara zakonisht përdorin fragmente të kodit SQL kur hyjnë në bazën e të dhënave.

Kështu, SQL është një gjuhë standarde e përdorur gjerësisht për të punuar me bazat e të dhënave relacionale. Sintaksa e kësaj gjuhe është mjaft e thjeshtë saqë mund të përdoret nga përdoruesit e zakonshëm, jo ​​vetëm nga programuesit. Në ditët e sotme, përdoruesi mesatar i kompjuterit duhet të paktën të jetë i aftë në një përpunues teksti (siç është Microsoft Word) dhe një program spreadsheet (siç është Microsoft Excel). Është mirë nëse di të përdorë edhe bazat e të dhënave. Ka shumë DBMS të ndryshme, por ekziston vetëm një mjet universal për të punuar me bazat e të dhënave - SQL. Njohja e SQL-së, të paktën bazat e saj, dhe aftësia për ta përdorur atë për të kërkuar dhe analizuar të dhënat është një pjesë themelore e njohurive kompjuterike, madje edhe për përdoruesit e zakonshëm.

Zhvillimet e para të sistemeve të menaxhimit të bazës së të dhënave relacionale (DBMS relacionale) u kryen në IBM në fillim të viteve 1970. Në të njëjtën kohë, u krijua një gjuhë e të dhënave për të punuar në këto sisteme. Versioni eksperimental i kësaj gjuhe u quajt SEQUEL - nga anglishtja. Gjuhë e strukturuar në anglisht QUEry (gjuhë e strukturuar e pyetjeve angleze). Sidoqoftë, versioni zyrtar u quajt më i shkurtër - SQL (Structured Query Language). Më saktësisht, SQL është një nëngjuhë e të dhënave, pasi DBMS përmban mjete të tjera gjuhësore.

Në vitin 1981, IBM lëshoi ​​​​DBMS relacionale SQL/DS. Në këtë kohë, Relation Software Inc. (sot është Oracle Corporation) tashmë ka lëshuar DBMS-në e saj relacionale. Këto produkte u bënë menjëherë standardi për sistemet e menaxhimit të bazës së të dhënave. Këto produkte përfshinin gjithashtu SQL, i cili u bë standardi de facto për nëngjuhët e të dhënave. Prodhuesit e DBMS-ve të tjera kanë lëshuar versionet e tyre të SQL. Ato përfshinin më shumë se vetëm aftësitë thelbësore të produkteve të IBM. Për të fituar disa avantazhe për DBMS "të tyre", prodhuesit prezantuan disa shtesa SQL. Në të njëjtën kohë, filloi puna për krijimin e një standardi SQL të njohur përgjithësisht.

Në vitin 1986, Instituti Kombëtar Amerikan i Standardeve (ANSI) lëshoi ​​standardin zyrtar SQL-86, i cili u përditësua në 1989 dhe u quajt SQL-89. Në vitin 1992, ky standard u emërua SQL-92 (ISO/IEC 9075:1992). Versioni i fundit i standardit SQL është SQL:2003 (ISO/IEC 9075X:2003).

Çdo zbatim i SQL në një DBMS specifike është disi i ndryshëm nga standardi me të cilin prodhuesi deklaron pajtueshmërinë. Kështu, shumë DBMS (për shembull, Microsoft Access 2003, PostgreSQL 7.3) nuk mbështesin plotësisht SQL-92, por vetëm me një nivel të caktuar përputhshmërie. Përveç kësaj, ata gjithashtu mbështesin elementë që nuk përfshihen në standard. Megjithatë, zhvilluesit e DBMS përpiqen të sigurojnë që versionet e reja të produkteve të tyre të përputhen sa më afër që të jetë e mundur me standardin SQL.

Kujdes. Ky tutorial përshkruan elementet SQL2003, jo të gjithë janë të mbështetur nga DBMS-të ekzistuese. Përpara se t'i vini në praktikë, duhet të siguroheni që ato do të funksionojnë në DBMS-në tuaj. Ju mund të mësoni për këtë nga dokumentacioni teknik. Shumica e elementeve të përshkruara korrespondojnë me versionet e mëparshme të SQL, në veçanti me SQL-92 të përdorur gjerësisht.

SQL u konceptua si një gjuhë e thjeshtë pyetjesh për një bazë të dhënash relacionale, afër gjuhës natyrore (më saktë, me anglishten). Shpresohej që afërsia në formë me gjuhën natyrore do ta bënte SQL një mjet që mund të përdoret gjerësisht nga përdoruesit e zakonshëm të bazës së të dhënave, jo vetëm nga programuesit. Fillimisht, SQL nuk përmbante asnjë nga strukturat e kontrollit që gjenden në gjuhët konvencionale të programimit. Kërkesat, sintaksa e të cilave është mjaft e thjeshtë, u futën drejtpërdrejt nga tastiera në mënyrë sekuenciale njëra pas tjetrës dhe u ekzekutuan në të njëjtën sekuencë. Megjithatë, SQL nuk u bë kurrë një mjet për punonjësit e bankave, shitësit e biletave ajrore dhe treni, ekonomistët dhe punonjësit e tjerë të kompanive të ndryshme që përdorin informacionin e ruajtur në bazat e të dhënave. Për ta, SQL e thjeshtë doli të ishte shumë komplekse dhe e papërshtatshme, pavarësisht afërsisë së saj me gjuhën natyrore të pyetjeve.

Në praktikë, me një bazë të dhënash zakonisht punohet përmes aplikacioneve të shkruara nga programuesit në gjuhë procedurale, për shembull, C, Visual Basic, Pascal, Java, etj. Aplikimet shpesh krijohen në mjedise të veçanta zhvillimi vizual, si Delphi, Microsoft Access, Visual. dBase, etj etj. Në të njëjtën kohë, zhvilluesi i aplikacionit praktikisht nuk duhet të shkruajë kode programi, pasi sistemi i zhvillimit e bën atë për të. Në çdo rast, puna me kodin e programit rezulton të jetë minimale. Këto aplikacione kanë një ndërfaqe grafike miqësore për përdoruesit që nuk e detyron përdoruesin të fusë drejtpërdrejt pyetje në SQL. Aplikacioni e bën këtë në vend të kësaj. Megjithatë, aplikacioni mund ose nuk mund të përdorë SQL për të hyrë në bazën e të dhënave. SQL nuk është i vetmi, megjithëse është një mjet shumë efektiv për marrjen, shtimin dhe ndryshimin e të dhënave, dhe nëse është e mundur të përdoret në një aplikacion, atëherë duhet bërë.

Bazat e të dhënave relacionale mund dhe ekzistojnë pavarësisht nga aplikacionet që ofrojnë ndërfaqen e përdoruesit. Nëse për ndonjë arsye nuk ka një ndërfaqe të tillë, atëherë baza e të dhënave mund të aksesohet duke përdorur SQL, duke përdorur tastierën ose ndonjë aplikacion me të cilin mund të lidheni me bazën e të dhënave, të futni dhe dërgoni një pyetje SQL (për shembull, Borland SQL Explorer ).

Gjuha SQL konsiderohet një gjuhë deklarative (përshkruese), në ndryshim nga gjuhët në të cilat shkruhen programet. Kjo do të thotë që shprehjet SQL përshkruajnë atë që duhet bërë, jo si.

Për shembull, për të zgjedhur informacionin në lidhje me emrat dhe pozicionet e punonjësve të departamentit 102 nga tabela e punonjësve, thjesht ekzekutoni pyetjen e mëposhtme:

SELECT Mbiemri, Pozicioni FROM Punonjësit WHERE Departamenti=102;

Në rusisht kjo shprehje tingëllon si kjo:

ZGJIDHNI Mbiemri, pozicioni NGA Punonjësit me kusht që Departamenti = 102;

Për të ndryshuar vlerën " Ivanov "në" Petrov kolona " Mbiemri , thjesht ekzekutoni pyetjen e mëposhtme:

PËRDITËZIM SET për punonjësit Mbiemri = "Petrov" KU Mbiemri = "Ivanov";

Në rusisht kjo shprehje duket si kjo:

PËRDITËSOJE Punonjësit I INSTALUAR Mbiemri E BARABARË " Petrov "KU mbiemri = "Ivanov" ;

Ju nuk keni nevojë të përshkruani në detaje veprimet që duhet të kryejë DBMS për të zgjedhur të dhënat e specifikuara në pyetje nga tabela. Ju thjesht përshkruani atë që dëshironi të merrni. Si rezultat i ekzekutimit të pyetjes, DBMS kthen një tabelë që përmban të dhënat që keni kërkuar. Nëse nuk ka të dhëna në bazën e të dhënave që përputhen me pyetjen, do të kthehet një tabelë bosh.

Sidoqoftë, versionet e fundit të SQL mbështesin deklaratat e kontrollit llogaritës vendas në gjuhët e kontrollit procedural (deklaratat e degës së kushtëzuar dhe të ciklit). Prandaj, SQL tani nuk është një gjuhë thjesht deklarative.

Përveç marrjes, shtimit, modifikimit dhe fshirjes së të dhënave nga tabelat, SQL ju lejon të kryeni të gjitha veprimet e nevojshme për të krijuar, modifikuar dhe siguruar bazat e të dhënave. Të gjitha këto aftësi shpërndahen midis tre komponentëve SQL:

· DML (Gjuha e manipulimit të të dhënave - gjuha e manipulimit të të dhënave ) ka për qëllim të mbështesë bazën e të dhënave: përzgjedhja ( ZGJIDH ), shtesat ( INSERT ), ndryshimet ( PËRDITËSOJE ) dhe fshirje ( FSHIJE ) të dhënat nga tabelat. Këta operatorë (komanda) mund të përmbajnë shprehje, duke përfshirë ato të llogaritura, si dhe nënpyetje - pyetje të përfshira në një pyetje tjetër. Në përgjithësi, një shprehje e pyetjes mund të jetë aq komplekse saqë nuk mund të thuash menjëherë se çfarë bën. Megjithatë, një pyetje komplekse mund të ndahet mendërisht në pjesë që janë më të lehta për t'u analizuar. Po kështu, pyetjet komplekse krijohen nga shprehje relativisht të lehta për t'u kuptuar (nënpyetje).

· DDL (Gjuha e përkufizimit të të dhënave - gjuha e përkufizimit të të dhënave ) është krijuar për të krijuar, modifikuar dhe fshirë tabelat dhe të gjithë bazën e të dhënave. Shembuj të deklaratave të përfshira në DDL janë KRIJONI TABELA (krijoni tabelën)," KRIJO PAMJE (krijo pamje), KRIJONI SHEMA (krijoni një diagram), TABELA ALTER (ndryshoni tabelën), RËZË (fshij), etj.

· DCL (Gjuha e kontrollit të të dhënave - gjuha e menaxhimit të të dhënave ) është krijuar për të mbrojtur bazën e të dhënave nga lloje të ndryshme dëmtimesh. DBMS siguron disa mbrojtje të të dhënave automatikisht. Megjithatë, në disa raste duhet të merren parasysh masa shtesë të parashikuara nga DCL.

Në këtë kapitull...

  • Çfarë është SQL
  • Keqkuptime të SQL
  • Një vështrim në standarde të ndryshme SQL
  • Hyrje në komandat standarde SQL dhe fjalët e rezervuara
  • Përfaqësimi i numrave, simboleve, datave, orëve dhe llojeve të tjera të të dhënave
  • Vlerat dhe kufizimet e papërcaktuara
  • Përdorimi i SQL në një sistem klient/server
  • SQL në ueb

SQLështë një gjuhë fleksibël që mund të përdoret në mënyra të ndryshme. Është mjeti më i zakonshëm që përdoret për të komunikuar me një bazë të dhënash relacionale. Në këtë kapitull, unë do të shpjegoj se çfarë është dhe çfarë nuk është SQL, veçanërisht se si SQL ndryshon nga llojet e tjera të gjuhëve kompjuterike. Më pas do të njiheni me komandat dhe llojet e të dhënave që suporton standardi SQL. Përveç kësaj, unë do të shpjegoj konceptet themelore si p.sh vlera të papërcaktuara Dhe kufizimet. Së fundi, do të jepet një pasqyrë e mënyrës se si SQL përshtatet në mjedisin e klientit/serverit, si dhe me internetin dhe intranetet e organizatave.

Çfarë është SQL dhe çfarë nuk është

Gjëja e parë për të kuptuar në lidhje me SQL është se ajo nuk është një procedurale si FORTRAN, Basic, C, COBOL, Pascal dhe Java. Për të zgjidhur një problem duke përdorur një nga këto gjuhë procedurale, duhet të shkruani një procedurë që kryen operacione të specifikuara njëra pas tjetrës derisa të përfundojë detyra. Procedura mund të jetë një sekuencë lineare ose të përmbajë degëzime, por në secilin rast programuesi specifikon rendin e ekzekutimit.

Me fjalë të tjera, SQL është joprocedurale gjuha. Për ta përdorur atë për të zgjidhur një problem, tregoni SQL, Cfare saktesisht ju duhet sikur po flisni me xhindin nga llamba e Aladinit. Dhe në të njëjtën kohë nuk ka nevojë të thuhet, si të marrë atë që dëshiron. Sistemi i menaxhimit të bazës së të dhënave (DBMS) do të vendosë se si të përmbushë më mirë kërkesën tuaj.

Mirë. Thjesht thashë që SQL nuk është një gjuhë procedurale. Në thelb, kjo është e vërtetë. Megjithatë, me miliona programues përreth (dhe ju mund të jeni njëri prej tyre) të mësuar për të zgjidhur problemet në mënyrë procedurale, ka pasur shumë presion në vitet e fundit për të shtuar disa aftësi procedurale në SQL. Kjo është arsyeja pse versioni i ri i specifikimit SQL, SQL:2003, tani përfshin veçori të gjuhës procedurale si blloqet BEGIN, deklaratat IF të kushtëzuara, funksionet dhe procedurat. Me këto mjete të reja, programet mund të ruhen në një server në mënyrë që ato të ripërdoren nga shumë përdorues.

Për të ilustruar atë që doja të thoja kur thashë "tregoji sistemit saktësisht se çfarë ju nevojitet", le të themi se keni një tabelë PUNONJËSish me të dhënat e punonjësve dhe dëshironi të zgjidhni të gjitha rreshtat prej saj që korrespondojnë me të gjithë punonjësit "të vjetër". Punëtorët "të vjetër" mund të përkufizohen si çdokush mbi 40 vjeç ose që fiton më shumë se 60,000 dollarë në vit. Zgjedhja që ju nevojitet mund të bëhet duke përdorur pyetjen e mëposhtme:

ZGJEDH * NGA PUNONJËSI KU MOSHA >40 OSE PAGË >60000;

Kjo deklaratë zgjedh nga tabela EMPLOYEE të gjitha rreshtat në të cilat ose vlera e kolonës AGE (mosha) është më e madhe se 40 ose vlera e kolonës SALARY (paga) është më e madhe se 60000. SQL vetë di të zgjedhë informacionin. Motori i bazës së të dhënave kontrollon bazën e të dhënave dhe vendos vetë se si duhet të ekzekutohet pyetja. E tëra çfarë ju duhet të bëni është të tregoni se cilat të dhëna ju nevojiten.

Mbani mend:
Një pyetje është një pyetje që ju bëni në bazën e të dhënave. Nëse ndonjë nga të dhënat e tij përputhet me kushtet e kërkesës suaj, atëherë SQL jua kalon atë
.

Implementimeve moderne SQL u mungojnë shumë nga konstruktet e thjeshta programuese që janë themelore për shumicën e gjuhëve të tjera. Aplikacionet e përditshme zakonisht kërkojnë të paktën disa nga këto konstruksione, kështu që SQL është në të vërtetë nëngjuhë të dhëna. Edhe me shtesat që erdhën në SQL me standardin SQL:1999 dhe shtesat shtesë të shtuara në SQL:2003, ju duhet të përdorni një nga gjuhët e programimit, si C, me SQL për të krijuar një aplikacion të plotë.

Ju mund të zgjidhni informacionin nga baza e të dhënave në një nga mënyrat e mëposhtme.

  • Përdorimi i një pyetjeje një herë, jo të programueshëm nga tastiera e kompjuterit, futja e një komande SQL dhe leximi i rezultateve të ekzekutimit të saj në ekran. Konsola është një term tradicional për pajisje kompjuterike që kryen punën e tastierës dhe ekranit që gjendet në kompjuterët modernë. Pyetjet e konsolës janë të dobishme kur keni nevojë për një përgjigje të shpejtë ndaj një kërkese specifike. Për të kënaqur disa nevoja aktuale, mund t'ju nevojiten të dhëna nga baza e të dhënave që nuk janë kërkuar kurrë më parë. Mund të mos ju duhen më kurrë, por ju nevojiten tani. Futni pyetjen e duhur SQL nga tastiera dhe pas një kohe rezultati do të shfaqet në ekranin tuaj.
  • Përdorimi i një programi që merr informacion nga një bazë të dhënash dhe më pas krijon një raport bazuar në këto të dhëna, të shfaqura në ekran ose të printuara. SQL mund të përdoret gjithashtu në këtë mënyrë. Një pyetje komplekse SQL që mund të jetë e dobishme në të ardhmen mund të vendoset drejtpërdrejt në program. Kjo ju lejon ta ripërdorni atë në të ardhmen. Kështu, formulimi i pyetjes ekzekutohet një herë. Kapitulli 15 mbulon mënyrën se si të futni kodin SQL në programet e shkruara në një gjuhë tjetër.

Structure Query Language (SQL) u krijua si rezultat i zhvillimit të modelit të të dhënave relacionale dhe aktualisht është gjuha standarde de facto për DBMS-të relacionale. Gjuha SQL sot mbështetet nga një numër i madh DBMS të llojeve të ndryshme.

Emri i gjuhës SQL zakonisht shqiptohet "es-qu-el". Ndonjëherë përdoret emri mnemonik "See-Quel".

Gjuha SQL i ofron përdoruesit (me përpjekje minimale nga ana e tij) aftësitë e mëposhtme:

Krijoni baza të të dhënave dhe tabela me një përshkrim të plotë të strukturës së tyre

Kryeni operacionet bazë të manipulimit të të dhënave: futja, ndryshimi, fshirja e të dhënave

Drejtoni pyetje të thjeshta dhe komplekse.

Gjuha SQL është relacionalisht e plotë.

Struktura dhe sintaksa e komandave të saj janë mjaft të thjeshta, dhe vetë gjuha është universale, d.m.th. sintaksa dhe struktura e komandave të saj nuk ndryshon kur lëviz nga një DBMS në tjetrën.

Gjuha SQL ka dy komponentë kryesorë:

DDL (Data Definition Language) për përcaktimin e strukturave të bazës së të dhënave dhe kontrollin e aksesit në të dhëna

Gjuha DML (Data Manipulation Language) e krijuar për marrjen dhe përditësimin e të dhënave.

SQL është një gjuhë jo-procedurale, që do të thotë se kur e përdorni, duhet të specifikoni se çfarë informacioni duhet të merret, jo se si mund të merret. Komandat SQL janë fjalë të zakonshme angleze (SELECT, INSERT, etj.). Le të shohim së pari deklaratat SQL DML:

SELECT - zgjedhja e të dhënave nga baza e të dhënave

INSERT - futja e të dhënave në një tabelë

UPDATE - përditësimi i të dhënave në një tabelë

DELETE - fshirja e të dhënave nga një tabelë

ZGJIDH deklaratën

Operatori SELECT kryen veprime ekuivalente me operacionet e mëposhtme të algjebrës relacionale: përzgjedhje, projeksion dhe bashkim.

Pyetja më e thjeshtë SQL duke e përdorur atë duket si kjo:

ZGJIDH col_name NGA tbl

Fjala kyçe "select" pasohet nga një listë kolonash e ndarë me presje, të dhënat e të cilave do të kthehen nga pyetësori. Fjala kyçe from specifikon nga cila tabelë (ose pamje) merren të dhënat.

Rezultati i një pyetjeje të përzgjedhur është gjithmonë një tabelë e quajtur tabela e rezultateve. Për më tepër, rezultatet e një pyetjeje të ekzekutuar duke përdorur deklaratën select mund të përdoren për të krijuar një tabelë të re. Nëse rezultatet e dy pyetjeve në tabela të ndryshme kanë të njëjtin format, mund t'i kombinoni në një tabelë. Gjithashtu, tabela e marrë si rezultat i një pyetjeje mund të jetë objekt i pyetjeve të mëtejshme.

Për të zgjedhur të gjitha kolonat dhe të gjitha rreshtat e një tabele, thjesht lëshoni një SELECT * FROM tbl;

Konsideroni tabelën e produkteve, e cila përmban informacione për çmimet për lloje të ndryshme produktesh:

Kërkoni rezultat

SELECT * NGA Produkti;

do të jetë e gjithë tabela e produktit.

Ju mund të zgjidhni kolona specifike të tabelës duke përdorur një pyetje

SELECT col1, col2, … , coln FROM tbl;

Pra, rezultati i kërkesës

SELECT Lloji, Çmimi NGA Produkti;

do të ketë një tryezë

Lista e kolonave në deklaratën e përzgjedhjes përdoret gjithashtu nëse është e nevojshme të ndryshoni renditjen e kolonave në tabelën që rezulton:

Për të zgjedhur vetëm ato rreshta të tabelës që plotësojnë kufizime të caktuara, përdoret një fjalë kyçe e veçantë, e ndjekur nga një kusht logjik. Nëse një rekord e plotëson këtë kusht, ai përfshihet në rezultat. Përndryshe, hyrja hidhet poshtë.

Për shembull, zgjedhja e atyre produkteve nga tabela e produkteve, çmimi i të cilave plotëson kushtin e Çmimit<3200, можно осуществить, используя запрос

ZGJEDHNI * NGA Produkti ku Çmimi<3200;

Rezultati i tij:

Kushti mund të jetë i përbërë dhe i kombinuar duke përdorur operatorët logjik NOT , AND, OR, XOR, për shembull: ku id_ Çmimi>500 DHE Çmimi<3500. Допускается также использование выражений в условии: where Price>(1+1) dhe konstantet e vargut: ku emri= "autoweights".

Përdorimi i konstruksionit BETWEEN var1 AND var2 ju lejon të kontrolloni nëse vlerat e ndonjë shprehjeje bien brenda intervalit nga var1 në var2 (duke përfshirë këto vlera):

ZGJIDH * NGA produkti ku Çmimi MES 3000 DHE 3500;

Ngjashëm me operatorin NOT BETWEEN, ekziston operatori NOT IN.

Emrat e kolonave të specifikuara në klauzolën SELECT mund të riemërohen. Për këtë përdoret fjala kyçe AS, e cila, megjithatë, mund të hiqet, pasi nënkuptohet në mënyrë implicite. Për shembull, kërkesa

SELECT Lloji model AS, Type_id AS num FROM Produkt ku Type_id =3

do të kthehet (emrat e pseudonimit duhet të shkruhen pa thonjëza):

Operatori LIKE është krijuar për të krahasuar një varg me një model:

SELECT * NGA tbl ku col_name LIKE "abc"

Ky pyetje kthen vetëm ato rekorde që përmbajnë vlerën e vargut abc në kolonën col_name.

Mostra lejohet të përdorë dy shkronja të egra: "_" dhe "%". E para prej tyre zëvendëson një karakter arbitrar në shabllon, dhe e dyta zëvendëson një sekuencë karakteresh arbitrare. Pra, "abc%" përputhet me çdo varg që fillon me abc, "abc_" përputhet me një varg 4 karakteresh që fillon me abc, "%z" përputhet me çdo varg që mbaron me z dhe së fundi, "%z%" - sekuenca karakteresh që përmbajnë z.

Ju mund t'i gjeni të gjitha regjistrimet e tabelës së produktit në të cilën vlera e tipit fillon me shkronjën "a" si kjo:

SELECT * NGA Produkti ku shkruani LIKE "a%";

peshore kamioni

Nëse vargu i kërkimit përmban një karakter wildcard, atëherë duhet të specifikoni karakterin e ikjes në klauzolën ESCAPE. Ky karakter kontrolli duhet të përdoret në modelin përpara karakterit të shkrepjes, duke treguar se karakteri i shkronjës duhet të trajtohet si një karakter i rregullt. Për shembull, nëse do të kërkonit të gjitha vlerat në një fushë që përmban karakterin "_", atëherë modeli "%_%" do të rezultonte që të gjitha të dhënat nga tabela të kthehen. Në këtë rast, shablloni duhet të shkruhet si më poshtë:

"%|_%" IKUR "|"

Për të kontrolluar vlerën për pajtueshmërinë me vargun "20%", mund të përdorni operatorin e mëposhtëm:

Pëlqej "20#%" IKË "#"

Operatori IS NULL ju lejon të kontrolloni mungesën (prezencën) e një vlere NULL në fushat e një tabele. Përdorimi i operatorëve të rregullt të krahasimit në këto raste mund të prodhojë rezultate të pasakta, sepse krahasimi me NULL rezulton në PANJOHUR. Kështu, gjendja e përzgjedhjes duhet të duket si kjo:

ku emri_col ËSHTË NULL, në vend të ku col_name=NULL.

Rezultati i përzgjedhjes së paracaktuar i kthen të dhënat në të njëjtin rend në të cilin ato ruhen në bazën e të dhënave. Nëse dëshironi të renditni regjistrimet sipas njërës prej kolonave, duhet të përdorni klauzolën ORDER BY, e ndjekur nga emri i asaj kolone:

ZGJIDH * NGA tbl ORDER BY col_name;

Ky pyetje do të kthejë të dhënat në rend rritës të vlerës së atributit col_name.

Ju gjithashtu mund të renditni regjistrimet sipas kolonave të shumta. Për ta bërë këtë, emrat e tyre duhet të specifikohen pas ORDER BY të ndarë me presje:

ZGJIDH * NGA tbl ORDER BY col_name1, col_name2.

Të dhënat do të renditen sipas fushës col_name1; nëse ka disa regjistrime me një vlerë që përputhet në kolonën col_name1, ato do të renditen sipas fushës col_name2.

Nëse dëshironi t'i renditni të dhënat në rend të kundërt (për shembull, duke zbritur sipas datës), duhet të specifikoni ORDER BY col_name DESC.

Për renditjen e drejtpërdrejtë, ekziston fjala kyçe ASC, e cila pranohet si vlera e paracaktuar.

Nëse rezultati i mostrës përmban qindra ose mijëra regjistrime, prodhimi dhe përpunimi i tyre kërkon kohë të konsiderueshme.

Prandaj, informacioni shpesh ndahet në faqe dhe i paraqitet përdoruesit në pjesë. Fletëzimi përdoret duke përdorur fjalën kyçe limit e ndjekur nga numri i hyrjeve për t'u shfaqur. Kërkesa e mëposhtme merr 10 rekordet e para, ndërkohë që renditet mbrapsht në fushën col_name1:

ZGJIDH * NGA tbl RENDI SIPAS col_emrit1 KUFIZIMI I DESC 10

Për të tërhequr 10 rekordet e ardhshme, përdorni fjalën kyçe limit me dy vlera: e para specifikon pozicionin nga i cili duhet të printohet rezultati, dhe e dyta specifikon numrin e rekordeve për t'u marrë:

ZGJIDH * NGA tbl RENDI SIPAS col_emrit1 KUFIZIMI I ZBRITJES 10,10

Për të tërhequr 10 regjistrimet e ardhshme, duhet të përdorni konstruksionin LIMIT 20, 10.

SQL yavl. mjet i synuar për përpunimin dhe leximin e të dhënave që gjenden në kompjuter. DB. SQL është, para së gjithash, informacion-logjik. gjuha, e synuar për të përshkruar, modifikuar dhe marrë të dhënat e ruajtura në bazat e të dhënave relacionale. SQL është shkurtesa për Gjuha e strukturuar e pyetjeve) . SQL përdoret për të organizuar ndërveprimin e përdoruesit me bazën e të dhënave. Në fakt, SQL punon vetëm me bazat e të dhënave relacionale lloji . Programi kompjuterik që menaxhon bazën e të dhënave quhet sistemi i menaxhimit të bazës së të dhënave, ose DBMS . Nëse përdoruesi ka nevojë lexoni të dhënat nga baza e të dhënave, ai i kërkon nga DBMS me pom. SQL. DBMS përpunon kërkesën, gjen të dhënat e kërkuara dhe ia dërgon përdoruesit. Procesi i kërkimit të të dhënave dhe marrjes së një rezultati quhet kërkesë në bazën e të dhënave: prandaj emri - gjuha e strukturuar e pyetjeve. Pavarësisht se leximi i të dhënave është ende një nga më të rëndësishmet. e rëndësishme Funksionet SQL, tani kjo gjuhë përdoret për të zbatuar të gjitha funksionalitetin, Mace. DBMS i siguron përdoruesit, përkatësisht:

Organizimi i të dhënave. SQL i jep përdoruesit mundësinë për të ndryshuar strukturën e prezantimit të të dhënave, si dhe për të vendosur marrëdhënie midis elementeve të bazës së të dhënave.

Leximi i të dhënave. SQL i jep një përdoruesi ose aplikacioni mundësinë për të lexuar dhe përdorur të dhënat e përfshira në një bazë të dhënash.

Përpunimin e të dhënave. SQL i jep përdoruesit ose aplikacionit mundësinë për të... ndryshoni bazën e të dhënave, d.m.th. shtoni të dhëna të reja në të, si dhe fshini ose përditësoni të dhënat ekzistuese.

Kontrolli i aksesit. Me asistent SQL mund të kufizojë aftësinë e përdoruesit për të lexuar dhe ndryshuar të dhënat dhe për ta mbrojtur atë nga aksesi i paautorizuar.

Ndarja të dhëna. SQL koordinon ndarjen e të dhënave midis përdoruesve dhe punonjësve të njëkohshëm në mënyrë që ata të mos ndërhyjnë me njëri-tjetrin.

Integriteti i të dhënave. SQL ju lejon të siguroni integritetin e bazave të të dhënave, duke i mbrojtur ato nga shkatërrimi për shkak të ndryshimeve të paqëndrueshme ose dështimit të sistemit.

Kështu, SQL është një gjuhë mjaft e fuqishme për të bashkëvepruar me DBMS.

Avantazhet e SQL.

SQL është një gjuhë e lehtë për t'u kuptuar dhe në të njëjtën kohë një mjet softuerësh i gjithanshëm për menaxhimin e të dhënave.

Karakteristikat e mëposhtme sollën sukses në gjuhën SQL:

Pavarësia nga DBMS specifike;

Transportueshmëria nga një sistem kompjuterik në tjetrin;

Disponueshmëria e standardeve;

Korniza relacionale;

Struktura e nivelit të lartë;

Aftësia për të kryer pyetje të veçanta interaktive:

Sigurimi i aksesit të softuerit në bazat e të dhënave;

Mundësia e paraqitjes së të dhënave të ndryshme;

Plotësia si gjuhë e krijuar për të punuar me bazat e të dhënave;

Mundësia e përcaktimit dinamik të të dhënave;

Mbështetje për arkitekturën e klientit/serverit.

Të gjithë faktorët e mësipërm janë arsyeja pse SQL është bërë mjeti standard për menaxhimin e të dhënave në kompjuterët personalë.

37 Strukturat themelore të fjalisë gjuhësore në pyetje

Çdo deklaratë SQL është kërkesë ose akses në bazën e të dhënave, që çon në një ndryshim në bazën e të dhënave. Në varësi të ndryshimeve që ndodhin në bazën e të dhënave, dallohen llojet e mëposhtme të pyetjeve:

Kërkesat për të krijuar ose ndryshuar objekte të reja ose ekzistuese në bazën e të dhënave (në këtë rast, kërkesa përshkruan llojin dhe strukturën e objektit që krijohet ose ndryshohet);

Kërkesat për të dhëna;

Kërkesat për të shtuar të dhëna të reja (regjistra)

Kërkesat për fshirje të të dhënave;

Thirrjet në DBMS.

Çdo kërkesë është një program i shkruar në gjuhën e strukturuar të pyetjeve SQL. Në fakt, një program SQL është një frazë pyetëse për një mostër të dhënash në anglisht, e shkruar në një strukturë specifike, të cilën DBMS më pas e konverton në rezultatin e kërkuar.

Në shumicën e DBMS-ve, fjalia përfundon me ";" dhe DBMS nuk e përpunon informacionin derisa të ndeshet me ";". Fjalitë përbëhen nga fraza dhe fillojnë me një fjalë të regjistruar. Çdo frazë ka një emër.

Emërimet e disave operatorët bazë SQL:

ZGJIDH(zgjedh) - (zgjidh) të dhënat nga kolonat e specifikuara dhe (nëse është e nevojshme) kryejnë transformimin e tyre në përputhje me shprehjet dhe (ose) funksionet e specifikuara përpara daljes; NGA– tregon tabelën nga e cila janë përzgjedhur fushat; KU– krijon një kusht për zgjedhjen e të dhënave në regjistra; URDHËR NGA– rendit të dhënat sipas një radhe të caktuar; GRUP NGA– grupet që përputhen me të dhënat gjatë ekzekutimit të pyetjeve përmbledhëse; DALLIM– përjashton të dhënat e kopjuara nga grupi i rezultateve; TRANSFORMIMI– vlerëson shprehjet në pyetje të kryqëzuara; PIVOT– Përcakton titujt e kolonave në tabelën e pyetjeve të kryqëzuara.

Rreth propozimit ZGJIDH. Të gjitha kërkesat për marrjen e pothuajse çdo sasie të dhënash nga një ose më shumë. tabelat kryhen duke përdorur një klauzolë të vetme SELECT. Në përgjithësi, rezultati i zbatimit të një klauzole SELECT është një tabelë tjetër. Operacioni SELECT mund të aplikohet sërish në këtë tabelë të re (punuese), etj., d.m.th. operacione të tilla mund të futen brenda njëri-tjetrit. Është me interes historik se është mundësia e përfshirë. një klauzolë SELECT brenda një tjetri ishte motivimi për të përdorur. mbiemri "strukturuar" në emër të gjuhës SQL. Në dizajnet e përdorura. simbolet: ylli (*) për të treguar "të gjitha" - përdoret. në kuptimin e zakonshëm për programim, d.m.th. "të gjitha rastet që plotësojnë përkufizimin"; (,) - Spanjisht për të ndarë elementët e listës; () - do të thotë se ndërtimet, përfundimi. në kllapa, yavl. opsionale ; vijë e drejtë (|) – para të gatshme. zgjedhje nga dy ose më shumë mundësi, etj.

36-37. E veçanta - stili i gjuhës SQL . Strukturat themelore të fjalisë gjuhësore në pyetje (a/c)

SQL - Gjuha e strukturuar e pyetjeve. Prodhimi i informacionit - më i unifikuar. Kjo çoi në nevojën për të krijuar një gjuhë standarde që mund

SELECT në SQL (për një tabelë): ZGJIDH(zgjidh) fushat e specifikuara

NGA(nga) tabela e specifikuar

KU(ku) disa kushte të specifikuara janë të vërteta

ZGJIDH listën e_elementeve (fushat) për t'u zgjedhur

NGA lista_tabele (ose pamje)

]

Duke përdorur kualifikuesin AS

Ky kualifikues zëvendëson emrin ekzistues të kolonës në tabelën që rezulton me atë të specifikuar.

Funksionet agregate

Funksionet e grumbullimit përfshijnë funksionet për llogaritjen e shumës (SUM), max (SUM) dhe min (MIN) të kolonave të vlerës, mesataren aritmetike (AVG) dhe numrin e rreshtave që plotësojnë një kusht të caktuar (COUNT).

ZGJIDH numrin (*), shumën (buxhetin), mesataren (buxhetin),

min (buxheti), maksimumi (buxheti)

WHERE kreu_dept = 100

llogaritni: numrin e departamenteve që janë nënndarje të departamentit 100 (Marketing dhe Shitjet), buxhetet totale, mesatare, minimale dhe maksimale të tyre COUNT SUM AVG MIN MAX

5 3800000.00 760000.00 500000.00 1500000.00

Klauzola FROM e komandës SELECT

Klauzola FROM liston të gjitha objektet (një ose më shumë) nga të cilat merren të dhënat. Çdo tabelë ose pamje e referuar në pyetje duhet të renditet në klauzolën FROM.

Llojet e kallëzuesve të përdorur në fjalinë WHERE :

krahasimi duke përdorur operatorë relacionalë

Të barabartë<>jo i barabartë!= jo i barabartë > më i madh se< меньше

>= më i madh ose i barabartë me<= меньше или равно

NDËRMJET NË LIKE PËRMBAJTJA ËSHTË NULL

Operacionet Krahasuese Nëse domenet janë të përcaktuara në bazën e të dhënave, atëherë artikujt që krahasohen duhet t'i përkasin të njëjtit domen.

ZGJIDH emrin, mbiemrin, nr.

KU vendi_punë<>"SHBA"

NDËRMJET

Kallëzuesi BETWEEN specifikon gamën e vlerave për të cilat shprehja vlerësohet si e vërtetë. Lejohet gjithashtu përdorimi i konstruksionit NOT BETWEEN.

KU rroga MES 20000 DHE 30000

merrni një listë të punonjësve, paga vjetore e të cilëve është më shumë se 20,000 dhe më pak se 30,000 FIRST_NAME LAST_NAME SALARY

Ann Bennet 22935,00

Kelly Brown 27000,00

Vlerat që përcaktojnë kufijtë e poshtëm dhe të sipërm mund të mos jenë vlerat aktuale në bazën e të dhënave. Dhe kjo është shumë e përshtatshme - sepse ne nuk mund të tregojmë gjithmonë vlerat e sakta të diapazonit!

ZGJIDH emrin, mbiemrin, rrogën

KU mbiemri MES "Nel" DHE "Osb"

merrni një listë të punonjësve, mbiemrat e të cilëve janë midis "Nel" dhe "Osb" FIRST_NAME LAST_NAME SALARY

Robert Nelson 105900.00

Carol Nordstrom 42742,50

Sue Anne O'Brien 31275.00

ZGJIDH emrin, mbiemrin, datën e punësimit

Kallëzuesi IN kontrollon nëse vlera e specifikuar që i paraprin fjalës kyçe "IN" (për shembull, një vlerë kolone ose një funksion i një kolone) është përfshirë në listën e specifikuar në kllapa. Nëse vlera e dhënë që testohet është e barabartë me çdo element në listë, atëherë kallëzuesi vlerësohet si i vërtetë. Lejohet gjithashtu përdorimi i konstruksionit NOT IN.

ZGJIDH emrin, mbiemrin, kodin e punës

WHERE job_code IN ("VP", "Admin", "Finan")

LIKE Kallëzuesi LIKE përdoret vetëm me të dhënat e karaktereve. Kontrollon nëse vlera e dhënë e karakterit përputhet me vargun me maskën e specifikuar. Të gjithë karakteret e lejuara (duke përfshirë shkronjat e mëdha dhe të vogla), si dhe karakteret speciale, përdoren si maskë:

% - zëvendëson çdo numër karakteresh (përfshirë 0),

Zëvendëson vetëm një karakter.

Lejohet gjithashtu përdorimi i konstruksionit NOT LIKE.

ZGJIDH emrin, mbiemrin

WHERE mbiemri LIKE "F%"

merrni një listë të punonjësve, mbiemrat e të cilëve fillojnë me shkronjën "F" FIRST_NAME LAST_NAME

Operatorët logjikë Operatorët logjikë përfshijnë operatorët e mirënjohur AND, OR, NOT, të cilët ju lejojnë të kryeni operacione të ndryshme logjike: shumëzim logjik (AND, "prerje e kushteve"), mbledhje logjike (OR, "bashkim i kushteve"), mohim logjik ( JO, "mohim i kushteve"). Në shembujt tanë ne kemi përdorur tashmë operatorin AND. Përdorimi i këtyre operatorëve ju lejon të "përshtatni" në mënyrë fleksibël kushtet për zgjedhjen e regjistrimeve.

Lidhje ( BASHKOHU ) Operacioni i bashkimit përdoret në SQL për të shfaqur informacionin përkatës të ruajtur në tabela të shumta në një pyetje të vetme. Lidhja zakonisht bëhet duke përdorur çelësin kryesor të një tabele dhe çelësin e huaj të një tabele tjetër - për secilën palë tabelash. Është shumë e rëndësishme të merren parasysh të gjitha fushat e çelësit të huaj, përndryshe rezultati do të shtrembërohet. Fushat që do të bashkohen mund (por nuk kërkohen!) të jenë të pranishme në listën e elementeve të përzgjedhur. Klauzola WHERE mund të përmbajë kushte të shumta bashkimi. Kushti i bashkimit mund të kombinohet edhe me kallëzues të tjerë në fjalinë WHERE.

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