Documente Academic
Documente Profesional
Documente Cultură
curs
PROPRIETI
Este un limbaj neprocedural cu format liber care permite: crearea bazei de date relaionale structurarea relaiilor prin componenta sa de definire a datelor (DDL) efectuarea operaiilor elementare asupra BD (inserare, tergere, modificare a datelor) efectuarea interogrilor asupra BD, prin componenta de manipulare a datelor (DML) controlul tranzaciilor i al accesului la BD.
5/21/2010 Luminita SCRIPCARIU 3
IMPLEMENTRI SQL
Prima implementare comercial a unui SGBD relaional bazat pe SQL a fost realizat de corporaia ORACLE. Ulterior au aprut sute de produse de BD bazate pe SQL i dialecte ale acestuia (MySQL, PostgreSQL, MS SQL etc). SGBD relaionale: MS Access, Oracle, Ingres i altele.
5/21/2010 Luminita SCRIPCARIU 4
MBUNTIRI
definirea de noi componente precum standardul de acces la BD de la distan (RDA Remote Data Access) i sistemul de dicionare de resurse informaionale (IRDS Information Resource Dictionary System) suport pentru BD distribuite n reea, programarea orientat-obiect i acceptarea extensiilor definite de ctre utilizator.
5/21/2010 Luminita SCRIPCARIU 5
OBSERVAII
conine comenzi de definire i regsire a datelor (CREATE TABLE, SELECT TABLE, DELETE, INSERT etc.) nu conine instruciuni pentru controlul fluxului datelor (IF ... THEN ... ELSE, GO TO, DO etc.).
5/21/2010
Luminita SCRIPCARIU
OBSERVAII
Limbajul SQL folosete termenii de tabele, coloane i rnduri n locul celor de relaii, atribute i nregistrri. O instruciune SQL include cuvinte rezervate i cuvinte definite de utilizator, insensibile la formatul caracterelor (upper case, lower case). SQL este sensibil la formatul literelor (case sensitive) numai n cazul nregistrrilor din BD.
5/21/2010 Luminita SCRIPCARIU 7
Identificatorii SQL
lucreaz cu setul de caractere prestabilit de ISO: litere mari (A Z), litere mici (az), cifre (0 9), liniua de subliniere (_ underscore). Numele de identificatori sunt case sensitive i nu trebuie s depeasc lungimea maxim impus (tipic, 128 de caractere) ncep cu o liter i nu cu alt caracter (cifr, alt semn etc.) Nu conin spaii libere.
5/21/2010 Luminita SCRIPCARIU 11
NUMERIC [precizie [, scala]] DECIMAL sau DEC [precizie [, scala]] INTEGER sau INT SMALL INTEGER sau SMALLINT aproximativ: FLOAT [precizia] REAL DOUBLE PRECISSION
5/21/2010 Luminita SCRIPCARIU 13
OBSERVAII
Parametrii unui tip de date se scriu ntre paranteze rotunde dup cuvntul care l definete. Precizia se exprim ca numr de cifre din mantis (partea ntreag). Scala se exprim ca numr de cifre din exponent (numr de zecimale). Numrul de cifre din cmpul principal este separat prin virgul de numrul de zecimale prin care se exprim o valoare.
5/21/2010 Luminita SCRIPCARIU 14
data i ora
DATE TIME [precizie_or] [WITH TIME ZONE] TIMESTAMP [precizie_or] [WITH TIME ZONE] Interval INTERVAL{{cmp_de_start TO cmp_final} cmp_data_ora }
5/21/2010
Luminita SCRIPCARIU
15
OBSERVAIE
Cmpurile din instruciunea INTERVAL sunt de forma: YEAR|MONTH|DAY|HOUR|MINUTE [precizie]
Exemplu: Instruciunea SQL: INTERVAL YEAR(1) TO MONTH Semnific un interval de la 0 ani i 0 luni (timpul prezent) la 9 ani i 11 luni. Numrul de ani poate fi scris n acest caz cu o singur cifr.
5/21/2010 Luminita SCRIPCARIU 16
5/21/2010
Luminita SCRIPCARIU
17
FORMAT
CREATE TABLE nume_tabel {(nume_coloan tip_de_date [NOT NULL] [UNIQUE] [DEFAULT opiune_prestabilit] [CHECK (condiie)] [, ...] [PRIMARY KEY (list_de_coloane),] {[UNIQUE (list_de_coloane),] [,...]} {[FOREIGN KEY (list_de_coloane_chei_strine), REFERENCES nume_tabel_printe [(list_de_coloane_chei_candidat)], [MATCH { PARTIAL | FULL} [ON UPDATE aciune_referenial] [ON DELETE aciune_referenial]} {[CHECK (condiie)] [,]})}
5/21/2010 Luminita SCRIPCARIU 18
EXEMPLU
CREATE TABLE proprietati( cod_proprietate DEC(5,0) NOT NULL UNIQUE, zona VARCHAR(20) NOT NULL, tip VARCHAR(10) NOT NULL, pret INT, cod_agent DEC(3,0), cod_proprietar DEC(6,0) NOT NULL, PRIMARY KEY (cod_proprietate), FOREIGN KEY (cod_agent) REFERENCES agenti ON DELETE SET NULL ON UPDATE CASCADE, FOREIGN KEY (cod_proprietar) REFERENCES proprietari);
5/21/2010
Luminita SCRIPCARIU
19
FORMAT
ALTER TABLE nume_tabel [ADD [COLUMN] nume_coloan tip_de_date [NOT NULL] [UNIQUE] [DEFAULT opiune_prestabilit] [CHECK (condiie)] [DROP [COLUMN] nume_coloan [RESTRICT | CASCADE]] [ADD [CONSTRAINT [nume_constrngere]] definiie_constrngere] [DROP CONSTRAINT nume_constrngere [RESTRICT | CASCADE]] [ALTER [COLUMN] SET DEFAULT opiune_ prestabilit] [ALTER [COLUMN] DROP DEFAULT]
5/21/2010
Luminita SCRIPCARIU
20
Instruciunea DROP
Elimin articole din BD sau integral BD:
DROP ARTICOL nume_articol [RESTRICT|CASCADE]
Opiunea RESTRICT nu permite tergerea articolului dac de acesta depind alte date din BD. Opiunea CASCADE determin tergerea acelui articol din BD precum i a tuturor datelor care depindeau de acesta. Permite actualizarea structurii BD dup o perioad mai lung de timp sau atunci cnd se reproiecteaz aceasta.
5/21/2010 Luminita SCRIPCARIU 22
Indexul
Este o structur care ofer acces accelerat la nregistrrile din BD, pe baza valorilor dintr-una sau mai multe coloane ale unui tabel: CREATE [UNIQUE] INDEX nume_index ON nume_tabel (coloana [ASC|DESC] [, ])
5/21/2010
Luminita SCRIPCARIU
23
5/21/2010
Luminita SCRIPCARIU
24
5/21/2010
Luminita SCRIPCARIU
25
DOMENIUL
Mulimea nregistrrilor din BD asupra creia opereaz selecia. ALL (implicit) include toate nregistrrile care ndeplinesc condiiile impuse. DISTINCT elimin nregistrrile care au valori duplicate n cmpurile selectate (se va afia doar o apariie a datei multiple). DISTINCTROW elimin nregistrrile duplicate n ansamblul lor.
5/21/2010
Luminita SCRIPCARIU
27
Clauze
Clauza FROM precizeaz tabela, tabelele sau interogrile deja create din care fac parte cmpurile ce fac obiectul proieciei BD (,) Clauza WHERE precizeaz criteriul de selecie sub forma unei expresii. Clauza este opional i nu opereaz cu funcii totalizatoare. Clauza GROUP BY precizeaz cmpul sau cmpurile pe baza crora se va efectua gruparea nregistrrilor. Astfel, se pot executa funciile agregate descrise n lista de selecie pentru fiecare dintre grupurile de nregistrri.
5/21/2010 Luminita SCRIPCARIU 28
Clauze
Clauza ORDER BY precizeaz criteriul de ordonare a nregistrrilor selectate. Fiecare cmp precizat n Clauza ORDER BY constituie o cheie de sortare (sensul sortrii se precizeaz prin ASC (implicit) sau DESC) Clauza HAVING se refer la restricia aplicat cmpului de grupare. Clauza WHERE acioneaz nainte de gruparea nregistrrilor, n timp ce HAVING activeaz restricia dup gruparea acestora.
5/21/2010 Luminita SCRIPCARIU 29
OPERATORI SCALARI
operatorii aritmetici: *, /, +, operatorul de transformare a tipului de date: CAST(tip1 AS tip2) concatenarea de iruri: ||
5/21/2010
Luminita SCRIPCARIU
30
FUNCII SPECIFICE
funcia de lungime: BIT_LENGTH, CHAR_LENGTH identificarea utilizatorului curent:USER identificarea sesiunii: SESSION_USER identificarea sistemului: SYSTEM_USER scrierea cu litere mici: LOWER scrierea cu majuscule: UPPER data sau timpul curent: CURRENT_TIME, CURRENT_DATE, CURRENT_TIMESTAMP
5/21/2010 Luminita SCRIPCARIU 31
FUNCII DE GRUP
se aplic pe o coloan ntreag i genereaz o singur valoare:
COUNT SUM AVG MIN MAX numrare sumare calculul valorii medii deducerea valorii minime deducerea valorii maxime.
5/21/2010
Luminita SCRIPCARIU
32
Clauza WHERE
poate fi urmat de unul din urmtoarele 5 predicate:
Compararea valorilor folosind operatorii de comparare (=, <, >, <=, >=, <>, !=) i/sau operatorii logici (AND, OR, NOT); Testarea domeniului de valori al unei expresii (BETWEEN/NOT BETWEEN); Testarea apartenenei la o mulime de valori (IN/ NOT IN); Corespondena la un anumit model (LIKE/NOT LIKE); Testarea condiiei de null (IS NULL/IS NOT NULL).
5/21/2010 Luminita SCRIPCARIU 33
LIKE/NOT LIKE
simbolul procent (%) reprezint un ir de zerouri sau de mai multe caractere caracterul liniu de subliniere ( _ ) reprezint un caracter singular. Exemplu: WHERE nume=A% selecteaz toate nregistrrile al cror nume ncep cu litera A.
5/21/2010 Luminita SCRIPCARIU 34
Clauza ORDER BY
poate ordona nregistrrile cresctor sau descresctor, alfabetic sau numeric, pe baza uneia sau a mai multor coloane. Prima coloan constituie cheia major de sortare urmtoarele sunt chei minore de sortare.
5/21/2010
Luminita SCRIPCARIU
35
Exemplu
SELECT proprietate_proprietar_agent.localitate, proprietate_proprietar_agent.tip, proprietate_proprietar_agent.suprafata, proprietate_proprietar_agent.agent.nume, proprietate_proprietar_agent.agent.prenume FROM proprietate_proprietar_agent WHERE ((proprietate_proprietar_agent.localitate)="iasi");
5/21/2010 Luminita SCRIPCARIU 36
Compunerea (Join)
Se utilizeaz n clauza WHERE (pentru selecia nregistrrilor) asociat cu o egalitate a valorilor n cmpurile de legtur. Exemplu: SELECT A.a2,A.a3, B.b2 WHERE A.a1=B.a1;
Tabela A a1 a2 a3 a4 a5 a6 Tabela B b1 b2 b3 b4 b5 a1
5/21/2010
Luminita SCRIPCARIU
37
INNER JOIN sau echivalent (echicompunere) este aceea n care liniile unui tabel sunt combinate cu liniile altui tabel, rezultnd un numr total de linii egal cu produsul numrului de linii din fiecare tabel (cazul 1 din Join Properties). LEFT OUTER JOIN (1 n) include toate nregistrrile din tabela A (cardinalitate 1) i numai acele nregistrri din tabela B (cardinalitate n) pentru care valorile atributelor cheie (a1) sunt a1 egale (cazul 2 din Join Properties). RIGHT OUTER JOIN (1 n) include toate nregistrrile din tabela B (cardinalitate n) i numai acele nregistrri din tabela A (cardinalitate 1) pentru care valorile atributelor cheie (a1) sunt a1 egale (cazul 3 din Join Properties).
5/21/2010 Luminita SCRIPCARIU 38
Exemplu
SELECT produs.id_produs, produs.denumire, achizitii.data_ach, Round([Pret_Nou]*0.8) AS [Pret redus] FROM (produs INNER JOIN achizitii ON produs.id_produs = achizitii.id_produs) INNER JOIN preturi_noi ON produs.id_produs = preturi_noi.id_produs WHERE (((achizitii.data_ach)<#2/1/2010#));
5/21/2010 Luminita SCRIPCARIU 39
INSTRUCIUNEA INSERT
INSERT INTO nume_tabel [(list_de_coloane)] VALUES (list_de_valori); INSERT INTO nume_tabel [(list_de_coloane)] SELECT ;
5/21/2010
Luminita SCRIPCARIU
40
EXEMPLU
INSERT INTO agenti (nume, prenume, cnp, filiala) VALUES (popescu, marius, 1900102111111, iasi);
5/21/2010
Luminita SCRIPCARIU
41
INSTRUCIUNEA UPDATE
UPDATE nume_tabel SET coloana_1=valoare_1[,coloana_2=valoare_2 ] [WHERE condiie]; exemplu: UPDATE agenti SET salariu = salariu*1,05 WHERE vechime >= 3;
5/21/2010 Luminita SCRIPCARIU 42
INSTRUCIUNEA DELETE
5/21/2010
Luminita SCRIPCARIU
43