curs 2_3

59
M. Danubianu - Teoria si implementarea bazelor de date CURS 2_3 SQL

Upload: cosima

Post on 23-Jan-2016

27 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: CURS 2_3

M. Danubianu - Teoria si implementarea bazelor de date

CURS 2_3

SQL

Page 2: CURS 2_3

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.

Page 3: CURS 2_3

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..)

Page 4: CURS 2_3

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

Page 5: CURS 2_3

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.

Page 6: CURS 2_3

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ă

Page 7: CURS 2_3

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:

Page 8: CURS 2_3

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).

Page 9: CURS 2_3

M. Danubianu - Teoria si implementarea bazelor de date 9

Interogări în SQL

Page 10: CURS 2_3

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’

Page 11: CURS 2_3

M. Danubianu - Teoria si implementarea bazelor de date 11

Care sunt angajatii subordonati managerului cu identificatorul 100 cu salarii mai mari de 2500?

Page 12: CURS 2_3

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

Page 13: CURS 2_3

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’?

Page 14: CURS 2_3

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’?

Page 15: CURS 2_3

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ă.

Page 16: CURS 2_3

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.

Page 17: CURS 2_3

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.

Page 18: CURS 2_3

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

Page 19: CURS 2_3

M. Danubianu - Teoria si implementarea bazelor de date 19

Consultarea datelor din mai multe tabele Gasirea inregistrarilor comune

SELECT *

FROM employees1INTERSECT

SELECT *FROM employees2

Page 20: CURS 2_3

M. Danubianu - Teoria si implementarea bazelor de date 20

Produsul cartezian

SELECT *

FROM employees, departments

Page 21: CURS 2_3

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?

Page 22: CURS 2_3

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 …???

Page 23: CURS 2_3

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

Page 24: CURS 2_3

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’?

Page 25: CURS 2_3

M. Danubianu - Teoria si implementarea bazelor de date 25

Care sunt angajatii care lucreaza in alte departamente decat angajatii cu numele ‘King’?

Page 26: CURS 2_3

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.

Page 27: CURS 2_3

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.

Page 28: CURS 2_3

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?

Page 29: CURS 2_3

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ă

Page 30: CURS 2_3

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?

Page 31: CURS 2_3

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?

Page 32: CURS 2_3

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

Page 33: CURS 2_3

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.

Page 34: CURS 2_3

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

Page 35: CURS 2_3

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.

Page 36: CURS 2_3

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.

Page 37: CURS 2_3

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, ...])

Page 38: CURS 2_3

M. Danubianu - Teoria si implementarea bazelor de date 38

Adăugarea datelor în SQL – Exemplul 1

Page 39: CURS 2_3

M. Danubianu - Teoria si implementarea bazelor de date 39

Adăugarea datelor în SQL – Exemplul 2

Page 40: CURS 2_3

M. Danubianu - Teoria si implementarea bazelor de date 40

Adăugarea datelor în SQL – Exemplul 3

introducerea valorilor speciale

Page 41: CURS 2_3

M. Danubianu - Teoria si implementarea bazelor de date 41

Adăugarea datelor în SQL – Exemplul 4

introducerea unei date calendaristice

Page 42: CURS 2_3

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

Page 43: CURS 2_3

M. Danubianu - Teoria si implementarea bazelor de date 43

Adăugarea datelor în SQL – Exemplul 6 Utilizarea valorilor implicite

Page 44: CURS 2_3

M. Danubianu - Teoria si implementarea bazelor de date 44

Crearea unui script -1Presupune posibilitatea introducerii de la tastatura a valorilor ce se doresc inserate

Page 45: CURS 2_3

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?

Page 46: CURS 2_3

M. Danubianu - Teoria si implementarea bazelor de date 46

Crearea unui script -3utilizarea SQL Scratchpad

Page 47: CURS 2_3

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

Page 48: CURS 2_3

M. Danubianu - Teoria si implementarea bazelor de date 48

Stergerea de linii din tabel - DELETE

Page 49: CURS 2_3

M. Danubianu - Teoria si implementarea bazelor de date 49

Stergerea de linii din tabel - DELETE

Page 50: CURS 2_3

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

Page 51: CURS 2_3

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

Page 52: CURS 2_3

M. Danubianu - Teoria si implementarea bazelor de date 52

Actualizarea valorilor câmpurilor - UPDATE

Page 53: CURS 2_3

M. Danubianu - Teoria si implementarea bazelor de date 53

Actualizarea valorilor câmpurilor - UPDATE

Page 54: CURS 2_3

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

Page 55: CURS 2_3

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ă.

Page 56: CURS 2_3

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.

Page 57: CURS 2_3

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]

Page 58: CURS 2_3

M. Danubianu - Teoria si implementarea bazelor de date 58

Consultarea unei vederi

Page 59: CURS 2_3

M. Danubianu - Teoria si implementarea bazelor de date 59

Eliminarea unei vederi

DROP VIEW NumeVedere [RESTRICT|CASCADE]