Documente Academic
Documente Profesional
Documente Cultură
Access SQL
În limbajul SQL standardizat de ISO nu se folosesc termenii formali de relaţie, atribut, tuplu,
ci tabela, coloană, rând.
1
Deşi SQL este un limbaj cu format liber, o instrucţiune este mai lizibilă dacă se utilizează
indentarea şi alinierea. De ex:
• fiecare clauză dintr-o instrucţiune trebuie să înceapă pe o linie nouă
• începutul fiecărei clauze să fie aliniat cu începutul celorlalte
• dacă o clauză are mai multe părţi, fiecare parte trebuie să apară pe câte o linie
separată şi trebuie indentată faţă de începutul clauzei
Identificatorii SQL sunt utilizaţi pentru a numi obiecte din BD. Pentru caracterele utilizate,
standardul ISO permite A...Z, a...z, 0...9, _. Restricţii 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 conţine spaţii libere
Crează un tabel şi defineşte structura unei înregistrări precum şi tipurile de date asociate
câmpurilor. Numele tabelului trebuie să fie unic în BD. Clauza NOT NULL arată că în
câmpul respectiv nu se memorează valori de tip NULL.
2
DROP TABLE nume_tabel
Şterge complet o tabelă din BD.
Instrucţiunile de selecţie reprezintă una din categoriile cele mai importante ale limbajului
SQL ACCESS. Indiferent dacă sunt cereri simple sau complexe, cuvântul cheie este
SELECT. Pentru cererile de interogare simple, sintaxa instrucţiunii este:
Sunt acele interogări în care apar funcţiile agregat, asocierile sau combinările.
3
Funcţiile agregat (de grup)
Permit construirea unor interogări complexe, prin care utilizatorul cere gruparea
înregistrărilor care au câmpuri cu aceeaşi valoare, în scopul efectuării unor calcule.
În standardul ISO sunt definite 5 funcţii de grup:
COUNT returnează numărul 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 instrucţiunii:
4
Deoarece în instrucţiunile SQL care descriu joncţiuni se utilizează câmpuri care fac parte din
tabele diferite, trebuie specificat numele tabelului de care aparţin, folosind sintaxa
nume_tabelă.nume_câmp
Echivalentul QBE al acestor categorii de joncţiuni este alegerea opţiunilor 1, 2, sau 3 din
caseta Join Properties.
Sintaxa instrucţiunii:
Obs: SQL ACCESS acceptă scrierea fără specificarea explicită a lui OUTER.
Semnificaţia elementelor noi:
JOIN specifică tabelul care va fi asociat (nume_tabel2, nume_tabel3) celui din clauza
FROM
ON arată între ce câmpuri trebuie să existe relaţia pe care se bazează joncţiunea.
Criteriul de asociere conţine obligatoriu operatorul „=”.
Există mai multe restricţii pentru instrucţiunile care genereză interogările UNION, şi anume:
5
• Numărul câmpurilor din lista de câmpuri din fiecare instrucţiune SELECT şi UNION
SELECT trebuie să fie aceeaşi
• Secvenţa de nume din fiecare listă de câmpuri trebuie să corespundă unor intrări
identice
• Este permisă utilizarea doar o dată a clauzei ORDER BY, după ultima instrucţiune
UNION SELECT
Exemple:
SELECT nume, prenume, vârstă FROM Colaboratori2001
UNION SELECT nume, prenume, vârstă FROM Colaboratori2002
ORDER BY nume;
Interogările de acţiune tip CREATE duc la generarea unui nou tabel pornind de la
structura şi conţinutul unor tabele deja existente.
Se foloseşte instrucţiunea SELECT ... INTO
SELECT [domeniu] (câmp1,câmp2...)
INTO tabel_nou
FROM tabel_sursa
[WHERE criteriu_de_adăugare];
Interogările de acţiune tip INSERT sunt folosite pentru adăugarea de înregistrări dintr-un
tabel în altul. Există două forme ale instrucţiunii şi anume:
• INSERT ... VALUES
• INSERT ... SELECT
6
b). Este posibil să se copieze mai multe înregistrări dintr-un tabel în unul sau mai multe
tabele.
INSERT INTO tabel_destinaţie (câmp1, câmp2...)
SELECT [domeniu] câmp1, câmp2...
FROM tabel_sursă
WHERE criteriu_de_adăugare;
Reguli:
• aceleaşi ca mai sus
• numărul şi natura câmpurilor din clauza INTO să fie aceleaşi cu cele returnate de
instrucţiunea SELECT
• dacă nu se introduce WHERE, toate înregistrările din tabel_sursă vor fi adăugate în
tabel_destinaţie
Interogările de acţiune tip DELETE şterg parţial sau total înregistrările dintr-un tabel. Nu
se foloseşte pentru ştergerea de valori din câmpuri individuale, ci acţionează asupra
înregistrării în totalitatea ei. Dacă se şterg toate înregistrările, structura de tabel rămâne,
ea putând fi eliminată numai cu DROP TABLE.
DELETE *
FROM Vânzări;
DELETE *
FROM Angajaţi
WHERE Vârsta>60;
Interogărilede acţiune tip UPDATE pot introduce înregistrări noi şi pot modifica valorile
câmpurilor din înregistrări existente.
UPDATE nume_tabel
SET nume_câmp1=valoare1 [,nume_câmp2=valoare2]...
[WHERE criteriu_de_actualizare];
Ca şi în celelalte locuri unde apare clauza WHERE, restricţionarea se poate accentua folosind
şi operatori logici.
Exemplu:
UPDATE Comunicaţii
SET Reţea=”Orange”
WHERE Reţea=”Dialog” AND Data>#12.12.2001;
7
6.5. Cereri de interogare imbricate
Scrierea unei interogări în cadrul alteia duce la apariţia unei subinterogări, setul de
rezultate obţinute de la aceasta constituind argument pentru prima interogare.
SELECT lista_câmpuri
FROM tabel1
WHERE tabel1.nume_câmp=
(SELECT nume_câmp
FROM tabel2
WHERE criteriu_de_selecţie);
Cele două tabele trebuie să aibă un câmp comun (nume_câmp) care va reprezenta câmpul de
legătură ce stă la baza construirii subinterogării.
6.6. Exemple
unde nume_coloana_i este numele unei coloane din tabelă. Când selectăm coloane din
mai multe tabele, forma generală a numelor coloanelor unei tabele este
nume_tabela.nume_coloana
deoarece numele coloanelor din diverse tabele pot coincide. Atributul nume_coloana al
obiectului nume_tabela este accesat cu operatorul punct.
Dacă vrem să selectăm toate coloanele tabelei, instrucţiunea SELECT are forma
SELECT *
FROM nume_tabela;
PROIECT_ANGAJAT
8
Proiectarea tabelei este cea din Figura 6.1.
9
Dacă vrem să selectăm toate coloanele liniilor unei tabele ce îndeplinesc o condiţie,
instrucţiunea SELECT are forma
SELECT *
FROM nume_tabela
WHERE conditie
ORDER BY nume_coloana_1 [ASC | DESC] [, nume_coloana_2 [ASC
| DESC] …];
In cazul instrucţiunii SELECT, când se selectează date dintr-o singură tabelă, în numele
coloanei se poate omite numele tabelei.
D.Condiţii compuse
In următorul exemplu vom selecta angajaţii de la departamentele Suport şi Documentare
din tabela PROIECT_ANGAJAT cu instrucţiunea SELECT de mai jos.
10
SELECT ID_ANG, NUME_ANGAJAT, DPT_ANG, SAL_ORA
FROM PROIECT_ANGAJAT
WHERE DPT_ANG = ‘Documentare’ OR DPT_ANG = ‘Suport’;
Condiţia din clauza WHERE se completează în celulele DPT_ANG din liniile Criteria
şi or. Formularul corespunzătoare acestei interogări este:
11
Figura 6.5. Tabela rezultat
Clauza WHERE a instrucţiunii SELECT conţine o condiţie care este o expresie booleană.
Expresiile booleene sunt constituite din expresii relaţionale separate de operatorii
booleeni AND, OR şi NOT. In cazul cel mai simplu, o expresie booleană este constituită
dintr-o singură expresie relaţională.
In unele cazuri avem nevoie să comparăm un şir de caractere cu elementele unei coloane
care sunt şiruri de caractere, ca în interogarea din Figura . Sirurile de caractere sunt scrise
între ghilimele. O operaţie ce se poate efectua asupra şirurilor este concatenarea.
Operatorul de concatenare este &. Pentru a testa dacă un şir de caractere corespunde unui
şablon se utilizează operatorul LIKE, vezi o lucrare anterioară.
12
Expresia booleană ce reprezintă condiţia din clauza WHERE se poate scrie direct în
câmpurile Criteria şi or sau se poate crea cu aplicaţia Expression Builder, ca într-o
lucrare anterioară.
Implicit, în fereastra de proiectare există o singură linie or. Se pot adăuga mai multe linii
or cu un clic pe linia or existentă şi apoi clic pe meniul Insert Rows.
Liniile or se pot şterge cu un clic pe linie şi apoi clic pe meniul Edit Delete Rows.
13
Pentru a lansa aplicaţia Expression Builder se procedează astfel:
1. se afişează meniul contextual al coloanei formularului cu un clic cu butonul drept pe
coloana pentru care vrem să creăm condiţia;
2. clic pe opţiunea Build ce afişează caseta Expression Builder cu care se crează
expresia dorită.
14
Opţiunea Table Names afişează sau ascunde linia Table din formular ce afişază numele
tabelelor.
E.Reuniunea tabelelor
Una dintre operaţiile ce se pot aplica asupra tabelelor rezultat este reuniunea acestor
tabele. Pentru reuniune, liniile tabelelor trebuie să aibe aceleaşi coloane. Reuniunea
tabelelor se face cu instrucţiunea SQL UNION cu forma:
SELECT coloane
FROM nume_tabela_1
UNION
SELECT coloane
FROM nume_tabela_2;
SITUATIE_FINANCIARA
DATE_CONTABILE
Vom crea o tabelă ce reuneşte liniile celor două tabele în felul următor:
1. se afişază fereastra Database; în partea stângă, se selectează opţiunea Queries; în
partea dreaptă se afişază opţiunile existente, Create query by using wizard şi Create
query in Design view şi interogările (Queries) existente,
2. clic pe opţiunea Create query in Design View care afişază caseta Show Table; clic
pe butonul Close
3. clic pe meniul Query SQL Specific, şi în submeniul afişat, clic pe opţiunea Union.
15
Figura 6.10. Meniul Query. Opţiunea Union.
4. se afişază caseta de text din Figura , în care se introduce instrucţiunea UNION
Funcţia Semnificaţia
AVG Valoarea medie
MIN Valoarea minimă
MAX Valoarea maximă
SUM Suma valorilor din coloană
VAR Dispersia
STD Abaterea medie pătratică
Tabelul 2. Funcţii SQL pentru agregarea datelor în instrucţiunea SELECT.
Cea mai simplă interogare a unei baze de date cu utilizarea acestor funcţii este aplicarea
lor asupra unor coloane dintr-o tabelă. Acestă interogare corespunde instrucţiunii
SELECT următoare:
16
SELECT funcţie(nume_coloana_1), funcţie(nume_coloana_2), …,
funcţie(nume_coloana_k)
FROM nume_tabela;
In acest caz nu s-a precizat numele coloanelor din tabela rezultat a interogării, şi aplicaţia
atribuie acestor coloane nişte nume standard. Instrucţiunea SELECT are şi o formă în
care putem atribui coloanelor tabelei rezultat ce nume dorim. Această formă este
17
Figura 6.14. Fereastra de proiectarea interogării.
2. se selectează prima celulă din linia Fields cu un clic,
3. clic pe butonul Build, , al barei de instrumente, care lansează aplicaţia
Expression Builder din Figura ; se selectează în fereastra stângă opţiunea Functions
Built-In Functions, în fereastra din mijloc se selectează SQL Aggregate, iar în
fereastra din dreapta funcţia Sum; clic pe butonul Paste şi în fereastra superioară
apare expresia Sum(“expr”) pentru care trebuie să completăm argumentul expr,
18
Figura 6.16. Selectarea argumentului unei expresii.
5. selectăm apoi tabela VANZARI în fereastra din stânga cu clic pe opţiunea Tables
VANZARI; în acest moment în fereastra din mijloc apar câmpurile tabelei; clic pe
câmpul VANZARI_2001 şi se generează expresia din fereastra superioară din Figura ;
numele coloanei este introdus ca [nume_tabela].[nume_coloana], adică
[VANZARI]![VANZARI_2001],
19
Figura 6.18. Fereastra de proiectare.
Expresia din prima celulă a liniei Field este cea din Figura . Numele coloanei atribuit de
aplicaţia Expression Builder este Expr1.
7. clic pe butonul Run , , al barei de instrumente şi tabela rezultat este cea din Figura .
20
Modificăm Expr1 în celula liniei Field în AN 2001, şi la fel numele celorlalte coloane
pentru a fi mai semnificative. Tabela rezultat este :
21