Documente Academic
Documente Profesional
Documente Cultură
SQL Ii
SQL Ii
partea II
Definirea unei interogări în limbajul SQL
Limbajul SQL – reguli de sintaxă
• Se utilizează punctul “.” ca separator între numele tabelei și numele
câmpului. De exemplu: Comanda.CodClient;
• Se utilizează parantezele drepte [ ] pentru a încadra nume de câmpuri
sau tabele. De exemplu: [Comanda].[DataComanda];
• În cazul interogărilor parametrizate, parametrii se vor completa
încadrați între paranteze drepte. De exemplu: [Tastati orasul];
• Se utilizează virgula pentru a delimita elementele unei liste.
De exemplu IN(10,11,16,20);
Limbajul SQL – reguli de sintaxă
• Se utilizează virgula pentru a delimita argumentele funcțiilor. De
exemplu: IIF(Valoare>100, Valoare*1.2, Valoare*1.15);
• Valorile de tip șir de caractere se vor încadra între ghilimele. De
exemplu “Ionescu Ion”;
• Valorile de tip dată calendaristică se vor marca între simboluri #. De
exemplu #12/10/2014#;
• Semnul “;” marchează sfârșitul frazei SQL, în ACCESS nu este
obligatoriu ca fraza SQL să se finalizeze cu ;.
• Limbajul SQL pentru Access nu face distincţie între majuscule și
minuscule;
• Este permisă scrierea unei instrucţiuni pe unul sau mai multe rânduri.
SQL - Gruparea datelor
SELECT [listă selecţie funcţie agregată(nume câmp) AS alias]
FROM nume tabelă(e)
WHERE criteriu de selecţie
[GROUP BY câmp(uri) de grupare]
[HAVING criteriile asociate câmpurilor de grupare sau
funcțiilor agregate ]
[ORDER BY listă câmpuri criterii de ordonare {ASC/DESC}];
Să se afișeze valoarea fiecărei
SQL - GROUP BY comenzi.
SELECT NrComanda,
SUM([Cantitate]*[Pret]) AS Valoare
FROM ContinutulComanda
GROUP BY NrComanda;
1.Se ordonează liniile tabelei ContinutulComanda după
NrComanda;
2. Se constituie un grup pentru fiecare valoare distinctă
aferentă atributului NrComanda;
3. Se aplică funcţia agregată SUM asupra grupurilor;
4. Se obţine rezultatul, al cărui număr de linii coincide cu
valorile distincte ale câmpului NrComanda.
Să se afișeze produsele pentru care media
SQL - HAVING preturilor este mai mare decât 4.
SELECT CodProdus, AVG(Pret) AS PretMediu
FROM ContinutComanda
GROUP BY CodProdus
HAVING AVG(Pret)>4
SQL - Să se afișeze produsele pentru care media preturilor în
anii 2005 și 2006 a fost mai mică decât 4.
WHERE ,
HAVING SELECT CodProdus, AVG(Pret) AS PretMediu
FROM ContinutComanda INNER JOIN Comanda ON
ContinutComanda.NrComanda=Comanda.NrComanda
WHERE YEAR(DataComanda) IN (2005, 2006)
GROUP BY CodProdus
HAVING AVG(Pret)<=4
Să se afișeze produsele pentru care media preturilor pe
SQL - fiecare din anii 2005 și 2006 a fost mai mică decât 4.
WHERE , SELECT CodProdus, AVG(Pret) AS PretMediu,
HAVING YEAR(DataComanda)
FROM ContinutComanda INNER JOIN Comanda ON
ContinutComanda.NrComanda=Comanda.NrComanda
GROUP BY CodProdus,YEAR(DataComanda)
HAVING YEAR(DataComanda) IN (2005, 2006) AND
AVG(Pret)<=4
Să se afișeze produsele pentru care media preturilor
SQL - fost mai mică decât 4. Se vor lua în considerare doar
WHERE , prețurile mai mari decât 3.
HAVING SELECT CodProdus, AVG(Pret) AS PretMediu
FROM ContinutComanda
WHERE Pret>3
GROUP BY CodProdus
HAVING AVG(Pret)<=4
SQL - Subinterogari
T= PROIECTIEC (T1)
Operatori unari - exemplu proiecție Access
Proiecție aplicată pe tabelul Client, după atributele
DenumireClient, OrasClient
SELECT DenumireClient, OrasClient
FROM Client
Operatori unari - selecția
● Selecția aplicată unei relaţii/tabele T cu o anumită
structură de atribute, înseamnă aplicarea unui criteriu C
asupra valorilor atributelor specificate în criteriu. În urma
aplicării selecției rezultă o altă relaţie/tabelă T1, care va
avea ca structură aceleași atribute ca în relația/tabela
inițială T. Înregistrările/tuplurile relației/tabelei T1,
obținute prin selecție, sunt cele din relația/tabela inițială T,
rezultate prin aplicarea criteriului C.
T= SELECTIEC (T1)
Operatori unari - exemplu selecție Access
● Selecție aplicată tabelului Client, după criteriul
OrasClient="Bucuresti" or OrasClient="Brasov"
SELECT *
FROM Client
WHERE OrasClient =”Bucuresti” OR
OrasClient=”Brasov”
X
SELECT * Client x Produs = ?
FROM Client, Produs
5x4=?
Operatori binari- exemplu produs cartezian
Operatori binari- compunerea
● Compunerea (join) a două relaţii/tabele T1 şi T2, unde
T1 este formată din n atribute/coloane şi T2 este formată
din m atribute/coloane, are ca rezultat o a treia relaţie/
tabelă T, produsul cartezian al celor două tabele sursă,
fiind alese doar acelea care îndeplinesc o anumită
condiţie specificată în cadrul compunerii. Numărul de
atribute/coloane ale rezultatul compunerii este m+n.
SELECT *
FROM Client, Reducere
WHERE CifraAfaceri BETWEEN =
MinCifrAfceri AND MaxCifraAfaceri
Operatori binari- echicompunerea
● EchiCompunerea este compunerea pentru care condiţia
este alcătuită numai din egalităţi, putând conţine una sau
mai multe egalităţi. În cazul echicompunerii, în tabela
rezultat apar două câmpuri ce au valori identice.
Operatori binari- compunerea externă
● Compunerea externă este o echicompunere dar care,
spre deosebire de aceasta, afişează şi tuplurile care nu
au corespondent în cadrul celor două tabele sursă
LEFT JOINClient.OrasClient=
Oras.Oras
=
Operatori binari- compunerea externă
● Compunerea externă este o echicompunere dar care,
spre deosebire de aceasta, afişează şi tuplurile care nu
au corespondent în cadrul celor două tabele sursă
RIGHT JOINClient.OrasClient=
Oras.Oras
=
Operatori binari- reuniunea
● Reuniunea a două relaţii/tabele T1 şi T2, cu aceeaşi
structură, unde T1 este formată din n tupluri/înregistrări şi
T2 este formată din m tupluri/înregistrări, are ca rezultat o
a treia relaţie/tabelă T, având aceeaşi structură cu a
relaţiilor/tabelelor sursă şi conţinând m+n tupluri/
înregistrări.
T= T1 U T2
Operatori
●
binari - reuniunea
Reuniunea nu poate fi exemplificată în QBE, datorită limitărilor interfeței
grafice
● Se poate realiza în limbajul SQL, folosind UNION
SELECT Codclient,
DenumireClient,
OrasClient
FROM Client
UNION
U = SELECT CodFurnizor,
DenumireFurnizor,
OrasFurnizor
FROM Furnizor
Operatori binari - intersecția
● Intersecția a două relaţii/tabele T1 şi T2, cu aceeaşi
structură, unde T1 este formată din n tupluri/înregistrări şi
T2 este formată din m tupluri/înregistrări, are ca rezultat o
a treia relaţie/tabelă T, având aceeaşi structură cu a
relaţiilor/tabelelor sursă şi conţinând doar înregistările
comune ale celor două relații T1 și T2. Numărul de
tupluri/înregistrări ale rezultatul intersecției este cel mult
minumul dintre m și n.
Operatori binari - intersecția
● Intersecția poate fi exemplificată în SQL prin utilizarea subinterogarilor sau
prin combinarea unui produs cartezian și a unei selecții.
SELECT *
FROM Client, Furnizor
WHERE CodClient=CodFurnizor AND
DenumireClient=DenumireFurnizor
AND OrasClient=OrasFurnizor
SELECT *
U FROM Client
WHERE CodClient IN ( SELECT CodFurnizor
FROM Furnizor)
=
Operatori binari- diferența
● Diferența poate fi exemplificată în SQL prin utilizarea subinterogarilor
SELECT *
FROM Client
WHERE CodClient NOT IN ( SELECT CodFurnizor
FROM Furnizor)
=
Operatori binari - diviziunea (împărțirea)
● Diviziunea presupune împărţirea unei tabele T1,
denumită deîmpărţit, la o tabela denumită împărţitor T2
rezultând o altă tabela T denumită cât, astfel încât orice
tuplu al tabelei cât T trebuie să se regăsească în cadrul
tuplurilor tabelei deîmpărţit T1 în combinaţie cu fiecare
tuplu din tabela împărţitor T2. Pentru a putea să aibă sens
diviziunea, tabela împărţitor T2 trebuie să aibă ca atribute
un subset al atributelor tabelei deîmpărţit T1.
T= T1 : T2, T x T2 este inclus in T1
Operatori binari- diviziunea
● Diviziunea este utilă pentru a se evidenția produsele care s-
au vândut în anumite orașe.
: =
X =