limbajul de interogare a datelor - erasmus pulsepreda/teaching/bde/bde_7.pdf · 2013-11-19 · 1...
TRANSCRIPT
1
SQL
1
SQL
Limbajul de
interogare a datelor •Sintaxa comenzii SELECT
•Ordonare folosind ORDER BY
•Filtrarea folosind WHERE
•Numarul de inregistrari COUNT (functie agregata)
•Utilizarea JOIN
2
SQL
Limbajul de interogare a datelor
SELECT
SELECT [ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT][SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr, ...
[FROM table_references
[WHERE where_condition]
[GROUP BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[HAVING where_condition]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ...] [LIMIT {[offset,] row_count | row_count OFFSET offset}]
[PROCEDURE procedure_name(argument_list)]
[INTO OUTFILE 'file_name' export_options
| INTO DUMPFILE 'file_name'
| INTO var_name [, var_name]]
[FOR UPDATE | LOCK IN SHARE MODE]]
SELECT select_expr, ...
[FROM table_references
[WHERE where_condition]
3
SQL Nici o tabela selectata:
Se poate utiliza instructiunea SELECT fara a preciza nici
o referinta la vreo tabela; se pot astfel calcula expresii
aritmetice; pentru comoditate, se poate utiliza sintaxa
incluzand referinta la tabela DUAL (nu trebuie definita).
4
SQL Exemple:
O baza de date cu doua tabele:
•angajat;
•departament;
Datele despre angajat sunt nume,
prenume, salariu, data angajarii,
vechimea cat si indecsii pentru
managerul si departamentul sau.
Pentru a modela aceste relatii, se
folosesc doua chei straine:
•departament_id;
•manager_id;
Actiunile referentiale nu sunt
definite.
5
SQL Exemple:
Crearea tabelelor angajat si departament; se creeaza mai intai tabela departament, datorita
existentei unei referinte in care cheia straina este departament_id din tabela angajat iar coloana
referita este cheia primara din tabela departament;
6
SQL
7
SQL
Inregistrarile din cele doua tabele:
8
SQL
Clauza FROM precizeaza tabela (tabelele) din care se face
selectia;
Se pot preciza toate (*) coloanele sau un grup de coloane, in
orice ordine; rezultatul prezentat nu este ordonat, daca nu se
precizeaza aceasta;
9
SQL
Clauza ORDER BY se utilizeaza pentru
a ordona (default e ascendent) dupa
valoarea coloanelor precizate odata cu
clauza ORDER BY. Ordonarea se faca
intai dupa prima coloana, apoi dupa a
doua etc.Pentru a ordona descrescator,
se precizeaza clauza DESC, dupa
fiecare coloana. Acolo unde nu se
precizeaza, se va folosi ordonarea
ascendenta. Nu trebuie sa ordonam
neaparat dupa coloanele selectate;
Pentru ordonare, se pot folosi si
numerele de ordine ale coloanelor
folosite pentru criteriul de ordonare.
10
SQL
Selectati numele,
prenumele,
departamentul, salariul
angajatilor ordonate
dupa id-ul
departamentului
(descrescator) si dupa
salariu;
Selectati numele angajatilor care lucreaza la departamentul de R&D;
11
SQL
Selectati numele angajatilor care NU lucreaza la departamentul de R&D;
Angajatii care au salariu mai mare de 3000 lei
Clauza WHERE se utilizeaza pentru a
preciza conditiile de selectie (filtrare)
pentru inregistrarile selectate; nu e
obligatoriu ca atributele selectate sa fie
aceleasi cu atributele care sunt utilizate
in conditia de filtrare; in exemplul
alaturat, se selecteaza numele si
prenumele, conditia de selectie fiind
apartenta la un departament anume,
precizat fie prin ID-ul sau fie prin numele
obtinut printr-un JOIN cu tabela de
departamente.
12
SQL
Angajatii care au salariu de 3000 lei
Angajatii care au salariul intre 3000 si 5000 de lei (incluzand limitele)
Clauza BETWEEN se
utilizeaza pentru a preciza
limitele de variatie ale unui
atribut utilizat cu clauza
WHERE; limitele sunt incluse;
13
SQL
Angajatii care au salariul intre 3000 si 5000 de lei (incluzand limitele)
Angajatii care au salariul intre 3000 si 5000 de lei (excluzand limitele)
14
SQL
Angajatii care nu au manager
Angajatii ai caror manager are ID-ul 1
Angajatii ai caror manager este Popa Ion
15
SQL
Angajatii ai caror manager NU este Popa Ion si care au salariu mai mare de 1000 lei
16
SQL
Angajatii care au salariu mai mare de 2500 lei si lucreaza la Backend
17
SQL
Angajatii, ordonati dupa vechime
18
SQL
Angajatii, ordonati dupa departamente
Cand se utilizeaza atat clauza WHERE cat si clauza ORDER BY, WHERE apare intotdeauna inaintea lui
ORDER BY.
Join si multiple join
19
SQL
Numarul de angajati de la fiecare departament
Numarul de angajati de la fiecare departament, ordonat descrescator dupa numarul de angajati din fiecare departament
20
SQL
Listati persoanele care nu au manager si departamentele la care lucreaza
21
SQL
Listati persoanele care au manageri, managerul lor si departamentul la care lucreaza
22
SQL
Listati persoanele de la R&D care au manager, si managerul lor este tot la R&D