curs 2_3
DESCRIPTION
CURS 2_3. SQL. LIMBAJUL SQL - O biective şi caracteristici. crearea bazelor de date şi a structurilor pentru relaţii; efectuarea de operaţii elementare de gestiune a datelor , precum inserarea, modificarea şi ştergerea acestora din cadrul relaţiilor; - PowerPoint PPT PresentationTRANSCRIPT
M. Danubianu - Teoria si implementarea bazelor de date
CURS 2_3
SQL
M. Danubianu - Teoria si implementarea bazelor de date 2
LIMBAJUL SQL - Obiective şi caracteristici - crearea bazelor de date şi a structurilor pentru relaţii;- efectuarea de operaţii elementare de gestiune a datelor, precum
inserarea, modificarea şi ştergerea acestora din cadrul relaţiilor;- efectuarea interogărilor începând cu cele simple până la cele complexe,
în scopul transformării datelor brute în informaţii.- operaţiile se realizează cu un efort minim din partea utilizatorului, - structura comenzilor şi sintaxa acestora este relativ uşor de învăţat. limbajul este portabil, - respectă un standard recunoscut astfel încât să se
poată utiliza aceeaşi structură şi sintaxă a comenzilor la trecerea de la un SGBD la altul
SQL prezintă două componente principale:- un limbaj de definire a datelor (DDL) utilizat pentru definirea
structurii bazei de date şi- un limbaj de manipulare a datelor (DML) pentru regăsirea şi
reactualizarea datelor.
M. Danubianu - Teoria si implementarea bazelor de date 3
SQL nu conţine comenzi de control (nu există instrucţiuni de tipul
IF..THEN..ELSE, GO TO, DO..WHILE sau alte comenzi care să
genereze un flux de control) poate fi utilizat în două moduri:
- interactiv prin introducerea instrucţiunilor de la un terminal;
- prin integrarea instrucţiunilor SQL într-un limbaj
procedural.
Are următoarele caracteristici:
- limbaj neprocedural.
- are un format liber;
- comenzile sunt structurate pe baza unor cuvinte standard din
limba engleză ( Create, Select, Insert..)
M. Danubianu - Teoria si implementarea bazelor de date 4
Pentru manipularea datelor SELECT Extragerea datelor din baza de dateINSERT Adăugarea de noi linii într-un tabelDELETE Stergerea de linii dintr-un tabelUPDATE Modificarea valorilor unor atributeCREATE TABLE Adăugarea unui nou tabel la baza de datePentru definirea bazei de
date DROP TABLE Stergerea unui tabel din baza de dateALTER TABLE Modificarea structurii unei baze de dateCREATE VIEW Crearea unuitabel virtual (vedere)DROP VIEW Stergerea unui tabel virtualGRANT Acordarea unor drepturi pentru utilizatoriPentru controlul accesului
la baza de date REVOKE Revocarea unor drepturi pentru utilizatoriCOMMIT Marchează sfârşitul unei tranzacţiiPentru controlul
tranzacţiilor ROLLBACK Abandonează tranzacţia în curs.
Principalele comenzi SQL
M. Danubianu - Teoria si implementarea bazelor de date 5
Terminologie şi convenţii de scriere a comenzilor SQL
In limbajul SQL standardizat se utilizează termenii de tabele , coloane şi rânduri.
O instrucţiune SQL este formată din cuvinte rezervate şi cuvinte definite de utilizator.
Cuvintele rezervate :- au un înţeles fix, trebuie scrise exact cum este necesar şi nu
pot fi împărţite în mai multe rânduri. Cuvintele definite de utilizator :
- sunt formate de către acesta, conform unor anumite reguli de sintaxă şi reprezintă denumirile diverselor obiecte din baza de date, cum ar fi relaţiile, coloanele , vederile, indexurile etc.
Majoritatea compnentelor unei instrucţiuni SQL nu sunt sensibile la tipul de litere.
excepţie importantă - faptul că datele de tip caracter literal trebuie să fie scrise exact cum apar în baza de date.
M. Danubianu - Teoria si implementarea bazelor de date 6
Manipularea datelor în SQL
Operaţia fundamentală în SQL este consultarea fraza SELECT - prezintă trei clauze principale : SELECT, FROM şi
WHERE. SELECT corespunde operatorului de proiecţie din algebra
relaţională, şi este utilizat pentru desemnarea listei de atribute (coloane, câmpuri) din tabelul rezultat;
FROM permite enumerarea relaţiilor din care vor fi extrase informaţiile aferente consultării;
WHERE desemnează predicatul selectiv al algebrei relaţionale, relativ la atributele relaţiilor care apar în clauza FROM.
comandă extrem de puternică echivalentul operaţiilor de selecţie, proiecţie şi uniune din algebra relaţională
M. Danubianu - Teoria si implementarea bazelor de date 7
SELECT[ALL | DISTINCT] [*]
[<alias>.]<camp>[AS <nume_nou>][, [<alias>.]<camp>
[AS <nume_nou>] ...]FROM <tabel>
[<local_alias>][, <tabel> [<local_alias>] ...][WHERE <cond_leg> [AND <cond_leg> ...][AND | OR <cond_filtru> [AND | OR <cond_filtru> ...]]][GROUP BY <lista_campuri>][HAVING <cond_filtru>][ORDER BY <camp_ord> [ASC | DESC] [, <camp_ord> [ASC |
DESC] ...]]
- Alias reprezintă aliasul atribuit relaţiei - câmp este numele câmpului selectat - nume_nou numele câmpului selectat în noul tabel - local_alias aliasul local atribuit de utilizator; - cond_leg condiţia de legătură între tabelele în care se manipulează datele; - cond_filtru condiţia de filtrare a înregistrărilor; - listă _câmpuri listă a câmpurilor în funcţie de care se face gruparea
înregistrărilor - câmp_ord câmpul după care se face ordonarea înregistrărilor
Forma generală a instrucţiunii SELECT este:
M. Danubianu - Teoria si implementarea bazelor de date 8
Secvenţa de prelucrare a unei fraze SELECT...
...este următoarea:- FROM - specifică tabelul sau tabelele care vor fi utilizate;- WHERE - filtrează rândurile supuse unei anumite condiţii
sau conţine condiţia de joncţiune între mai multe tabele- GROUP BY - formează grupuri de rânduri cu aceleaşi
valori ale coloanelor din lista de parametri;- HAVING - filtrează grupurile supuse unei anumite condiţii;- SELECT - specifică ce coloane vor apărea în tabelul
rezultat;- ORDER BY - specifică ordinea ieşirii.
Operaţia SELECT este închisă: rezultatul unei interogări unui tabel este un alt tabel.
rezultatul poate fi un tabel "normal" (tabel salvat pe disc), un tabel temporar (cursor - tabel care se şterge automat la închiderea unei sesiuni de lucru) sau chiar o variabilă-tablou (matrice).
M. Danubianu - Teoria si implementarea bazelor de date 9
Interogări în SQL
M. Danubianu - Teoria si implementarea bazelor de date 10
Consultarea datelor dintr-un singur tabelselectate dupa diferite conditii impuse
inregistrarilor
Care sunt angajatii al caror nume este ‘ King’? intervine un singur tabel şi anume Employees. In
clauza WHERE apare predicatul de selecţie (conditia) : last_name=‘King’
M. Danubianu - Teoria si implementarea bazelor de date 11
Care sunt angajatii subordonati managerului cu identificatorul 100 cu salarii mai mari de 2500?
M. Danubianu - Teoria si implementarea bazelor de date 12
Operatorul BETWEEN Se poate reformula ultima interogare astfel: Care sunt angajatii
subordonati managerului cu identificatorul 100 cu salarii mai mari de 2500 dar mai mici de 10000?
Se poate folosi următoarea instrucţiune:SELECT *FROM employeesWHERE manager_id=100 AND salary>2500 AND salary <10000sau
M. Danubianu - Teoria si implementarea bazelor de date 13
Operatorul LIKE
Se foloseşte pentru a compara un atribut de tip şir de caractere cu un literal
(constantă de tip şir de caractere).
%, "_" este un specificator multiplu, joker sau mască.
Care sunt angajatii al căror nume contine, in orice pozitie, incepand cu poz.
2, caracterul ‘s’?
M. Danubianu - Teoria si implementarea bazelor de date 14
Operatorul IN
Are următorul format general: expresie1 IN (expresie2, expresie3,..)
Rezultatul evaluării unui predicat care conţine acest operator va fi "adevărat" dacă valoarea expresiei1 este egală cu cel puţin una din valorile: expresie2, expresie3, .. şi este util atunci când condiţiile de selecţie sunt mai complexe.
Care sunt angajatii al caror identificator de job este ‘IT-PROG” sau ‘ST_MAN’?
M. Danubianu - Teoria si implementarea bazelor de date 15
Operatorul IS NULL Care sunt angajatii care nu primesc comision?
Notă: Operatorul NULL se utilizează cu IS şi nu cu semnul "=". Utilizarea unei expresii de forma
=NULL ar conduce la un rezultat care va fi întotdeauna fals, chiar dacă expresia nu este nulă.
M. Danubianu - Teoria si implementarea bazelor de date 16
Consultarea datelor dintr-un singur tabelselectate dupa diferite coloane
Faceti o lista cu prenumele si numele angajatilor ordonate descrescator dupa prenume.
M. Danubianu - Teoria si implementarea bazelor de date 17
Consultarea datelor din mai multe tabeleReuniunea inregistrarilor
Presupunem ca avem doua tabele, cu structuri identice, cu date referitoare la angajati, employees1 si employees2. Fiecare din acestea contin date corespunzatoare angajatilor din grupe diferite de departamente. Dacase doreste o situatie a tutiror angajatilor se va face o reuniune dupa modelul:
SELECT *FROM employees1
UNIONSELECT *FROM employees22
SQL elimină automat dublurile, deci nu este necesară utilizarea clauzei DISTINCT.
M. Danubianu - Teoria si implementarea bazelor de date 18
Consultarea datelor din mai multe tabele Diferenţa
Să se găsească acele departamente pentru care nu exista nici un angajat
M. Danubianu - Teoria si implementarea bazelor de date 19
Consultarea datelor din mai multe tabele Gasirea inregistrarilor comune
SELECT *
FROM employees1INTERSECT
SELECT *FROM employees2
M. Danubianu - Teoria si implementarea bazelor de date 20
Produsul cartezian
SELECT *
FROM employees, departments
M. Danubianu - Teoria si implementarea bazelor de date 21
Consultarea datelor din mai multe tabele Joncţiunea în SQL
trebuie ţinut cont de faptul că joncţiunea este o combinaţie de produs cartezian şi selecţie.
Care este numele departamentelor in care exista angajati?
M. Danubianu - Teoria si implementarea bazelor de date 22
Care este numele managerului angajatului cu identificatorul 102?
Deoarece toate datele necesare se gasesc in tabelul employees se
impune o legatura …???
M. Danubianu - Teoria si implementarea bazelor de date 23
Subconsultări
posibilitatea imbricării a două sau mai multe fraze SELECT astfel încât pot fi formulate interogări cu mare grad de complexitate
Forma generală a unei subconsultări: SELECT listă_câmpuri1
FROM Listă_tabele1WHERE câmp1 operator
(SELECT listă_câmpuri2FROM Listă_tabele2WHERE condiţii)
unde operator poate fi:IN sau NOT IN EXIST sau NOT EXISTCONTAINS, ALL, ANY etc.
Subconsultări : corelate sau necorelate
M. Danubianu - Teoria si implementarea bazelor de date 24
Operatorul IN (NOT IN)
Care sunt angajatii care lucreaza in acelasi departament cu angajatul cu numele ‘King’?
M. Danubianu - Teoria si implementarea bazelor de date 25
Care sunt angajatii care lucreaza in alte departamente decat angajatii cu numele ‘King’?
M. Danubianu - Teoria si implementarea bazelor de date 26
Operatorii ALL, SOME şi ANY
ALL, SOME şi ANY permit utilizarea unui predicat de comparaţie care este aplicat rezultatului unei subconsultări.
predicat de comparaţie -un predicat care conţine unul din operatorii: =,>=,<=,<,> sau .
Care este numele si departamentul angajatilor al caror salariu este mai mare decat salariile tuturor angajatilor din departamentul 100.
M. Danubianu - Teoria si implementarea bazelor de date 27
Funcţiile predefinite: COUNT, SUM, AVG, MAX, MIN
Formatul general al unei fraze SELECT ce conţine funcţii predefinite:
SELECT fcţ_pred1, fcţ_pred2,..fcţ_predn
FROM listă de tabele
WHERE condiţii
In lipsa opţiunii GROUP BY, dacă în clauza SELECT este prezentă o
funcţie predefinită, tabelul rezultat va conţine o singură linie.
M. Danubianu - Teoria si implementarea bazelor de date 28
Funcţia COUNT
Contorizează valorile unei coloane - numără, într-o relaţie câte valori diferite de null are coloana specificată.
Câte comisioane se platesc?
M. Danubianu - Teoria si implementarea bazelor de date 29
Funcţia COUNT Câţi angajati are firma?
se poate utiliza ca argument în locul numelui unei coloane semnul *;
se va determina câte linii are tabelul la care se aplică funcţia respectivă
M. Danubianu - Teoria si implementarea bazelor de date 30
Funcţia SUM Calculează suma valorilor unei coloane. Care este valoarea totală a salariilor platite in
departamentul 90?
M. Danubianu - Teoria si implementarea bazelor de date 31
Funcţia AVG
Calculează media aritmetică a unei coloane într-un tabel oarecare
Care este valoarea medie a salariilor platite in firma?
M. Danubianu - Teoria si implementarea bazelor de date 32
Gruparea tuplurilor. Clauzele GROUP BY şi HAVING
GROUP BY permite formarea grupurilor de tupluri într-o relaţie pe baza valorilor comune ale unei coloane.
asocierea unei clauze HAVING la o clauză GROUP BY face posibilă selectarea anumitor grupe de tupluri care îndeplinesc un criteriu.
Formatul general al clauzei GROUP BY este:SELECT col1, col2,..coln
FROM tabelGROUP BY coloană de grupare
M. Danubianu - Teoria si implementarea bazelor de date 33
Gruparea tuplurilor. Clauzele GROUP BY şi HAVING
Care este totalul salariilor platite in fiecare departament?
tabelul rezultat va aveaun număr de linii egal cu numărul departamentelor.
M. Danubianu - Teoria si implementarea bazelor de date 34
Clauza HAVING
Permite introducerea unor restricţii care sunt aplicate grupurilor de
tupluri, deci nu tuplurilor individuale, aşa cum acţionează clauza
WHERE. Din tabelul rezultat sunt eliminate toate tuplurile care nu
satisfac condiţia dată.
Clauza HAVING lucrează împreună cu o clauză GROUP BY, fiind
practic o clauză WHERE aplicată acesteia. Formatul general este:
SELECT col1, col2,..coln
FROM tabel
GROUP BY coloană de regrupare
HAVING caract eristică de grup
M. Danubianu - Teoria si implementarea bazelor de date 35
Pentru salariile platite, interesează valoarea pe fiecare departament, numai dacă această valoare este mai mare de 20000.
M. Danubianu - Teoria si implementarea bazelor de date 36
Actualizarea datelor în SQL
implică trei acţiuni posibile : adăugarea de noi linii la cele existente într-un tabel ştergerea unor linii din tabel modificarea valorii unor atribute.
M. Danubianu - Teoria si implementarea bazelor de date 37
Adăugarea datelor în SQL - INSERT
INSERT INTO NumeTab [(NumeCâmp1 [, NumeCâmp2, ...])]VALUES (eExpr1 [, eExpr2, ...])
INSERT INTO NumeTab FROM ARRAY Nume | FROM MEMVAR
Comanda INSERT poate fi asociată cu o subinterogare, care să furnizeze valorile care trebuie adăugate prin copiere dintr-un alt tabel
INSERT INTO NumeTab1 [(NumeCâmp1 [, NumeCâmp2, ...])]SELECT [(NumeCâmp1 [, NumeCâmp2, ...])]FROM NumeTab2
WHERE conditii Subinterogarea se poate utiliza în locul unui nume de tabel în clauza INTO
a comenzii INSERT:
INSERT INTO (SELECT [(NumeCâmp1 [, NumeCâmp2, ...])]FROM NumeTab2)
VALUES (eExpr1 [, eExpr2, ...])
M. Danubianu - Teoria si implementarea bazelor de date 38
Adăugarea datelor în SQL – Exemplul 1
M. Danubianu - Teoria si implementarea bazelor de date 39
Adăugarea datelor în SQL – Exemplul 2
M. Danubianu - Teoria si implementarea bazelor de date 40
Adăugarea datelor în SQL – Exemplul 3
introducerea valorilor speciale
M. Danubianu - Teoria si implementarea bazelor de date 41
Adăugarea datelor în SQL – Exemplul 4
introducerea unei date calendaristice
M. Danubianu - Teoria si implementarea bazelor de date 42
Adăugarea datelor în SQL – Exemplul 5 Utilizarea subconsultarii pentru specificarea tabelului unde se face inserarea
M. Danubianu - Teoria si implementarea bazelor de date 43
Adăugarea datelor în SQL – Exemplul 6 Utilizarea valorilor implicite
M. Danubianu - Teoria si implementarea bazelor de date 44
Crearea unui script -1Presupune posibilitatea introducerii de la tastatura a valorilor ce se doresc inserate
M. Danubianu - Teoria si implementarea bazelor de date 45
Crearea unui script -2Ce se intampla daca se omite introducerea unei valori in campul job_title?
M. Danubianu - Teoria si implementarea bazelor de date 46
Crearea unui script -3utilizarea SQL Scratchpad
M. Danubianu - Teoria si implementarea bazelor de date 47
DELETE FROM [NumeBD!]NumeTab[WHERE CondFiltru1 [AND | OR CondFiltru2 ...]]
Sau în combinaţie cu subinterogari
DELETE FROM [NumeBD!]NumeTab[WHERE câmp operator
(SELECT câmpFROM NumeTabelWHERE condiţii)]
DELETE FROM facturi WHERE cod =
(SELECT cod FROM agenti WHERE nume = "ELCO S.A.");
Stergerea de linii din tabel - DELETE
M. Danubianu - Teoria si implementarea bazelor de date 48
Stergerea de linii din tabel - DELETE
M. Danubianu - Teoria si implementarea bazelor de date 49
Stergerea de linii din tabel - DELETE
M. Danubianu - Teoria si implementarea bazelor de date 50
Sunt variante SQL care, la crearea unui tabel, permit descrierea acţiunii care se va derula la ştergerea unei linii ( restricţionare sau stergere cascadată). DE CE???
Stergerea de linii din tabel - DELETE
M. Danubianu - Teoria si implementarea bazelor de date 51
UPDATE [NumeBD1!]NumeTabe1SET NumeCâmp1 = Expr1[, NumeCâmp2 = Expr2 ...]WHERE CondFiltru1 [AND | OR CondFiltru2 ...]]
Sau folosind subinterogările
UPDATE NumeTabe1 SET NumeCâmp1 = (SELECT NumeCâmp1
FROM NumeTabe1 WHERE condiţii), [NumeCâmp2 = (SELECT NumeCâmp2 FROM NumeTabe1 WHERE condiţii),]
WHERE conditii
Actualizarea valorilor câmpurilor - UPDATE
M. Danubianu - Teoria si implementarea bazelor de date 52
Actualizarea valorilor câmpurilor - UPDATE
M. Danubianu - Teoria si implementarea bazelor de date 53
Actualizarea valorilor câmpurilor - UPDATE
M. Danubianu - Teoria si implementarea bazelor de date 54
Vederi vedere este o relaţie virtuală- o relaţie care nu este de fapt de sine
stătătoare, ci este derivată, în mod dinamic din una sau mai multe relaţii de bază
în realitate, nu există în baza de date - este produsă la un moment dat la cererea unui anumit utilizator
relaţia de bază este o relaţie cu o anumită denumire, corespunzătoare unei entităţi din schema conceptuală, ale cărei tupluri sunt stocate fizic în baza de date.
vederea este rezultatul dinamic al uneia sau mai multor operaţii relaţionale, care acţionează asupra relaţiilor de bază pentru a realiza o altă relaţie
M. Danubianu - Teoria si implementarea bazelor de date 55
Vederile sunt dinamice furnizează un mecanism de securitate puternic şi flexibil
ascunderea unor părţi ale bazei de date faţă de anumiţi utilizatori,
permit utilizatorilor accesarea datelor într-un mod personalizat, conform cerinţelor lor şi
pot simplifica operaţiile complexe asupra relaţiilor de bază.
M. Danubianu - Teoria si implementarea bazelor de date 56
Reactualizarea vederilor…
…cu reflectarea corespunzătoare a acestei reactualizări în relaţiile de bază:
este permisă prin intermediul unei vederi definite prin utilizarea unei interogări simple, care implică o singură relaţie de bază şi conţine fie cheia primară fie cheia candidat a acesteia;
nu este permisă prin vederi care implică relaţii de bază multiple;
nu este permisă prin vederi care implică operaţii de acumulare sau de grupare.
M. Danubianu - Teoria si implementarea bazelor de date 57
Crearea vederilor
CREATE SQL VIEW [NumeVedere ] [REMOTE][CONNECTION NumeConexiune ][SHARE]| CONNECTION NumeSursaDate][AS SQL SELECT Statement]
M. Danubianu - Teoria si implementarea bazelor de date 58
Consultarea unei vederi
M. Danubianu - Teoria si implementarea bazelor de date 59
Eliminarea unei vederi
DROP VIEW NumeVedere [RESTRICT|CASCADE]