Sunteți pe pagina 1din 16

Cursul #1

Cursul #1

Definire SGBD Termenul de baz de date (database) reprezint o colecie de informaii corelate, relaiile logice dintre aceste informaii i tehnicile de prelucrare corespunztoare (cutare, sortare, tergere, inserare, modificare, etc.). Sistemul de gestiune a bazelor de date S.G.B.D. (Database Management System - DBMS) reprezint sistemul de programe care permite accesarea bazei de date de ctre utilizatori , accesare ce permite realizarea de operaii asupra bazei de date.

1. SQL(Structured Query Language)


SQL(Structured Query Language) este limbajul de baze de date cel mai frecvent utilizat iar cele mai utilizate sunt standardele SQL92(DBase, FoxPro, MSAcces, Paradox, etc) i SQL2003(PostgreSQL OpenSource, Oracle, MS-SQL, etc) . Tipurile de baze de date vor fi detaliate n cursul Arhitecturi SGBD. Limbajul SQL este case insensitive (nu ine cont de litere mari i litere mici), ns pentru anumite denumiri pot exista reguli specifice fiecrei baze de date. 1-1 TABELE (fr legturi ntre ele) 1-1-1 Definire tabele Tabelele sunt entiti logice de reprezentare a informaiei stocate asemntoare foilor de calcul tabelare. Pentru bazele de date avansate ele nu au o coresponden fizic cu un anumit fiier. Coloanele dintr-un tabel corespund cmpurilor (fields) din cadrul bazelor de date iar rndurile din tabel corespund nregistrrilor (records). Crearea unei baze de date ncepe cu definirea i crearea tabelelor necesare. 1-1-2 Tipuri de date predefinite, frecvent utilizate
TIPURI DE DATE FRECVENT UTILIZATE Baze de date ce au la baz SQL92 bigint boolean bytes[n] character(n) boolean bytea character varying [ (n) ] character [ (n) ] date date double precision inet integer integer macaddr money float(p,s) money numeric [ (p, s) ] real smallint autoinc smallint serial bigserial text time timestamp time [ (p) ] timestamp [ (p) ] xml decimal [ (p, s) ] float4 int2 serial4 serial8 int, int4 float8 varchar [ (n) ] char [ (n) ] Ex: PostgreSQL Ex:Alias pgSQL int8 bool Descriere

ntreg, cu semn pe 8 octei (-9223372036854775808 -> 9223372036854775807) logic (True sau False) stocare binar (utilizat inclusiv pentru stocarea imaginilor n diverse formate sau a metafiierelor) ir cu maxim n caractere ir cu exact n caractere calendar date (year, month, day) real, precizie 15 dubl IPv4 sau IPv6 adres gazd (host address) ntreg, cu semn pe 4 octei(-2147483648 -> +2147483647) adres MAC currency (moned) numeric cu precizie prestabilit real, precizie simpl intreg pe 2 octei (-32768 -> +32767 ) autoincrementare, intreg 4 octei autoincrementare, intreg 8 octei ir de caractere cu lungime variabil timp (ore,minute,secunde, ms) dat i timp mpreun Date format XML

Liviu erbnescu 2008-2009

pag. 1/16

Cursul #1

1-1-3 Creare tabele


Ex: CREATE TABLE vremea(oras varchar(80),temp_min int,temp_max int,precipitatii real,data date); CREATE TABLE vremea2(oras varchar(80) NOT NULL,temp_min int,temp_max int CHECK(temp_max<50) ,precipitatii real,data date PRIMARY KEY); CREATE [TEMPORARY|TEMP] TABLE table_name ([{ column_name data_type [ column_constraint [ ... ] ]}])

Sintaxa (simplificat):

Not: parantezele drepte din expresie indic o expresie opional iar acoladele o secven ce se repet i este separat prin virgul. De asemenea simbolul | semnific sau. Iar column_constraint [ ... ] este :
[ CONSTRAINT constraint_name ]{NOT NULL|NULL|UNIQUE index_parameters| PRIMARY KEY index_parameters | CHECK ( expression )}

unde: PRIMARY KEY reprezint cheia primar de ordonare(cmpul sau cmpurile dup care se face ordonarea) NOT NULL semnific faptul c nu se accept valori vide (fr date) pentru cmpul respectiv CHECK permite verificri suplimentare (de exemplu: temp_max<50) Not: Cmpul sau cmpurile care constituie cheia primar nu pot avea valori NULL

1-1-4 Stergere tabele Ex: DROP vremea Sintaxa: 1-1-5 Creare indecsi

DROP TABLE tablename

Tabelele pot fi indexate n scopul obinerii unor date ordonate dup unul sau mai multe criterii (de obicei se ordoneaz dup unul sau mai multe cmpuri). Indexarea NU schimb ordinea fizic a nregistrrilor. Prin definirea indecsilor se creaz automat tabele de coresponden dintre ordinea fizic a nregistrrilor i cea logic (corespunztoare ordonrii). simpli, ex: CREATE INDEX indexptrVremea ON vremea(data)

multipli, CREATE ex: pariali, ex: CREATE

INDEX indexptrVremea2 ON vremea(data,oras) INDEX indexptrVremea3 ON vremea(data,oras) WHERE (data<'2.1.2008')

Ordonarea dat de indeci poate fi cresctoare (ASC implicit) sau descresctoare (DESC) n exemplul dat, cmpul data va fi ordonat cresctor iar cmpul orasul va fi ordonat descresctor
CREATE INDEX indexptrVremea4 ON vremea(data, oras DESC)

Sintaxa (simplificat): unde:


CREATE[UNIQUE]INDEX name ON table(column[ASC|DESC ] [ NULLS { FIRST | LAST } ]) [WHERE predicate]

ASC / DESC semnific tipul de ordonare ascendent/descendent ; NULL FIRST valorile NULL (vide) sunt puse la nceput iar (implicit pentru ASC); NULL LAST valorile NULL (vide) sunt puse la sfrit (implicit pentru DESC).

1-1-5 Stergere indecsi


DROP indexptrVremea Liviu erbnescu 2008-2009 DROP INDEX [ IF EXISTS ] name pag. 2/16

Cursul #1

Ex:

Sintaxa (simplificat):

Principalii operatori SQL (preceden descresctoare)


Operator/ Element . ^ * / % + IS IS NULL NOT NULL BETWEEN LIKE ILIKE < > <> = NOT AND OR Descriere separator nume tabel nume cmp minus (operator unar) la puterea ... nmulire mprire Rest modulo adunare scdere IS TRUE, IS FALSE, IS NULL test pentru valoarea NULLl test pentru valoarea NOTNULL ntre .... corespunde cu masca .... nu corespunde cu masca .... mai mic mai mare diferit egal Negaie logic I logic SAU logic SELECT * FROM vremea1 WHERE oras LIKE '_b%'

Ex. expresie LIKE Rezultat 'abcd' LIKE 'abcd' true 'abcd' LIKE 'a%' true 'abcd' LIKE '_b__' true 'abcd' LIKE 'abc' false 'abcd' LIKE '_b%' true 'abcd' LIKE '__b%' false
Nota:n loc de 'abcd' va fi denum irea cm pului

1-2 INTEROGAREA BAZEI DE DATE (cazul unui singur tabel) 1-2-1 PRELUAREA DATELOR DIN TABEL Preluarea datelor din tabel (interogarea bazei de date) se realizeaz prin utilizarea instruciunii SELECT. Not: Nu conteaz dac codul SQL este scris pe un singur rand sau pe mai multe rnuri i nici dac ntre cuvinte exist un spaiu sau mai multe. Se recomand scriere astfel nct codul s se citeasc ct mai uor. Ex: preia ntregul tabel vremea SELECT * FROM vremea ( * specific preluarea tuturor cmpurilor )

preia doar cmpurile specificate n interogare

SELECT oras, data FROM vremea

preia numai ce ndeplinete condiiilor din cadrul WHERE (condiii la nivel de nregistrare) ordoneaz date descresctor (ex:data) i cresctor (ex; oras)
SELECT oras, data, precipitatii FROM vremea WHERE((temp_min>=0)AND(temp_max<10))OR(precipitatii>0) ORDER BY data DESC, oras

grupeaz datele dup anumite cmpuri n vederea realizrii anumitor operaii (ex. calc. mediei temp. min.) SELECT oras, avg(temp_min) FROM vremea aplic condiii la nivel de grup
Liviu erbnescu 2008-2009

GROUP BY oras

SELECT oras, avg(temp_min) FROM vremea GROUP BY oras HAVING avg(temp_min)>5 pag. 3/16

Cursul #1 (ex: doar orasele cu media temp. min >5)

aplic condiii/restricii att la nivel de grup ct i la nivel de nregistrare


SELECT oras, avg(temp_min) WHERE data > '20.11.2007' FROM vremea GROUP BY oras HAVING avg(temp_min)>5

Not: Toate cmpurile din cadrul SELECT trebuie s se regseasc n GROUP BY, altfel nu este posibil gruparea acestora efectueaz operaii ntre cmpuri i afieaz rezultatul ntr-un cmp nou
SELECT oras, temp_min, temp_max, (temp_min+temp_max)/2.0 AS media FROM vremea

ntoarce un numr maxim de nregistrri (ex: primele 10 obinute n urma ordonrii)

SELECT oras, data, precipitatii FROM vremea ORDER BY data,oras LIMIT 10

Sintaxa (simplificat):

SELECT [ ALL | DISTINCT ] * | expression [ AS output_name ] [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY expression [, ...] ] [ HAVING condition [, ...] ] [ ORDER BY expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ]] [ LIMIT { count | ALL } ]

1-2-2 Funcii ce pot fi aplicate asupra cmpurilor n cadrul SELECT (selecie)


Funcia
avg(expresie) count(*) count(expresie) max(expresie) min(expresie) sum(expresie)

Descriere
Media aritmetic a expresiei Numrul de nregistrri Numrul de nregistrri pentru care valoarea expresiei nu este nul Valoarea maxim pentru expresie Valoarea minimm pentru expresie Suma expresiei

Not: (espresie) poate fi un cmp sau rezultatul unor operaii aplicate mai multor cmpuri

Liviu erbnescu 2008-2009

pag. 4/16

Cursul #2
Cursul #2

1-3 POPULAREA BAZEI DE DATE


Popularea bazei de date cu nregistrri noi se poate realiza n dou moduri: Prin utilizarea cuvntului cheie INSERT Prin utilizarea cuvntului cheie COPY 1-3-1 Adugarea de nregistrri ( INSERT ) 1-3-1 -1 Adugarea unei singure nregistrri Ex
INSERT INTO vremea VALUES (Bacau, -20, 42, 0.25, 30.12.2007);

n acest caz, tipul i ordinea valorilor introduse trebuie s corespund cu cea din CREATE TABLE Exemplul de mai sus se mai poate scrie: Ex:
INSERT INTO vremea(oras,temp_min,temp_max,precipitatii,data) VALUES (Bacau, -20, 42, 0.25, 30.12.2007);

n acest caz, tipul i ordinea valorilor introduse n vremea() trebuie s corespund cu cea din VALUES() Se pot aduga doar anumite cmpuri din tabel (se adaug obligatoriu cmpurile din cheia primar excepie fac cmpurile de tip autoincrementare ) Ex:
INSERT INTO vremea(oras,precipitatii,data) VALUES (Bacau, 0.25, 30.12.2007); INSERT INTO vremea(oras,precipitatii,data) VALUES (Bacau, NULL, 30.12.2007);

1-3-1 -2 Adugarea mai multor nregistrri, explicit


INSERT INTO vremea(oras,precipitatii,data) VALUES (Bacau, 0.25, 30.12.2007), (Iasi, NULL, 31.12.2007), (Caracal, 0.11, 29.12.2007);

1-3-1 -3 Adugarea mai multor nregistrri, dintr-un alt tabel Presupunem c exist un alt tabel denumit vremea2 cu o structur asemntoare cu primul tabel (vreamea) Ex:
INSERT INTO vremea(oras,temp_min,temp_max,precipitatii,data) SELECT oras,temp_min,temp_max,precipitatii,data FROM vremea2 WHERE data > '20.11.2007';

n cazul n care cele dou tabele au aceeai ordine i aceleai tipuri de date se poate scrie Ex: sau Ex:
INSERT INTO vremea SELECT * FROM vremea2 WHERE data > '20.11.2007'; INSERT INTO vremea(oras,temp_min,temp_max,precipitatii,data) SELECT * FROM vremea2 WHERE data > '20.11.2007';

Sintaxa simplificat:
INSERT INTO table [ ( column [, ...] ) ] { DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }

Liviu erbnescu 2008-2009

pag. 5/16

Cursul #2 1-3-2 Copierea datelor n tabel utiliznd comada COPY (importul datelor) Se pot copia fiiere ntregi cu date ntr-un tabel. Aceste fiiere, de regul, sunt fiiere format CSV (commaseparated values ) - fiiere text avnd valorile separate prin virgul, iar valorile ce conin caracterul , sunt scrise ntre ghilimele. Ex:
COPY vremea FROM C:/test/tempvremea.csv WITH csv;

n acest exemplu tabelul vremea este populat cu datele din fiierul tempvremea.csv. Sintaxa simplificat:
COPY tablename [ ( column [, ...] ) ] FROM filename [[ WITH ] [ DELIMITER [ AS ] delimiter ] [ NULL [ AS ] null string ] [ CSV [ HEADER ] [ QUOTE [ AS ] quote ]

unde:

DELIMITER specific un alt delimitator ntre valorile din fiierul CSV (implicit fiind virgula) NULL specific sirul ce reprezint valoarea NULL (implicit nu se scrie nimic adic dup virgul urmeaz tot virgul) CSV specific faptul c este vorba de un fiier format CSV (pot exista transferuri i cu fiiere binare sau alte fiiere text aceste cazuri nu sunt tratate n prezentul curs) HEADER specific dac primul rnd din cadrul fiierului format CSV este reprezentat de numele coloanelor/ cmpurilor QUOTE specific caracterele ntre care sunt puse valorile ce conin i caracterul separator (implicit caracterul ).

De obicei, aceast comand este utilizat la preluarea iniial a datelor, date existente n alte baze de date sau n fiiere de tip XLS / text. Comanda COPY adaug noile date la cele vechi. De asemenea, n cursurile urmtoare se va detalia utilizarea comenzii COPY pentru exportul datelor n format CSV. 1-3-3 tergerea nregistrrilor dintr-un tabel Ex: Ex: unde

DELETE FROM vremea ;

terge toate nregistrrile din tabelul vremea. terge toate nregistrrile anterioare datei specificate

DELETE FROM vremea WHERE data < '20.11.2007';

Sintaxa simplificat:

DELETE FROM [ ONLY ] table [ [ AS ] alias ] [ USING usinglist ][ WHERE condition ]

ONLY este utilizat n cazul tabelelor ierarhizate pentru a nu terge i nregistrrile din tabelele copil ce depind de tabelul respectiv USING specific alte tabele utilizate n condiia WHERE
TABLE municipii (denumire_oras character varying(80) NOT NULL, populatie integer, suprafata numeric)

Ex: presupunem existena unui nou tabel municipii Ex: CREATE

i tergem toate nregistrrile din vremea care apar i n tabelul municipii Ex:
DELETE FROM vremea USING municipii WHERE vremea.oras=municipii.denumire_oras

Liviu erbnescu 2008-2009

pag. 6/16

Cursul #2 1-3-4 Actualizarea datelor dintr-un tabel Comanda UPDATE actualizeaz valorile din tabelul dat, pentru nregistrrile rezultate n urma aplicrii condiiei din cadrul WHERE, cu valorile i pentru cmpurile explicitate n seciunea SET Ex:
UPDATE vremea SET temp_min = temp_min-1, temp_max = temp_min+20, precipitatii = 0 WHERE (oras = 'Iasi') AND (data > '1.07.2007') AND (data < '31.08.2007');

Sunt modificate doar valorile cmpurilor date de SET pentru nregistrrile date de WHERE Sintaxa simplificat: unde:

UPDATE [ ONLY ] table [ [ AS ] alias ] SET { column = { expression | DEFAULT } } [, ...] [ FROM fromlist ] [ WHERE condition ]

ONLY este utilizat n cazul tabelelor ierarhizate pentru a nu modifica i nregistrrile din tabelele copil ce depind de tabelul respectiv FROM specific alte tabele utilizate n condiia WHERE DEFAULT preia valorile implicite sau NULL dac nu sunt specificate
UPDATE vremea SET temp_min = temp_min-1, temp_max = temp_min+20, precipitatii = DEFAULT FROM municipii WHERE(vremea.oras = municipii.denumire_oras )AND(data>'1.07.2007')AND(data<'31.08.2007');

Ex:

1-4 Combinarea interogrilor

a) Uniune

interogare#1 UNION [ALL] interogare#2

Implicit (DISTINCT), prin uniunea celor dou interogri, nregistrrile multiple, identice, vor aprea o singur dat. Prin utilizarea comenzii ALL acestea nu vor mai fi eliminate. Ex:
SELECT oras FROM vremea UNION SELECT denumire_oras FROM municipii interogare#1 UNION interogare#2 ... UNION interogare#n

Putem avea :

Denumirea cmpului rezultat va fi cea din prima interogare

b) Intersecie

interogare#1 INTERSECT [ALL] interogare#2

Prin utilizarea comenzii INTERSECT vor fi selectate doar nregistrrile comune din cadrul interogrilor
Ex:
SELECT oras FROM vremea INTERSECT SELECT denumire_oras FROM municipii

c) Diferen

interogare#1 EXCEPT [ALL] interogare#2

Prin utilizarea comenzii EXCEPT vor fi selectate doar nregistrrile care se regsesc n rezultatul primei interogri dar care nu se regsec i n rezultatul celei de a doua interogri. Ex:
SELECT oras FROM vremea EXCEPT SELECT denumire_oras FROM municipii

n toate cele trei cazuri cmpurile din cadrul seleciilor trebuie s fie de acelasi timp, altfel fiind necesar convertirea acestora la tipul respectiv prin utilizarea operatorului CAST.

Liviu erbnescu 2008-2009

pag. 7/16

Cursul #2

1-5 Operatorul CAST Este utilizat pentru convertirea tipului datelor Ex: Ex: Ex: Ex:
SELECT 3.21 AS "numeric" UNION SELECT 1; SELECT 1 AS "numeric" UNION SELECT CAST('3.14' AS numeric); SELECT 'Bacau' AS "varchar(20)" UNION SELECT CAST('3.14' AS varchar(20)); SELECT oras, cast(temp_min as varchar(10)) AS temp_min_ch FROM vremea

Sintaxa simplificat:

CAST ( expression AS type )

1-6 Expresii condiionale Sintaxa simplificat:


CASE WHEN condition THEN result [WHEN ...] [ELSE result] END

Ex:

SELECT (temp_min+temp_max)/2.0 as temp_medie, CASE WHEN ((temp_min+temp_max)/2.0 )<=0 THEN 'GER' WHEN (((temp_min+temp_max)/2.0 )>0)AND (((temp_min+temp_max)/2.0 )<15) THEN 'FRIG' WHEN ((temp_min+temp_max)/2.0 )>30 THEN 'CALD' ELSE 'NORMAL' END AS evaluare FROM vremea

Rezultatul expresiei este pus n noul cmp evaluare.

Liviu erbnescu 2008-2009

pag. 8/16

Cursul #3
Cursul #3

1-7 Tipuri de asocieri ntre nregistrrile unor tabele ntr-o baz de date relaional tabelele sunt corelate, pentru ca datele memorate n tabele diferite s poat fi asociate corect atunci cnd din baza de date se solicit anumite informaii. Se pot realiza asocieri datele din tabele dup criterii logice i de nrudire a datelor. Asocierile sunt posibile n faza de definire a structurii tabelelor. Cmpurile comune prin care se face corelarea sunt date de cheia primar pentru un tabel i respectiv chei externe pentru tabelele asociate. Orice tabel cuprine unul sau mai multe cmpuri, care intr n componena unei chei primare, utilizat pentru diferenierea unei nregistrri de celelalte. Asocierea a dou tabele (tabel printe i tabel copil) se face printr-un cmp special cu o trimitere la cheia primar a tabelului subordonat (tabelul copil).

O baz de date poate fi format din mai multe tabele avnd diferite legturi ntre acestea. Tipurile de legturi dintre dou tabele pot fi: asocierea( legtura ) de tip unu la unu (1:1) unei nregistrri dintr-un tabel i corespunde o singur nregistrare n cealalt tabel;

asocierea( legtura ) de tip unu la mai muli (1:M) unei nregistrri dintr-un tabel i corespund mai multe nregistrri n cealalt tabel; asocierea( legtura ) de tip muli la muli (M:N) mai multor nregistrri dintr-un tabel i corespund mai multe nregistrri n cealalt tabel.

Asocierea( legtura ) de tip unu la unu (1:1) nregistrrile din dou tabele se afl n asocierea unu la unu dac unei nregistrri dintr-un tabel i corespunde (sau nu) o singur nregistrare din cellalt tabel. Legatura dintre cele doua tabele se face pe baza cheilor primare. Acest tip de asociere este utilizat mai rar. Exist, totui, cazuri n care este necesar i util stabilirea unei astfel de relaii. Ex:
VREMEA oras temp_min temp_max precipitatii

1:1

MUNICIPII denumire_oras populatie suprafata

Asocierea( legtura ) de tip unu la mai muli (1:N) Dou tabele A i B se afl n asociere 1:N dac unei nregistrri din tabelul A i corespund mai multe nregistrri n tabelul B. Cheia primara din tabelul parinte(A) se adaug n tabelul copil(B) sub forma de cheie extern. Ex:
JUDET nume suprafata populatie

1:N

LOCALITATE denumire suprafata populatie pozitie_geogr.

Liviu erbnescu 2008-2009

pag. 9/16

Cursul #3
Cursul #3

Asocierea( legtura ) de tip muli la muli (M:N) mai multor nregistrri dintr-un tabel le corespund mai multe nregistrri n cealalt tabel. n vederea implementrii practice se adaug un tabel suplimentar care va contine cheile primare ale tabelelor initiale si campuri referitoare la asocierea dintre tabelele parinti. Cheia primar din tabela intermediar va fi o cheie compusa.
BIBLIOTECA cota titlu autor1 editura an_aparitie

AUTORI nume titlu editura an_aparitie

M:N

Crearea cheilor primare i a cheilor externe Cheia primar din tabel impune unicitatea valorilor cmpurilor din cadrul cheii primare pentru fiecare nregistrare. Specificarea cheii primare se face cu modificatorul PRIMARY KEY. Cheia strin sau extern se declar prin modificatorul FOREIGN KEY. Ex:
CREATE TABLE municipii( denumire_oras varchar(80) PRIMARY KEY, suprafata numeric, populatie int ); CREATE TABLE vremea( oras varchar(80) REFERENCES municipii(denumire_oras), temp_min int, temp_max int, precipitatii real, data date );

CREATE TABLE vremea2( oras varchar(80) PRIMARY KEY REFERENCES municipii(denumire_oras), temp_min int,temp_max int,precipitatii real,data date);

sau
CREATE TABLE vremea2 ( oras character varying(80) NOT NULL, temp_min integer, temp_max integer, precipitatii real, data date, CONSTRAINT vremea2_pkey PRIMARY KEY (oras), CONSTRAINT vremea2_oras_fkey FOREIGN KEY (oras) REFERENCES municipii (denumire_oras) );

Att pentru PRIMARY KEY ct i pentru FOREIGN KEY putem avea unul sau mai multe cmpuri, separate prin virgul. Asigurarea integritii refereniale Una din problemele importante ale unei baze de date este asigurarea consistenei i corelrii datelor. Pentru aceasta putem impune respectarea unei restricii la adugarea sau eliminarea nregistrrilor n tabelele corelate. Aplicarea acestor restricii ne d posibilitatea s asigurm o proprietate important a bazelor de date relaionale numit integritate referenial. Aceste restricii se refer la tergerea datelor, la inserarea/adugarea datelor sau modificarea lor.

Liviu erbnescu 2008-2009

pag. 10/16

Cursul #3 Operaiile de tergere i inserare au n clauza WHERE i cmpurile ce constituie cheile primare. De asemenea operaia de adugare impune specificarea obligatorie a cmpurilor din cheia primar, acestea fiind diferite de NULL i fiind unice n cadrul tabelului. 1-8 INTEROGAREA MAI MULTOR TABELE Atunci cnd n clauza FROM a unei comenzi SELECT apar mai multe tabele se realizeaz produsul cartezian al acestora. De aceea numrul de linii rezultat crete considerabil, fiind necesar restricionarea acestora cu o clauza WHERE. Atunci cnd este necesar obinerea de informaii din mai multe tabele se utilizeaz clauza JOIN. n acest fel liniile dintr-un tabel pot fi puse n legtura cu cele din alt tabel conform valorilor comune ale unor coloane. Clauza JOIN Clauza JOIN este utilizat pentru preluarea informaiilor din dou sau mai multe tabele n condiiile existenei unor legturi logice ntre anumite cmpuri din cadrrul tabelelor. JOIN ntoarce nregistrrile ce respect condiiile impuse de JOIN ntre tabele. JOIN nu se refer la intersecii ci la produse carteziene. Diversele tipuri de JOIN reduc produsele punnd diverse condiii pe una sau mai multe dintre mulimi. Presupunem c un tabel T1 cu N nregistrri i un tabel T2 cu M nregistrri. CROSS JOIN T1 CROSS JOIN T2 ntoarce pentru fiecare nregistrare din T1 toate nregistrrile din T2. Tabelul rezultat va avea NxM nregistrri Sintaxa:
T1 { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2 ON boolean_expression T1 { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2 USING ( join column list ) T1 NATURAL { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2

Clauzele INNER i OUTER sunt optionale. INNER este implicit, iar LEFT, RIGHT sau FULL implic OUTER. Clauza ON este asemntoare cu WHERE. Principalele forme ale clauzei JOIN:

INNER JOIN (jonciune intern de tip egalitate) - pentru fiecare rnd (nregistrare) R1 din tabelul T1, tabelul rezultat n urma aplicrii clauzei JOIN va avea o nregistrare din tabelul R2 care ndeplinete condiia de jonctiune cu R1.
SELECT v.oras,v.data FROM vremea v INNER JOIN municipii m ON v.oras=m.denumire_oras

Ex:

echivalent d.p.d.v. al scrierii cu:


SELECT v.oras,v.data FROM vremea v, municipii m WHERE v.oras=m.denumire_oras

LEFT OUTER JOIN (jonciune extern la stnga) Pentru nceput se realizeaz o jonciune intern. Apoi, fiecare rnd din T1 (T1 stnga, T2 dreapta) care nu satisface jonciunea cu T2 este adugat avnd valori NULL pentru cmpurile corespondente din T2. Tabelul rezultat va avea, cel putin rndurile din tabelul T1.
SELECT v.oras,v.data FROM vremea v LEFT OUTER JOIN municipii m ON v.oras=m.denumire_oras Liviu erbnescu 2008-2009 pag. 11/16

Cursul #3
RIGHT OUTER JOIN (jonciune extern la stnga) Pentru nceput se realizeaz o jonciune intern. Apoi, fiecare rnd din T2 (T1 stnga, T2 dreapta) care nu satisface jonciunea cu T1 este adugat avnd valori NULL pentru cmpurile corespondente din T1. Tabelul rezultat va avea, cel putin rndurile din tabelul T2.
SELECT v.oras,v.data,m.populatie FROM vremea1 v RIGHT OUTER JOIN municipii m ON v.oras=m.denumire_oras

FULL OUTER JOIN (jonciune total) Pentru nceput se realizeaz o jonciune intern. Apoi, fiecare rnd din T2 (T1 stnga, T2 dreapta) care nu satisface jonciunea cu T1 este adugat avnd valori NULL pentru cmpurile corespondente din T1. Apoi, fiecare rnd din T2 (T1 stnga, T2 dreapta) care nu satisface jonciunea cu T1 este adugat avnd valori NULL pentru cmpurile corespondente din T1.
SELECT v.oras,v.data,m.populatie FROM vremea1 v FULL OUTER JOIN municipii m ON v.oras=m.denumire_oras

De asemenea, se pot lega mai multe clauze de tipul ON ntr-o instruciune de tipul JOIN, utiliznd, de exemplu, sintaxa:
SELECT cmpuri FROM tabel1 INNER JOIN tabel2 ((ON tabel1.cmp1 operator de compara ie tabel2.cmp1 AND ON tabel1.cmp2 operator de compara ie tabel2.cmp2) OR ON tabel1.cmp3 operator de compara ie tabel2.cmp3);

O operaie de tip LEFT JOIN sau RIGHT JOIN se poate imbrica ntr-o operaie de tipul INNER JOIN, dar o operaie de tipul INNER JOIN nu se poate imbrica ntr-o operaie de tipul LEFT JOIN sau RIGHT JOIN.

Liviu erbnescu 2008-2009

pag. 12/16

Cursul #4
Cursul #4

1-9 Motenirea Acest concept a aprut n standardul SQL99 .i este specific sistemelor de baze de date orientate obiect. Ex:
CREATE TABLE municipii_1 (judet character varying(100) NOT NULL, oras character varying(80) NOT NULL, populatie integer, suprafata numeric); CREATE TABLE capitale_1 (tara character varying(100) NOT NULL, oras character varying(80) NOT NULL, populatie integer, suprafata numeric);

Cele dou formulri pot fi nlocuite prin:


CREATE TABLE orase (oras character varying(80) NOT NULL, populatie integer, suprafata numeric); CREATE TABLE municipii_2 (judet character varying(100) NOT NULL) INHERITS (orase); CREATE TABLE capitale_2 (tara character varying(100) NOT NULL) INHERITS (orase);

Un tabel poate s moteneasc unul sau mai multe tabele. n cazul n care se face referire la un anumit tabel din cadrul motenirii se utilizeaz clauza ONLY Aceasta clauz poate fi utilizat n combinaie cu : SELECT, UPDATE sau DELETE. Comanda Comanda Comanda
SELECT * FROM municipii_2

va afia cmpurile: oras, populatie, suprafata, judet. De va afia cmpurile: oras, populatie, suprafata, tara. De

asemenea va afia numai rndurile adugate cu comanda INSERT n cadrul tabelului municipii_2.
SELECT * FROM capitale_2

asemenea va afia numai rndurile adugate cu comanda INSERT n cadrul tabelului capitale_2.
SELECT * FROM orase

va afia cmpurile: oras, populatie, suprafata. De asemenea va afia

toate rndurile adugate cu comanda INSERT, indiferent dac a fost realizat n cadrul tabelului capitale_2, municipii_2 sau a tabelului orase. De asemenea, comanda SELECT INSERT n cadrul tabelului orase.
* ONLY FROM orase

va afia doar rndurile adugate cu comanda

De exemplu, dac n tabelul orase sunt adugate 5 nregistrri, n tabelul municipii_2 sunt adugate 4 nregistrri, iar n tabelul capitale_2 sunt adugate 2 nregistrri tabelul orase va conine 11 nregistrri, tabelul municipii_2 va conine 4 nregistrri iar tabelul capitale_2 va conine 2 nregistrri, tergerea unei nregistrri din tabelele municipii_2 sau capitale_2 , fr utilizarea clauzei ONLY, va duce i la tergerea nregistrrilor respective din tabelul orase. tergerea unei nregistrri din tabelul orase, fr utilizarea clauzei ONLY, va duce i la tergerea nregistrrilor corespondente - dac exist - din tabelele municipii_2 sau capitale_2 . Aceste observaii sunt valabile i n cazul modificrilor (utilizarea comenzii UPDATE).

Liviu erbnescu 2008-2009

pag. 13/16

Cursul #4 1-10 SUBINTEROGRI Subinterogrile permit crearea unui tabel n cadrul unei interogri. Acestea sunt scrise ntre paranteze rotunde i au un ALIAS. Subinterogri scalare - Acestea sunt interogrile care ntorc un singur rnd i o singur coloan. Ele se scriu ntre paranteze rotunde. n cazul n care suinterogarea ntoarce mai multe nregistrri vom avea eroare. n cazul n care nu ntoarce nici o nregistrare valoarea rezultat a interogrii este considerat NULL. Ex:
SELECT oras,(SELECT avg(precipitatii) FROM vremea WHERE capitale_2.oras=vremea.oras) AS media FROM capitale_2;

Expresii specifice subinterogrilor

EXISTS IN

EXISTS (subquery)

Intoarce true daca subinterogarea are ca rezultat cel puin o nregistrare, alfel ntoarce false.

expression IN (subquery)

caz n care subinterogarea ntoarce o singur coloan

Verific dac expresia se alfl n rezultatul subinterogrii sau


Row constructor IN (subquery)

caz n care subinterogare ntoarce acelai numr de coloane ca i


ROW(12,14,'TEST')

constructorul de nregistrare (row constructor) Obs: Constructorul de nregistrare formeaz o nregistrare utliznd cuvntul ROW, de ex: Ex:

SELECT ROW(12,14,'IASI')IN(SELECT temp_min,temp_max,oras FROM vremea) AS VERIFICA

NOT IN asemntoare cu IN dar cu rezultatul negat. ALL


expression ALL (subquery)

caz n care subinterogarea ntoarce o singur coloan

Verific dac expresia satisface condiia pentru fiecare nregistrare din subinterogare sau
Row constructor ALL (subquery)

caz n care subinterogare ntoarce acelai numr de coloane ca i

constructorul de nregistrare (row constructor) 1-11 Tipul CAST


CAST ( expression AS type )

Este utilizat pentru conversia tipurilor de date, n vederea evalurii unor expresii n care intr datele respective sau pentru adugarea acestora n tabele ce au un alt format de date. Ex:
SELECT oras, cast(temp_min as numeric),cast(precipitatii as integer) as PrecInt, cast(temp_max as varchar(15)) FROM vremea

Un caz aparte de cast este funcia to_date( test, text ) care realizeaz conversia din ir de caractere n .format de tip dat calendaristic. Ex:
INSERT INTO vremea(oras,data) VALUES('Titu', to_date('28.10.2008','dd.mm.yyyy'))

Liviu erbnescu 2008-2009

pag. 14/16

Cursul #5
Cursul #5

2.Arhitecturi SGBD
Clasificri SGBD Clasificare dupa modelul de date: Modelul de ierarhic de date - legturile dintre date sunt ordonate unic, accesul se face numai prin vrful ierarhiei, un subordonat nu poate avea dect un singur superior direct i nu se poate ajunge la el dect pe o singur cale; Modelul de date retea - datele sunt reprezentate ca ntr-o mulime de ierarhii, n care un membru al ei poate avea orici superiori, iar la un subordonat se poate ajunge pe mai multe ci; Modelul relational (aplicaii comerciale, volum de date mare si tipuri de date simple) - structura de baz a datelor este aceea de relaie tabel, limbajul SQL (Structured Query Language) este specializat n comenzi de manipulare la nivel de tabel; Modelul obiect-orientat (aplicaiilor tiintifice, multimedia)-Aceste modele sunt orientate pe reprezentarea semnificaiei datelor. Structura de baz folosit pentru reprezentarea datelor este cea de clas de obiecte definit prin abstractizare din entitatea fizic pe care o regsim n lumea real. Aici exist entiti simple i clase de entiti care se reprezint prin obiecte simple sau clase de obiecte, ordonate n ierarhii de clase i subclase. Acest tip de baz de date a aprut din necesitatea gestionrii obiectelor complexe: texte, grafice, hri, imagini, sunete (aplicaii multimedia) i a gestionrii obiectelor dinamice: programe, simulri Modelul obiect-relational Clasificare dupa numarul de utilizatori Sisteme mono-utilizator Sisteme multi-utilizator Clasificare dupa numarul de statii pe care este memorat baza de date: Baze de date centralizate ( toate datele (si SGBD) sunt memorate pe un singur host) Baze de date distribuite ( att datele ct i SGBD-ul sunt memorate pe mai multe host-uri, conectate printr-o retea de comunicaie) Arhitectura client-server: Server (back-end): SGBD-ul si baza de date Client (front-end): program (programe) de aplicatie Arhitectur local (fiiere comune mapate n interiorul reelei) pentru controlul accesului se folosesc fisiere system O baza de date trebuie s asigure: abstractizarea datelor (date unice), integrarea datelor (controlul corelaiei datelor), integritatea datelor (respectarea restriciile de integritate a datelor pe parcursul operaiilor SQL), securitatea datelor (controlul accesului la baza de date), partajarea datelor (datele pot fi accesate de mai muli utilizatori, eventual n acelai timp),

Un SGBD trebuie s asigure urmtoarele activiti: definirea i descrierea structurii bazei de date se realizeaz printr-un limbaj propriu, limbaj de definire a datelor (LDD); ncrcarea datelor n baza de date se realizeaz prin comenzi n limbaj propriu(limbaj de manipulare a datelor (LMD)); accesul la date se realizeaz prin comenzi specifice din limbajul de manipulare a datelor (SQL). Accesul la date se refer la operaiile de interogare i actualizare. Interogarea este complex i presupune vizualizarea, consultarea, editarea de situaii de ieire (rapoarte, liste, regsiri punctuale). Actualizarea presupune 3 operaiuni: adugare, modificare efectuate prin respectarea restriciilor de integritate ale BD i tergere; ntreinerea bazei de date se realizeaz prin utilitare proprii ale SGBD;
Liviu erbnescu 2008-2009 pag. 15/16

Cursul #5

securitatea datelor se refer la asigurarea confidenialitii datelor prin autorizarea i controlul accesului la date pe mai multe nivele, criptarea datelor.

Arhitectura PostgreSQL PostgreSQL utilizeaz un model client/server. O sesiune PostgreSQL const n mai multe procese: Un proces server, care gestioneaz fiierele bazei de date, accept conexiuni la bazele de date dinspre aplicaiile client, realizeaz actiunile cerute de client pe bazele de date. Serverul de base de date se numete postgres . Aplicaia client a utilizatorului care dorete sa execute operaii pe baza de date. Aplicaiile client pot fi foarte diverse: un client poate fi un utilitar linie de comand, o aplicaie grafic, un server web care acceseaz baza de date pentru a afia pagini de web sau un utilitar specializat de gestiune a bazelor de date. Unele aplicaii client sunt puse la dispoziie n distribuia PostgreSQL. Majoritatea sunt dezvoltate de utilizatori. Ca i n cazul altor aplicaii client/server, clientul si server-ul pot fi pe host-uri diferite. n acest caz ele comunic prin conexiuni TCP/IP. Serverul de PostgreSQL poate gestiona multiple conexiuni concurente de la clieni avnd chiar versiuni diferite pentru PostgreSQL. Pentru aceasta el pornete cte un nou proces pentru fiecare conexiune. Din acel punct, clientul si un proces al server-ului comunic far intervenia procesului iniial postgres. Astfel procesul principal al server-ului continu s atepte noi clieni. Modul de lucru al serverului PostgreSQL Postgresql foloseste un model client/server numit proces per-user. O sesiune Postgres consta din cooperarea urmatoarelor procese (programe): Un proces daemon de supervizare (postmaster), aplicatia frontend a userului (programul psql), si unul sau mai multe servere backend de baze de date (procesul postgres el insusi) Un singur proces postmaster conduce o colectie de baze de date pe o singura gazda. Aplicatiile frontend care doresc sa acceseze o baza de date printr-o instalare face apelul la librarie. Libraria trimite cererea userului prin retea la postmaster. Paii prin care trece o cerere SQL pentru a se obine un rezultat: 1.O conexiune dinspre o aplicaie la server-ul de PostgreSQL a fost stabilit. Clientul trimite o cerere ctre server i ateapt s primeasc rezultatele trimise de server (aplicatia frontend trimite o cerere la postmaster prin soket-ul de retea). Cnd o conexiune este stabilita, aceasta porneste un nou proces server backend si conecteaza procesul frontend la un nou server. Din acel punct, procesul frontend si serverul backend comunica fara interventia postmasterului. Cu toate ca, postmasterul merge intotdeauna, asteptand cereri, procesele frontend si backend vin si pleaca. Libraria libpq permite unui singur frontend sa faca multiple conexiuni la procesele backend. Aplicatia frontend este un singur fir de executie suportat prin intermediul libpq. postmasterul creaza un server backend (porneste un nou proces server backend si conecteaza procesul frontend la un nou server). 2.Parser-ul verific cererea trimis de aplicaie si corectitudinea sintaxei i creeaz un query tree. 3.Sistemul de rescriere preia query tree-ul creat de parser i caut eventualele reguli (depozitate n cataloagele sistemului) care trebuie aplicate query tree-ului. Acesta aplic transformarile descrise n regulile respective. 4.Planificatorul/Optimizatorul preia query tree-ul rescris si creeaz un plan de execuie al cererii care va fi de fapt intrarea pentru sistemul de execuie a comenzilor. 5.Server-ul execut recursiv plan tree-ul. Postmasterul si backendul ruleaza pe o aceeasi masina (serverul de date), in timp ce aplicatia frontend poate rula oriunde.
Liviu erbnescu 2008-2009 pag. 16/16

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