Sunteți pe pagina 1din 7

1

Limbajul SQL

- este un limbaj declarativ care permite utilizatorului s descrie informa#iile pe care
dore$te s le ob#in n urma interogrii fr a preciza algoritmii necesari pentru
ob#inerea rezultatelor.
Tipuri de interogri SQL:
A. Instruc#iuni pentru definirea datelor care permit descrierea structurii bazei de date
B. Instruc#iuni de manipulare a datelor n sensul adugrii, modificrii $i $tergerii
nregistrrilor;
C. Instruc#iuni de selec#ie a datelor care permit consultarea bazei de date;
D. Instruc#iuni privind controlul accesului la date.
Etape de creare a unei instruc#iuni SQL:
1. Din fereastra Database se va selecta Queryes-Create Query in Design View.
2. Din fereastra Show Table se vor selecta interogrile, tabelele sau ambele tipuri de
obiecte ce constituie suportul noii interogri.
3. Din meniul View-SQL View se activeaz fereastra de scriere a instruc#iunii SQL.
4. execu#ia propriu-zis se realizeaz prin activarea butonului Run(Query-Run).
Reguli de scriere a unei instruc#iuni SQL:
a. Orice fraz SQL se ncheie cu ;
b. Atunci cand numele campului con#ine spa#ii sau alte semne neacceptate de
Access, numele campului va fi introdus n [ ].
c. Cand campurile noii interogri provin din mai multe tabele se va preciza numele
campului precedat de numele tabelei.(Nume tabela.Nume camp).
d. Inegalitatea n cadrul frazei Select se face cu <>.

A. Instruc#iuni pentru descrierea structurii bazei de date

n general, aceste instruc#iuni permit crearea unei tabele, modificarea structurii
acesteia sau $tergerea ei.

1. Crearea structurii tabelelor
CREATE TABLE permite crearea unei tabele ntr-o BD.
Sintaxa: CREATE TABLE numetabela(numecamp1 tip1(marime),
Numecamp2 tip2(marime)..PRIMARY
KEY/UNIQUE/NOT NULL)
Ex: S se creeze tabela PERSONAL(Marca, Nume, Func#ia)
Create Table Personal
(Marca Number(4) PRIMARY KEY, Nume Text(15), Functia Text(10))

2. Modificarea structurii tabelelor
Comanda ce permite modificarea structurii unei tabele este ALTER TABLE $i ea
realizeaz una din op#iunile:
adgarea unui nou cmp n structur
modificarea unui cmp existent
$tergerea unui cmp din structura tabelei.

2
ALTER TABLE numetabela
ADD numecamp tipcamp/ALTER COLUMN camp2 tip2
DROP numecamp.

Ex: Adugarea unui nou cmp:
ALTER TABLE FURNIZOR ADD Codpostal Number(5)

Modificarea unui cmp din structura:
ALTER TABLE FURNIZOR ALTER COLUMN Adresa Char(20)

Stergerea unui cmp din structur:
ALTER TABLE FURNIZOR DROP COLUMN Codpostal

3. Stergerea tabelelor.
Comanda de $tergere a unai tabele din baza de date este DROP TABLE, cu sintaxa:
DROP TABLE numetabela

B. Instruc#iuni de manipulare a datelor

n cadrul acestor instruc#iuni Access include 3 comenzi: INSERT INTO, UPDATE $i
DELETE comenzi ce ac#ioneaz doar asupra nregistrrilor unei singure tabele.

1. Adaugarea de noi nregistrri ntr-o tabel

INSERT INTO numetabela [(atribut1, atribut2,)]
VALUES (val_atribut1, val_atribut2,...)
Ordinea valorilor din clauza VALUES trebuie s fie identic cu cea declarat la crearea
tabelelor.

Exemplu: S se adauge n tabela Furnizor o noua nregistrare: (11, aaa, Bucuresti).

INSERT INTO furnizor VALUES (11, "aaa", "Bucuresti");

2. Modificarea nregistrrilor unei tabele.

UPDATE numetabela
SET atribut1=expresie1
WHERE conditie;

Exemple:
1. S se dubleze pretul tuturor materialelor a cror Unitate de msur este exprimat n
kg.

UPDATE materiale
SET pret=pret * 2
WHERE um=kg;
3

3. Stergerea nregistrrilor unei tabele.

DELETE * FROM numetabela WHERE conditie;

Exemplu:
1. S se #tearg toate facturile emise n ultima lun.

DELETE * FROM factura WHERE dataf BETWEEN date()-30 AND date();

2. S se #tearg toate facturile emise de furnizorii din Bucuresti.

DELETE FROM factura
WHERE codfz IN (SELECT codfz FROM furnizor
WHERE adresa=Bucuresti);


C. Instruc#iuni de selec#ie a datelor ce permit consultarea bazei de date.

1. Instruciuni de selecie a datelor bazate pe o singur! tabel!

- sevesc la regsirea $i afi$area datelor dorite de utilizatori.
Sintaxa general a frazei SELECT este:
SELECT [domeniu]<numeatribute>
FROM tabel
WHERE condi#ia de filtrare a datelor
ORDER BY atribut de ordonare[ASCENDING/DESCENDING];

unde:
Domeniu={ALL, DISTINCT, TOP N}
ALL realizeaza returnarea tuturor inregistrarilor
DISTINCT realizeaz eliminarea nregistrrilor duplicate.
TOP n afi$eaz primele n inregistrri cerute.

Exemple :
a.S se afi#eze n ordine cronologic toate facturile emise n primele 3 luni ale
anului 2008.
SELECT nrfact, dataf
FROM factura
WHERE year(dataf)=2008 and
month(dataf) in (1,2,3)
ORDER BY dataf;

b.S se afi#eze n ordine alfabetic, furnizorii din provincie.
SELECT denfz, adresa
FROM furnizor
4
WHERE adresa <> "bucuresti"
ORDER BY denfz;

c.S se afi#eze facturile emise n perioada 15-20 septembrie 2007.
SELECT nrfact, dataf
FROM factura
WHERE dataf BETWEEN #09/15/2007# AND #09/20/2007#;

d. S se afi#eze primele 3 facturi emise in anul 2008.
SELECT TOP 3 *
FROM factura
WHERE YEAR(dataf)=2008;

2. Instruciuni de selecie a datelor avand ca sursa 2 sau mai multe tabele.
Sintaxa general a frazei SELECT este:
SELECT [domeniu]<lista campuri >
FROM Tabel1 INNER JOIN Tabela2 ON Tabela1.campcomun=Tabela2.campcomun
WHERE condi#ia de filtrare a datelor
ORDER BY atribut de ordonare[ASCENDING/DESCENDING];

Exemple:
a. Sa se afiseze in ordine alfabetica furnizorii care au emis facturi in anul curent.
SELECT furnizor.[denfz], factura.[nrfact], factura.[dataf]
FROM FACTURA INNER JOIN FURNIZOR ON factura.codfz=furnizor.codfz
WHERE year(dataf)=year(date())
ORDER BY denfz;

SAU

SELECT furnizor.[denfz], factura.[nrfact], factura.[dataf]
FROM FACTURA,FURNIZOR
WHERE factura.codfz=furnizor.codfz AND year(dataf)=year(date())
ORDER BY denfz;

b. Sa se afi#eze facturile emise de furnizorii din provincie.
SELECT furnizor.denfz, factura.nrfact, factura.dataf, furnizor.adresa
FROM FACTURA INNER JOIN FURNIZOR ON factura.codfz=furnizor.codfz
WHERE adresa<>Bucuresti;

3. Instructiuni SQL de sintetizare a datelor.

Sintaxa general a frazei SELECT este:
SELECTatributgrupare, functieagregat(atribut) AS eticheta
FROM tabele sursa
WHERE condi#ia de filtrare a datelor
GROUP BY atribut de grupare
HAVING conditie asociata functiei agregat
5
ORDER BY atribut de ordonare[ASCENDING/DESCENDING];

Obs! pentru campurile care nu participa la grupare e necesara folosirea unor functii
agregat: SUM, MIN, MAX, AVG, COUNT
- clauza WHERE filtreaza inregistrarile inainte de grupare
- clauza HAVING permite filtrarea datelor rezultate in urma gruparii.

Exemple:
a. Sa se afi#eze numarul total de facturi emise de fiecare furnizor in prima luna a
anului 2008.
SELECT codfz, COUNT(nrfact) as Total_facturi
FROM factura
WHERE month(dataf)=1 and year(dataf)=2008
GROUP BY codfz;

b. Sa se afi#eze furnizorii care au emis mai mult de 2 facturi in primele 2 luni ale
anului 2008.
SELECT codfz, COUNT(nrfact) as Total_facturi
FROM factura
WHERE month(dataf) IN (1,2) and year(dataf)=2008
GROUP BY codfz
HAVING COUNT(nrfact)>2;

c. Sa se afi#eze zilele, din anul curent, in care au fost emise mai mult de 5 facturi.
SELECT dataf
FROM factura
WHERE year(dataf)=year(date())
GROUP BY dataf
HAVING COUNT(nrfact)>5;

d. Sa se afi#eze in ordine alfabetica materialele care au inregistrat vanzari de peste
10000 lei.
SELECT materiale.denmat, SUM(cantf*pretf) AS VALT
FROM materiale INNER JOIN liniefactura ON materiale.codmat=liniefactura.codmat
GROUP BY denmat
HAVING SUM(cantf*pretf)>10000
ORDER BY denmat;


4. Imbricarea cererilor (subinterogari).

O cerere SELECT poate fi utilizata pentru a returna una sau mai multe inregistrari
ce vor putea fi folosite intr-o comanda INSERT/UPDATE/DELETE sau chiar intr-o alta
comanda SELECT. Atunci cand subcererea returneaz mai multe nregistrari, pt
comparatii, se pot utiliza operatori:
IN testeaz apartenen#a unei valori la o mul#ime
ANY compar o valoare cu orice element al unie mul#imi
6
ALL compar o valoare cu toate elementele unie mul#imi
EXISTS verific existen#a unei mul#imi.
In general subcererea con#ine un singur camp rezultant (pentru a fi folosit in
comparatii) si sunt executate in ordinea inversa a declararii lor.

a. Sa se afiseze furnizorii care nu au emis facturi in 2008.
Select Furnizor.Codfz, furnizor.Denfz
From Furnizor
Where Furnizor.CodFz Not In
(Select Distinct CodFz
From Factura
Where Year(DataFact)=2008);

b. Sa se afiseze furnizorii care au emis mai mult de 5 facturi in 2008.
SELECT Furnizor.Codfz, furnizor.Denfz
FROM Furnizor
WHERE Furnizor.CodFz IN
(Select Factura.[CodFz] From Factura
WHERE year(Factura.Dataf) = 2008
Group By Factura.[CodFz]
Having Count(Factura.[Nrfact])> 5);

c. Sa se afi#eze furnizorii de la care s-au primit cele mai multe facturi.
SELECT CODFZ, COUNT(nrfact) AS Total F
FROM factura
GROUP BY codfz
HAVING COUNT(nrfact)>=ALL(SELECT COUNT(nrfact)
FROM factura
GROUP BY codfz);
5. Interogari reuniune
O selectie reuniune contine mai multe tabele sau cereri SELECT asupra carora se
aplica operatorul UNION.
Sintaxa generala este:
Tabela 1/Cerere1-SELECT
UNION
Tabela 2/Cerere2 Select
Order By atribut ordonare;

OBS!
1. Implicit prin aceste selectii de tip reuniune se elimina inregistrarile duplicate.
Atunci cand utilizatorul doreste si afisarea acestora se fol clauza ALL.
2. Tabelele sursa trebuie sa contina acelasi numar de campuri.Campurile selectate
trebuie sa fie de acelasi tip. Ordinea campurilor trebuie sa fie aceeasi.
3. Clauza ORDER BY se poate specifica numai dupa ultima cerere SELECT si
poate sa contina denumirile sau etichetele campurilor specificate in prima cerere
SELECT.
7

Ex: Se considera tabele Clienti(CodC, Den Adresa) si Furnizori(CodF, Den, Adresa).
Sa se afiseze toti partenerii societatii.

SELECT CODC AS COD, DEN, ADRESA
FROM CLIENTI
UNION
SELECT CODF, DEN, ADRESA
FROM FURNIZORI
ORDER BY COD;


Ex propus spre rezolvare:
1. Sa se afiseze in ordine alfabetica toate materialele care au fost aprovizionate
in anul curent.
2. Sa se afiseze toate materialele care au pretul mai mare decat al merelor.
3. Sa se reduca cu 50% pretul unitar al materialelor care au avut o
aprovizionare mai mica decat media aprovizionarilor totale.
4. Sa se stearga toti furnizorii care nu au emis facturi in ultimii 2 ani.
5. Sa se stearga materialele pentru care nu s-au inregistrat aprovizionari.

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