Sunteți pe pagina 1din 31

~ Curs 5 ~

SQL
1. Introducere
MySQL este un sistem client/server de gestiune a bazelor de date relaţionale originar din
Scandinavia. MySQL include un server SQL, programe client pentru accesul la server,
instrumente administrative şi o interfaţă e programare pentru scrierea propriilor
dumneavoastră programe.
Bazele sistemului MySQL au fost puse în 1979, o dată cu instrumentul pentru baze de
date NIREG, creat de Michael "Monty" Widenius pentru compania suedeză TcX. În 1994,
TcX a început să caute un server SQL pentru a-l utiliza la dezvoltarea aplicaţiilor Web

În 1995, David Axmark de la Detron HB a început să facă presiuni pentru ca TcX să


lanseze MySQL pe Internet.

MySQL nu este un proiect Open Source, deoarece este necesară o licenţă în


anumite condiţii. Totuşi, MySQL se bucură de o amplă popularitate în comunitatea
Open Source, deoarece termenii de licenţă nu sunt foarte restrictivi. În esenţă,
MySQL este în general gratuit, dacă nu doriţi să obţineţi profit prin vânzarea
sistemului sau a unor servicii care necesită utilizarea acestuia.
2. De ce să optez pentru MySQL?
1. Viteză. MySQL este rapid. Programatorii pretind că MySQL este cel mai rapid sistem de baze de
date pe care îl puteţi găsi.
2. Uşurinţă în utilizare. MySQL este un sistem de baze de date cu performanţe ridicate, dar relativ
simplu, a cărui configurare şi administrare sunt mult mai simple decât în cazul sistemelor mai
mari.
3. Cost. MySQL este gratuit pentru majoritatea utilizărilor interne.
4. Suport pentru limbaje de interogare. MySQL înţelege SQL (Structured Query Language - limbaj
de interogare structurat), limbajul preferat al tuturor sistemelor moderne de baze de date. De
asemenea, puteţi avea acces la MySQL folosind aplicaţii care acceptă ODBC (Open DataBase
Connectivity), un protocol de comunicaţie cu bazele de date creat de Microsoft.
5. Caracteristici.
 La server se pot conecta mai mulţi clienţi simultan.
 Clienţii pot folosi mai multe baze de date simultan. Puteţi obţine acces la MySQL în mod
interactiv, folosind numeroase interfeţe care vă permit să introduceţi interogări şi să
vizualizaţi rezultate: clienţi în linie de comandă, browsere Web sau clienţi X Window
System.
 Este disponibilă o varietate de interfeţe de programare pentru limbaje precum C, Perl, Java,
PHP şi Python. Astfel, aveţi opţiunea de a folosi programe client preambalate sau de a vă
scrie propriile programe client pentru aplicaţii personalizate.
6. Conectivitate şi securitate. MySQL poate fi folosit integral în reţele, iar bazele de date sunt
accesibile de oriunde din Internet, deci vă puteţi partaja datele cu oricine, oriunde. Dar MySQL
are controlul accesului, astfel încât persoanele care nu au dreptul să vă citească datele nu vor
avea această posibilitate.
7. Portabilitate. MySQL rulează pe numeroase varietăţi de UNIX, precum şi pe alte sisteme non-
UNIX, ca Windows şi OS/2. MySQL rulează pe echipamente de la calculatoare de birou la
servere cu performanţe ridicate.
8. Distribuţie liberă. MySQL este uşor de obţinut.
3. Terminologie structurală

În lumea bazelor de date, MySQL este clasificat ca sistem de gestiune a bazelor de


date relaţionale (SGBDR). Această expresie poate fi divizată după cum urmează:
o Baza de date (literele BD din abrevierea SGBDR) constituie depozitul pentru
informaţiile pe care doriţi să le stocaţi, structurat într-un mod simplu, obişnuit:
 Colecţia de date dintr-o bază de date este organizată în tabele.
 Fiecare tabel este organizat în rânduri şi coloane.
 Fiecare rând dintr-un tabel este considerat o înregistrare.
 Înregistrările pot conţine mai multe componente de informaţie; fiecare
coloană dintr-un tabel corespunde uneia din aceste componente.
o Sistemul de gestiune (literele SG) este programul care vă permite să vă folosiţi
datele prin inserarea, regăsirea, modificarea sau ştergerea înregistrărilor.
relaţţional"
o Cuvântul „rela ional (iniţiala R) indică un anumit tip de SGBD, adică unul care
se pricepe foarte bine la relaţionarea (în speţă coroborarea) informaţiilor stocate
într-un tabel cu informaţiile stocate într-un alt tabel, prin căutarea elementelor
comune din fiecare tabel. Puterea unui SGBD relaţional constă în capacitatea sa
de a extrage în mod convenabil date din aceste tabele şi de a combina informaţii
din tabele corelate pentru a genera răspunsuri la întrebări la care nu se poate
răspunde numai pe baza tabelelor individuale.
4. Stabilirea şi întreruperea conexiunilor cu serverul
Sintaxa standard de începe a unei sesiune mysql are forma următoare:
mysql -h nume_gazda -u nume_utilizator –p
Iată care este semnificaţia opţiunilor:
• -h nume_gazda (formă alternativă: -host=nume_gazda) - Gazda serverului Ia care doriţi să vă conectaţi.
Dacă serverul rulează pe acelaşi calculator pe care utilizaţi mysql, în mod normal această opţiune poate fi
omisă.
• -u nume_utilizator (formă alternativă: -user=nume_utilizator), numele dumneavoastră de utilizator
MySQL. Dacă folosiţi UNIX şi numele dumneavoastră de utilizator MySQL este acelaşi ca numele
dumneavoastră de deschidere a sesiunii de lucru, puteţi omite această opţiune; sub Windows, numele de
utilizator prestabilit este ODBC, ceea ce nu este foarte util.
• -p (formă alternativă: -password). Această opţiune indică programului mysql să vă solicite parola
dumneavoastră MySQL. Dacă specificaţi opţiunea -p fără nici o parolă, indicaţi programului mysql să vă
solicite o parolă la deschidere. De exemplu:
mysql -h nume_gazda -u nume_utilizator -p
Enter password:
Când vedeţi mesajul Enter password: (introduceţi parola), tastaţi parola dumneavoastră. (Parola nu va fi
reflectată pe ecran).

Welcome to the MySQL monitor. Commands end with ; or \g. După ce stabiliţi o conexiune
Your MySQL connection id is 1805 to server version: 3.22.25- cu serverul, puteţi încheia
log sesiunea oricând tastând
QUIT: mysql> QUIT Bye
Type 'help' for help.
mysql>
5. Emiterea de interogări
Iată un exemplu de interogare simplă şi rezultatul acesteia:
Această comandă indică data şi ora curentă.
curentă.
(Funcţia NOW() nu este utilă ca atare, dar se poate folosi în
expresii - de exemplu, pentru, a calcula diferenţa dintre data
curentă şi o altă dată.)
De asemenea, mysql afişează numărul
rândurilor rezultatului.
Deoarece mysql aşteaptă caracterul punct şi
virgulă înainte de a trimite interogarea
serverului, nu trebuie să introduceţi toată
interogarea pe un singur rând. Puteţi extinde
o interogare pe mai multe linii, dacă doriţi:

Cele două interogări par similare, dar a doua eşuează, deoarece paranteza nu
apare imediat după numele funcţiei.
6. Crearea bazei de date

Utilizarea unei baze de date implică mai multe etape:


1.Crearea (iniţializarea) bazei de date;
2.Crearea tabelelor din cadrul bazei de date;
3.Interacţiunea cu tabelele prin inserţia, regăsirea, modificarea sau ştergerea datelor. Regăsirea
datelor existente este, evident, cea mai frecventă operaţie efectuată cu o bază de date. Următoarele
operaţii, în ordinea frecvenţei, sunt inserţia datelor noi şi actualizarea sau ştergerea datelor existente.
Mai puţin frecvente sunt operaţiile de creare a tabelelor, iar operaţia cel mai puţin frecventă este
crearea bazelor de date.

Pentru a crea o bază de date nouă, conectaţi-vă la server folosind mysql şi apoi emiteţi o
instrucţiune CREATE DATABASE care specifică numele bazei de date:
mysql> CREATE DATABASE samp_db;
Va trebui să creaţi baza de date samp_db înainte de a putea crea oricare dintre tabelele care
vor fi incluse în aceasta sau înainte de a efectua orice operaţii folosind conţinutul acelor tabele.
Prin crearea bazei de date, devine aceasta baza de date curentă (prestabilită)? Nu, nu devine,
aşa cum se poate vedea prin executarea următoarei interogări:
mysql> SELECT DATABASE();
Pentru ca baza de date samp_db să devină curentă, emiteţi o instrucţiune USE:
mysql> USE samp_db
USE este una dintre puţinele instrucţiuni care nu necesită un caracter punct şi virgulă de
terminare a instrucţiunii, deşi îl puteţi adăuga, dacă doriţi.
6.1. Crearea tabelelor
Pentru evidenţiere modului de creare a tabelelor in mysql, vom folosi cazul bazei de date pentru un
catalog cu note ale unor elevi. Pentru a vedea care sunt tabelele de care avem nevoie pentru
proiectul de evidenţă a rezultatelor şcolare, să examinăm modul în care se pot scrie punctajele atunci
când folosiţi un catalog pe hârtie.

Tip chestionar-test
Data examinare

nume Punctaj obţinut

Redundanţa datelor
O cerinţă impusă tabelului eveniment de macheta prezentată anterior este aceea ca datele să fie unice,
deoarece data este folosită pentru a corela înregistrările din tabelele puncte şi eveniment. Cu alte
cuvinte, nu puteţi da două chestionare în aceeaşi zi, respectiv un chestionar şi un test. Dacă o faceţi,
veţi avea două seturi de înregistrări în tabelul puncte şi două înregistrări în tabelul eveniment, toate cu
aceeaşi dată, şi nu veţi mai putea stabili o corespondenţă între înregistrările din cele două tabele.
Instrucţiunea CREATE TABLE pentru tabelul elev arată astfel:

Instrucţiunea CREATE TABLE creează un tabel denumit elev cu trei coloane: nume, sex şi elev_id. elev_id
 nume este o coloană şir de lungime variabilă, care poate conţine maximum 20 de caractere.
 sex determină dacă un elev este băiat sau fată. Este o coloană de tip ENUM (enumerare), ceea ce
înseamnă că poate lua numai una din valorile enumerate explicit în specificaţia coloanei, în speţă M sau
F, adică de sex masculin sau feminin. ENUM este util când aveţi un set limitat de valori pe care le poate
conţine o coloană. Am fi putut folosi în schimb CHAR(1), dar ENUM specifică mai exact care pot fi
valorile din coloană. Apropos, valorile dintr-o coloană ENUM nu trebuie să fie neapărat compuse dintr-un
singur caracter. Coloana tip ar fi putut fi declarată astfel: ENUM (' feminin' , ' masculin ').
 elev_id este o coloană de tip întreg care va conţine numere unice de identificare a elevilor. Declaraţia
coloanei elev_id are numeroase părţi, chiar dacă nu conţine decât numere:
• INT arată că în coloană sunt incluse numere întregi (valori fără parte fracţionară);
• UNSIGNED interzice utilizarea numerelor negative;
• NOT NULL înseamnă că valoarea coloanei trebuie completată;
• AUTO_INCREMENT este un atribut special în MySQL. MySQL generează automat un număr
unic cu o unitate mai mare decât valoarea maximă care se află în coloană la momentul respectiv.;
• PRIMARY KEY arată că acea coloană este indexată pentru căutări rapide şi că fiecare valoare
din coloană trebuie să fie unică. Aceasta ne împiedică să folosim din greşeală acelaşi identificator
de două ori, ceea ce este o proprietate necesară a numerelor de identificare a elevilor. (Nu numai
atât; MySQL impune ca fiecare coloană AUTO_INCREMENT să aibă un indice unic.)
Instrucţiunea CREATE TABLE pentru tabelul eveniment arată astfel:

 data conţine o valoare DATE standard MySQL, în format "AAAA-LL-ZZ" (cu anul scris primul).
 tip reprezintă tipul punctajului. Ca şi sex din tabelul elev, tip este o coloană de tip enumerare.
Valorile permise sunt T şi C, reprezentând „test", respectiv „chestionar".
 eveniment_id este o coloană AUTO_INCREMENT, similară coloanei elev_id din tabelul elev.
Utilizarea opţiunii AUTO_INCREMENT ne permite să generăm cu uşurinţă valori unice ale
identificatorilor de eveniment. Ca în cazul coloanei elev_id din tabelul elev, valorile particulare
sunt mai puţin importante decât unicitatea lor.
Instrucţiunea CREATE TABLE pentru tabelul puncte arată astfel:

Se presupune că valorile punctajelor sunt întotdeauna întregi. Dacă doriţi să permiteţi includerea
unor punctaje precum 58,5, care,conţin o parte fracţionară, veţi folosi unul din tipurile de coloană cu
virgulă mobilă, precum FLOAT sau DECIMAL.
Coloanele elev_id şi eveniment_id sunt întregi care reprezintă elevul şi evenimentul
pentru care a fost acordat fiecare punctaj. Folosindu-le pentru a stabili legături între
tabelele elev şi eveniment, vom putea determina numele elevului şi data evenimentului.
De asemenea, am transformat combinaţia dintre cele două coloane într-o cheie primară
(PRIMARY KEY). Astfel, ne asigurăm că nu vom avea punctaje repetate pentru un elev la
un test sau chestionar dat. De asemenea, modificarea ulterioară a unui punctaj este mai
simplă. De exemplu, când un punctaj a fost introdus incorect, putem elimina înregistrarea veche
atunci când inserăm înregistrările noi, folosind instrucţiunea MySQL
REPLACE. Nu este necesar să folosim o instrucţiune DELETE combinată cu INSERT;
MySQL execută automat această operaţie.
Reţineţi unicitatea combinaţiei între coloanele eveniment_id şi elev_id. În tabelul puncte, nici o
valoare nu este intrinsec unică. Vor exista mai multe înregistrări de punctaje pentru fiecare valoare
eveniment_id (câte una pentru fiecare elev), respectiv mai multe înregistrări pentru fiecare valoare
elev_id (câte una pentru fiecare chestionar şi test).
absenţe arată astfel:
Instrucţiunea CREATE TABLE pentru tabelul absenţ

Relaţionarea tabelelor în MySql este foarte importantă, iar pentru aceasta se foloseşte
ca linie distinctă în tabelul secundar o instrucţiune de forma:

FOREIGN KEY (id_elev) references elev

Cheia primară în Tabelul primar


tabelul primar
Un alt exemplu este cel al unei baze de date în care se strâng informaţii despre Preşedinţii USA.
Structura tabelelor pentru Liga istorică este relativ simplă:
 Un tabel preşedinte (preşedinte). Acesta conţine o înregistrare descriptivă pentru fiecare preşedinte al
Statelor Unite. Vom avea nevoie de acesta pentru chestionarul electronic din siteul Web ai Ligii (analogul
interactiv al chestionarului tipărit care apare în secţiunea pentru copii a buletinului de ştiri al Ligii).
 Un tabel membru (membru). Acesta este folosit pentru a păstra informaţii actuale despre fiecare
membru al Ligii. Tabelul va fi folosit pentru crearea versiunilor tipărită şi electronică a catalogului cu
membri, pentru trimiterea de note automate de înştiinţare pentru plata cotizaţiilor şi altele.
6.2. Adăugarea de noi înregistrări

Există numeroase modalităţi de a adăuga date într-o bază de date. Puteţi insera manual înregistrări într-
un tabel emiţând instrucţiuni INSERT. De asemenea, puteţi adăuga înregistrări citindu-le dintr-un fişier,
fie sub formă de valori de date brute pe care le încărcaţi folosind instrucţiunea LOAD DATA sau utilitarul
mysqlimport, fie în formă de instrucţiuni INSERT redactate anterior, pe care le introduceţi în mysql.

Să începem să adăugăm rezultate folosind INSERT, o instrucţiune SQL pentru care specificaţi
tabelul în care doriţi să inseraţi un rând de date şi valorile care vor fi plasate în rândul respectiv.
Instrucţiunea INSERT are mai multe forme:
o Puteţi specifica valori pentru toate coloanele:
INSERT INTO nume_tabel VALUES (valoare 1, valoare2,....)

Cuvântul INTO este opţional începând de la MySQL 3.22.5. (Acest lucru este valabil şi pentru celelalte
forme ale instrucţiunii INSERT.) Lista VALUES trebuie să conţină o valoare pentru fiecare coloană din
tabel, în ordinea în care sunt stocate coloanele în tabel.

Versiunile MySQL începând de la 3.22.5 vă permit să inseraţi mai multe rânduri într-un tabel cu o
singură instrucţiune INSERT, prin specificarea mai multor liste de valori:
INSERT INTO nume_tabel VALUES (...),(...),...

Acest procedeu necesită introducerea de la tastatură a unei cantităţi mai reduse de text decât cea
impusă de mai multe instrucţiuni INSERT, iar execuţia sa de către server este mai eficientă.
o Puteţi denumi coloanele cărora doriţi să le atribuiţi valori, apoi enumeraţi valorile. Acest procedeu
este util când doriţi să creaţi o înregistrare pentru care numai câteva coloane trebuie configurate iniţial.
INSERT INTO nume_tabel (nume_col1 ,nume_col2,...) VALUES (valoare1,valoare2,...)

De la MySQL 3.22.5, această formă a instrucţiunii INSERT permite de asemenea mai multe liste cu
valori (coloanele care nu sunt specificate în lista de coloane primesc o valoare prestabilită):

o De la MySQL 3.22.10, puteţi denumi coloanele şi valorile sub forma nume_coloana=valoare.


INSERT INTO nume_tabel SET nume_col1=valoare1, nume_col2-valoare2,...

Toate coloanele care nu sunt specificate în clauza SET primesc o valoare prestabilită.
Nu puteţi insera mai multe rânduri folosind această formă a instrucţiunii INSERT.

O altă metodă pentru încărcarea înregistrărilor într-un tabel este citirea valorilor datelor direct dintr-un
fişier. Puteţi încărca înregistrări în acest mod cu ajutorul instrucţiunii LOAD DATA sau cu utilitarul
mysqlimport. Instrucţiunea LOAD DATA se comportă ca un încărcător de mare capacitate, care citeşte
date dintr-un fişier. Folosiţi această instrucţiune din interiorul programului mysql:

Această instrucţiune citeşte conţinutul fişierului de date membru.txt localizat în catalogul dumneavoastră
curent din gazda programului client şi o trimite serverului, pentru a fi încărcată în tabelul membru.
6.3. Regăsirea informaţiilor

Acum, tabelele noastre au fost create şi încărcate cu date, deci haideţi să vedem ce putem face cu
acele date. Instrucţiunea SELECT vă permite să regăsiţi şi să afişaţi informaţii din tabelele
dumneavoastră, într-o manieră oricât de generală sau de specifică doriţi. Puteţi afişa întregul
conţinut al unui tabel:
SELECT * FROM elev
sau puteţi selecta o singură coloană a unui singur rând:
SELECT punctaj FROM puncte WHERE nume = “85"

Forma generală a instrucţiunii SELECT este:


SELECT ce se selectează
FROM tabel sau tabele
WHERE condiţii pe care trebuie sa le satisfacă datele

Când folosiţi o clauză FROM pentru a specifica un tabel de unde vor fi regăsite datele, forma cea
mai „generică" a instrucţiunii SELECT este aceea prin care se regăsesc toate datele. Pentru
aceasta, folosiţi caracterul *, care este o abreviere de la „toate coloanele". Interogarea următoare
regăseşte toate rândurile din tabelul elev şi le afişează:
Puteţi denumi în mod explicit coloana sau Dacă precizaţi mai mult de o coloană, separaţi numele
coloanele pe care doriţi să le vedeţi. Pentru a coloanelor prin virgule. Instrucţiunea următoare este
selecta numai numele elevilor, procedaţi echivalentă cu SELECT * FROM elev, dar fiecare
astfel: coloană este specificată în mod explicit:

Pentru a limita setul de înregistrări regăsite de instrucţiunea SELECT, folosiţi o clauză


WHERE care specifică criteriile pentru selectarea rândurilor. Puteţi selecta rânduri
examinând acele valori din coloane care satisfac diverse criterii.
Expresiile din clauzele WHERE pot folosi operatori aritmetici, ca în tabelul 1.1, operatori de
comparaţie, ca în tabelul 1.2, respectiv operatori logici, ca în tabelul 1.3. De asemenea, puteţi folosi
paranteze pentru a grupa părţi ale unei expresii. Operaţiile pot fi efectuate folosind constante,
coloane de tabel şi apeluri la funcţii.
Valoarea NULL
Valoarea NULL este specială; deoarece înseamnă „fără valoare", nu o puteţi compara cu valori
cunoscute în modul în care comparaţi una cu alta două valori cunoscute. Dacă încercaţi să folosiţi
NULL cu operatorii uzuali de comparaţie aritmetică, rezultatul este nedefinit:

Pentru a efectua căutări ale valorilor NULL, trebuie să folosiţi o sintaxă specială. în loc de a folosi =
sau ! = pentru a testa egalitatea sau inegalitatea, folosiţi IS NULL sau IS NOT NULL.

MySQL 3.23 şi versiunile superioare au un operator de comparaţie special, specific pro­gramului


MySQL, şi anume <=>, care este adevărat chiar şi pentru comparaţiile între valori NULL.
Sortarea rezultatelor unei interogări
Uneori se observă că, dacă se emite o interogare SELECT * FROM nume_tabel asupra unui tabel după
încărcarea în tabel a unui set iniţial de date, rândurile sunt regăsite în aceeaşi ordine în care au fost
inserate. Acest fapt nu este întotdeauna adevărat. Dacă ştergeţi şi inseraţi rânduri după încărcarea
iniţială a tabelului, se observă modificarea ordinii în care serverul returnează rândurile tabelului.

Puteţi specifica dacă sortarea unei coloane se va face în ordine ascendentă sau descendentă
folosind cuvintele cheie ASC sau DESC după numele coloanelor din clauza ORDER BY. De
exemplu, pentru a sorta numele preşedinţilor în ordine inversă (descrescătoare), folosiţi
DESC astfel:
Rezultatele interogării pot fi sortate pe mai multe coloane, iar fiecare coloană poate fi sortată în
ordine ascendentă sau descendentă, independent de celelalte coloane. Interogarea următoare
regăseşte rânduri din tabelul preşedinte, le sortează în sens descendent în funcţie de statul de
naştere şi după numele de familie în cadrul fiecărui stat:
Limitarea rezultatelor unei interogări
Când o interogare returnează mai multe rânduri, dar dumneavoastră doriţi să vedeţi numai câteva,
clauza LIMIT este utilă, mai ales în conjuncţie cu ORDER BY. MySQL vă permite să limitaţi datele
de ieşire ale unei interogări la primele n rânduri ale rezultatului returnat. Interogarea următoare
selectează pe primii cinci născuţi preşedinţi americani:

Dacă sortaţi în ordine inversă, folosind ORDER BY data_nastere DESC, veţi obţine pe ultimii cinci
născuţi preşedinţi americani.
De asemenea, LIMIT vă permite să extrageţi o secţiune de înregistrări din mijlocul unui set de
rezultate. Pentru aceasta, trebuie să specificaţi două valori. Prima valoare este numărul
înregistrării iniţiale din setul de rezultate pe care doriţi să-l vedeţi. (Prima înregistrare este
numerotată cu 0, nu 1.) Cea de-a doua valoare indică numărul de înregistrări care vor fi
returnate. Interogarea următoare este similară cu precedenta, care returnează cinci înregistrări,
începând de la al unsprezecelea rând al rezultatului:
Calculul şi denumirea valorilor din coloanele de ieşire
Majoritatea interogărilor precedente au produs date de ieşire prin regăsirea valorilor din tabele. MySQL
vă mai permite să calculaţi o valoare din coloana de ieşire ca rezultat al unei expresii. Expresiile pot fi
simple sau complexe. Interogarea următoare evaluează o expresie simplă (o constantă) şi o expresie
mai complexă, care implică numeroase operaţii aritmetice şi câteva apeluri la funcţii:

De asemenea, expresiile se pot referi la coloanele din tabele:

Această interogare formatează numele


preşedinţilor sub forma unui singur şir, prin
concatenarea numelui şi a prenumelui separate
printr-un spaţiu şi formatează locul naşterii sub
forma oraşelor şi statelor separate prin virgulă.

Când folosiţi o expresie pentru a calcula valoarea


unei coloane, expresia este folosită
pentru antetul coloanei. Aceasta poate duce la o
coloană foarte lată, dacă expresia este lungă (aşa
cum o arată interogarea precedentă). Pentru a
rezolva problema, capului de coloană i se poate
atribui un nume, folosind construcţia AS nume.
Asemenea nume se numesc alias-uri de coloană.
Rezultatul interogării anterioare poate deveni astfel
mai semnificativ:
Lucrul cu date calendaristice
Principalul aspect pe care trebuie să-l reţineţi atunci când lucraţi cu date în MySQL este că acestea sunt
întotdeauna reprezentate începând cu anul. Data de 20 decembrie 2010 este reprezentată sub forma
“2010-12-20". Datele nu se scriu nici sub forma “12-20-2010" şi nici sub forma “20-12-2010", aşa cum
poate că eraţi obişnuit să le scrieţi. MySQL oferă numeroase moduri de efectuare a operaţiilor cu date.
Unele dintre aces­tea sunt următoarele:
 Sortare după dată.
 Căutarea unei anumite date sau a unui domeniu de date.
 Extragerea unei părţi dintr-o valoare de tip dată, precum anul, luna sau ziua.
 Calcularea diferenţei între date.
 Calcularea unei date prin adunarea sau scăderea unui interval dintr-o altă dată.
În continuare sunt prezentate exemple cu aceste operaţii.
Pentru a căuta anumite date, fie în funcţie de valoarea exactă, fie prin comparaţie cu o altă valoare,
comparaţi o coloană DATA cu valoarea care vă interesează:
Pentru a testa sau pentru a regăsi părţi ale datelor calendaristice, puteţi folosi funcţii precum YEAR ()
(an), MONTH () (lună) sau DAYOFMONTH () (ziua din lună). De exemplu, pot găsi preşedinţii care
s-au născut în aceeaşi lună (martie) căutând datele a căror valoare a lunii este egală cu 3:

De asemenea, interogarea poate fi scrisă şi în


funcţie de numele lunii:

Pentru a fi mai exact - specificând chiar ziua


naşterii - pot combina interogările pentru MONTH
() şi DAYOFMONTH () pentru a găsi preşedinţii
născuţi într-o zi anume:
Acesta este tipul de interogare pe care îl folosiţi pentru a genera liste cu persoanele născute într-o
anumită zi. Totuşi, nu trebuie să scrieţi o anumită zi, aşa cum s-a procedat în interogarea anterioară.
Pentru a căuta preşedinţii născuţi astăzi, indiferent de ziua din an în care ne găsim, comparaţi data
naşterii lor cu valoarea CURRENT_DATE (dată curentă):

Puteţi scădea o dată dintr-o altă dată. Aceasta vă permite să găsiţi intervalul dintre date, care este util
pentru determinarea vârstelor. De exemplu, pentru a determina preşedintele care a trăit cel mai mult, se
scade data naşterii din data decesului. Pentru aceasta, convertiţi data_nastere şi data_deces în zile
folosind funcţia TO_DAYS(), luaţi diferenţa şi o împărţiţi la 365 pentru a obţine vârsta aproximativă, în ani:

Funcţia FLOOR () folosită în această interogare elimină toate părţile fracţionare din valoarea vârstei,
pentru a genera un întreg. Stabilirea diferenţei între date este de asemenea utilă pentru determinarea
distanţei în raport cu o anumită dată de referinţă.
Stabilirea corespondenţei cu un model
MySQL vă permite să căutaţi valori care corespund unui anumit model. Astfel, puteţi selecta înregistrări
fără a furniza o valoare exactă. Pentru a executa o operaţie de stabilire a corespondenţei cu un model,
folosiţi operatori speciali (LIKE şi N0T LIKE) şi specificaţi un sir care conţine caractere de înlocuire.
Caracterul _ corespunde oricărui caracter, iar % corespunde oricărei secvenţe de caractere (inclusiv o
secvenţă vidă). Stabilirea corespondenţei cu un model folosind LIKE şi NOT LIKE nu face diferenţa între
majuscule şi minuscule.
Acest model găseşte numele care încep cu W (sau cu w, dacă ar exista):

Această corespondenţă cu un model este eronată. Interogarea ilustrează o eroare comună, şi anume
folosirea unui model cu un operator aritmetic de comparaţie. Unica posibilitate ca această operaţie să
reuşească este ca în coloană să se afle chiar şirul "W% " sau "w% “.

Acest model corespunde numelor de familie care Acest model corespunde numelor de familie care
conţin litera W sau w oriunde în interiorul numelui: conţin exact patru caractere:
Generarea de sumare
Una dintre cele mai utile operaţii pe care MySQL le poate face pentru
dumneavoastră este să rezume mari cantităţi de date brute şi să realizeze sumarul
acestora. MySQL devine un aliat puternic atunci când veţi învăţa să-l folosiţi pentru
a genera sumare, deoarece aceasta este o activitate extrem de obositoare,
consumatoare de timp şi supusă la erori atunci când este efectuată manual.

O altă formă de realizare a unui sumar este numărarea, folosind funcţia COUNT (). Dacă
folosiţi COUNT(*), aceasta vă indică numărul de rânduri selectat de interogarea
dumneavoastră. Dacă interogarea nu are nici o clauză WHERE, COUNT(*) vă indică
numărul rândurilor din tabelul dumneavoastră.
COUNT() poate fi combinată cu ORDER BY şi LIMIT pentru a găsi, de exemplu, cele mai bine
reprezentate patru state din tabelul preşedinte:

Există funcţii de sumar altele decât C0UNT().


Funcţiile MIN(), MAX(), SUM() şi AVG() sunt utile
pentru determinarea valorii minime, maxime,
totale şi medii dintr-o coloană

O interogare care se poate efectua,


dar care nu are niciun sens!
Bibliografie:
1. MySql – Paul DuBois;
2. Baze de date – Note de curs, Lector Adrian Runceanu

!!!! MULŢUMESC PENTRU ATENŢIE !!!!

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