Sunteți pe pagina 1din 42

Notie de curs -3Utilizarea interogrilor

Radu VLAD Microsoft Access Utilizarea bazelor de date

Crearea interogrilor

Scop:

furnizarea de informaii pe baza datelor nregistrate n baza de date.

Modaliti de creare a interogrilor:


n modul de vizualizare Design; cu ajutorul unui wizard; prin instruciuni SQL.

Tipuri de interogri:

de selecie; ncruciate efectueaz operaii asupra datelor unui cmp; de aciune execut operaii cu nregistrrile selectate;

de tergere, de actualizare, de adugare i de tip make-table;

cu parametru permit utilizatorului precizarea unui criteriu de selecie.


Crearea interogrilor - 2

Crearea interogrilor

SELECT Customers.CompanyName, Customers.City, Orders.OrderDate FROM Customers INNER JOIN Orders ON Customers.CustomerID=Orders.CustomerID ORDER BY Customers.CompanyName DESC , Orders.OrderDate DESC;

Crearea interogrilor - 3

Interogri de selecie - comenda SELECT

In componena unei comenzi SQL intr:


identificatori constau din nume ale obiectelor bazei de date (tabele, cmpuri, vederi etc) aceste nume sunt introduse de utilizator sau de sistemul de operare; iruri de caractere orice ir de caractere care nu este un identificator sau un cuvnt rezervat; operatori simboluri care indic operaiile ce urmeaz a fi efectuate asupra expresiilor; sunt utilizai n instruciuni ca: DELETE, INSERT, SELECT sau UPDATE; cuvinte rezervate au o semnificaie special pentru interpretorul SQL; exemple: SELECT, GRANT, DELETE sau CREATE.

ordinea clauzelor ntr-o comand SELECT nu poate fi schimbat; doar prezena clauzelor SELECT i FROM este obligatorie.
Crearea interogrilor - 4

Interogri de selecie - comanda SELECT


SELECT [DISTINCT | ALL] {* | [columnExpression [AS newName]] [,...] } FROM TableName [alias] [, ...] [WHERE condition] [GROUP BY columnList] [HAVING condition] [ORDER BY columnList]

Clauze:

FROM WHERE HAVING SELECT

- specific numele tabelelor din care vor fi extrase datele; - filtreaz nregistrrile; - filtreaz grupurile dup o condiie; - specific numele cmpurilor incluse n tabelul final;

GROUP BY - formeaz grupuri de nregistrri cu aceeai valoare a cmpului;

ORDER BY - precizeaz modul de ordonare al nregistrrilor din tabelul final.


Crearea interogrilor - 5

Interogri de selecie - comanda SELECT

dup cuvntul SELECT trebuie specificate numele cmpurilor care trebuie s apar n tabelul rezultat numele cmpurilor trebuie separate de caracterul , caracterul * determin includerea tuturor cmpurilor n tabelul rezultat dac tabelele menionate n clauza FROM au cmpuri cu nume identice atunci numele cmpurilor trebuie precedate de numele tabelelor ex: numeTabel.numeCamp numele unui tabel sau al unui cmp trebuie ncadrat ntre paranteze drepte dac conine spaii sau caractere speciale dup cuvntul SELECT pot fi precizate funcii sau formule aa dup cum sunt folosite numele cmpurilor numele cmpurilor din tabelul rezultat poate fi modificat cu cuvntul AS

Crearea interogrilor - 6

Interogri de selecie

Crearea interogrilor - 7

Interogri de selecie
Exemplu: afiarea tuturor coloanelor tabelului Masini.
SELECT ID_Masina, Marca, Nr_inmatriculare, Culoare FROM Masini;

SELECT * FROM Masini;

Exemplu: Afiarea culorilor mainilor.


SELECT ID_masina,Culoare FROM Masini;
Crearea interogrilor - 8

Interogri de selecie
Exemplu: afiarea numelor celor care au nchiriat cel puin o main
SELECT CC.NumeClient, CC.PrenumeClient FROM Clienti CC, Inchirieri IC WHERE CC.ID_client = IC.ID_client; SELECT DISTINCT CC.NumeClient, CC.PrenumeClient FROM Clienti CC, Inchirieri IC WHERE CC.ID_client = IC.ID_client

Crearea interogrilor - 9

Interogri de selecie
Exemplu: afiarea numelor clienilor care locuiesc n judeul Cluj sau Alba.
SELECT cc.NumeClient, cc.PrenumeClient FROM Clienti cc WHERE cc.JudetClient = 'Cluj' OR cc.JudetClient = 'Alba';

Codul generat de Access SELECT DISTINCT Clienti.NumeClient, Clienti.PrenumeClient FROM Clienti WHERE (((Clienti.JudetClient)='Cluj' Or (Clienti.JudetClient)='alba'));

Crearea interogrilor - 10

Interogri de selecie
Exemplu: afiarea codului celor care au nchiriat o main de culoare rosie sau verde.
SELECT ci.ID_client FROM Inchirieri ci, Masini cm WHERE ci.ID_masina = cm.ID_masina AND (cm.Culoare = 'rosu' OR cm.Culoare = 'verde');

Crearea interogrilor - 11

Interogri de selecie
Exemplu: afiarea numelor celor care au nchiriat o main de culoare rosie sau verde.
SELECT ci.ID_client FROM Inchirieri ci, Masini cm WHERE ci.ID_masina = cm.ID_masina AND cm.Culoare = 'rosu'; UNION SELECT ci.ID_client FROM Inchirieri ci, Masini cm WHERE ci.ID_masina = cm.ID_masina AND cm.Culoare = 'verde';

Crearea interogrilor - 12

Interogri de selecie
Exemplu: afiarea culorilor primelor cinci maini nchiriate.
SELECT cm.Culoare FROM Inchirieri AS ci, Masini AS cm WHERE ci.ID_masina = cm.ID_masina AND ci.ID <= 5;

SELECT ci.ID, cm.Culoare FROM Inchirieri AS ci, Masini AS cm WHERE ci.ID_masina = cm.ID_masina AND ci.ID <= 5 ORDER BY ci.ID;

Crearea interogrilor - 13

Interogri de selecie
Exemplu: afiarea numelor celor care au nchiriat o main de culoare rosie i verde.
SELECT DISTINCT ci.ID_client FROM Inchirieri AS ci, Masini AS cm WHERE ci.ID_masina=cm.ID_masina AND (cm.Culoare='rosu' And cm.Culoare='verde'); SELECT DISTINCT CLI.NumeClient, CLI.PrenumeClient FROM Inchirieri ci1, Masini cm1, Inchirieri ci2, Masini cm2, Clienti CLI WHERE ci1.ID_client = ci2.ID_client AND ci1.ID_masina = cm1.ID_masina AND ci2.ID_masina = cm2.ID_masina AND (cm1.Culoare = 'rosu' AND cm2.Culoare= 'verde') AND ci1.ID_client = CLI.ID_client;

Crearea interogrilor - 14

Interogri de selecie cu parametru


automatizeaz procesul de modificare a criteriilor de selecie ale unei interogri; sunt implementate prin comanda PARAMETERS:

declar numele i tipul fiecrui parametru utilizat ntr-o interogare cu parametru; este opional dar atunci cnd este utilizat precede orice alt comand.

Sintaxa comenzii PARAMETERS

PARAMETERS nume tip_de_date [, nume tip_de_date [, ...]]

numele parametrilor pot fi folosii n clauze WHERE sau HAVING; dac numele parametrilor conin spaii sau semne de punctuaie atunci trebuie ncadrate ntre [ ].

Exemplu: Afiarea identificatorilor clienilor care au nchiriat o main de o anumit culoare (rosu) dup o anumit dat (18-apr-07).
PARAMETERS [Data inchirierii] DateTime, [Culoare masina] Text; SELECT DISTINCT INC.ID_client AS [identificator client], MAS.Nr_inmatriculare AS [Numar masina] FROM Masini AS MAS, Inchirieri AS INC WHERE INC.ID_masina=MAS.ID_masina AND INC.Data_inchirierii>[Data inchirierii] AND MAS.Culoare=[Culoare masina];

Crearea interogrilor - 15

Interogri multi-tabel

Rolul interogrilor multi-tabel este s ofere informaii pe baza datelor existente n dou sau mai multe tabele. Interogrile multi-tabel se materializeaz n unirea nregistrrilor tabelelor implicate. Modul de unire a tabelelor este determinat de natura legturilor dintre tabele. Dac ntre tabele exist relaii de tip unu-muli atunci cmpul comun determin modul de unire al tabelelor. Tabelele sunt unite n acest caz printr-o legtur intern. Dac ntre tabele nu sunt definite relaii atunci MS Access folosete cmpuri din cele dou tabele care sunt compatibile ca tip de date. Unul dintre aceste cmpuri trebuie s fie o cheie. Dac tabelele nu conin cmpuri compatibile atunci trebuie create tabele suplimentare pentru a defini legtura dintre tabelele de interes. Tabelele sunt unite n acest caz printr-o legtur extern.
Crearea interogrilor - 16

Interogri multi-tabel - INNER JOIN


Exemplu - Lista mainilor nchiriate cu toate informaiile aferente (caracteristici maini i detalii contracte de nchiriere). SELECT * FROM Masini INNER JOIN Inchirieri ON Masini.ID_masina = Inchirieri.ID_masina;

Ce se ntmpl dac adugm nc o nregistrare n tabelul Masini?


Crearea interogrilor - 17

Interogri multi-tabel - INNER JOIN


SELECT * FROM Masini INNER JOIN Inchirieri ON Masini.ID_masina <> Inchirieri.ID_masina;

Ce se ntmpl dac adugm nc o nregistrare n tabelul Masini?


Crearea interogrilor - 18

Interogri multi-tabel - INNER JOIN


Sintaxa:
FROM tabel1 INNER JOIN tabel2 ON tabel1.camp1 operator tabel2.camp2

tabel1, tabel2 - sunt numele tabelelor ale cror nregistrri vor fi unite; camp1, camp2 - numele cmpurilor care vor stabili modul de unire a tabelelor; dac nu sunt cmpuri numerice atunci cmpurile trebuie s aib acelai tip, dar nu trebuie s aib i acelai nume; operator - orice operator relaional: "=," "<," ">," "<=," ">=," or "<>". SELECT campuri FROM tabel1 INNER JOIN (tabel2 INNER JOIN [( ] tabel3 [INNER JOIN [( ] tabelx [INNER JOIN ...)] ON tabel3.camp3 operator tabelx.campx)] ON tabel2.camp2 operator tabel3.camp3) ON tabel1.camp1 operator tabel2.camp2;

SELECT campuri FROM tabel1 INNER JOIN tabel2 ON tabel1.camp1 operator tabel2.camp1 AND ON tabel1.camp2 operator tabel2.camp2 OR ON tabel1.camp3 operator tabel2.camp3;

Crearea interogrilor - 19

Interogri multi-tabel - INNER JOIN


SELECT * FROM Masini INNER JOIN Inchirieri ON (Masini.ID_masina = Inchirieri.ID_masina) AND (Masini.ID_masina = Inchirieri.ID_client);

SELECT * FROM Masini INNER JOIN Inchirieri ON (Masini.ID_masina = Inchirieri.ID_masina) AND ((Masini.ID_masina = Inchirieri.ID_client) OR (Inchirieri.ID = 13));

SELECT * FROM Masini INNER JOIN (Inchirieri INNER JOIN Clienti ON Clienti.ID_client = Inchirieri.ID_client) ON Masini.ID_masina=Inchirieri.ID_masina;

Crearea interogrilor - 20

Interogri multi-tabel - LEFT JOIN


Legturile externe la stnga includ toate nregistrrile din tabelul din stnga al legturii chiar dac acestea nu au nregistrri corespondente n cel de-al doilea tabel. Sintaxa:

FROM tabel1 LEFT JOIN tabel2 ON tabel1.camp1 operator tabel2.camp2

SELECT * FROM Masini LEFT JOIN Inchirieri ON Masini.ID_masina=Inchirieri.ID_masina;

Crearea interogrilor - 21

Interogri multi-tabel - LEFT JOIN


SELECT * FROM Masini LEFT JOIN Studenti ON Masini.ID_masina=Studenti.ID_student;

Crearea interogrilor - 22

Interogri multi-tabel - RIGHT JOIN


Legturile externe la dreapta includ toate nregistrrile din tabelul din dreapta al legturii chiar dac acestea nu au nregistrri corespondente n primul tabel. Sintaxa: FROM tabel1 RIGHT JOIN tabel2 ON tabel1.camp1 operator tabel2.camp2
SELECT * FROM Masini RIGHT JOIN Inchirieri ON Masini.ID_masina=Inchirieri.ID_masina;

Crearea interogrilor - 23

Interogri multi-tabel - RIGHT JOIN


SELECT * FROM Studenti RIGHT JOIN Inchirieri ON Studenti.ID_student=Inchirieri.ID;

SELECT * FROM Studenti LEFT JOIN Inchirieri ON Studenti.ID_student=Inchirieri.ID;

Crearea interogrilor - 24

Interogri de tip totaluri funcii aggregate


- funcii care efectueaz operaii matematice asupra unor seturi de date

Funcia Avg

Scop:

calculeaz media aritmetic a valorilor coninute n cmpul indicat de o interogare SQL

Sintaxa:

Avg(expr)
expr este o expresie ir care indic: cmpul ce conine datele numerice sau o expresie care efectueaz operaii cu datele din acel cmp. operanzii din expr pot fi: nume de cmpuri, constante sau funcii (dar nu alte funcii aggregate).
Crearea interogrilor - 25

Interogri de tip totaluri funcii aggregate


Funcia Count

Scop:

calculeaz numrul de articole returnate de o interogare SQL

Sintaxa:

Count(expr) expr este o expresie ir care indic: cmpul ce conine datele care trebuie numrate sau o expresie care efectueaz operaii cu datele din acel cmp. operanzii din expr pot fi: nume de cmpuri sau funcii (dar nu alte funcii aggregate). nu consider articole ale cror cmpuri au valoarea Null, cu excepia cazurilor n care expr este indicat prin caracterul (*).
Crearea interogrilor - 26

Interogri de tip totaluri funcii aggregate


Funcia First/Last

Scop:

returneaz valoarea unui cmp din primul/ultimul articol al setului generat de o interogare SQL

Sintaxa:

First(expr) respectiv Last(expr) expr este o expresie ir care indic: cmpul ce conine datele care trebuie numrate sau o expresie care efectueaz operaii cu datele din acel cmp. operanzii din expr pot fi: numele unui cmp, o constant sau o funcie (dar nu alte funcii aggregate).
Crearea interogrilor - 27

Interogri de tip totaluri funcii aggregate


Funcia Min/Max

Scop:

returneaz minimul sau maximul setului de valori din cmpul precizat n interogarea SQL

Sintaxa:

Min(expr) respectiv Max(expr) expr este o expresie ir care indic: cmpul ce conine datele care trebuie numrate sau o expresie care efectueaz operaii cu datele din acel cmp. operanzii din expr pot fi: numele unui cmp, o constant sau o funcie (dar nu alte funcii aggregate).
Crearea interogrilor - 28

Interogri de tip totaluri funcii aggregate


Funcia Sum

Scop:

returneaz suma setului de valori din cmpul precizat n interogarea SQL

Sintaxa:

Sum(expr) expr este o expresie ir care indic: cmpul ce conine datele care trebuie numrate sau o expresie care efectueaz operaii cu datele din acel cmp. operanzii din expr pot fi: numele unui cmp, o constant sau o funcie (dar nu alte funcii aggregate). ignor articolele care conin cmpuri cu valoarea Null.
Crearea interogrilor - 29

Interogri de tip totaluri funcii aggregate


Funciile StDev, StDevP, Var, VarP

Scop:

returneaz abaterea medie ptratic respectiv variaia setului de valori din cmpul precizat n interogarea SQL

Sintaxa:

StDev(expr), StDevP(expr), Var(expr), VarP(expr) expr este o expresie ir care indic: cmpul ce conine datele care trebuie numrate sau o expresie care efectueaz operaii cu datele din acel cmp. operanzii din expr pot fi: numele unui cmp, o constant sau o funcie (dar nu alte funcii aggregate).
Crearea interogrilor - 30

Interogri de tip totaluri funcii aggregate


Exemplu: afiarea totalului sumelor ncasate, a valorii minime i a celei maxime.
SELECT Sum(SumaPlatita) AS Total_sume_incasate, Min(SumaPlatita) As Valoare_minima, Max(SumaPlatita) As Valoare_maxima FROM Inchirieri;

Exemplu: afiarea totalului sumelor ncasate, a numrului de pli efectuate i a plii medii.
SELECT Sum(SumaPlatita) AS Total_sume_incasate, Count(SumaPlatita) AS Plati_efectuate, Total_sume_incasate/Plati_efectuate AS Plata_medie FROM Inchirieri;

Crearea interogrilor - 31

Interogri de tip totaluri funcii aggregate


Exemplu: afiarea numrului de inchireri efectuate.
SELECT Count(*) AS NumarTranzactii FROM Inchirieri; Exemplu: ce valori afieaz urmtoarea interogare? SELECT Sum(SumaPlatita * ID_client) AS [Venituri Totale] FROM Inchirieri;

Exemplu: ce valori afieaz urmtoarea interogare? SELECT Sum(SumaPlatita * 4.1829)/ Count(SumaPlatita) AS [???] FROM Inchirieri;

Crearea interogrilor - 32

Interogri de tip totaluri clauza GROUP BY


este o comand DML (data manipulation language); rolul ei este s combine datele pe baza valorilor din cmpurile tabelelor; este folosit cel mai des n combinaie cu funciile aggregate; sintaxa comenzii este: Group By NumeTabel.Camp1, NumeTabel.Camp2

urmeaz clauzei WHERE i precede clauze HAVING:


SELECT NumeTabel.Camp1, Count(NumeTabel.Camp2), Avg(NumeTabel.Camp3) FROM NumeTabel WHERE criterii GROUP BY NumeTabel.Camp1 HAVING alte_criterii;

Crearea interogrilor - 33

Interogri de tip totaluri clauza GROUP BY


Exemplu: afiarea numrului de maini de aceeai culoare.
SELECT Masini.Culoare As CuloareMasini, Count(Masini.Culoare) As Numar_masini FROM Masini GROUP BY Masini.Culoare;

Exemplu: afiarea numrului de nchirieri efectuate de fiecare client.


SELECT Inchirieri.ID_client, Count(Inchirieri.ID_client) AS NumarInchirieri FROM Inchirieri GROUP BY Inchirieri.ID_client;

Exemplu: utilizarea clauzei HAVING.


SELECT Inchirieri.ID_client, Count(Inchirieri.ID_client) AS NumarInchirieri FROM Inchirieri GROUP BY Inchirieri.ID_client HAVING Inchirieri.ID_client<3;

Crearea interogrilor - 34

Interogri crosstab

prezint datele unei interogri ntr-o form mai compact dect cea a unei interogri obinuite; calculeaz suma, media i alte totaluri asupra nregistrrilor unui tabel, iar apoi grupeaz datele obinute ntr-un tabel rezultat; sintaxa: TRANSFORM functie comanda_select PIVOT camp [IN (valoare1[, valoare2[, ...]])]

functie - funcie aggregate care opereaz asupra datelor selectate. comanda_select - comand SELECT. camp - cmpul sau expresia utilizat pentru a crea capul tabelului rezultat. valoare1, valoare2 - valori utilizate pentru a crea numele coloanelor tabelului rezultat.

comanda TRANSFORM este opional, dar atunci cnd este utilizat trebuie s precead comanda SELECT; comanda SELECT genereaz numele rndurilor din tabelul rezultat.

Crearea interogrilor - 35

Interogri crosstab
Exemplu: determinarea veniturilor generate de fiecare main i client.
TRANSFORM SUM(Inchirieri.SumaPlatita) SELECT Inchirieri.ID_masina FROM Inchirieri GROUP BY Inchirieri.ID_masina PIVOT Inchirieri.ID_client;

TRANSFORM SUM(Inchirieri.SumaPlatita) SELECT Inchirieri.ID_masina FROM Inchirieri GROUP BY Inchirieri.ID_masina PIVOT Inchirieri.ID_client IN (1,2,3,4,5);

Dar dac se dorete determinarea venitului total generat de fiecare main


TRANSFORM Sum(Inchirieri.SumaPlatita) SELECT Inchirieri.ID_masina, Sum(Inchirieri.SumaPlatita) AS [Total vehicul] FROM Inchirieri GROUP BY Inchirieri.ID_masina PIVOT Inchirieri.ID_client;
Crearea interogrilor - 36

Interogri nlnuite
Exemplu: afiarea datelor personale ale clienilor din judeul Cluj care au pltit pentru nchirierea mainilor sume mai mari de 300 RON.
SELECT * FROM Clienti AS CL WHERE CL.ID_client IN (SELECT INC.ID_client FROM Inchirieri AS INC WHERE INC.SumaPlatita > 300 AND INC.ID_client IN (SELECT CLI.ID_client FROM Clienti AS CLI WHERE (CLI.JudetClient = 'Cluj')));

SELECT * FROM Clienti CLI, Inchirieri INC WHERE CLI.ID_client=INC.ID_client AND INC.SumaPlatita > 300 AND CLI.JudetClient = 'Cluj'; SELECT * FROM Clienti INNER JOIN Inchirieri ON Clienti.ID_client=Inchirieri.ID_client AND (Clienti.JudetClient = 'Cluj' AND Inchirieri.SumaPlatita > 300);
Crearea interogrilor - 37

Interogri de aciune
Interogri de actualizare
UPDATE tabel SET valoare_nou WHERE criterii; tabel numele tabelului care conine datele care trebuie actualizate; valoare_nou o expresie care determin valoarea care se va nscrie n cmpurile actualizate; criterii o expresie care indic nregistrrile ce vor fi actualizate.

Sintaxa:

Exemplu:

UPDATE Inchirieri SET Inchirieri.SumaPlatita = Inchirieri.SumaPlatita-100 WHERE Inchirieri.SumaPlatita>300;

Crearea interogrilor - 38

Interogri de aciune
Interogri de tip Make-Tabel
SELECT cmp1[, cmp2[, ...]] INTO tabel_nou [IN baze_externe] FROM surs; tabel_nou numele tabelului care va conine datele rezultat; cmp1, cmp2 datele incluse n tabelul rezultat al interogrii; surs tabelul sau interogarea din care sunt preluate datele implicate n interogare; baze_externe numele unei alte baze de date n care va fi generat noul tabel.

Sintaxa:

Exemplu: Salvarea ntr-un tabel nou a veniturilor aduse de fiecare autovehicul nchiriat precum i a sumelor totale achitate de fiecare client. SELECT Inchirieri.ID_masina, Inchirieri.ID_client, Sum(Inchirieri.SumaPlatita) AS [Venit tranzactie] INTO Venituri FROM Inchirieri GROUP BY Inchirieri.ID_masina, Inchirieri.ID_client;
Crearea interogrilor - 39

Interogri de aciune
Interogri de tip Make-Tabel

Ce se ntmpl dac schimbm ordinea criteriilor n lista clauzei GROUP BY? Ce se ntmpl dac eliminm un criteriu din lista clauzei GROUP BY? Afiai datele la care mainile au fost nchiriate prima dat.
Crearea interogrilor - 40

Interogri de aciune
Interogri de tip Make-Tabel

Crearea interogrilor - 41

Interogri de aciune
Interogri de adugare
INSERT INTO tabel_int [(camp1[, camp2[, ...]])] [IN baz_extern] SELECT [surs_date.]camp1[, camp2[, ...] FROM tabel_surs sau INSERT INTO tabel_int [(camp1[, camp2[, ...]])] VALUES (valoare1[, valoare2[, ...]) unde: tabel_int numele tabelului la care vor fi adugate nregistrrile; camp1, camp2 numele cmpurilor la care se vor aduga date; baz_extern calea pn la baza de date; surs_date numele cmpurilor din care se vor prelua datele; tabel_surs numele tabelului din care se vor prelua datele; valoare1, valoare2 valorile care se vor nscrie n noua nregistrare.

Sintaxa:

Exemplu:

INSERT INTO Studenti ( ID_student, NumeStudent, PrenumeStudent ) SELECT ID_client, NumeClient, PrenumeClient FROM Clienti WHERE (Clienti.JudetClient='Cluj');

Crearea interogrilor - 42

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