Acest limbaj este un limbaj standardizat ANSI si ISO, utilizat de majoritatea sistemelor care gestioneaza bazele de date relationale(SGBD). SQL are o sintaza usor de asimilat pentru utilizatori in comparatie cu limbajul initial SEQUEL care are o sintaxa baxata in cea mai are parte pe notatii matematice. Sintaxa SQL este apropiat de limba engleza asa cum arata si denumirea limbajului (SQL sau SEQUEL -Structured English Query Language).
Limbajul SQL este un limbaj intermediar avand unele caracteristici provenite din algebra relationala si altele care isi au originea in calculul relational al tuplelor.
Vom prezenta principalele elemente ale limbajului SQL folosite in procesul de dezvoltare a aplicatiei:
3.1.1.Instructiunea SELECT
SELECT [DISTINCT] nume_atribut1, nume_atribut2..``
[INTO tabela_noua]
FROM nume_relatie [variabila de tupla].
WHERE conditie_de_cautare
[GROUP BY multime_atribut]
[HAVING conditie_de_cautare]
[ORDER BY multime_atribute [ ASC | DSC ] ]
Aceasta este operatia fundamentala in SQL si se mai numeste si mapare. Reprezinta o succesiune de operatii algebrice de forma slectie-proiectie-cuplare foarte frecventa in algebra relationala.
Se foloseste pentru a returna un set de inregitrari, liste, tabela care indeplinesc anumite conditii. Aceasta constructie va aparea in toate cazurile in care vom avea nevoie de informatii cu privire la serverele disponibile, la afisarea informatiilor despre anumite servere, precum si afisarea rezultatelor cautarii in functie de index a informatiilor dorite.
3.1.2.Instructiunea INSERT
INSERT [INTO] [ nume_tabela | nume_vedere ]
{ [ (lista_coloane) ]
{ VALUES ( {DEFAULT | NULL | EXPRESIE } [ , ...n ] ) ]
| tabela_derivata
| instructiune_execute
}
}
| DEFAULT VALUES
Se foloseste pentru adaugarea de noi inregistrari in tabele existente pe un anumit server.
3.1.3. Instructiunea UPDATE
Este folosita pentru a modifica date existente intr-o tabela.
UPDATE { nume_tabela | nume_vedere }
SET
{ nume_coloana = { expresie | DEFAULT | NULL }
| @variabila= expresie
| @variabila= coloana= expresie } [, . n]
[ FROM { } [, .n]
{ WHERE { < conditie_cautare >
| { [ CURRENT OF
{ { [ GLOBAL ] nume_cursor } | nume_variabila_cursor }
] }
}
]
In cazul in care nu se specifica o conditie de cautare, o astfel de comanda poate sa fie periculoasa ducand la modificarea tuturor inregistrarilor din tabela. Trebuie specificata clar conditia de filtrare pentru a elimina asemenea erori.
3.1.4. Intructiunea DELETE
Folosita pentru stergerea tupleleor dintr-o tabela
DELETE [ FROM ] { nume_tabela | nume_vedere }
[ FROM { } [, ... n] ]
[ where {
| { [ CURRENT OF
{ { [ GLOBAL ] nume_cursor } | nume_variabila_cursor }
] }
}
]
3.1.5. Proceduri stocate
Procedurile stocate din SQL Server sunt similare procedurilor din alte limbaje de programare in sensul ca accepta parametrii de intrare, oferind valori prin parametrii de iesire catre aplicatiile apelante, continand instructiuni de programare care efectueaza operatii in baza de date, putand apela ale proceduri stocate.
La dezvolarea aplicatiilor( exemplu client/server) se poate vorbi despre doua moduri de stocare si executare a programelor:
. Programele pot fi memeorate local la nivelul aplicatiilor care trimit comenzi catre SQL Server si prelucreaza rezultatele returnate de acesta
. Dezvoltarea si inregistrarea programelor ca proceduri stocate in SQL Server si crearea de aplicatii care apeleaza aceste proceduri si prelucreaza rezultatele returnate de acestea.
Avantajele oferite de utilizarea procedurilor stocate fata de varianta programelor stocate la nivelul aplicatiilor utilizator sunt:
. Programare modulara: o procedura stocata este creata o singura data si apelata de mai multe ori si mai multe aplicatii
. Performanta imbunatatita: compilarea si optimizarea procedurilor stocate se face o singura data la crearea procedurii si sunt pastrate intr-o forma direct executabila astfel incat sa se evite fazele de comilare si optimizare la fiecare apel de procedura.
. Reducerea traficului in retea: o prelucrare presupune executia a sute de liniii de cod. In cazul procedurilor stocate acest luxru este realizat printr-o singura linie de comanda, evitandu-se astfel transmiterea prin retea a intregului cod pentru fiecare executie.
. Ofera mecanism suplimentar de securitate: utilizatorii nu au acces direct la codul procedurilor, iar dreptul de executie a unei proceduri poate fi acordat in functie de statutul fiecarui utilizator de catre administratorul bazei de date.
Sintaxa unei proceduri este urmatoarea:
CREATE PROC[EDURE ] nume_procedura [; numar ]
[
{ @parametru tip_de_data} [ VARYING] = valoare_implicita ]
[ OUTPUT ]
] [,... n]
[WITH
{ RECOMPILE
| ENCRYPTION
| RECOMPILE, ENCRYPTION }
]
[ FOR REPLICATION ]
AS
Instructiuni_sql [. n ]
Lansarea in executie a unei proceduri stocate se face cu comnda EXECUTE. La primul apel de executie a procedurii stocate are loc compilarea si construirea unui plan de executie optimizat.
3.1.6 Triggere
Triggerele sunt o clasa speciala de proceduri stocate, asociate unei tabele, definite pentru a fi lansate in executie automat la initierea unei operatii de tip UPDATE, INSERT sau DELETE asupra tabelei in cauza.
Triggerele sunt un instrument puternic pentru implementarea a ceea ce in aplicatiile de baze de date poarta numele de business rules. Termenul se refera la acele reguli, constrangeri, care tin in mod inerent de structura bazei de date si sunt induse de semnatica unei colectii de date, fiind comuna tuturor aplicatiilor care folosesc aceasta baza de date si independente de fiecare aplicatie in parte.
Sintaxa instructiunii CREATE TRIGGER:
CREATE TRIGGER nume_trigger
ON { tabela | vedere } [WITH ENCRYPTION ]
{
{ { FOR | AFTER | INSTEAD OF }
{ [ DELETE ], [INSERT ] [,] [ UPDATE ] }
[ NOT FOR REPLICATION ]
AS
instructiune_sql [...n]
}
IF UPDATE ( coloana )
[ { AND | OR } UPDATE (coloana) ] [...n]
[ IF (COLUMS_UPDATE() { operator_biti }
masca_modificare )
{ operator_comparare } masca_test [...n ]
}
Instructiune_sql [..n ]
}
}
Exemple tipice de utilizare a triggerelor :
. Cascadarea operatiilor de modificare de la tabela curenta la alte tabele din baza de date. Exemplu: schimbarea drepturilor de acces la un server sa determine si schimbarea automata a drepturilor de acces a serverelor replicate.
. Anularea modificarilor care ar duce la violarea integritatii referentiale. Se pot folosi triggere ca mijloc alternativ, eventual mai sofisticate, la instrumentele de tip declarativ cum ar fi declaratii de chei traine
. Exprimare unor contrangeri mai complexe care nnu pot fi exprimate sub forma unor constrangeri de tip CHECK.
3.1.7 Vederi
O vedere este o tabela virtuala al carei continut este definit printr-o interogare. Ca si in cazul tabelelor reale, o vedere consta dintr-un set de atribute si se materializeaza intr-un set de tuple. Datele corespunzatoare unei vederi nu sunt memorate in obiecte ale bazei de date, ceea ce memoreaza este o fraza SELECT pe baza careia datele sunt determinate in momentul invocarii vederii. O vedere poate sa faca referire la una sau mai multe tabele sau chiar si vederi.
Intr-o aplicatie folosirea unei vederi poate duce la :
-simplificarea viziunii utilizatorului asupra datelor
-mecanism suplimentare de securitate
-simplificare manipurarii datelor
-simplificarea operatilor de import si export a datelor
Sintaxa este :
CREATE VIEW nume_vedere[(coloana [,n] ) ]
[ WITH ECRYPTION ]
AS
instructiune_SELECT
[ WITH CHECK OPTION ]