curs 6 - elth.pub.roelth.pub.ro/~abordianu/cursia6.pdf · curs 6. 1. introducere • structured...

77
CURS 6

Upload: others

Post on 23-Sep-2019

15 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

CURS 6

Page 2: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

1. Introducere

• Structured Query Language (Limbaj structurat de interogare).

• MySQL este un sistem client/server de gestiune a bazelor de date

relaţionale.

• MySQL include un server SQL, programe client pentru accesul la server,

instrumente administrative şi o interfaţă de programare pentru scrierea

propriilor programe.

Page 3: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

1. Introducere

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

• SQL este adesea folosit în combinație cu un limbaj procedural (limbaj

care folosește o serie de instrucțiuni executate secvențial) - de exemplu

MySql + PHP

Page 4: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

2. De ce să alegem 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.

Page 5: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

2. De ce să alegem MySQL?

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.

Sunt disponibile o multime de interfeţe de programare pentru limbaje

precum C, Java, PHP. Astfel, există opţiunea de a folosi programe client

preambalate sau de a vă scrie propriile programe client pentru aplicaţii

personalizate.

Page 6: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

2. De ce să alegem MySQL?

6. Conectivitate şi securitate. MySQL poate fi folosit integral în reţele, iar bazele

de date sunt accesibile de oriunde din Internet, deci datele pot fi împărțite cu

oricine, oriunde. MySQL are controlul accesului, astfel încât persoanele care nu

au dreptul să 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.

8. Distribuţie liberă. MySQL este uşor de obţinut.

Page 7: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

3. Terminologie structurală

MySQL este clasificat ca sistem de gestiune a bazelor de date relaţionale (SGBDR).

• Baza de date (literele BD din abrevierea SGBDR) constituie depozitul pentru

informaţiile stocate, structurat într-un mod simplu:

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.

Page 8: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

• Sistemul de gestiune (literele SG) este programul care vă permite să vă folosiţi

datele prin inserarea, regăsirea, modificarea sau ştergerea înregistrărilor.

• Cuvântul „relaţional" (iniţiala R) indică un anumit tip de SGBD, adică unul care

se pricepe foarte bine la relaţionarea 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.

3. Terminologie structurală

Page 9: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

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.

• -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 este vizualizată pe ecran).

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 1805 to server version: 3.22.25-log

Type 'help' for help.

mysql>

După ce stabiliţi o conexiune

cu serverul, puteţi încheia

sesiunea oricând tastând

QUIT: mysql> QUIT Bye

Page 10: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

5. Interogări

Iată un exemplu de interogare simplă şi rezultatul acesteia:

Această comandă indică data şi ora 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.

Page 11: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

5. Interogări

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.

Page 12: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

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.

Page 13: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

6. Crearea bazei 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.

Pentru ca baza de date samp_db să devină curentă trebuie sa folosiți

instrucţiunea 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.

Page 14: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

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.

nume

Redundanţa datelor

Tip chestionar-test

Data examinare

Punctaj obţinut

Page 15: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

O cerinţă impusă tabelului eveniment 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.

Page 16: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Instrucţiunea CREATE TABLE pentru tabelul elev arată astfel:

Instrucţiunea CREATE TABLE creează un tabel denumit elev cu trei

coloane: Nume, Sex şi Id_elev.

Page 17: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

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 dacă există un set limitat de valori pe care le poate

conţine o coloană. Se putea folosi CHAR(1), dar ENUM specifică mai exact care

pot fi valorile din coloană. 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 ').

Page 18: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Id_elev este o coloană de tip întreg care va conţine numere unice de

identificare a elevilor. Declaraţia coloanei Id_elev 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.)

Page 19: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Instrucţiunea CREATE TABLE pentru tabelul eveniment arată astfel:

Data conţine o valoare DATE standard MySQL, în format "AAAA-LL-ZZ”.

Tip reprezintă tipul punctajului. 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 Id_elev din

tabelul elev. Utilizarea opţiunii AUTO_INCREMENT ne permite să generăm cu

uşurinţă valori unice ale identificatorilor de eveniment. Valorile particulare sunt mai

puţin importante decât unicitatea lor.

Page 20: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Instrucţiunea CREATE TABLE pentru tabelul puncte arată astfel:

Page 21: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

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 Id_elev şi Eveniment_id sunt numere întregi și 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 Id_elev. Î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 Id_elev (câte una pentru fiecare chestionar şi test).

Page 22: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

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

Page 23: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Un alt exemplu este cel al unei baze de date în care se strâng

informaţii despre candidatii la un post de inginer.

drop table if exists candidat;

CREATE TABLE candidat (

id_candidat SMALLINT AUTO_INCREMENT

NOT NULL,

nume VARCHAR(20) NOT NULL,

initiala VARCHAR(3) NOT NULL,

prenume VARCHAR(20) NOT NULL,

data_nastere DATE NOT NULL,

email VARCHAR(100) NULL,

adresa VARCHAR(50) NULL,

judet VARCHAR(3) NULL,

cod_postal VARCHAR(10) NULL,

telefon VARCHAR(20) NULL,

interese VARCHAR(225) NULL,

PRIMARY KEY (id_candidat)

);

Page 24: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

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.

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

Page 25: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

6.2. Adăugarea de noi înregistrări

Daca se foloseste instrucțiunea INSERT trebuie specificat tabelul în care se dorește inserarea unui

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, iar

execuţia sa de către server este mai eficientă.

INSERT INTO candidat VALUES (1,"Ionescu","N","Rodica","1981-11-

03","[email protected]", "zorilor 73", "VL","23415","07100000","fotografie");

INSERT INTO identificare VALUES ("Popescu“,”Alex”), (“Ion”,”Radu”);

Page 26: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

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ă):

INSERT INTO identificare (nume, prenume) VALUES ("Popescu“,”Alex”), (“Ion”,”Radu”);

INSERT INTO elev (nume, sex) VALUES (“Marius“,”M”), (“Ioana”,”F”), (“Ionut”,”M”);

Page 27: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

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 candidat.txt şi o trimite serverului, pentru a

fi încărcată în tabelul candidat.

INSERT INTO elev SET nume =“Marius“, sex=”M”;

LOAD DATA LOCAL INFILE “candidat.txt” INTO TABLE candidat;

Page 28: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

6.3. Regăsirea informaţiilor

Instrucţiunea SELECT 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.

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

Page 29: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Puteţi denumi în mod explicit coloana sau

coloanele pe care doriţi să le vedeţi. Pentru a

selecta numai numele elevilor, procedaţi

astfel:

Dacă precizaţi mai mult de o coloană, separaţi numele

coloanelor prin virgule. Instrucţiunea următoare este

echivalentă cu SELECT * FROM elev, dar fiecare

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. De exemplu:

Page 30: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

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.

Page 31: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

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:

Page 32: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

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.

Page 33: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

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.

Page 34: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

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 candidatilor în ordine

descrescătoare, folosiţi DESC astfel:

Page 35: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

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.

Page 36: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Limitarea rezultatelor unei interogări

Limitarea rezultatelor unei interogăriCâ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 trei candidati:

Page 37: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Limitarea rezultatelor unei interogări

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 treilea rând al rezultatului:

Page 38: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

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. 2 inseamna ca are doua

cifre dupa virgulă.

Page 39: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

De asemenea, expresiile se pot referi la coloanele din tabele

Această interogare formatează numele candidatilor sub forma unui singur şir,

prin concatenarea numelui şi a prenumelui separate printr-un spaţiu.

Page 40: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

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:

Page 41: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server
Page 42: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

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 27

noiembrie 2015 este reprezentată sub forma “2015-11-27". Datele nu se scriu nici sub

forma “11-27-2015" şi nici sub forma “27-11-2015“.

MySQL oferă numeroase moduri de efectuare a operaţiilor cu date. Unele

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

Page 43: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

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

Page 44: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

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, puteti găsi candidatii 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:

Page 45: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Pentru a fi mai exact - specificând chiar ziua naşterii - pot combina interogările pentru

MONTH () şi DAYOFMONTH () pentru a găsi candidatii născuţi într-o zi anume:

Page 46: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

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 NOT 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 corespunde numelor de familie care conţin litera R sau r oriunde în interiorul

numelui:

Page 47: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Acest model corespunde prenumelor care conţin exact sase caractere:

Page 48: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server
Page 49: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

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

Page 50: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

COUNT() poate fi combinată cu ORDER BY şi LIMIT.

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ă

Page 51: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server
Page 52: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Baza de date poate fi foarte ușor exploatată prin intermediul limbajului

PHP, dar şi cu alte limbaje (de exemplu Java).

Pentru interacțiunea cu baza de date sunt necesari cinci pași:

• se creează o conexiunea la sistemul de baze de date

• se selectează o bază de date

• se execută o instrucțiune SQL

• se folosesc datele întoarse

• se închide conexiunea.

PHP și MySQL

Script MySQL:

Page 53: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Exemplu PHP și MySQL

Page 54: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Introducere

• Limbajul PHP este unul dintre cele mai importante limbaje de programare web,

codul sursă este public, fiind accesibil tuturor şi server-side (rularea sa nu se face pe

calculatorul celui care vizualizează pagina, ci pe server-ul care o conţine).

• PHP este prescurtarea de la Hypertext PreProcessor.

• Limbajul a fost început în 1994 ca o extensie a limbajului server-side Perl, şi apoi

ca o serie de CGI-uri compilate, de către Rasmus Lerdorf, pentru a genera un

curriculum vitae şi pentru a urmări numărul de vizitatori ai unui site.

• A evoluat apoi în PHP/FI 2.0, dar proiectul open-source a început să ia amploare

după ce Zeev Suraski şi Andi Gutmans au lansat o nouă versiune a interpretorului

PHP în vara anului 1998, această versiune primind numele de PHP 3.0. Tot ei au

schimbat numele în acronimul amintit mai sus, până atunci PHP-ul fiind cunoscut ca

„Personal Home Page tools”.

Page 55: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Introducere

• În prezent este utilizată versiunea 6 a acestui limbaj.

• Spre deosebire de paginile HTML, care puteau fi verificate și pe calculatorul local,

paginile PHP nu pot fi verificate decât dacă sunt gazduite pe un server web care are

instalat PHP.

• Când accesăm o pagina HTML serverul care o găzduiește trimite pagina HTML

către browser spre afișare.

• În cazul unei pagini PHP serverul citește codul PHP, îl interpretează și generează

dinamic pagina HTML care este trimisă browserului spre afișare. Acesta este motivul

pentru care utilizatorii folosesc PHP pentru construirea unor pagini cu conținut

dinamic.

Page 56: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Introducere

• Limbajul PHP, în marea majoritate a cazurilor, se foloseşte sub formă de secvenţe de

cod inserate în cadrul unui document HTML.

• Structura unui script PHP este foarte asemănătoare cu cea a unui cod scris în limbajul

C, mai ales în sensul în care structurile de programare au aceeaşi sintaxă şi aceeaşi

funcţionalitate.

• Rolurile de bază ale unui script PHP constau în aceea că script-ul poate prelua date

trimise de către o pagină web de la un client (în general, datele pot fi trimise de către o

pagină web prin intermediul formularelor) şi de a executa o secvenţă de program în

urma căreia va rezulta un cod HTML, cod pe care clientul îl va primi sub forma unei

pagini web.

Page 57: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Introducere

• Clientul nu va avea acces la codul efectiv al script-ului, ci, prin faptul că acesta se află

pe server şi se rulează tot pe acesta, va primi direct HTML-ul generat de script.

• Scriptul PHP este inserat între tag-urile : „<?php” şi „?>”.

• Instrucţiunea „echo” cuprinsă între acestea este o instrucţiune specifică limbajului

PHP, ea având rolul de a scrie în pagina web textul ce urmează după, cel cuprins între

ghilimele.

• Un fişier ce conţine script-uri PHP se salvează de regulă cu extensia .php.

Page 58: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Introducere

• Separatorul dintre instrucţiunile unui script .php este caracterul ”;”.

• În mod implicit limbajul PHP nu este case-sensitive (deci nu face diferenţa între literele

mari şi cele mici) în ceea ce priveşte cuvintele rezervate ale limbajului (instrucţiunile)

respectiv funcţiile (fie că e vorba de cele predefinite ale limbajului, fie că e vorba de cele

definite de către utilizator).

• Este case-sensitive în ceea ce priveşte numele de variabile.

Page 59: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Constante

• Definirea constantelor de către utilizator, în sensul că prin anumiţi

identificatori putem folosi valori constante, se face cu ajutorul funcţiei

define.

• Forma generală a acesteia este:

define(”nume constanta”, valoare);

Exemplu:

<?php

define("pi",314e-2);// am definit o constanta numerica reala

define("greeting","Buna ziua!");//o constanta de tip sir de caractere

echo greeting,"<br>";// afisam constanta sir de caractere

echo "Constanta pi, aproximata cu 2 zecimale este ",pi;//iar aici pe cea numerica

?>

Page 60: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Variabile

În PHP identificatorii rezervaţi variabilelor încep cu caracterul ”$”.

Page 61: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server
Page 62: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Exemplu 1: IF

• if(expresie) instrucţiune1; [else instrucţiune2;]

Page 63: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Exemplu 2: WHILE

• while(expresie) instrucţiune;

Page 64: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Exemplu 3: FOR

• for(expresie_iniţializare;expresie_continuare;expresie_incrementare) instrucţiune;

Page 65: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Exemplu 4: CONTINUE și BREAK

Page 66: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Exemplu 5

Page 67: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Exemplu 6: SIRURI

Page 68: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server
Page 69: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Exemplu 7

Page 70: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Exemplu 8

Page 71: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server
Page 72: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Exemplu 9: ARRAY

Page 73: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Exemplu 10

Page 74: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Exemplu 11

Page 75: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server
Page 76: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Exemplu 12: FUNCTII

Page 77: CURS 6 - elth.pub.roelth.pub.ro/~abordianu/cursIA6.pdf · CURS 6. 1. Introducere • Structured Query Language (Limbaj structurat de interogare). • MySQL este un sistem client/server

Vă mulțumesc pentru atenție !