curs programare web Alte exemple MySql Mai întâi creem baza de date CURSVALUTAR, cu tabelele cursvalutar cu câmpurile tip_valuta, data, vanzare, cumparare şi tranzacţie cu câmpurile tip_valuta, data, nr_bucati, tip_tranzactie. Exemplele de mai jos vă ajută să aprofundaţi comanda SELECT, funcţiile COUNT, SUM, AVG, MAX şi operatorii aritmetici, logici şi ai şirurilor de caractere. Exemple: Cod în fereastra SQL: SELECT * FROM cursvalutar Afişare:
Cod în fereastra SQL: SELECT tip_valuta, data,vanzare, vanzare + 0.50 AS vanzare_cu_adaos FROM cursvalutar Afişare:
Ce este ultima coloana? Nu face parte din tabelul original. SQL vă permite crearea unor coloane virtuale sau derivate prin combinarea sau modificarea coloanelor existente (câmpuri calculate).
1
curs programare web Aţi mai învăţat ceva şi anume alias - uri, iar dacă vă întrebaţi la ce va folosesc, când vi se cere sa scrieţi un generator de rapoarte amintiţi-vă de ceea ce aţi învăţat acum. Exemplu: Comandă în fereastra SQL: SELECT tip_valuta, data, (vanzare/2) AS reducere FROM cursvalutar; Afişare:
Exemplu cu operatori de comparaţie După cum semnifică şi numele lor , operatorii de comparaţie compară expresiile şi returnează una din următoarele trei valori: TRUE ( Adevărat ), FALSE (Fals) sau UnKnown (Necunoscut). În termenii folosiţi pentru baze de date, NULL semnifică absenţa datelor dintr-un câmp. Nu înseamnă că o coloană conţine o valoare zero sau spaţiu, un zero sau spaţiu sunt valori. NULL înseamnă că în câmpul respectiv nu se găseşte nimic. Dacă faceţi o comparaţie de genul Field = 9 si Field este NULL, comparaţia va returna UnKnown. Observaţi că tabelul AGENDA are o valoare NULL în câmpul telefon al persoanei Kiki Riki. Dacă vreodată încercaţi să găsiţi o eroare logică de programare care pare să nu aibă rezolvare, asiguraţi-vă că nu încercaţi să comparaţi o valoare NULL şi reveniţi la valoarea prestabilită de FALSE. Tabelul arată astfel:
Comanda din fereastra SQL:
SELECT * FROM agenda
2
curs programare web Haideţi să încercăm să găsim valoarea NULL: Comanda SQL: SELECT * FROM agenda WHERE telefon = null Afişare: no rows selected. Nu aţi găsit nimic deoarece comparaţia telefon = null returnează valoarea false datorită faptului că rezultatul este necunoscut. Acesta este un bun loc de folosire a unei valori is null , modificând instrucţiunea WHERE în WHERE telefon is null. În acest caz veţi primi ca răspuns al comenzii toate liniile în care există o valoare NULL.. Comanda SQL: SELECT * FROM agenda WHERE telefon is null Afişare:
Exemplu cu operatorul LIKE Cum procedaţi dacă vreţi să selectaţi părţi ale unei baze de date care se potrivesc unui model dar nu foarte exact? Aţi putea folosi operatorul LIKE. Priviţi următorul exemplu: Comanda SQL: SELECT * FROM agenda WHERE nume LIKE 'B%' Afişare:
Veţi primi ca răspuns toate înregistrările în care numele începe cu B. Exemplu cu Underscore(Subliniere)( _ ) Semnul underscore este un caracter de înlocuire pentru un singur caracter. Dacă dorim să găsim numele de 4 caractere vom da ca criteriu 4 liniuţe underscore ____ Comanda SQL: SELECT * FROM agenda WHERE nume LIKE '____' Afişare:
3
curs programare web Exemplu concatenare Funcţia CONCAT concatenează şiruri de caractere. Următorul exemplu arată acest lucru: Comanda SQL: SELECT CONCAT(nume,’ ‘,prenume) AS nume_intreg FROM agenda Afişare:
Revenim cu exemple din baza de date CURSVALUTAR. Exemplu relaţie între tabelele cursvalutar şi tranzactie: Comanda relaţionare SQL: SELECT * FROM cursvalutar, tranzactie WHERE (cursvalutar.tip_valuta=tranzactie.tip_valuta) AND (cursvalutar.data=tranzactie.data) Afişare:
Exemplu relaţionare pentru aflarea tranzacţiilor de cumpărare valută: Comanda SQL: SELECT * FROM cursvalutar, tranzactie WHERE (tip_tranzactie = 'cumparare') AND (cursvalutar.tip_valuta=tranzactie.tip_valuta) AND (cursvalutar.data = tranzactie.data) Afişare:
4
curs programare web Analog se pot determina tranzacţiile de vânzare valută. Exemplu relaţionare tabele: să se determine tranzacţiile de cumpărare EURO. Comanda SQL: SELECT * FROM cursvalutar, tranzactie WHERE (tip_tranzactie = 'cumparare') AND (cursvalutar.tip_valuta= 'EUR') AND (cursvalutar.tip_valuta=tranzactie.tip_valuta) AND (cursvalutar.data = tranzactie.data) Afişare:
Exemplu relaţionare tabele: să se determine numărul tranzacţiilor de vânzare EURO Comanda SQL: SELECT COUNT(tip_tranzactie) AS numar_vanzari_EURO FROM cursvalutar, tranzactie WHERE (tip_tranzactie = 'vanzare') AND (cursvalutar.tip_valuta= 'EUR') AND (cursvalutar.tip_valuta=tranzactie.tip_valuta) AND (cursvalutar.data = tranzactie.data) Afişare:
Exemplu relaţionare tabele: să se determine valoarea medie a tranzacţiilor de vânzare EURO în luna iulie 2010 Comanda SQL: SELECT AVG( cursvalutar.vanzare * tranzactie.nr_bucati ) AS medie_vanzari_EURO_iulie FROM cursvalutar, tranzactie WHERE (tip_tranzactie = 'vanzare') AND (cursvalutar.tip_valuta = 'EUR') AND (cursvalutar.data >= "2010-07-01") AND (cursvalutar.data <= "2010-07-31") AND (cursvalutar.tip_valuta = tranzactie.tip_valuta) AND (cursvalutar.data=tranzactie.data) Afişare:
Exemplu : să se determine valoarea maximă a cursului EURO în luna iulie 2010 Comanda SQL: SELECT MAX(vanzare) AS maxim_EURO_iulie FROM cursvalutar WHERE (cursvalutar.tip_valuta = 'EUR') AND (cursvalutar.data >= "2010-07-01") AND (cursvalutar.data <= "2010-07-31") Afişare:
5
curs programare web Exemplu : să se determine ziua cu valoarea maximă a cumpărărilor EURO în luna iulie 2010 Comanda SQL: SELECT cursvalutar.data, cursvalutar.vanzare * tranzactie.nr_bucati AS cumparare_EURO_iulie FROM cursvalutar, tranzactie WHERE (tip_tranzactie = 'cumparare') AND (cursvalutar.tip_valuta = 'EUR') AND (cursvalutar.data >= "2010-07-01") AND (cursvalutar.data <= "2010-07-31") AND (cursvalutar.tip_valuta = tranzactie.tip_valuta) AND (cursvalutar.data=tranzactie.data) GROUP BY cursvalutar.data Afişare:
Vom încheia cu puţină teorie din bazele de date relaţionale. Relatii între tabele Exista 3 tipuri de relaţii într-o BD relaţională: • • •
Relaţie una-la-una - Există câte una/unul din fiecare în relaţie Relaţie una-la-mai-multe - O linie dintr-un tabel este legată la mai multe linii din alt tabel (un client ar putea face mai multe comenzi). Relaţie mai-multe-la-mai-multe - Mai multe linii din tabelul 1 sunt legate la mai multe din tabelul 2 (de exemplu, în cazul a două tabele, CARTI şi AUTORI, o carte ar putea fi scrisă de doi coautori, fiecare dintre ei mai având şi alte carti scrise).
Sfaturi de proiectare pentru baze de date pentru viitorul dvs proiect 1. 2. 3. 4. 5. 6.
Gândiţi-vă la obiectele reale pe care le modelaţi. Evitaţi să stocaţi informaţiile care sunt redundante. Folosiţi valori "atomice" în coloanele tabelului (adică nu memoraţi valori multiple în cadrul aceluiaşi câmp al tabelului). Alegeţi chei foarte sensibile, care pot identifica unic o înregistrare. Gândiţi-vă la ce vreţi să cereţi prin interogări din baza de date şi includeţi informaţii adiţionale. Evitaţi să folosiţi prea multe atribute nule (coloane din înregistrări fără conţinut).
6
curs programare web
TEMĂ Se dă baza de date editura cu tabelele cărti(codc, titlu, coda, pret, nr_pagini, an) şi autori(coda, nume, prenume, adresa, email). Să se scrie comenzile MySql pentru următoarele operaţii: • • • • •
Determinarea cărţilor din baza de date scrise de autorul „Mihai Eminescu” Determinarea valorii totale a cărţilor baza de date scrise de „George Cosbuc” Afişarea numărului de cărţi apărute în anul 2000 Afişarea în funcţie de an a cărţilor scrise de un autor ales de dvs Afişarea autorilor şi a listei de cărţi publicate de aceştia pe fiecare an
7