Sunteți pe pagina 1din 7

5.

LIMBAJUL SQL

5.1 Prezentare general


SQL (Structured Query Language) este n prezent, unul din cele mai puternice limbaje
structurate pentru interogarea bazelor de date relaionale.
Pronunia oficial: si-q-el. Neoficial, si-quel.
Este un limbaj neprocedural i declarativ, deoarece utilizatorul descrie ce date vrea s
obin, fr a fi nevoie s stabileasc modalitile de a ajunge la datele respective. Nu poate fi
considerat un limbaj de programare sau unul de sistem, ci mai degrab face parte din categoria
limbajelor de aplicaii, fiind orientat pe mulimi. Foarte frecvent, este utilizat n administrarea
bazelor de date client/server, aplicaia client fiind cea care genereaz instruciunile SQL.
Lansat iniial de IBM. Standardizat prima dat de ANSI, apoi ISO. Actualmente, ISO 92.
Pentru c exist o standardizare a limbajului SQL, multe SGBD (Oracle, Access, Sybase)
recunosc principalele instruciuni ale acestuia.
Caracteristicile adugate standardului se numesc extensii. De ex, n standard sunt
specificate 6 tipuri diferite de date pentru o BD SQL. n multe implementri, aceast list este
completat cu o diversitate de extensii. Fiecare implementare se numete dialect. Dialectul
ACCSES conine unele particulariti, fiind conceput mai mult pentru crearea interogrilor de
selecie.
Exist 3 metode de baz privind implementarea limbajului SQL:
apelare direct (Direct Invocation): const n introducerea instruciunilor direct de la
prompter
modular (Modul Language): folosete proceduri apelate de programele aplicaie
ncapsulat (Embedded SQL): conine instruciuni ncapsulate n codul de program
Instruciunile SQL pot fi grupate n:
instruciuni de definire a datelor, care permit descrierea structurii BD
instruciuni de manipulate a datelor: adaug, terge, modific nregistrri
instruciuni de selecie a datelor, care permit consultarea BD
instruciuni de procesare a tranzaciilor
instruciuni de control al cursorului
instruciuni pivind controlul accesului la date
n limbajul SQL standardizat de ISO nu se folosesc termenii formali de relaie, atribut,
tuplu, ci tabel, coloan, rnd.
Scrierea comenzilor SQL
O instruciuni SQL este format din cuvinte rezervate i cuvinte definite de utilizator.
Cuvintele rezervate constituie partea fix i se scriu exact cum este necesar. Cuvintele definite de
utilizator reprezint denumirile diverselor obiecte din BD.
Dei standardul nu o cere, majoritatea dialectelor cer terminator de instruciune (;).
Majoritatea componentelor nu sunt sensibile la tipul de litere (excepie important: cnd
datele au caracter literal, de ex, dac se stocheaz numele POPA i cautm Popa, nu vom
gsi nregistrarea respectiv).
Dei SQL este un limbaj cu format liber, o instruciune este mai lizibil dac se
utilizeaz indentarea i alinierea. De ex:
fiecare clauz dintr-o instruciune trebuie s nceap pe o linie nou
nceputul fiecrei clauze s fie aliniat cu nceputul celorlalte
dac o clauz are mai multe pri, fiecare parte trebuie s apar pe cte o linie separat
i trebuie indentat fa de nceputul clauzei

Convenii de notare folosite n definirea instruciunilor:


majuscule pentru cuvintele rezervate
litere mici pentru cuvinte definite de utilizator
bara vertical | indic posibilitatea alegerii dintre mai multe variante
acoladele { } indic un element necesar
parantezele drepte [ ] indic un element opional
punctele de suspensie ... indic o repetare opional a unui articol, de 0 sau mai multe ori
Identificatorii SQL sunt utilizai pentru a numi obiecte din BD. Pentru caracterele utilizate,
standardul ISO permite A...Z, a...z, 0...9, _. Restricii impuse identificatorilor:
nu poate fi mai lung de 128 caractere (majoritatea dialectelor au o limit mult mai joas)
trebuie s nceap cu o liter
nu poate conine spaii libere
5.2 Instruciuni pentru definirea datelor
Teoretic, comenzile pentru definirea datelor fac parte din modulul corespunztor
componentei DDL din SGBD. Totui, n majoritatea implementrilor SQL comenzile de definire
a datelor sunt prelucrate de acelai interpretor care rezolv i interogrile i operaiile de
manipulare a datelor. Componentele DML i DDL ale SGBD sunt implementate n acelai
modul software.
CREATE DATABASE nume_bd
Creaz o baz de date. Majoritatea SGBD permit crearea unei BD print-un simplu clic de mouse.
Exist i posibilitatea folosirii acestei instruciuni, dar mult mai greoi. Comanda nu e
standardizat, ACCESS nici nu o accept.
CREATE TABLE nume_tabel
(cmp1 tip_dat [NOT NULL],
cmp2 tip_dat [NOT NULL],
cmp3 tip_dat [NOT NULL]...)
Creaz un tabel i definete structura unei nregistrri precum i tipurile de date asociate
cmpurilor. Numele tabelului trebuie s fie unic n BD. Clauza NOT NULL arat c n cmpul
respectiv nu se memoreaz valori de tip NULL.
ALTER TABLE nume_tabel
ADD nume_cmp tip_dat
Adaug un cmp la un tabel existent. tergerea unui cmp nu este posibil.
DROP TABLE nume_tabel
terge complet un tabel din BD.
DROP DATABASE nume_bd
terge BD. Exist ns o multitudine de restricii stabilite de administratorul sistemului privind
aceast operaie. Multe versiuni SQL nu includ aceast instruciune, stregerea fcndu-se din
comenzi de mouse.

5.3

Instruciuni pentru selecia datelor

5.3.1

Cereri de interogare simple


Instruciunile de selecie reprezint una din categoriile cele mai importante ale
limbajului SQL ACCESS. Indiferent dac sunt cereri simple sau complexe, cuvntul cheie este
SELECT. Pentru cererile de interogare simple, sintaxa instruciunii este:

SELECT [domeniu] list_selecie


FROM nume_tabel1, nume_tabel2,
[WHERE criteriu_selecie]
[ORDER BY cmpuri_criteriu [ASC|DESC]];
Domeniu
Specific o opiune de includere sau eliminare din rezultatul seleciei, a nregistrrilor care
conin duplicate. Opiunile posibile sunt:
ALL cere includerea tuturor nregistrrilor care ndeplinesc condiiile impuse.
Cum instruciunile SELECT tabel i SELECT ALL tabel au acelai rezultat practic,
calificativul ALL este rar folosit.
DISTINCT cere eliminarea nregistrrilor care conin duplicate n cmpurile
selectate, afind numai o apariie a acesteia.
DISTINCTROW cere eliminarea nregistrrilor care conin duplicate n
ansamblul lor, nu numai n cmpurile selectate, afind numai o apariie a
acesteia.

List_selecie cuprinde cmpurile care dorim s apar n tabelul cu rezultatele interogrii.


Similar cu Field Show din grila de proiectare QBE.

Clauza FROM specific numele tabelului sau tabelelor pe care se face cererea de
interogare. Pentru mai multe tabele, numele acestora se separ cu ,. Pe lng tabele, ca
surs de informaii pot apare i interogri deja create.

Clauza WHERE cere numai nregistrrile care ndeplinesc criteriul de selecie specificat.
Criteriul de selecie este o expresie care conine obligatoriu i un operator adecvat tipului de
dat al cmpului respectiv. Clauza WHERE este opional.

Clauza ORDER BY cere ordonarea n mod cresctor (ASC) sau descresctor (DESC) a
rezultatelor interogrii. Ordonarea este opional i se poate face dup unul sau mai multe
cmpuri_criteriu.

5.3.2 Cereri de interogare complexe


Sunt acele interogri n care apar funciile agregat, asocierile sau combinrile.
Funciile agregat (de grup)
Permit construirea unor interogri complexe, prin care utilizatorul cere gruparea nregistrrilor
care au cmpuri cu aceeai valoare, n scopul efecturii unor calcule. n standardul ISO sunt
definite 5 funcii de grup:
COUNT returneaz numrul de valori dintr-o coloan specificat
SUM returneaz suma valorilor dintr-o coloan specificat
AVG returneaz media valorilor dintr-o coloan specificat
MIN returneaz cea mai mic valoare dintr-o coloan specificat

MAX returneaz cea mai mare valoare dintr-o coloan specificat


Sintaxa instruciunii:
SELECT [domeniu] funcie_agregat(nume_cmp) AS alias [,list_selecie]
FROM nume_tabel1, nume_tabel2,
GROUP BY cmp_de_grupare
[HAVING criteriu_de_grupare]
[ORDER BY cmpuri_criteriu [ASC|DESC]];
Elementele noi de sintax:
AS alias asociaz un pseudonim rezultatului funciei agregat

Clauza GROUP BY precizeaz cmpul sau cmpurile dup care se face gruparea
nregistrrilor. Echivalentul acestei clauze n macheta grafic QBE l reprezint rndul Total.

Clauza HAVING conine criteriul care va fi aplicat cmpului argument al funciei agregat.
Spre deosebire de WHERE, care acioneaz nainte de gruparea nregistrrilor, HAVING
acioneaz dup definirea acesteia.

Asocierile (interogrile JOIN)


Limbajul SQL ofer posibilitatea de a grupa i folosi date din tabele diferite. Operaiile de
asociere induse de clauza JOIN au ca rezultat producerea tuturor combinaiilor posibile, pentru
coninutul informaional al fiecrui tabel. Noile nregistrri care rezult n urma jonciunii sunt
disponibile pentru seleciile urmtoare. La o asociere pot participa mai mult de 2 tabele.
Exist mai multe categorii de jonciuni:
CROSS (ncruciat) rar folosit
ECHIVALENT (echijonciune) cea mai folosit presupune folosirea
clauzei WHERE asociat cu o egalitate dorit
NEECHIVALENT (non echijonciune) - rar folosit - presupune folosirea
clauzei WHERE asociat cu orice alt operator de comparare, n afar de =
Sintaxa instruciunii pentru jonciunile echivalente i neechivlente este:
SELECT [domeniu] list_selecie
FROM nume_tabel1, nume_tabel2,
[WHERE criteriu_de_asociere]
[ORDER BY cmpuri_criteriu [ASC|DESC]];
Deoarece n instruciunile SQL care descriu jonciuni se utilizeaz cmpuri care fac parte din
tabele diferite, trebuie specificat numele tabelului de care aparin, folosind sintaxa
nume_tabel.nume_cmp
fr spaii nainte sau dup punct.
Dup modul de asociere a nregistrrilor din tabele, jonciunile pot fi:
interne sau INNER JOIN determin o asociere a nregistrrilor din tabele,
astfel nct s rezulte un numr total de nregistrri egal cu produsul
numrului de nregistrri din fiecare tabel
externe de stnga sau LEFT OUTER JOIN
externe de dreapta sau RIGHT OUTER JOIN
Echivalentul QBE al acestor categorii de jonciuni este alegerea opiunilor 1, 2, sau 3 din caseta
Join Properties.
Sintaxa instruciunii:
SELECT [domeniu] list_selecie

FROM nume_tabel1
{INNER|LEFT OUTER|RIGHT OUTER} JOIN nume_tabel2
ON criteriu_de_asociere
[{INNER|LEFT OUTER|RIGHT OUTER} JOIN nume_tabel3
ON criteriu_de_asociere]
[WHERE criteriu_selecie]
[ORDER BY cmpuri_criteriu [ASC|DESC]];
Obs: SQL ACCESS accept scrierea fr specificarea explicit a lui OUTER.
Semnificaia elementelor noi:
JOIN specific tabelul care va fi asociat (nume_tabel2, nume_tabel3) celui din clauza
FROM

ON arat ntre ce cmpuri trebuie s existe relaia pe care se bazeaz jonciunea. Criteriul
de asociere conine obligatoriu operatorul =.

Combinrile (interogrile UNION)


Cnd utilizatorul dorete s vad rezultatele mai multor interogri SELECT n acelai
timp, prin combinarea ieirilor lor, se poate utiliza facilitatea UNION. De remarcat c nu exist
echivalent QBE pentru aceast instruciune.
Sintaxa general pentru interogrile UNION este:
SELECT list_cmpuri FROM nume_tabel1
UNION SELECT list_cmpuri FROM nume_tabel2
[GROUP BY cmp_de_grupare]
[HAVING criteriu_de_agregare]
[UNION SELECT list_cmpuri FROM nume_tabel3
[GROUP BY cmp_de_grupare]
[HAVING criteriu_de_agregare]]
[UNION ]
[ORDER BY cmpuri_criteriu [ASC|DESC]];
Exist mai multe restricii pentru instruciunile care generez interogrile UNION, i anume:
Numrul cmpurilor din lista de cmpuri din fiecare instruciune SELECT i UNION
SELECT trebuie s fie aceeai
Secvena de nume din fiecare list de cmpuri trebuie s corespund unor intrri identice
Este permis utilizarea doar o dat a clauzei ORDER BY, dup ultima instruciune
UNION SELECT
Exemple:
SELECT nume, prenume, vrst FROM Colaboratori2001
UNION SELECT nume, prenume, vrst FROM Colaboratori2002
ORDER BY nume;
SELECT nume, prenume, vrst FROM Colaboratori2001
GROUP BY categoria
HAVING categoria=student
UNION SELECT nume, prenume, vrst FROM Colaboratori2002
GROUP BY categoria
HAVING categoria=student

5.4 Instruciuni pentru manipularea datelor


Foarte utile n exploatarea unei BD, aceste instruciuni se implementeaz prin interogrile
de aciune. Este necesar o mare precauie n utilizarea lor deoarece aciunile sunt ireversibile,
putnd influiena inclusiv integritatea referenial a BD.
Cele mai importante sunt: CREATE, INSERT, UPDATE i DELETE.

Interogrile de aciune tip CREATE duc la generarea unui nou tabel pornind de la structura
i coninutul unor tabele deja existente. Se folosete instruciunea SELECT ... INTO
SELECT [domeniu] (cmp1,cmp2...)
INTO tabel_nou
FROM tabel_sursa
[WHERE criteriu_de_adugare];

Interogrile de aciune tip INSERT sunt folosite pentru adugarea de nregistrri dintr-un
tabel n altul. Exist dou forme ale instruciunii i anume:
INSERT ... VALUES
INSERT ... SELECT
a). In primul caz se adaug o singur nregistrare ntr-un tabel, menionndu-se cmpurile i
valorile acestora. Se utilizeaz pentru operaii simple, care presupun lucrul cu un numr redus de
nregistrri.

INSERT INTO nume_tabel (cmp1, cmp2...)


VALUES (valoare1, valoare2...);
Reguli:
valorile din clauza VALUES vor avea aceeai natur cu cmpurile din clauza INTO
mrimea valorii va fi < dimensiunea cmpului
coresponden ntre cmp1 i valoare1, etc.
Dac un cmp are specificaia NOT NULL, este obligatorie introducerea unei valori
pentru aceasta
b). n al doile caz, este posibil s se copieze mai multe nregistrri dintr-un tabel n unul sau mai
multe tabele.
INSERT INTO tabel_destinaie (cmp1, cmp2...)
SELECT [domeniu] cmp1, cmp2...
FROM tabel_surs
WHERE criteriu_de_adugare;
Reguli:
aceleai ca mai sus
numrul i natura cmpurilor din clauza INTO s fie aceleai cu cele returnate de
instruciunea SELECT
dac nu se introduce WHERE, toate nregistrrile din tabel_surs vor fi adugate n
tabel_destinaie

Interogrile de aciune tip DELETE terg parial sau total nregistrrile dintr-un tabel. Nu se
folosete pentru tergerea de valori din cmpuri individuale, ci acioneaz asupra nregistrrii
n totalitatea ei. Dac se terg toate nregistrrile, structura de tabel rmne, ea putnd fi
eliminat numai cu DROP TABLE.

DELETE FROM nume_tabel


[WHERE criteriu_de_tergere];
Ca i instruciunea INSERT, operaia de tergere a nregistrrilor dintr-o tabel poate duce la
probleme de integritate referenial n alte tabele.
Exemplu:
DELETE *
FROM Vnzri
DELETE *
FROM Angajai
WHERE Vrsta>60

Interogrile de aciune tip UPDATE pot introduce nregistrri noi i pot modifica valorile
cmpurilor din nregistrri existente.

UPDATE nume_tabel
SET nume_cmp1=valoare1 [,nume_cmp2=valoare2]...
[WHERE criteriu_de_actualizare];
Ca i n celelalte locuri unde apare clauza WHERE, restricionarea se poate accentua folosind i
operatori logici.
Exemplu:
UPDATE Comunicaii
SET Reea=Orange
WHERE Reea=Dialog AND Data>#12.12.2001;
5.5 Cereri de interogare imbricate
Scrierea unei interogri n cadrul alteia duce la apariia unei subinterogri, setul de
rezultate obinute de la aceasta constituind argument pentru prima interogare.
SELECT lista_cmpuri
FROM tabel1
WHERE tabel1.nume_cmp=
(SELECT nume_cmp
FROM tabel2
WHERE criteriu_de_selecie);
Cele dou tabele trebuie s aib un cmp comun (nume_cmp) care va reprezenta cmpul de
legtur ce st la baza construirii subinterogrii.

S-ar putea să vă placă și