Documente Academic
Documente Profesional
Documente Cultură
1 Dat vs Informaie
Pentru a nelege conceptul de design al unei baze de date, mai nti trebuie s nelegem diferena dintre date i
informaii. O dat reprezint orice mesaj primit de la receptor sub o anumit form, fr a fi procesat sau
interpretat. Informaia reprezint rezultatul procesrii datelor n vederea obinerii unui mesaj nou. Procesarea
datelor poate fi simpl (clasificare, ordonare) sau complex (diverse operaii). Pentru a avea un sens, informaia are
nevoie de un context. De exemplu, o temperatur medie de 105 grade nu are nicio semnificaie dac nu i tim
contextul: este exprimat n grade Celsius sau Fahrenheit? este temperatura unei maini sau a unei persoane?
Astfel, informaia poate fi folosit ca suport pentru luarea deciziilor.
1.2 Baze de date i sisteme de gestiune a bazelor de date
O baz de date reprezint un ansamblu structurat de date ce prezint urmtoarele caracteristici: este organizat,
coerent, structurat, are o redundan minim i controlat, este accesibil mai multor utilizatori n acelai timp.
De-a lungul timpului au fost realizate mai multe tipuri de baze de date, n funcie de modelul de date
implementat (adic de modul de organizare a datelor n baza de date):
fiiere: informaiile erau memorate n fiiere text sau binare, fiecare nregistrare ocupnd o linie;
generaia I (sfritul anilor '60 - '70): BD ierarhice i reea (informaii structurate sub forma unui arbore sau a
unei reele extinse);
generaia a II-a (sfritul anilor '70 - prezent): BD relaionale (model bazat pe teoria mulimilor i logica
predicatelor, informaia fiind organizat n mulimi numite tabele, ntre care exist relaii);
Un sistem de gestiune a bazelor de date (SGBD sau DBMS Database Management System) reprezint un
ansamblu complet i complex de programe care asigur interfaa ntre o baz de date i utilizatorii acesteia. El este
principala component software a unui sistem de baze de date, gestioneaz datele organizate n memoria extern,
implementeaz un model de date i conine cel puin un limbaj de programare adaptat pentru lucrul cu BD.
SGBD-ul ascunde complexitatea BD fa de aplicaii i utilizatori i face managementul datelor. Avanteje ale
utilizrii unui SGBD sunt urmtoarele:
independena datelor fa de program: fizic (modul de stocare al datelor poate fi modificat fr a rescrie
programul) i logic (structura de date poate fi modificat fr a rescrie programul);
faciliti pentru utilizarea datelor: aceleai date pot fi utilizate de mai muli utilizatori, n acelai timp, pentru
scopuri diferite;
- protecia datelor:
o
securitatea datelor : accesul se face autorizat i controlat prin parole, profiluri de utilizatori, proceduri
de criptare i folosirea tabelelor virtuale;
integritatea datelor: corectitudinea i coerena datelor, cu rol de a le proteja mpotriva unor incidente.
Aici putem vorbi despre:
restriciile de integritate;
salvarea (stocarea datelor automat/la cerere) i restaurarea (refacerea consistenei BD automat/la cerere,
pornind de la datele salvate).
Un model de date este un ansamblu de concepte i instrumente necesare pentru a realiza structura unei colecii
de date conform creia se vor reprezenta datele.
Schema conceptual reprezint descrierea fenomenelor din realitatea nconjurtoare prin colecii de date (tabele)
i atribute (tipul de date) mpreun cu toate corelaiile (legturile) dintre ele i restriciile acestora. Definirea
schemei este o activitate de modelare deoarece transpune n termeni abstraci entitile din lumea real. Schema se
reprezint cu ajutorul unui model de date recunoscut de un anumit SGBD.
Modelul relaional: definirea entitilor se face sub form de tablouri bidimensionale, denumite tabele. Conceptele
utilizate sunt:
domeniul: un ansamblu de valori carcaterizat printr-un nume i el poate fi explicit sau implicit;
cheia: un atribut sau un grup de atribute care au rolul de a identifica o nregistrare ntr-o tabel. Tipuri de
chei: primare, simple sau compuse, externe. Definirea legturilor dintre entiti se face la nivel logic,
construind relaii ntre tabele cu ajutorul unor chei de legtur ce poarta numele de chei externe (foreign
keys).
cheie unic(UNIQUE): ntr-o tabel nu trebuie s existe mai multe nregistrri cu aceeai valoare pentru
atributul declarat unic.
cheie extern(FOREIGN KEY): ntr-o tabela A care refer o tabel B valorile cheii externe trebuie s aparin
valorilor cheii primare din tabele B sau s fie NULL. Prin intermediul ei se realizeaz legtura ntre tabele.
restricia entitii(NOT NULL): atributele declarate astfel nu pot s ia valoarea NULL. Condiia de la prima i a
treia restricie conduc la restricia de cheie primar (PRIMARY KEY), care are rolul de a identifica n mod unic o
nregistrare ntr-o tabel.
b) restricii semantice
de domeniu(CHECK): domeniul corspunztor unui atribut trebuie s se ncadreze ntre anumite valori.
temporare: valorile anumitor atribute se compar cu nite valori temporare, rezultate din calcule.
Precizarea restriciilor se poate face n 2 moduri: in-line la definirea coloanei pe care se impune restricia i outof-line separat, fie la sfritul sintaxei CREATE TABLE, fie prin comanda ALTER.
Orice SGBD relaional trebuie s aib un limbaj pentru descrierea datelor (LDD) i unul pentru manipularea
datelor (LMD).
Comenzile din LDD pot fi grupate pe 3 niveluri:
nivel conceptual: CREATE DATABASE, DROP DATABASE (terge baza de date), CREATE TABLE, DROP TABLE,
CREATE SYNONIM (crearea unor alternative la denumirea unor tabele), ALTER TABLE;
nivel logic: CREATE VIEW (crearea tabelelor virtuale = o comand SELECT stocat sub o denumire care poate
fi apelat ulterior), DROP VIEW, GRANT CONNECT(conectarea unui utilizator la bd);
nivel fizic: CREATE INDEX (ataarea unor fiiere de index unor tabele), DROP INDEX.
one-to-one legtura dintre cele dou tabele se face pe baza cheilor primare.
one-to-many cheia primar din tabela printe se adaug n tabela copil sub form de cheie extern
many-to-many nu se poate implementa i se recurge la adugarea unei tabele suplimentare care va conine cheile
primare ale tabelelor iniiale i cmpuri referitoare la asocierea dintre tabelele prini. Cheia primar din tabela
intermediar va fi o cheie compus din cheile primare ale celor dou tabele iniiale.
profesori
idprofesor
nume
varsta
incadrare
functie
salariu
catedra
Un profesor este identificat n mod unic prin atributul idprofesor i este angajat conform unei ncadrri care
nseamn grupul de atribute: functie, salariu, catedra. Se elimin atributele de grup i rezult o nou tabel cu
atribute elementare (dac ar avea atribute de grup nu am putea crea tabela cu comanda CREATE TABLE).
Daca mai adugm un cmp copii, trebuie s avem n vedere c profesor poate avea mai muli copii, deci o
nregistrare poate avea mai multe valori ale acestui cmp, de genul, copil1, copil2 etc. Aceast anomalie trebuie
eliminat prin crearea unei noi tabele, copii, care s conin drept cheie extern idul profesorului.
Bazele de date n MySQL sunt reprezentate ca directoare, iat tabelele ca fiiere n aceste directoare. Prin urmare,
numele de baze de date, de tabele i cmpuri trebuie s fie n conformitate cu restriciile sistemului de operare
privind caractere care sunt permise n numele de directoare i fiiere. Se recomand folosirea literelor mici pentru
numele de baze de date, tabele i cmpuri, acestea fiind formate doar din caractere alfanumerice i linii de
subliniere. A se evita folosirea cuvintelor rezervate MySQL (dac totui se folosesc, trebuie ncadrate n backquotes `
` ).
Condiii de validitate a numelor ce nu folosesc delimitatori:
pot ncepe cu orice caracter legal, inclusiv cifr, ns unele nume care ncep cu cifre pot fi interpretate ca valori
ntregi
dac dorim ca numele s includ numai cifre sau i alte caracactere dect cele de mai sus, l plasm ntre
delimitatori.
tabel>
(<nume
<tip
cmp>
<tip
date>
date>
<modificatori>
<modificatori>
Aceast instruciune ncepe cu numele tabelei, urmat de un set de paranteze. Parantezele includ una sau mai
multe definiii de cmpuri, astfel: numele cmpului, tipul de dat specific cmpului i modificatori speciali sau
restricii aplicate pe acel cmp. Dup nchiderea parantezei urmeaz, opional, un specificator cu numele motorului
de stocare care se va utiliza pentru aceast tabel (noi vom folosi implicit InnoDB).
La crearea unei tabele este necesar specificarea tipului de date pentru fiecare cmp. Utilizarea inteligent a
tipurilor de date conduce la o indexare i regsire eficient, o execuie corect i rapid. De exemplu, folosirea
tipului VARCHAR pentru un cmp numeric nu ar putea permite realizarea de calcule cu el, la fel cum folosirea tipului
TEXT pentru iruri de caractere mici ar putea duce la o pierdere de spaiu.
Tipurile numerice:
valori ntregi: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT. Ele difer prin mrimea valorilor pe care le pot
stoca. Primele trei sunt pentru valori mici, INT este pentru valori mari, iar BIGINT pentru valori extrem de
mari.
valori reale: FLOAT (simpl precizie), DOUBLE (dubl precizie), DECIMAL(valori zecimale).
Pentru ele se poate specifica dimensiunea, ntre paranteze: INT(10), FLOAT(7,4) = valori cu apte cifre, dou
pentru partea ntreag, una pentru separator, patru pentru partea zecimal.
Tipurile caracter i ir de caractere:
Ambele pot avea definit dimensiunea ntre paranteze, la definire: VARCHAR(20). Dimensiunea maxim este de
255 de caractere.
Tipurile text i binare
out-of-line, dup definirea tuturor cmpurilor, n cazul n care se refer la mai multe coloane (de exemplu, o
cheie primar compus).
Pentru a specifica dac un cmp fi lsat gol sau trebuie neaprat s ia o valoare, se plaseaz modificatorul NULL
sau NOT NULL dup definirea coloanei respective.
Pentru a specifica o valoare implicit pentru un cmp, se folosete modificatorul DEFAULT. Valoarea implicit este
utilizat atunci cnd se introduce o nou nregistrare n care nu se d o valoarea acelui cmp. n absena lui DEFAULT,
pentru cmpurile NOT NULL, MySQL niializeaz cmpul cu o valoare neutr. Exemplu:
Pentru a obliga MySQL s genereze n mod automat un numr pentru un cmp prin incrementare se folosete
modificatorul AUTO_INCREMENT. El se aplic doar cmpurilor numerice NOT NULL care aparin cheii primare. O
tabel poate conine un singur cmp AUTO_INCREMENT.
Pentru a indexa un cmp se folosete modificatorul INDEX. Atunci cnd un cmp este indexat, MySQL creeaz un
fiier n care sorteaz nregistrrile pe baza acelui index; astfel, el nu mai parcurge fiecare rnd al tabelei la o
interogare, ci parcurge numai indexul. Indexarea este recomandat pentru cmpurile care apar frecvent n clauza
WHERE, ORDER BY, GROUP BY ale comenzii SELECT i pentru cmpurile folosite pentru legturile ntre tabele. Un
cmp declarat index poate lua valori duplicate n tabel sau valori NULL. Exemplu:
O variant a modificatorului INDEX este UNIQUE. El este un tip special de index utilizat pentru a garanta c
valorile introduse sunt fie unice, fie NULL. Exemplu:
Pentru a declara o cheie primar se folosete modificatorul PRIMARY KEY. Aceast constrngere este o combinaie
ntre NOT NULL i UNIQUE deoarece ea necesit ca valorile din respectivul cmp s nu fie NULL sau s se repete n
alt nregistrare. Ea servete ca identificator unic pentru fiecare nregistrare din tabel i tabela este implicit
indexat dup cheia primar.
Pentru a declara o cheie extern se folosete modificatorul FOREIGN KEY, ce leag un cmp dintr-o tabel (o
cheie primar) cu un alt cmp din alt tabel (care devine cheie extern), crend astfel legturi ntre tabele. Cheile
externe sunt suportate numai de motorul de stocare InnoDB, modificatorul FOREIGN KEY fiind ignorat de celelalte
motoare de stocare. Exemplu:
Utilizarea indecsilor. Pentru a accelera cutrile i a reduce timpul de execu ie, MySQL permite indexarea
anumitor cmpuri dintr-o tabel. Astfel, se va evita scanarea complet a unei tabele, cutnd n index i efectund
apoi saltul direct la locaia corespunztoare din tabel. Citirea unui index este mai rapid dect scanarea ntregii
tabele, datorit dimensiunilor reduse ale indexurilor. Un index are i dezavantaje: ocup spaiu suplimentar pe disc i
poate afecta viteza instruciunilor de actualizare a datelor, deoarece el trebuie actualizat ori de cte ori sunt
adugate, modificate sau terse nregistrri din tabel. Cu toate acestea, este recomandat folosirea indexurilor,
deoarece discurile devin din ce in ce mai ieftine, iar MySQL are numeroase tehnici de optimizare a timpului de
actualizare. Un index se poate crea la definirea tabelei, sau ulterior. Pentru a crea un index compus din mai multe
cmpuri (maxim 15), se folosete modificatorul INDEX( nume_cmp1, nume _cmp2, ...). Pentru a crea un index
dup ce s-a creat tabela, se folosete comanda CREATE INDEX:
CREATE INDEX <nume index> ON <nume tabel> ( <nume cmp> );
Dac nu s-a specificat numele indexului la declararea lui cu INDEX n cadrul comenzii CREATE TABLE, el va primi
implicit numele cmpului pe care l indexeaz.
Pentru tergerea unui index se folosete comanda DROP INDEX:
DROP INDEX <nume cmp> ON <nume tabel>
se pot introduce una sau mai multe nregistrri cu aceeai instruciune INSERT;
se poate specifica setul complet de valori pentru o nregistrare sau valorile doar pentru anumite cmpuri;
se pot introduce nregistrri fr a specifica nicio valoare pentru coloane, toate cmpurile avnd ulterior
valoarea default;
numrul de valori specificate trebuie s fie mereu egal cu numrul de cmpuri din tabel; dac se terge sau
se adaug o coloan, instruciunea INSERT trebuie modificat;
dac se schimb ordinea cmpurilor din tabel, ordinea valorilor din instruciunea INSERT trebuie modificat.
Exemplu:
3.1.2 Introducerea unei nregistrri doar pentru o parte a coloanelor
INSERT INTO <nume tabel> (cmp1, cmp2, cmp3) VALUES (val1, val2, val3);
Dac nu dorim s dm valorile pentru toate cmpurile tabelei, se folosete aceast form a instruciunii INSERT.
Aceste situaii pot aprea n cazul cmpurilor AUTO_INCREMENT, pentru care nu trebuie s dm noi valori explicite,
sau pentru cmpurile calculate ulterior.
Pentru aceast form este necesar precizarea listei de coloane crora le corespund aceste valori. Coloanele
precizate nu trebuie s fie n ordinea din tabel sau consecutive. Pentru toate coloanele care nu apar n list se va
pune valoarea default.
Numrul de coloane trebuie s fie acelai cu numrul de valori, valoarea de pe poziie i corespunde cmpului de
pe poziie i din lista cu cmpuri. Are avantajul c se poate modifica structura coloanelor tabelei fr s se modifice
instruciunea INSERT.
Exemplu:
Mai exist o variant a comenzii INSERT care permite specificarea valorilor pentru o parte a coloanelor sau pentru
toate:
INSERT INTO <nume tabel> SET cmp1=val1, cmp2=val2, cmp3=val3, ... ;
Exemplu:
Exemplu:
3.1.4 Introducerea mai multor nregistrri cu o singur instruciune
Toate formele instruciunii INSERT descrise mai sus pot fi folosite pentru a introduce mai multe nregistrri o
dat. Dac unul din seturile de valori genereaz o eroare (tip de date incompatibil etc.) valorile de pn atunci
rmn introduse, dar cele urmtoare nu vor mai fi adugate.
Exemplu:
...
[FROM
BY
<nume
tabel>]
<condiie>]
<criteriu>]
Obs. Clauzele care apar ntre [ ] sunt opionale. Instruciunea SELECT accept i alte clauze care vor fi detaliate
n cursurile urmtoare.
3.2.1 Tipul valorilor coloanelor returnate de SELECT
se pot returna valori care nu se regsesc n tabele de pe server. Aici numele de coloane sunt exact expresiile
scrise de noi n SELECT, nu apare clauza FROM, iar valorile rezult din evaluarea expresiilor.
Exemplu:
se pot returna coloane din tabele, specificnd numele lor n instruciune i neaprat clauza FROM urmat de
numele tabelei care ne intereseaz. Interogarea ntoarce toate nregistrrile, dar numai cu valorile
corespunztoare coloanelor specificate n comand.
Exemplu:
Dac se dorete returnarea tuturor coloanelor din tabel, se folosete caracterul *.
Exemplu:
combinaii de constante i nume de tabele. Se pot crea expresii complexe folosind funcii predefinite MySQL.
Operatorii i funciile predefinite care sunt folosite la crearea expresiilor vor fi discutate n cursurile viitoare.
Exemplu:
extragem date din mai multe tabele i exist coloane cu acelai nume n tabele diferite.
dup LIMIT se specific doi parametrii: nr de nregistrri ignorate i nr maxim de nregistrri returnate.
Exemplu:
Clauza LIMIT x returneaz primele x nregistrri cerute, dar ele depind de ordinea n care sunt extrase. Clauza
ORDER BY permite ordonarea nregistrrilor conform unui criteriu, afiarea nregistrrilor putnd fi diferite dac
criteriile de sortare sunt diferite.
3.2.5 Clauza ORDER BY
Permite stabilirea ordinii n care sunt ntoarse nregistrrile i poate avea unul sau mai multe criterii de sortare.
Pentru fiecare criteriu ordonarea poate fi cresctoare (se specific cu cuvntul-cheie ASC), descresctoare (se
specific cu cuvntul-cheie DESC) sau aleatoare (se specific RAND() ).Dac nu se specific nimic, implicit se face
ordonare cresctoare.
Exemplu:
Cu o singur instruciune pot fi realizate modificri pe una sau mai multe coloane.
Clauza WHERE este opional. Ea se folosete pentru a specifica o condiie; dac se respect acea condiie, se va
realizarea modificarea nregistrrilor; n sens contrar, ele vor rmne neschimbate.
Dac WHERE lipsete, se vor modifica toate nregistrrile din tabel.
Expresiile ce dau valoare coloanelor sunt aceleai ca n cazul lui SELECT: pot conine constante, funcii
predefinite, nume de coloane, operatori.
Instruciunea UPDATE poate fi combinat cu clauzele ORDER BY i LIMIT.
Returneaz numrul de nregistrri ce fac subiectul modificrii i numrul de nregistrri modificate efectiv. Este
posibil ca cele dou s fie diferite.
3.4 tergerea nregistrrilor: DELETE
Permite tergerea controlat a nregistrrilor ce ndeplinesc anumite criterii. Sintaxa este:
DELETE FROM <nume tabel> [WHERE <condiie>] [ORDER BY <criteriu>] [LIMIT <nr max>];
Exemplu:
SEM 4!!!!!
Capitolul IV - Operatori i funcii predefinite MySQL
4.1 Caracteristici ale expresiilor SQL
Expresiile sunt folosite n diverse instruciuni i clauze MySQL, cum ar fi:
operatori;
valori NULL.
4.2 Operatori
4.2.1. Operatori aritmetici
Sunt operatori care realizez rezultate numerice i care sunt corespunztori operatorilor matematici clasici:
/ (ctul mpririi)
% (restul mpririi)
Operatorii + i pot fi folosii i cu date de tip dat calendaristic, adunnd sau sczndun interval de timp.
Pentru specificarea intervalului dorit se folosete cuvntul-cheie INTERVAL urmat de valoarea dorit i unitatea de
msur corespunztoare: SECOND, MINUTE, HOUR, DAY, MONTH, YEAR.
Exemplu:
4.2.2 Operatori logici
Sunt folosii pentru a uni expresii care au ca rezultat valori de adevrat sau fals. n MySQL, aceste valori sunt
implementate ca 0 i 1. Operatorii logiic sunt:
Exemplu:
OR, || : SAU logic. Dac sql_mode are activ opiunea PIPES_AS_CONCAT, operatorul || nu mai este
interpretat ca sau, ci va realiza concatenarea a dou iruri de caractere.
Exemplu:
NOT, ! : negare
Exemplu:
4.2.3 Operatori de comparare
Accept unul sau mai muli operanzi i returneaz 0 (fals), 1 (adevrat) sau NULL (atunci cnd cel puin unul
dintre operanzi este NULL). Operatorii de comparare sunt urmtorii: - >, <, >=, <= : pot fi folosii pe valori
numerice sau iruri de caractere, compararea fiind una alfabetic (se returneaz 1 dac primul operand se afl n
relaia respectiv cu al doilea i 0 n cazul invers).
Exemplu:
= (egal), != (diferit), <>(diferit) : returneaz NULL dac cel puin unul dintre operanzi este NULL.
Exemplu:
IS NULL, IS NOT NULL : verific dac expresia are valoarea NULL. Nu se folosete = deoarece al doilea
operand ar fi NULL, ceea ce ar conduce la rezultatul NULL, indiferent de valoarea expresiei.
Exemplu:
<=> : verific egalitatea. Dac unul dintre operanzi este NULL, returneaz 0, dac ambii sunt NULL
returneaz 1.
BETWEEN val1 AND val2 : folosit pentru a pune condiia ca valoarea unei expresii s se ncadreze ntr-un
interval. Poate fi precedat de NOT pentru ca valoarea s se afle n afara intervalului.
Exemplu:
expr1 IN (val1, val2, ...) : returneaz 1 dac primul operand se regsete printre valorile specificate n list i
0 n caz contrar. Poate fi precedat de NOT pentru negarea condiiei.
Exemplu:
expr1 LIKE expr2 : pune condiia ca formatul primului operand s fie acelai cu al celui de-al doilea. n
expresia a doua se pot folosi caractere speciale: _ (ine locul unui caracter) i % (ine locul a orictor
caractere). Poate fi precedat de NULL pentru a nega condiia.
Exemplu:
4.2.4 Conversii de date
Atunci cnd operanzii unui operator au tipuri de date diferite, MySQL realizeaz conversii automate astfel nct
operatorul s poat fi aplicat. Sunt posibile urmtoarele situaii:
numerele sunt transformate automat n iruri de caractere, i invers, acolo unde este nevoie.
datele calendaristice sunt transformate n numere cnd sunt folosite ntr-un context numeric, i invers.
valorile de tip ENUM i SET sunt automat convertite n caractere sau numere, depinznd de context.
b.
funcii simple: primesc zero sau mai muli parametrii, ce pot fi constante sau expresii (care pot conine la
rndul lor alte funcii, coloane din tabele etc.). O expresie ce conine o funcie aplicat unei coloane din tabel
va produce o valoare pentru fiecare nregistrare implicat. Funciile simple se grupeaz n:
o
funcii matematice
funcii de comparare
funcii condiionaele
funcii de agregare: acioneaz asupra mai multor rnduri dintr-un set de rezultate (de exemplu, media
salariilor dintr-un departament, suma vnzrilor dintr-o lun).
CEIL(val) / CEILING(val): returneaz cel mai apropiat ntreg mai mare sau egal cu valoarea primit.
FLOOR(val): returneaz cel mai apropiat ntreg mai mic sau egal cu valoarea primit.
ROUND(val): returneaz ntregul cel mai apropiat de valoarea primit ca parametru. Dac vrem s precizm i
numrul de zecimale, folosim varianta ROUND(val, nr_zecimale).
POW(baza, exponent) / POWER(baza, exponent): returneaz rezultatul ridicrii bazei la puterea exponent.
SQRT(val): returneaz radicalul de ordin 2 al valorii. Dac valoarea primit ca parametru este negativ, se va
returna NULL (radicalul nu se extrage din numere negative).
COS(), SIN(), TAN(), COT(), ACOS(), ASIN(), ATAN(): returneaz cosinus, sinus, tangent, cotangent,
arccosinus, arcsinus, arctangent.
RAND(): returneaz un numr subunitar cuprins ntre [0, 1). Poate fi folosit pentru a produce numere n orice
interval, prin nmulirea lui cu o valoare: 100*RAND() va produce numere n intervalul [0,100).
SIGN(): returneaz -1 pentru numere negative, 0 pentru zero, 1 pentru numere pozitive.
Exemplu:
4.3.2 Funcii de comparare
Se aplic pentru numere, dar i pentru iruri de caractere (realiznd compararea alfabetic):
LEAST(val1, val2, val3, ...): returneaz cea mai mic valoarea din list.
GREATEST(val1, val2, val3, ...): returneaz cea mai mare valoarea din list.
INTERVAL(n, n1, n2, n3, ...): returneaz 0 dac n<n1, 1 dac n<n2, 2 dac n<n3. Pentru ca functia s
funcioneze corect, trebuie ca valorile n1, n2, n3, ... s fie n ordine cresctoare.
Exemplu:
4.3.3 Funcii condiionale
Permit luarea de decizii pe baza valorilor unor expresii:
IF(expr_evaluat, expr1, expr2): dac expresia evaluat este adevrat (nu ia valoarea 0 sau NULL), atunci
se returneaz valoarea expr1, n caz contrar se returneaz expr2.
IIFNULL(expr1, expr2): dac expr1 are valoare NOT NULL, se returneaz valoarea expr1, n caz contrar se
returneaz expr2.
INULLIF(expr1, expr2): dac expr1=expr2 returneaz NULL, n caz contrar se returneaz expr1.
Exemplu:
4.3.4 Funcii pentru iruri de caractere
Exist urmtoarele categorii:
a.
b.
concatenare
o
CONCAT(ir1, ir2): returneaz irul rezultat din concatenarea celor dou iruri date ca parametrii.
Dac unul dintre iruri este NULL, rezultatul va fi NULL.
CONCAT_WS(separator, ir1, ir2): realizeaz concatenarea irurilor date ca parametrii, dar care vor fi
desprite de separatorul specificat. Parametrii NULL sunt ignorai.
Exemplu:
c.
d.
e.
f.
LPAD(ir, lungime_dorit, ir_adugat): adaug la nceputul irului specificat attea exemplare ale lui
ir_adugat cte sunt necesare pentru a se ajunge la lungimea dorit.
RPAD(ir, lungime_dorit, ir_adugat): funcioneaz ca cel de mai sus, dar face adugarea la sfrit.
extragere de subiruri
o
SUBSTR(ir, poziit_nceput, lungime): funcioneaz ca cel de mai sus, doar c returneaz un numr
de caractere egal cu valoarea lungime.
Exemplu:
g.
h.
LOCATE(subir, ir) / POSITION(subir, ir): returneaz poziia primei apariii a subirului, de la stnga
la dreapta, sau 0 dac lipsete.
REPLACE(ir, de_nlocuit, nlocuitor): nlocuiete toate apariiile subirului de nlocuit cu cel nlocuitor.
Exemplu:
4.3.5 Funcii pentru date calendaristice
a.
ora/data curent
o
b.
Exemplu:
b.
c.
DAYOFYEAR(data) : returneaz numrul zilei din anul respectiv, valoare ntre 1 i 366
operaii aritmetice
- DATE_ADD(data, INTERVAL expresie unitate_msur) : adaug intervalul de timp specificat la dat,
returnnd noua dat rezultat. Unitatea de msur poate fi HOUR, MINUTE, SECOND, YEAR, MONTH,
DAY. - DATE_SUB(data, INTERVAL expresie unitate_msur) : analog, dar scade intervalul ADDTIME(data, interval_timp) : adaug intervalul de timp la data specificat. Intervalul de timp poate
fi negativ, ceea ce nseamn efectuarea unei scderi. - SUBTIME(data, interval_timp) : analog, dar
scade intervalul
d.
%y anul pe 2 cifre
%m luna pe 2 cifre
%c luna pe 1 cifr
%d ziua pe 2 cifre
%e ziua pe 1 cifr
%H ora pe 2 cifre
%k luna pe 1 cifr
%i minutul pe 2 cifre
%s secunda pe 2 cifre
Exemplu:
4.4 Funcii MySQL predefinite de agregare
Funciile simple prezentate pn acum operau pe una sau mai multe valori primite explicit ca parametru. Ele se
aplicau pe fiecare nregistrare a tabelei, producnd o valoare pentru fiecare nregistrare. Rezult un numr de valori
calculate egal cu numrul de nregistrri prelucrate. Se spune c funciile simple prelucreaz valori pe orizontal.
Funciile de agregare realizeaz compunerea valorilor pe vertical, ele opereaz asupra tuturor valorilor de pe o
coloan, returnnd pe baza acestora o singur valoare. Dac o funcie simpl produce o valoare per nregistrare, o
funcie de agregare produce o valoare per grup de nregistrri. Se poate ca un grup s reprezinte toat tabela, i
astfel funcia produce o valoare pentru ntreaga tabel.
Funciile de agregare primesc ca parametru o expresie; valoarea expresiei este evaluat pentru fiecare
nregistrare n parte. Funcia se apeleaz o singur dat i prelucreaz setul de valori, producnd un singur rezultat.
Acest lucru difer de cazul funciilor simple, unde funcia era apelat de un numr de ori egal cu numrul de
nregistrri prelucrate, producnd tot attea valori.
Funciile de agregare se aplic doar instruciunii SELECT, n timp ce funciile simple pot fi folosite i n clauzele
WHERE, ORDER BY.
4.4.1 Funcii matematice
MIN(expresie) : returneaz valoarea minim a expresiei dintre toate valorile rezultate prin evaluarea expresiei
pentru fiecare nregistrare n parte.
SUM(expresie) : returneaz suma valorilor unei expresii pentru toate nregistrrile unui grup.
AVG(expresie) : returneaz media valorilor unei expresii pentru toate nregistrrile unui grup.
COUNT(expresie) : returneaz numrul de valori nenule ale expresiei, expresie fiind evaluat pentru fiecare
nregistrare din grup.
Exemplu:
SEM 5 !!!!!
Capitolul V Join-uri
5.1 Conceptul de join
Eficiena sistemelor de baze de date relaionale const n capacitatea lor de a mprti datele n mai multe
tabele i de a genera vederi dinamice asupra acestora prin conectarea tabelelor n diverse moduri. Acest capitol
arat cum MySQL poate fi folosit pentru interogarea simultan a mai multor tabele i combinarea datelor preluate
din acestea. Pn acum am folosit instruciunea SELECT pentru a extrage date dintr-o singur tabel. n realitatea,
interogrile sunt mult mai sofisticate, necesitnd combinarea nregistrrilor din tabele diferite pentru a produce
rezultatul dorit. Un join reprezint o interogare SQL n care sunt manipulate date din mai multe tabele. Cel mai des
ntlnit exemplu este cel al interogrii de tip SELECT care reunete coloanele mai multor tabele. Vom folosi tabelele
studeni i prezene, cu urmtoarea structur i urmtoarele nregistrri:
cross joins = implic produsul cartezian al tabelelor, care afieaz o tabel cu toate permutrile posibile
outer joins = ntorc toate nregistrrile corespunztoare unei laturi ale legturii i completeaz spaiile libere
cu NULL
self-joins = implic dublarea unei tabele prin utilizarea alias-urilor, urmat de legarea copiilor cu alte tipuri de
legturi
unions = implic adugarea tuturor nregistrrilor din tabelele implicate pentru a ntoarce drept rezultat suma
compozit a acestora.
Precizarea legturilor se poate face i prin intermediul cuvintelor-cheie INNER JOIN i CROSS JOIN, n locul
virgulei ce desparte numele tabelelor implicate n legtur.
Exemplu:
Exemplu: s se afieze toate prezenele nregistrate i numele studenilor corespunztori sau null dac nu este niciun
student nregistrat pentru prezena respectiv.
Se observ c left outer join-ul afieaz 3 studeni suplimentari, pentru care nu exist prezene nregistrate, iar
right outer join-ul afieaz 1 prezen suplimentar, care nu are un id de student nregistrat.
Termenii left i right sunt interschimbabili. O legtur left se poate transforma ntr-una right i invers prin simpla
inversare a ordinii denumirii tabelelor n clauza FROM.
5.2.4 Self joins
Legturile de tip self join implic legarea unei tabele cu ea nsi i este utilizat atunci cnd se lucreaz cu seturi
de rezultate pentru care valorile cmpurilor conin legturi interne. Pentru a realiza o legtur self join, se aloc
tabelului n cauz dou alias-uri diferite i apoi se construiete o legtur prin clauza WHERE.
5.2.5 Uniuni
n plus fa de legturi, exist i operatorul UNION, utilizat pentru a combina rezultatul mai multor interogri
SELECT ntr-un singur set de rezultate. Cel mai adesea acest operator este folosit pentru a nsuma rezultatele
produse de diferite interogri cu scopul de a crea o tabel unic coninnd toate rezultatele. Putei combina oricte
interogri SELECT cu operatorul UNION, ct timp se respect urmtoarele dou conditii:
Exemplu:
SEM 6 !!!!!!!!!!
Capitolul VI Subinterogri, view-uri, tranzacii
6.1 Subinterogri
O subinterogare reprezint o interogare SELECT care este plasat n cadrul alteia, acolo unde este nevoie de o
valoare calculat. O subinterogare trebuie ntotdeauna inclus ntre paranteze rotunde.
Avantaje:
unele interogri complexe care folosesc mai multe tabele i join-uri se pot rescrie mai simplu folosind
subinterogri (se potrivesc mai bine cu logica natural);
prin subinterogri se realizeaz o partiionare a unei interogri complexe n poriuni ce pot fi gndite
independent.
Pentru exemplele din curs vom lucra pe urmtoarele tabele relaionate ntre ele:
Exemplu: s se afieze toi angajaii care au fost angajai n aceeai zi cu Rzvan.
Tipuri de subinterogri
Privind exemplul de mai sus, se observ faptul c subinterogarea trebuie s ndeplineasc o condiie, astfel nct
rezultatele returnate s fie compatibile cu expresia la care particip. Subinterogarea din exemplu trebuie s
returneze un singur rnd, deoarece operandul drept al lui = trebuie s fie o singur valoare, nu o mulime de valori
(n acest caz, nu s-ar tii pe care dintre rezultate s le atribuie operandului stng).
n funcie de numrul de rnduri i coloane returnate, subinterogrile se mpart n:
subinterogri de tip scalar: returneaz o singur valoare (o singur nregistrare ce are o singur coloan).
Rezultatul unei astfel de subinterogri poate fi folosit n locul valorilor constante din expresiile MySQL;
subinterogri de tip list: returneaz mai multe nregistrri, dar cu o singur coloan. Rezultatul lor poate fi
folosit n expresii acolo unde este nevoie de o list de valori (de exmplu, operatul IN);
subinterogri de tip rnd: returneaz un singur rnd cu mai multe coloane. Pot fi folosite pentru a compara
valorile unui rnd cu un set de valori explicit n cadrul instruciunii;
subinterogri de tip tabel: returneaz mai multe rnduri ce au mai multe coloane. Pot fi folosite n locul unei
tabele, ca termen al unui join.
Dintre cele prezentate, primele dou i ultima sunt mai des ntlnite i vor fi discutate n continuare.
6.2.1 Subinterogri de tip scalar
Ele pot fi foloite n expresii SQL oriunde este nevoie de p valoare constant (de exemplu, opeanzi, argumente de
funcii etc). Ele trebuie s returnze o singur nregistrare cu o singur coloan, n caz contrar interogarea va eua.
Exemplu:
dac n tabela angajai avem mai muli din departamentul IT (cu id-ul = 1), subinterogarea returneaz mai
multe rnduri i interogarea eueaz.
O subinterogare poate fi folosit ca operand al uui operator de comparare, folosind cuvintele cheie ANY, ALL,
SOME:
expresia oprator ALL (subinterogare) returneaz true dac toate valorile returnate de subinterogare se afl n
relaie cu valoarea expresiei din stnga. Exemplu: s se afieze detalii despre angajaii care au salariu mai
mare dect salariile din departamentul cu id-ul 2.
expresia operator ANY (subinterogare) returneaz true dac mcar una dintre valorile returnate de
subinterogare se afl n relaie cu valoarea din stnga operatorului. Exemplu: s se afieze detalii despre
angajaii care au salariu mai mare dect oricare salariu care este mai mic de 1500.
Observaii:
a scrie valoare != ALL (subinterogare) este echivalent cu a scrie valoare NOT IN (subinterogare);
poate furniza doar un subset al coloanelor din tabela de provenien a datelor, selectnd doar coloanele dorite
n definiia view-ului;
poate furniza doar un subset al rndurilor din tabela de provenien a datelor, aplicnd clauza WHERE
instruciunii SELECT ce efinete view-ul.
regsirea doar a unor informaii din baza de date, fie din motive de securitate (pentru a limita accesul la date
confideniale sau pentru a nu risca modificarea datelor), fie din motive de uurin.
6.3 Tranzacii
Tranzacia reprezint un set de instruciuni ce se execut atomic:
dac una dintre instruciuni eueaz, se poate readuce baza de date n starea anterioar tranzaciei.
dac toate instruciunile sunt executate corect, se fac modificrile permanente n baza de date (COMMIT).
Tranzaciile sunt folosite pentru a ne asigura c operaiile care implic mai multe interogri nu fac modificri
pariale n baza de date n caz de eroare. Deasemenea, sunt folosite pentru gestionarea accesului concurent la date:
ct timp o tranzacie este n desfurare, modificrile efectuate nu sunt vizibile dect pentru clientul care o
efectueaz.
Serverul MySQL este implicit n modul autocommit (este un caz de tranzacie cu o singur instruciune). A crea o
tranzacie ce conine mai multe instruciuni nseamn a dezactiva modul autocommit i a face manual commit-ul la
terminarea cu succes a tranzaciei.
Modul autocommit poate fi dezactivat n dou moduri:
prin setarea variabilei autocommit pe zero. MySQL nu va produce modificrile permanente dect dup ce
clientul execut explicit COMMIT.
prin folosirea instruciunilor START TRANSACTION sau BEGIN. Dac iniial autocommit-ul era pus pe 1 (adic
se fcea automat), pe durata tranzaciei el devine 0, dup COMMIT el redevine 1.
ROLLBACK modificrile aduse de instruciunile componente ale tranzaciei executate pn atunci sunt
anulate.
Observaie: nu se poate face ROLLBACK pentru instruciunile DLL, ci doar pentru DML.
Evenimente care pot cauza COMMIT: