Sunteți pe pagina 1din 22

LIMBAJUL SQL

LIMBAJUL SQL
Introducere
Limbajul SQL (Structured Query Language) reprezintă, în
prezent, unul dintre cele mai puternice limbaje structurate
pentru interogarea bazelor de date relaţionale.
Există un anumit grad de standardizare a limbajului SQL,
mai multe sisteme de gestiune a bazelor de date recunoscând
principalele instrucţiuni ale acestuia (de exemplu: Oracle,
Access, Sybase etc.).
Pe plan mondial, standardul în domeniu este considerat
American National Standards Institute (ANSI) SQL care are
în vedere atât aspectele de definire, interogare, manipulare a
datelor, procesare a tranzacţiilor, cât şi caracteristicile
complexe privind integritatea informaţiilor, cursoarele
derulante sau joncţiunile externe.
SQL în Access
Sistemul de gestiune a bazelor de date ACCESS
2000 acceptă utilizarea limbajului de interogare SQL.
Existenţa tehnicii grafice QBE (Query by Example-
interogare prin exemplu) permite proiectarea facilă a
unor interogări complexe, informaţia definită pe grila
QBE fiind automat transformată într-o instrucţiune
SQL.
Dialectul ACCESS conţine unele particularităţi în
raport de standardul ANSI SQL, fiind conceput mai
mult pentru crearea interogărilor de selecţie.
Reguli de sintaxă
Pentru a putea scrie corect o instructiune SQL în
Access trebuie să se respecte următoarele reguli de sintaxă:
– orice comandă se va încheia cu punct “;”
– într-o interogare unde se folosesc câmpuri din mai
multe tabele, pentru a separa numele tabelului de
numele câmpului, se va utiliza “.” după modelul
tabel.câmp;
– parantezele drepte încadrează numele de câmpuri
doar când acestea conţin spaţii sau simboluri
neacceptate de SQL;
• pentru a delimita parametrii dintr-o listă, se utilizează
virgulele
• valorile de tip şir se marchează prin apostrof sau
ghilimele
• inegalităţile din cadrul clauzelor se vor specifica prin
“<>”
• simbolurile ? şi * sunt folosite pentru a desemna unul
sau mai multe caractere de înlocuire
• pentru a evidenţia valorile de tip data / timp se
apelează la caracterul #
Etapele creării unei interogări
• din fereastra Database (Baza de date) se va selecta butonul
Queries (Interogări) ;
• pentru a crea interogarea SQL dorită va fi necesară, fie
activarea butonului New (Nou), fie alegerea opţiunii Create
query in Design view (Creare interogare în vizualizare
proiect);
• pentru a scrie interogarea SQL Access este necesar ca din
meniul View utilizatorul să opteze pentru modul de vizualizare
SQL View. În fereastra care apare se vor tasta instrucţiunile
SQL specifice, respectând sintaxa corespunzătoare;
• interogarea SQL Access creată se poate lansa în execuţie în
două moduri: prin utilizarea butonului din bara Query
Design sau prin opţiunea Run, din meniul Query.
Comenzile pentru definirea datelor (LDD)

Principalele comenzi SQL pentru definire a


datelor sunt următoarele:
CREATE DATABASE
DROP DATABASE
CREATE TABLE
ALTER TABLE
DROP TABLE
Comanda CREATE DATABASE are următoarea
sintaxă:
CREATE DATABASE nume_baza_de_date fiind
utilizată pentru crearea unei noi baze de date. Access SQL
nu acceptă o astfel de comandă.

Comanda DROP DATABASE cu sintaxa:


DROP DATABASE nume_baza_de_date este utilizată
pentru ştergerea bazei de date. Access SQL nu acceptă o
astfel de comandă.
Pentru crearea unei tabele se utilizează comanda:
CREATE TABLE nume_tabela (câmp1 tip_data [NOT
NULL], câmp2 tip_data [NOT NULL], câmp3 tip_data
[NOT NULL]...);
Printre cele mai importante tipuri de date folosite amintim:
Character, Memo, Number, Integer, Decimal, Logical, Date,
OLE Object etc.

Pentru modificarea structurii unui tabel se utilizează


comanda ALTER TABLE cu sintaxă :
ALTER TABLE nume_tabela ADD nume_câmp
tip_data;

Comanda DROP TABLE nume_tabela este folosită pentru


a şterge complet o tabelă dintr-o baza de date (structura şi
valorile asociate).
Comenzi pentru selecţia datelor
Pentru definirea interogărilor de selecţie simple se utilizează
următoarea sintaxă a instrucţiunii SELECT:
SELECT [domeniu] lista_selectie
FROM nume_tabela1, nume_tabela2,...
[WHERE criteriul_de_selectie]
[ORDER BY câmpuri_criteriu [ASC|DESC]];
Domeniu permite stabilirea modalităţii de manipulare a
înregistrărilor din baza de date şi poate fi:
– ALL : permite includerea tuturor înregistrărilor ce îndeplinesc
condiţiile impuse.
– DISTINCT : are ca efect eliminarea înregistrărilor care conţin
duplicate în câmpurile selectate astfel, se va afişa doar o apariţie a
datei multiple;
– DISTINCTROW are în vedere înregistrările duplicate în
ansamblul lor, nu numai pe cele care au câmpuri duplicate.
Lista_selectie cuprinde toate câmpurile care vor apărea
în tabela cu rezultatele interogării.
Clauza FROM specifică numele tabelei sau tabelelor
care vor forma suportul interogării.
Clauza WHERE face interogările mai selective,
specificând faptul că vor fi afişate numai înregistrările care
îndeplinesc criteriul descris. Clauza WHERE este opţională
şi nu operează cu funcţii totalizatoare. În cadrul condiţiei din
clauza WHERE pot fi utilizaţi operatorii : AND, OR, NOT,
IN, BETWEEN, LIKE.
Clauza ORDER BY utilizată atunci când se doreşte ca
rezultatele interogării să fie ordonate în mod crescător
(ASC) sau descrescător (DESC).
În cadrul interogărilor de selecţie simple SQL
ACCESS se pot folosi şi funcţii totalizatoare. Cele mai
importante funcţii din această categorie sunt:
COUNT : returnează numărul de înregistrări care
respectă condiţiile stabilite prin clauza WHERE,
SUM : redă suma tuturor valorilor dintr-un câmp;
operează numai cu valori numerice,
AVG : calculează valoarea medie a unui câmp
numeric,
MAX : permite determinarea celei mai mari valori
dintr-un câmp, nu operează în cadrul clauzei WHERE;
MIN : duce la obţinerea celei mai mici valori a unui
câmp, rămâne valabilă şi aici restricţia privind clauza
WHERE.
Pentru definirea interogărilor de selecţie agregate se utilizează
următoarea sintaxă a instrucţiunii SELECT:
SELECT [domeniu] f_agreg(nume_camp) as alias [,lista_selectie]]
FROM nume_tabela1, nume_tabela2,...
GROUP BY camp_grupare
[HAVING criteriu_grupare]
[ORDER BY campuri_criteriu [ASC|DESC]];

În cadrul listei de selecţie se pot defini şi alias-uri. Acestea


reprezintă un pseudonim (nume) asociat unui câmp care este
argument al funcţiei agregat, astfel : câmp AS alias.
Clauza GROUP BY precizează câmpul sau câmpurile pe baza
cărora se va efectua gruparea înregistrărilor.
Clauza HAVING se referă la criteriul care va fi aplicat
câmpului-definit ca argument al funcţiei agregat. Altfel spus, când
se foloseşte clauza GROUP BY şi este necesară şi o condiţie, se va
utiliza clauza HAVING.
Asocieri
Limbajul SQL oferă posibilitatea de a grupa şi
folosi date din tabele diferite.
Joncţiunile se pot clasifica în:
- joncţiuni CROSS mai puţin utilizată, cu rol în
ilustrarea elementelor specifice proprietăţilor
combinatorii ale asocierilor;
- joncţiuni de ECHIVALENŢĂ, cea mai
folosită, presupune folosirea clauzei WHERE
asociată cu o egalitate dorită;
- joncţiuni de NEECHIVALENŢĂ, care face
apel în clauza WHERE la oricare operator de
comparare în afară de semnul egal.
Sintaxa generală pentru joncţiunile echivalente şi
neechivalente este:
SELECT [domeniu] lista_selectie
FROM nume_tabela1, nume_tabela2
WHERE criteriul_asociere
[ORDER BY câmpuri_criteriu [ASC|DESC]];

Deoarece în aceste instrucţiunile SQL se utilizează


câmpuri ce fac parte din tabele diferite, este necesară
întotdeauna specificarea tabelei de care aparţin.
Forma generală de descriere a unui astfel de
câmp va fi următoarea:
nume_tabelă.nume_câmp.
O altă abordare priveşte joncţiunile ca fiind: interne
(INNER JOIN) şi externe (OUTER JOIN).

Joncţiunile tip INNER JOIN determină o asociere


a înregistrărilor din tabele, astfel încât să rezulte un
număr total de înregistrări egal cu produsul numărului
de înregistrări din fiecare tabelă.

Joncţiunile externe (OUTER) sunt de două tipuri:


de stânga (LEFT OUTER JOIN) şi de dreapta (RIGHT
OUTER JOIN), fiind destul de puţin utilizate.
Joncţiunile au următoarea sintaxă:
SELECT [domeniu] lista_selectie
FROM nume_tab1
{INNER|LEFT OUTER|RIGHT OUTER} JOIN nume_tabe2
ON criteriul_de_asociere
[{INNER|LEFT OUTER|RIGHT OUTER} JOIN nume_tab3
ON criteriul_de_asociere]...
[WHERE criteriul_de_selectie]
[ORDER BY câmpuri_criteriu [ASC|DESC]];

– INNER, LEFT OUTER, RIGHT, OUTER se refera la


tipurile de joncţiuni;
– JOIN specifică tabela care va fi asociată (nume_tab2,
nume_tab3...) tabelei precizată în clauza FROM;
– ON criteriul de asociere arată relaţia dintre câmpurile pe
care se bazează joncţiunea.
Combinările
Când utilizatorul doreşte să vadă rezultatele mai
multor interogări SELECT în acelaşi timp, prin
combinarea ieşirilor lor, poate utiliza facilitatea UNION
a limbajului de interogare SQL.
Sintaxă generală:
SELECT lista_câmpuri FROM tabela1
UNION SELECT lista_campuri FROM tabela2
[GROUP BY camp_de_grupare]
[HAVING criteriul_de_agregare]
[UNION…]
[ORDER BY camp_criteriu_de_sortare];
Instrucţiunile care generează interogări
UNION se caracterizează prin următoarele
restricţii:
•numărul de câmpuri din lista de câmpuri
asociată fiecărei instrucţiuni SELECT şi UNION
SELECT trebuie să fie acelaşi;
•este permisă doar o dată utilizarea clauzei
ORDER BY, după ultima instrucţiune UNION
SELECT;
•secvenţa de nume din fiecare listă de
câmpuri trebuie să corespundă unor intrări
identice.
Comenzi pentru manipularea datelor
INSERT
Sintaxa comenzii prezintă două forme:
INSERT…VALUES şi INSERT… SELECT.
INSERT INTO tab (câmp1, câmp2...)
VALUES (valoare1,valoare2...);
Trebuie să se respecte următoarele reguli:
• valorile menţionate în clauza VALUES vor avea
acelaşi tip cu câmpurile specificate în clauza INTO,
•mărimea valorii corespunzătoare fiecărui câmp
va fi mai mica decât dimensiunea câmpului,
•daca un câmp are definiţia NOT NULL, va fi
obligatorie introducerea unei valori pentru acesta.
INSERT INTO nume_tab1 (câmp1, câmp2...)
SELECT [domeniu] [lista selectie]
from nume_tab2 [WHERE criteriu];

Reguli suplimentare:
•fraza SELECT nu poate extrage înregistrări din
tabela destinaţie;
•numărul şi natura câmpurilor menţionate în
clauza INTO trebuie să fie aceleaşi cu numărul şi
natura câmpurilor returnate de instrucţiunea
SELECT.
Comanda DELETE are următoarea sintaxă:
DELETE FROM tabela [WHERE criteriu];
Şterge parţial sau total înregistrările din tabele.

Comanda UPDATE are următoarea sintaxă:


UPDATE tabela
SET câmp1 = valoare1 [,câmp2 = valoare2]...
[WHERE criteriul_de_actualizare];
Aceasta are atât scopul de a insera noi înregistrări,
cât si de a modifica valorile câmpurilor din
înregistrările existente.

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