Sunteți pe pagina 1din 57

Curs III

LIMBAJUL SQL – INTEROGAREA DATELOR

Proiectarea Bazelor de Date


Agenda

Limbajul SQL.

Extragerea datelor cu SELECT.

Tipuri de JOIN.

Functii SQL.

Proiectarea Bazelor de Date


Agenda

Grupuri de date si functii de grup.

Subinterogari simple.

Subinterogari multicoloana.

Interogari ce folosesc operatorii de multimi.

Proiectarea Bazelor de Date


Limbajul SQL

• SQL – Structured Query Language:


• Numele generic al unei familii de limbaje de
definire, manipulare si control pentru o baza de
date relationala;

• SQL – limbaj standardizat (ANSI):


• Diversele SGBD-uri au implementari proprii care
in general extind standardul SQL
• Este un limbaj interactiv si integrat in alte
limbaje de programare (C/C++, Java etc)

Proiectarea Bazelor de Date


Baza date relationala

• Contine o colectie de tabele fara


pointeri fizici.
• Poate fi accesata si modificata de
instructiuni SQL;
• Foloseste un set de operatori
relationali pentru implementarea
instructiunilor SQL.

Proiectarea Bazelor de Date


Integritatea relationala

Integritatea de domeniu
– la nivelul definitiei: controlul validitatii fiecarei valori de
atribut
– la nivelul manipularii: compararea atributelor din acelasi
domeniu
Integritatea de relatie
– caracterul unic si totdeauna definit (not null) pentru
valorile cheii primare dintr-o relatie
Integritate de referinta
– legatura dintre relatii prin intermediul cheilor primare -
chei straine

Proiectarea Bazelor de Date


Integritatea de referinta

Exemplu de implementare - la eliminarea unui


tuplu dintr-o relatie avem variantele:
– se interzice eliminarea daca valoarea cheii primare
pentru acel tuplu apare ca si cheie externa într-un
într-un tuplu al altei relatii (“RESTRICT”);
– se pun valorile cheii externe corespunzatoare
tupletului eliminat la valoarea NULL sau implicita
(DEFAULT);
– se elimina toate tuplele din celelalte relatii având
aceeasi valoare pentru cheia externa
corespunzatoare tuplului eliminat (“CASCADE”).

Proiectarea Bazelor de Date


SQL

Modelul Relational SQL


Relatie Tabel
Domeniu Tipul coloanei
Atribut Coloana
Tuplu Linie
Cheie primara Cheie primara
Cheie externa Referinta

Proiectarea Bazelor de Date


SQL
SELECT Data retrieval
INSERT
UPDATE Data manipulation language (DML)
DELETE
CREATE
ALTER
DROP Data definition language (DDL)
RENAME
TRUNCATE
COMMIT
ROLLBACK Transaction control
SAVEPOINT

GRANT Data control language (DCL)


REVOKE
Proiectarea Bazelor de Date
Operatori relationali

Selection Projection

Tabela 1 Tabela 1
Join

Tabela 1 Tabela 2
Proiectarea Bazelor de Date
Interogarea datelor - SELECT

 SELECT identifica ce coloane sunt afisate;


 FROM identifica din care tabele provin datele;
 WHERE (optionala) filtreaza datele returnate
dupa conditii logice simple sau complexe;
 DISTINCT elimina liniile duplicate din afisare
 ORDER BY afiseaza ordonat rezultatele
Proiectarea Bazelor de Date
Valori NULL

O valoare NULL este valoarea inexistenta,


necunoscuta.
Valoare NULL difera de sirul vid sau de 0.
SQL> SELECT nume, functie, com
2 FROM angajat;

NUME FUNCTIE COM


---------- --------- ---------
KING PRESIDENT
BLAKE MANAGER
...
TURNER SALESMAN 0
...
14 rows selected.
Proiectarea Bazelor de Date
Aliasuri de coloana
Redenumeste numele unei coloane la afisare
Este folositor la afisarea coloanelor calculate
Se adauga dupa coloana
Trebuie introdus intre ghilimele duble daca are
spatii sau este ‘case sensitive’
SQL> SELECT nume as Nume,
2 sal*12 "Salar Anual"
3 FROM emp;

NUME Salar Anual


------------- -------------
...

Proiectarea Bazelor de Date


Eliminarea duplicatelor

Liniile duplicate se elimina prin folosirea


optiunii DISTINCT in clauza SELECT
SQL> SELECT DISTINCT nrdept
2 FROM angajat;

NRDEPT
---------
10
20
30

Proiectarea Bazelor de Date


Limitarea liniilor rezultate

Limitarea liniilor rezultate dintr-o instructiune


SELECT se face prin clauza WHERE.
Clauza WHERE urmeaza clauzei FROM.
Clauza WHERE contine conditii logice simple
sau complexe (legate cu operatorii logici AND
si OR).

SELECT [DISTINCT] {*, coloana [alias], ...}


FROM tabe;
[WHERE conditii];

Proiectarea Bazelor de Date


Operatori de comparatie

Operator Semnificatie Operator Semnificatie

= Egal BETWEEN Intre 2 valori (inclusiv)


...AND...
> Mai mare

>= Mai mare sau egal


Cuprins intr-o lista de
Mai mic IN(list)
< valori
Mai mic sau egal
<=
Diferit LIKE
<> Corespunde unui sablon
de caractere

IS NULL Este o valoare null

Proiectarea Bazelor de Date


Exemplu ORDER BY

 Afiseaza ordonat rezultatele interogarii:


 Este ultima clauza din instructiunea SELECT
SQL> SELECT nume, nrdept, sal
2 FROM angajat
3 ORDER BY nrdept, sal DESC;

NUME NRDEPT SAL


---------- --------- ---------
KING 10 5000
CLARK 10 2450
MILLER 10 1300
FORD 20 3000
...
14 rows selected.

Proiectarea Bazelor de Date


Date din tabele multiple
ANGAJAT DEPART
MARCA NUME ... NRDEPT NRDEPT DENUMIRE LOCALIT
------ ----- ... ------ ------ ---------- --------
7839 KING ... 10 10 ACCOUNTING NEW YORK
7698 BLAKE ... 30 20 RESEARCH DALLAS
... 30 SALES CHICAGO
7934 MILLER ... 10 40 OPERATIONS BOSTON

MARCA NRDEPT LOCALITATE


----- ------- --------
7839 10 NEW YORK
7698 30 CHICAGO
7782 10 NEW YORK
7566 20 DALLAS
7654 30 CHICAGO
7499 30 CHICAGO
...
14 rows selected.

Proiectarea Bazelor de Date


SQL - JOIN

• Operatorul relational JOIN combina


inregistrarile din doua sau mai multe tabele;
• Se combina coloanele selectate din doua
tabele pe baza valorilor comune;
• Standardul SQL prevede urmatoarele tipuri
de JOIN
• INNER JOIN: Equi-Join, Cross
• OUTER JOIN: Left, Right, Full
• SELF JOIN

Proiectarea Bazelor de Date


INNER/EQUI-JOIN

Proiectarea Bazelor de Date


NON EQUI-JOIN

Proiectarea Bazelor de Date


CROSS JOIN

• Se efectueaza un produs cartezian atunci


cand:
• O conditie de JOIN este omisa
• O conditie de JOIN este invalida
• Toate liniile din prima tabela sunt unite cu
toate liniile din a doua tabela
Proiectarea Bazelor de Date
OUTER JOIN

• Se foloseste pentru a afisa inregistrarile


care nu indeplinesc conditiile normale de
JOIN (EQUI-JOIN)
• Astfel se retine fiecare linie chiar daca nu
exista o linie corespondenta in celalalt tabel
• Tipuri de OUTER-JOIN:
• LEFT OUTER JOIN
• RIGHT OUTER JOIN
• FULL OUTER JOIN

Proiectarea Bazelor de Date


LEFT (OUTER) JOIN

• Rezultatul unui Left Join intre tabelul A si


tabelul B:
• Contine toate liniile din tabelul stang A, chiar
daca “join condition” nu gaseste vreo linie
corespondenta in tabelul dreapta B;
• Contine toate liniile din tabelul A, plus liniile care
corespund conditiei de join din tabelul B
Proiectarea Bazelor de Date
RIGHT (OUTER) JOIN

• Rezultatul Right Join intre tabelele A si B:


• Contine toate liniile din tabelul dreapta B, chiar
daca “join condition” nu gaseste vreo linie
corespondenta in tabelul stanga A;
• Contine toate liniile din tabelul B, plus liniile care
corespund conditiei de join din tabelul A

Proiectarea Bazelor de Date


FULL OUTER JOIN

• Rezultatul unui Full Outer Join intre tabelele


A si B:
• Combina efectele Left Join cu cele Right
Join;
• Contine toate liniile din tabelul B, plus
toate liniile din A, chiar si cele care nu
corespund conditiei de join;
Proiectarea Bazelor de Date
SELF JOIN

• Un Self Join pe aceeasi tabela este de fapt


in INNER JOIN pe tabela deschisa sub 2
aliasuri, pe baza unei conditii de egalitate.

Proiectarea Bazelor de Date


Caracteristici functii SQL

 Confera interogarilor putere si flexibiltate.

 Functiile pot fi folosite la:


– Efectuarea de calcule asupra datelor din tabele
– Gestionarea liniilor individuale de date
– Gestionarea grupurilor de date
– Conversia tipurilor de date ale coloanelor unei tabele
 Functiile SQL accepta argumente si returneaza valori.
 Functiile SQL sunt specifice fiecarui SGBD.
 Sunt prezentate functiile implementate de serverul
Oracle.

Proiectarea Bazelor de Date


Structura unei functii

Intrare Iesire
Functie

arg 1 Functia executa o


actiune
arg 2
Valoarea
rezultata

arg n

Proiectarea Bazelor de Date


Tipuri de functii SQL

Functii

Functii de un Functii de mai


singur rind multe rinduri

Proiectarea Bazelor de Date


Functia de un singur rind

Nume_Functie (coloana|expresie, [arg1, arg2,...])

 Preia argumente si intoarce o valoare.

 Actioneaza asupra unui singur rind.

 Intoarce un rezultat pentru fiecare rind.

 Poate fi apelata imbricat.

 Poate modifica tipul de date al unei expresii.

Proiectarea Bazelor de Date


Functii de un singur rind

Siruri de
caractere

Generale Numerice
Functii de un
singur rind

Date
Conversie
calendaristice

Proiectarea Bazelor de Date


Folosirea datelor
calendaristice
Serverul Oracle stocheaza valorile date
calendaristice in formatul: secol, an, luna, zi,
ora, minute, secunde.
Formatul predefinit este ‘DD-MON-YY’.
Functia care intoarce data sistemului este
SYSDATE.
Daca se aduna un numar la o data rezulta o
data calendaristica.
Diferenta intre doua date reprezinta numarul
de zile dintre cele doua date calendaristice.

Proiectarea Bazelor de Date


Functii de conversie

Conversii de
tipuri de date

Conversii implicite Conversii explicite


de tipuri de date de tipuri de date

Proiectarea Bazelor de Date


Conversii explicite

TO_NUMBER TO_DATE

NUMBER CHARACTER DATE

TO_CHAR TO_CHAR

Proiectarea Bazelor de Date


Convertirea datelor
calendaristice in caractere

TO_CHAR(date, 'fmt')

Primul argument este data calendaristica care


trebuie convertita.
Al doilea argument este sirul de formatare.
Sirul de formatare:
– trebuie inclus intre apostroafe simple si este ‘case sensitive’
– poate include orice format valid de data calendaristica
– poate include subsirul ‘fm’ pentru eliminarea spatiilor

Proiectarea Bazelor de Date


Functia TO_CHAR
cu date calendaristice

SQL> SELECT nume,


2 TO_CHAR(data_ang, 'fmDD Month YYYY') DATA_ANG
3 FROM angajat;

NUME DATA_ANG
---------- -----------------
KING 17 November 1981
BLAKE 1 May 1981
CLARK 9 June 1981
JONES 2 April 1981
MARTIN 28 September 1981
ALLEN 20 February 1981
...
14 rows selected.

Proiectarea Bazelor de Date


Functia NVL

Converteste o valoare NULL la o valoare data.


Tipurile de date acceptate sunt datele
calendaristice, sirurile de caractere si numerele
SQL> SELECT nume, sal, com, (sal*12)+NVL(com,0) VENIT
2 FROM angajat;

NUME SAL COM VENIT


---------- --------- --------- --------------------
KING 5000 60000
BLAKE 2850 34200
CLARK 2450 29400
JONES 2975 35700
MARTIN 1250 1400 16400
ALLEN 1600 300 19500

Proiectarea Bazelor de Date


Functia DECODE
DECODE(col/expresie, cautare1, rezultat1
[, cautare2, rezultat2,...,]
[, predefinit])

 Functie de cautare conditionala echivalenta cu


instructiunile CASE sau IF-THEN-ELSE.
 Primul argument este coloana sau expresia dupa care
se face cautarea.
 Al doilea argument reprezinta valoare de comparatie,
urmatorul este valoarea intoarsa in cazul in care
conditia este adevarata.
 Ultimul argument este valoarea intoarsa daca toate
conditiile sunt false.

Proiectarea Bazelor de Date


Imbricarea
Using functiilor
the IN Operator

F3(F2(F1(col,arg1),arg2),arg3)

Pas 1 = Rezultat 1
Pas 2 = Rezultat 2
Pas 3 = Rezultat 3

Functiile de un singur rind pot fi imbricate.


Functia care se evalueaza prima este cea cu
nivelul de imbricare cel mai mare.

Proiectarea Bazelor de Date


Functii de grup

ANGAJAT
NRDEPT SAL
--------- ---------
10 2450
10 5000
10 1300
20 800
20 1100
20 3000 “salarul maxim MAX(SAL)
20 3000 din tabelul EMP” ---------
20 2975 5000
30 1600
30 2850
30 1250
30 950
30 1500
30 1250

Proiectarea Bazelor de Date


Folosirea functiilor de grup

SELECT coloana, functie_grup(coloana)


FROM tabel
[WHERE conditie]
[ORDER BY coloana];

Tipuri de functii de grup:


– SUM
– AVG
– COUNT
– MAX
– MIN

Proiectarea Bazelor de Date


Grupuri de date
ANGAJAT
NRDEPT SAL
--------- ---------
10 2450
10 5000 2916.6667
10 1300
20 800 “salarul mediu NRDEPT AVG(SAL)
20 1100 pe fiecare ------- ---------
20 3000 2175departament ”
10 2916.6667
20 3000
20 2975 20 2175
30 1600 30 1566.6667
30 2850
30 1250 1566.6667
30 950
30 1500
30 1250

Proiectarea Bazelor de Date


Clauza GROUP BY

SELECT coloana, functie_grup(coloana)


FROM tabel
[WHERE conditie]
[GROUP BY expresie_group_by]
[ORDER BY coloana];

Se pot imparti liniile unei tabele in grupuri


folosind clauza GROUP BY.
Orice coloana care apare in clauza SELECT si
nu este intr-o functie de grup atunci trebuie sa
apara in clauza GROUP BY.

Proiectarea Bazelor de Date


Filtrarea grupurilor de date
ANGAJAT
NRDEPT SAL
--------- ---------
10 2450
10 5000 5000
10 1300
20 800
20 1100 “salarul maxim NRDEPT MAX(SAL)
20 3000 pe departament --------- ---------
3000
20 3000 sa fie mai mare 10 5000
20 2975 ca 2900” 20 3000
30 1600
30 2850
30 1250
2850
30 950
30 1500
30 1250

Proiectarea Bazelor de Date


Clauza HAVING
SELECT column, group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];

Se foloseste clauza HAVING restrictioneaza


grupurile de date:
– liniile sunt grupate
– sunt aplicate functiile de grup
– grupurile care indeplinesc conditiile din clauza HAVING sunt
afisate

Proiectarea Bazelor de Date


Clauza HAVING

SELECT nrdept, min(sal), avg(sal), max(sal)


FROM angajat
GROUP BY nrdept
HAVING max(sal)< 2900
ORDER BY nrdept;

Se foloseste clauza HAVING pentru a filtra


grupurile de date (si nu WHERE)

Proiectarea Bazelor de Date


Subinterogari

 “Cine are salarul mai mare ca salarul lui Jones ?”

Interogarea principala

“Care angajat are salarul mai mare ca


? salarul lui Jones ?”

Subinterogare

?
“Ce salar are Jones ?”

Proiectarea Bazelor de Date


Sintaxa subinterogarii
SELECT coloane
FROM tabel
WHERE expresie operator
(SELECT coloane
FROM tabel)

Interogarea interna se executa o singura data,


inaintea interogarii principale.
Rezultatele subinterogarii sunt folosite de
interogarea principala.

Proiectarea Bazelor de Date


Reguli pentru subinterogari

Subinterogarile se includ intre paranteze.


Subinterogarea se plaseaza in partea dreapta
a operatorului de comparatie.
Clauza ORDER BY nu este permisa in
subinterogare.
Folositi operatori de o singura linie pentru
subinterogari de o singura linie.
Folositi operatori multi-linie pentru
subinterogari care intorc mai multe linii.

Proiectarea Bazelor de Date


Subinterogari in
clauza FROM

SQL> SELECT a.nume, a.sal, a.nrdept, b.salmed


2 FROM angajat a, (SELECT nrdept, avg(sal) salmed
3 FROM angajat
4 GROUP BY nrdept) b
5 WHERE a.nrdept = b.nrdept
6 AND a.sal > b.salmed;

NUME SAL NRDEPT SALMED


---------- --------- --------- ----------
KING 5000 10 2916.6667
JONES 2975 20 2175
SCOTT 3000 20 2175
...
6 rows selected.

Proiectarea Bazelor de Date


Subinterogari corelate

Subinterogarile corelate sau imbricate


(“correlated/nested”) refera o coloana din
tabelul aflat in interogarea externa (“outer-
query”).
O interogare corelata se evalueza pentru
fiecare linie procesata de interogarea externa
(parinte).
Se pot imbrica pana la 255 subinterogari.

Proiectarea Bazelor de Date


Subinterogari corelate

SQL> SELECT a.nume, a.sal, a.nrdept


FROM angajat a
WHERE a.sal > ( SELECT avg(sal)
FROM angajat
WHERE a.nrdept = nrdept) ;

NUME SAL NRDEPT SALMED


---------- --------- --------- ----------
KING 5000 10 2916.6667
JONES 2975 20 2175
SCOTT 3000 20 2175
...
6 rows selected.

Proiectarea Bazelor de Date


Operatori cu multimi
A B

Intersect

A B A B

Union / Union All

A B

Minus

Proiectarea Bazelor de Date


Reguli pentru
operatorii de multime

Expresiile din clauzele SELECT trebuie sa se


potriveasca la numar si ca tip de date.
Liniile duplicate sunt eliminate, exceptie facind
operatorul UNION ALL.
Numele coloanelor din prima interogare apar in
rezultat.
Predefinit, rezultatul este ordonat crescator.
Se pot folosi parantezele pentru a schimba
ordinea de executie.

Proiectarea Bazelor de Date


Concluzii

Limbajul SQL.

Extragerea datelor cu SELECT.

Tipuri de JOIN.

Functii SQL.

Proiectarea Bazelor de Date


Concluzii

Grupuri de date si functii de grup.

Subinterogari simple.

Subinterogari multicoloana.

Interogari ce folosesc operatorii de multimi.

Proiectarea Bazelor de Date

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