Documente Academic
Documente Profesional
Documente Cultură
SQL (Structured Query Language) este implementat de aproape toate sistemele de gestiune a
bazelor de date relationale. In anul 1976 a fost publicata sintaxa completa a limbajului SQL
care a fost adoptat de ANSI, in anul 1986 ca limbaj standard pentr lucrul cu baze de date
relationale. SQL este un limbaj simplu si in consecinta accesibil utilizatorilor. Se
fundamenteaza in principal pe conceptul de bloc de cerere care se poate formaliza astfel:
<bloc de cerere>
lista de atribute
unde: lista de atribute cuprinde atribute din structura tabelei sursa sau atribute calculate pe
baza celor existente in tabela/tabele sursa.
A. Comenzi SQL de descriere a datelor, permitand definirea tabelelor reale si virtuale ale
BD, modificarea structurii tabelelor, stergerea tabelelor si a indecsilor :
CREATE TABLE, CREATE VIEW, ALTER TABLE, DROP TABLE, DROP INDEX
D. Comenzi SQL de control a datelor, permitand atribuirea si/sau revocarea dreptului de
acces la date: GRANT, REVOCE.
CONSTRAINT nume_index ;
unde:
primary key permite specificarea campului cheie primara pe care se construieste un index.
Exemplu:
Modificarea structurii unei tabele prin adaugarea unui nou camp vom folosi comanda
ALTER TABLE:
Exemplu:
Crearea tabelelor virtuale, view-uri, permite definirea unor “ferestre” prin care putem
“privi” in tabele sau, altfel spus, putem vizualiza datele dorite dintr-o tabela specificata.
Exemplu:
Aceste view-uri, odata definite, pot fi utilizate oricand drept sursa a unei cereri, definitia lor
fiind retinuta in dictionarul bazei de date.
O cerinta a utilizatorului de selectare a datelor din baza de date relationala se exprima prin
ceea ce am numit un bloc de cerere.
Un bloc de cerere in SQL prezinta urmatoarea sintaxa simplificata:
FROM nume_tabele
[WHERE criteriu_de_cautare]
[GROUP BY atribut_grupare]
[HAVING criteriu_de_grupare]
[ORDER BY criteriu_de_ordonare[ASC/DESC]];
unde:
GROUP BY – folosit pentru a imparti o tabela in grupuri, acordand acestora valori
pe un atribut sau lista de atribute;
Exemplu:
a) Daca dorim sa vizualizam toate inregistrarile tabelei Produse, blocul de cerere va
prezenta urmatoarea forma (* precizeaza returnarea realizarilor tuturor atributelor si nu doar a
unora dintre ele):
b) Daca se doreste afisarea realizarilor doar pentru anumite atribute din structura tabelei, in
cazul nostru a denumirii si pretului produselor, blocul de cerere va prezenta urmatoarea
forma:
c) Daca doriti sa aflati ce calitate au produsele achizitionate, puteti construi urmatorul bloc
de cerere:
Inconvenientul este faptul ca toate realizarile celor n inregistrari ale tabelei, pentru atributul
calitate, sunt returnate. Acelasi rezultat il obtinem si daca inlocuim in blocul de cerere clauza
distinctrow cu all. Pentru a extrage valorile neduplicate trebuie folosita clauza distinct.
d) In cazul in care doriti sa vizualizati doar numele si pretul produselor avind pretul
produselor avind pretul mai mare de 10000 vom avea:
e) Daca doriti sa aflati care din produsele de calitate a doua au preturi mai mari de 10000:
f) In cazul in care doriti sa cunoasteti denumirea produselor cu preturi inre 9000 si 11000
lei vom avea doua posibilitati:
Select den_produs from produse where pret>=9000 and pret<=11000;
Sau
g) Daca doriti sa cunoasteti produsele care au unul din preturile 11000, 12300 sau 15000, in
clauza where se va folosi operatorul in:
h) Daca doriti sa ordonati tabela Produse dupa calitate si pret, pornind de la pretul cel mai
mare din grupa de calitate respectiva:
i) Daca doriti sa aflati pretul maxim, minim si mediu al produselor, avem:
Select distinctrow max(pret) as [pret max], min(pret) as [pret min], avg(pret) as [pret mediu]
from produse;
Observati ca prin clauza as din exemplul de mai sus am putut modifica eticheta coloanelor ce
returneaza valoarea functiilor specificate.
j) In cazul in care doriti sa cunoasteti numarul de produse, cererea va utiliza functia Count:
k) Daca doriti sa cunoasteti la ce calitati si la ce preturi este oferit produsul pere, aveti doua
posibilitati:
sau
l) Daca doriti sa cunoasteti ce produse, ale caror nume incep cu litera “m”, sunt stocate in
tabela Produse:
m) Daca doriti sa cunoasteti preturile produselor ale caror nume incep cu litere de la “a” la
“m”:
like ”[a-m]*”;
In acest caz, interogarile vor lucra pe grupuri de inregistrari definite dupa criterii specificate
(prin clauza GROUP BY), la nivelul grupului de inregistrari executandu-se urmatoarele functii
agregate:
Exemple:
a) Pentru a stabili pretul maxim, minim si mediu al produselor la nivelul fiecarei calitati:
b) Pentru a afla cate produse sunt oferite in cadrul fiecarui niel de calitate :
BY calitate ;
c) Pentru a afla cate produse, cu preturile intre 11800 si 15000, sunt oferite in cadrul
fiecarui nivel de calitate :
BY calitate ;
d) Ce cantitati s-au livrat din fiecare produs (este necesara gruparea pe produs si aplicarea
functiei SUM pe campul [cant fact]):
Utilizarea subcererilor
Realizarea unor cautari mai complexe in BD presupune construirea unor subcereri in cadrul
unei cereri.
Exemple:
a) Sa presupunem ca dorim sa cunoastem care sunt produsele cu pretul mai mare decat al
portocalelor:
SELECT DISTINCTROW [den_prod], pret FROM produse
In cazul cererilor imbricate, prin predicatele ALL, ANY si SOME se pot restrictiona rezultatele
returnate. Ulimele doua sunt sinonime si permit regasirea inregistrarilor din cererea
principala, care satisfac comparatia cu oricare inregistrare din subcerere. Primul permite
regasirea inregistrarilor din cererea principala care satisfac comparatia cu toate inregistrarilor
returnate de subcerere.
b) Daca vrem sa cunoastem produsele de calitatea intai cu pretul mai mic decat al tuturor
produselor de calitatea a doua:
WHERE calitate = 1 AND pret < ALL( SELECT pret FROM produse WHERE calitate = 2);
c) Pentru a afla care este cantitatea minima livrata pentru produsul mere, mai mica decat
toate cantitatile livrate din produsele existente:
SELECT livrari.[cant fact] AS [cantitate minima] FROM produse, livrari WHERE produse.
[cod_produs] = livrari.[cod_prod] AND produse.[den_prod] = 'mere' AND livrari.[cant fact] <
ALL (SELECT [cant fact] FROM livrari);
d) Pentru a afla produsele pentru care nu s-au facut livrari, in cadrul blocului de cereri se va
utiliza predicatul NOT EXISTS:
produse.[cod_produs] = livrari.[cod_prod]);
CONCLUZIE:
Acces genereaza automat forma SQL a interogarilor exprimate in interfata QBE. Utilizatorii
pot modifica aceste interogari schimband modul de vizualizare (optiunea SQL din meniul
VIEW). In plus, utilizatorul poate formula interogari direct in SQL, astfel:
se executa interogarea.