curs programare web
OPERAŢII CU TABELE Cele mai uzuale operatii cu bazele de date sunt: Comanda
Semnificaţie
CREATE
crează o bază de date sau un tabel
DROP
şterge o bază de date sau un tabel
INSERT
adaugă înregistrări într-un tabel
DELETE
şterge înregistrări dintr-un tabel
UPDATE
modifică înregistrarile dintr-un tabel
SELECT
selectează un tabel
ALTER
alterarea unui tabel
Comenzile le puteţi regăsi în PhpMaAdmin în antetul tabelelor. Comanda “CREATE” în cazul tabelelor crează un nou tabel având o anumită structură. Sintaxa ei o puteţi observa pe exemplul de mai jos: CREATE TABLE 'about' ( 'cod' INT( 3 ) NOT NULL , 'adresa' VARCHAR( 50 ) NOT NULL , 'data_nastere' DATE NOT NULL , PRIMARY KEY ( 'cod' ) ) TYPE = innodb; Comanda “INSERT” inserează un nou rând în tabel: INSERT INTO 'about' ( 'cod' , 'adresa' , 'data_nastere' ) VALUES ('100', 'Str. Marasesti nr. 77 bl. 7', '1975-07-20'); Comanda “UPDATE” face modificarea valorilor din tabel. De ex., dacă se dore;te modificarea codului persoanei din 100 în 105 se scrie următorul cod: UPDATE 'about' SET 'cod' = '105' WHERE 'cod' =100 LIMIT 1 ; Comanda “DELETE” efectuează ştergerea unor înregistrări din tabel. De ex., dacă dorim ştergerea persoanei cu codul 100: DELETE FROM 'about' WHERE 'cod' = 100 LIMIT 1 Comanda “ALTER” modifică structura tabelului. Dacă am de adăugat, şters, modificat câmpuri în tabel folosesc această comandă. De ex., dacă se doreşte modificarea numelui câmpului “adresa” dăm următoarea comandă: ALTER TABLE 'about' CHANGE 'adresa' 'adresa_de_acasa' VARCHAR( 50 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL Comanda “DROP” şterge un tabel. De ex., dacă dorim ştergerea tabelului “about” din baza de date se foloseşte codul: DROP TABLE 'about'
1
curs programare web
VIZUALIZAREA TABELELOR Vizualizarea şi consultarea tabelelor se face cu comanda “SELECT”, care reprezintă o adevărată provocare, deoarece aparent este simplă, dar, pe traseu, se poate complica, depinzând de cerinţele asupra tabelului. Sintaxa ei este următoarea: SELECT [ALL | DISTINCT] [TOP nExpr [PERCENT]] [Alias.] Select_Item [AS Column_Name] [, [Alias.] Select_Item [AS Column_Name] ...] FROM [FORCE] [DatabaseName!]Table [[AS] Local_Alias] [[INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN DatabaseName!]Table [[AS] Local_Alias] [ON JoinCondition …] [[INTO Destination] | [TO FILE FileName [ADDITIVE] | TO PRINTER [PROMPT] | TO SCREEN]] [PREFERENCE PreferenceName] [NOCONSOLE] [PLAIN] [NOWAIT] [WHERE JoinCondition [AND JoinCondition ...] [AND | OR FilterCondition [AND | OR FilterCondition ...]]] [GROUP BY GroupColumn [, GroupColumn ...]] [HAVING FilterCondition] [UNION [ALL] SELECTCommand] [ORDER BY Order_Item [ASC | DESC] [, Order_Item [ASC | DESC] ...]] SELECT selectează înregistrările, FROM determină tabelul din care fac parte înregistrările şi WHERE se foloseşte în cazul în care filtrez datele (afişez doar anumite înregistrări pe un criteriu dat). Exemple: Dacă doresc vizualizarea întregului tabel dau codul: SELECT * FROM agenda Dacă doresc doar vizualizarea numelui şi prenumelui (proiecţia-apar doar anumite câmpuri) dau codul: SELECT nume, prenume FROM agenda Dacă doresc selectarea datelor afişate după anumite criterii (selecţia), de exemplu persoanele cu vârsta de 3 ani scriu codul: SELECT * FROM agenda WHERE varsta=3 Criteriile de afişare pot fi complexe, asa că vom folosi operatorii AND, OR. De exemplu, dacă vrem să afişăm persoanele cu prenumele “Kiki” cu vârsta mai mare de 20 de ani folosim codul SQL: SELECT * FROM agenda WHERE prenume='Kiki' AND varsta>=20 Dacă vrem să afişăm persoanele cu nume “Babeş” sau “Chiru” folosim codul: SELECT * FROM agenda WHERE nume='Babes' OR nume='Chiru'
2
curs programare web
Exemple de interogări Selecţia, proiecţia , reuniunea Pentru a înţelege ciudăţeniile comenzii “SELECT” vom lua exemple de tabele pe care le vom filtra cu ajutorul acestei comenzi. Fie baza de date SOCIETĂŢI cu tabelele AGENŢI şi FACTURI. Tabelul AGENŢI va avea câmpurile CUI, denumire, adresa, zona, manager Tabelul FACTURI va avea câmpurile data, val, tip.
Ce agenti economici mari au sediul în zona BURDUJENI? SELECT * FROM AGENTI WHERE zona="BURDUJENI" Care sunt facturile emise în data de 29.01.1999, cu valoare mai mare de 2000000 corespunzător apei potabile? SELECT * FROM FACTURI WHERE DATA= {^1999-01-29}AND TIP=12 AND VAL >2000000 Care sunt facturile pentru care valoarea consumului de apă potabilă(tip 12) este mai mare de 1500000 şi mai mică de 4000000? SELECT * FROM FACTURI WHERE Tip=12 AND Val>1500000 AND val <4000000 Aceeaşi interogare se poate scrie astfel: SELECT * FROM FACTURI WHERE Tip=12 AND Val BETWEEN 1500000 AND 4000000 Care sunt agenţiile al căror nume începe cu "S" şi sunt societăţi pe acţiuni? SELECT * FROM Agenti WHERE Nume LIKE 'S%SA' Care sunt agenţiile al căror nume este format din 9 caractere, începe cu "S" şi sunt societăţi pe acţiuni? SELECT * FROM Agenti WHERE Nume LIKE "S______SA" Care sunt agenţiile din zonele: CENTRALĂ şi ZAMCA? SELECT * FROM AGENTI WHERE Zona = 'CENTRALĂ' OR Zona='ZAMCA' Sau SELECT * FROM AGENTI WHERE Zona IN ('CENTRALĂ','ZAMCA') Care sunt agenţiile pentru care nu s-a introdus numele managerului? SELECT * FROM AGENTI WHERE manger IS NULL În ce zone ale oraşului îşi au sediul agenţii comerciali, clienţi ai firmei? SELECT DISTINCT Zona FROM Agenti Dacă zona se repetă pentru mai mulţi agenţi comerciali clienţi, acea zonă se afişează o singură dată. Care este denumirea fiecărui agent comercial şi adresa sa? SELECT denumire, adresa FROM Agenti
3
curs programare web Dacă se doreşte o prezentare ordonată a agenţilor se utilizează clauza ORDER BY. SELECT * FROM Agenti ORDER BY denumire Dacă se doreşte ordonarea descrescătoare se foloseşte următoarea formulare: SELECT * FROM Agenţi ORDER BY zona ASCENDING, denumire DESCENDING Pornind de la tabelele Agenti1 şi Agenti2 , tabelul reuniune care reprezintă tabelul AGENTI va fi obţinut în SQL prin fraza: SELECT * FROM AGENTI1 UNION SELECT * FROM AGENTI2 Atenţie: codurile de mai sus pot fi incluse în scripturi PHP ajutându-ne astfel să legăm site-ul nostru la baze de date, să modificăm bazele de date în funcţie de nevoile site-ului şi să îl facem un site dinamic. Pentru a da un cod MySql într-un script PHP trebuie să fac conectarea la o bază de date într-un script PHP pe care apoi îl includ în scripturile care vor lucra cu baze de date. Conectarea se face folosind 3 instrucţiuni: $conex=mysql_connect('localhost','user','parola') or die ('Nu ma pot conecta la server '.mysql_error()); mysql_select_db('agenda',$conex) or die ('Nu am putut selecta baza de date'); $query=mysql_query('SELECT * FROM agenda') or die ('Interogare nereushita !!!');
TEMĂ Se dă baza de date Angajaţi având tabelul Angajaţi cu câmpurile cnp, nume, data_nastere, departament, salariu. 1. 2. 3. 4. 5. 6. 7.
Să se afişeze femeile(folosind cnp) care lucrează în departamentul IT. Să se afişeze bărbaţii cu salariu de 1000 lei. Să se afişeze angajaţii născuţi după 1980. Să se afişeze angajaţii al căror nume începe cu “A” şi “R” Să se afişeze angajaţii care o duc mai bine, cu salarii mai mari de 4000 de lei. Să se afişeze angajaţii din departamentele PR şi IT. Să se afişeze departamentele cu angajaţi o singură dată fiecare.
4