Sunteți pe pagina 1din 111

Definiie

Server-ele Web au ca funcionalitate de baz, recepionarea de cereri anonime de


la clieni i furnizarea de informaii ntr-o manier dorit a fi eficient i rapid
[Ricart1998].
Apache este un program care servete informaii prin protocolul de comunicaii HTTP.
Protocolul HTTP este baza pe care funcioneaz Internetul, iar programele care sunt
capabile s furnizeze informaii prin HTTP se numesc servere de internet.=> Server-ul
Apache este un server de internet.
Un server de internet, ca funcie de baz, permite afiarea paginilor de Internet cu text
i imagini.
Serverul Apache folosete HTTP pentru:
1. a comunica cu Internet Explorer
2. pentru a analiza URL-ul

3. stabili protocolul de conectare (n cazul nostru http://localhost)

Caracteristici
Apache
1. furnizeaz o implementare robust a protocolului HTTP
2. rmne o platform pe baza creia indivizii i instituiile pot s construiasc sisteme
n scopuri experimentale
3. este o entitate organic, cei care beneficeaz de ea, prin utilizare contribuie de cele
mai multe ori la dezvoltarea ulterioar a platformei.
4. este flexibil, portabil;
5. ofer siguran i extensibilitate.
6. se distribuie gratuit
7. poate rula att sub Unix ct i sub Windows

Apache -a reprezentat prima alternativ viabil la Netscape Communications


Corporation, i a evoluat rapid n funcionalitate i performan ca un rival competitiv
pentru alte servere web bazate pe Unix.
-este dezvoltat de o comunitate deschis de programatori sub emblema
Apache Software Foundation. Aplicaia este disponibil pentru o mare varietate de
sisteme de operare incluznd Unix, FreeBSD, Linux, Solaris, Novell NetWare, Mac OS
X, Microsoft Windows si OS/2.
-este caracterizat ca fiind un software gratuit i open source, acesta fcnd ca,
ncepnd din aprilie 1996, el s fie cel mai popular server HTTP. Cu toate c n
noiembrie 2005 a nceput s piard din cota de pia, n aprilie 2008 Apache sttea nc
la baza a peste 50 % din site-urile web.
-prima versiune a serverului a fost creat de Robert McCool.
-suport o mare varietate de module care i extind funcionalitatea, acestea
variaz de la server side programming i pn la scheme de autentificare si anume:
mod_ssl ofera suport pt SSL si TLS modulul proxyun, modul de rescriere URL (cunoscut
ca un motor de rescriere mod_rewrite), custom log files (mod_log_config) i suport de
filtrare (mod_include i mod_ext_filter).
- este virtual hosting (gzduirea virtual), care const n posibilitatea de a
gzdui mai multe situri simultan pe acelai server.
-limbajele suportate sunt:PHP, PERL, Python
Principalul competitor al serverului Apache este Microsoft Internet Information
Services (IIS), urmat de Sun Java System Web Server al companiei Sun Microsystems
i multe altele, cum ar fi Zeus Web Server.

Apache este folosit de cele mai mari site-uri din lume:motorul de cutare folosit
de Google utilizeaza o versiune modificat de Apache numit Google Web
Server (GWS); i proiectele Wikimedia inclusiv Wikipedia ruleaz tot pe un
server Apache
Fisierele jurnal ale serverului Apache
Cuprinde 2 fisiere jurnal care nu exista pana in momentul primei porniri a
serverului:
I. access_log se foloseste pentru a urmarii solicitarile clientilor. In Windows
fisierul se numeste access.log. In acest fisier se pot pastra urmatoarele date in
momentul cand un client solicita un anumit fisier de pe serverul Apache: adresa
IP a clientului, documentul solicitat, codul de stare HTTP si ora exacta la care
s-a efectuat cererea.
II.error_log este folosit pentru a inregistra evenimente importante : de exemplu
erorile aparute pe server sau repornirile serverului. In Windows fisierul se
numeste error.log. Acest fisier cuprinde toate mesajele de eroare, mesajele
de pornire si orice alt mesaj relevant aparut pe durata functionarii serverului.
(Indicatie: cand sunt pb cu serverul Apache acesta este primul loc in care este
indicat sa se caute)

Prima pornire a serverului Apache


Presupune realizarea unui set minimal de configurari in fisierul http.conf.
Fisierul http.conf se poate edita cu ajutorul Notepad-ului.
Serverul nu este conectat la o retea se foloseste 127.0.0.1. In mod implicit
serverul asculta portul 80 dar acesta se poate modifica cu directive Listen.

Directiva Listen permite modificarea IP. Directiva Listen accepta ca parametru


fie un numar de port, fie o adresa si un port separate prin doua puncte.
Daca se specifica doar portul serverul Apache va asculta acel port pt toate
adresele disponibile pe acea statie. Daca se specifica si o adresa IP at serverul
va asculta numai pe acea adresa si numai pe portul specificat.
Ex: Listen 10.0.0.1:443 serverul va asculta cereri doar pe adresa 10.0.0.1 si
pe portul 443
Directiva ServerName permite sa se defineasca numele pe care serverul il
va raporta in orice adresa URL in care se viziteaza pe el insusi. Aceasta
directive accepta un nume DNS si un port optional despartite prin 2 puncte.

Probleme cele mai frecvente care apar la prima initializare a serverului:


1. in cazul in care mai exista un server care ruleaza pe acelasi calculator si asculta
aceeasi combinatie de adresa IP si port serverul Apache nu va putea porni. In jurnalul
de erori se va adauga o noua intrare indicand faptul ca Apache nu s-a putu lega la portul
respectiv.
[crit] (48) Address already in use: make_sock: could not bind to address 10.0.0.2:80
[alert] no listening sockets available, shutting down
Rezolvare: se opreste serverul care asculta portul specificat sau se schimba
configuratia serverului Apache pt a asculta un alt port
2. nu exista permisiunea sa se aloce portul: cand nu existe drepturi administrative si
se incearca sa se aloce unul dintre proturile privilegiate cu numar intre 0 si 1024.
[crit](13)Permission denied: make_sock: could not bind to address 10.0.0.2:80
[alert] no listening sockets available, shutting down
Rezolvare: autentificare cu parola de administrator inainte de a porni serverul, fie se
schimba portul pe care asculta Apache astfel incat portul sa fie mai mare decat
1024(8080 un port non-privilegiat care se utilizeaza de obicei)
3.Acces nepermis: nu se poate initializa serverul in cazul in care nu exista permisiunea
de a citi fisierele de configurare sau de a scrie in fisierele jurnal. Aceasta problema
apare at cand serverul a fost compilat si instalat de un alt utilizator decat cel care
incearca sa il ruleze.
(13)Permission
denied:
httpd:
could
not
open
error
log
file
/usr/local/apache2/logs/error_log

Reguli de amplasare a programelor


Elementele cheie care influeneaz decizia de amplasare a programelor pe client sau
server sunt:

I.

Performana se caracterizeaz prin:

timpul de rspuns al sistemului la utilizator

pstrarea bazei de date n partea de server este un mod logic i, n


majoritatea situaiilor, singurul mod de a proiecta un sistem.

conservarea performanei sistemului


conservarea resurselor serverului

ajut,

de

asemenea,

II. Securitatea
impune ca unele prelucrri s fie efectuate pe parte de server.
III. Capacitate de modernizare n timpul existenei unui program.

la

Indicaii, sugestii referitoare la stabilirea locului de amplasare a unei funcionaliti


pe parte de client sau pe parte de server.
Pe parte de client este indicat s se execute urmtarele aciuni:
1. validarea datelor introduse de utilizator n cadrul unui formular de nscriere
2. blocurile cookie se impune s se pstreze pe parte de client din motive de spaiu
i securitate.
3. prelucrri i afiri simple ale produselor comandate ct i calculul cheltuielilor
efectuate de un client n procesul de lansare a unei comenzi, n cazul unei
aplicaii de comer electronic de tip magazin virtual.

Pe parte de server activitile care se consider c se impun a fi efectuate sunt:


1. acces la baza de date, fiierele sau bibliotecile stocate pe server;
2. validarea parolelor;
3. gestionarea sesiunilor client;
4. gestionarea comenzilor clienilor unui magazin virtual;
5. gestionarea n timp real a produselor comercializate prin intermediul
magazinelor virtuale;
6. prelucrarea datelor ce necesit un grad nalt de securitate, caz n care pentru
realizarea acestei aciuni se folosete un algoritm confidenial.

Cookie
...bloc de date pe care un server Web l stocheaz ntr-un sistem client. Cnd
utilizatorul revine la site-ul Web respectiv, browser-ul trimite serverului o copie a
prjiturii. Prjiturile sunt utilizate pentru a identifica utilizatorii, pentru a instrui server-ul
s transmit o versiune personalizat a paginii Web cerute, pentru a prezenta informaii
referitoare la contul utilizatorului i pentru operaii cu caracter administrativ.
[Microsoft1999]
Probleme legate de utilizarea cookie-urilor sunt
1. fiecare browser dintr-un calculator i are propriul su fiier cookie.
2. utilizatori diferii, pe aceeai main, vor obine aceeai informaie dac folosesc
acelai browser;
3. acelai utilizator, pe un alt calculator, nu va obine aceeai informaie;
4. un fiier cookie poate reine maximum 300 de intrri cookie cu tergere arbitrar,
ceea ce nseamn c intrrile pot fi adugate i terse fr nici un fel restricii, dup
ce a fost atins maximul de 300 de intrri;
5. un fiier cookie poate reine maximum 20 de intrri cookie pentru o anumit adres
IP;
6. un utilizator este liber s modifice sau s tearg fiiere cookie;
7. un utilizator poate mpiedica trimiterea sau configurarea unui cookie.

Securitatea server-elor Web


Problemele de securitate pot fi mprite astfel [Ricart1998] [ApachePHP-site].
1. un atacator poate exploata erorile existente ntr-un server Web sau n scripturi,
obinnd acces neautorizat la fiiere vitale din sistem (fiiere de parole, fiiere
coninnd surse de script-uri executate pe server i altele) sau pentru a deine
controlul total asupra sistemului;
2. informaiile confideniale stocate pe serverul Web (cum ar fi baze de date, aplicaii,
etc.) pot fi distribuite unor persoane neautorizate;
3. punctele vulnerabile necunoscute ale navigatorului pot permite accesarea de
informaii private stocate pe maina clientului.
Considerente care ar trebui respectate pentru pstrarea unei securiti ridicate pentru
serverele web sunt:
1. un server Web nu trebuie s ruleze alte servicii i s accepte alte conexiuni de la
distan n cazul n care deservete un Intranet.
2. serverul Web nu trebuie s ruleze sub auspiciul de superutilizator
3. fiirele de configurare i modulele serverului nu trebuie stocate pe o partiie care
poate fi exportat ctre alte maini;
4. permisiunile ataate fiierelor de configurare ale serverului Web trebuie setate i
monitorizate cu atenie;
5. etc;

Ce se petrece pe server atunci cnd se introduce n bara de adrese a browser-ului


http://www.localhost/proiectphp/Index.php de exemplu?
1. trimite o cerere ctre serverul web Apache:- afiarea coninutul paginii Index.php
2.

serverul Apache este setat s serveasc doar pagini HTML

3. serverul Apache cerceteaz coninutul paginii dac exist cod PHP va trimite mai
departe cererea ctre PHP dac mai exist comenzi ce cer informaii din baza de
date MySQL, o acceseaz, extrage informaiile cerute i construiete o pagin HTML
pe care o va trimite server-ului Apache pentru ca acesta s o serveasc clientului.

http://dev.mysql.com/doc/

MySQL Server
Un server de baze de date este un sistem de gestiune a bazelor de date (MySQL) care
este implementat pe calculator i care gestioneaz fie cu o interfa fie n mod comand
aceste date.
Caracterisitici MySQL
1. este cel mai popular sistem de management pentru baze de date relaionale
2. este open-source
3. a fost dezvoltat de ctre TcX DataKonsultAB.
4. este un sistem multiuser i multithread
5. un sistem client-server

Facilitile oferite de MySQL sunt variate, dintre care se vor preciza urmtoarele
[BuBois2001]:
1. posibilitatea accesului concurent la date de ctre un numr nelimitat de utilizatori;
2. capacitatea de a gestiona pn la 50000000 de nregistrri i chiar mai multe;
3. execuia foarte rapid a comenzilor, poate chiar cea mai rapid din cele existente pe
pia;
4. sistem uor i eficient de gestiune a drepturilor utilizatorilor;
5. este gratuit, fapt ce a atras extinderea fr precedent a folosirii acestui server de
baze de date.

MySQL server - MySQLd


1. are rolul de a procesa interogri asupra unei baze de date MySQL;
2. este responsabil de tot traficul de tip incoming sau outgoing cu baza de date
3. ascult pe portul 3306 cererile clienilor
Motive pentru folosirea pe scar larg a MySQL sunt
1. viteza, stabilitatea i facilitatea n utilizare
2. ofer un set complet i util de funcii
3. disponibil pentru toat lumea;
4. uor de folosit;
5. mbuntit continuu,
6. plcut de utilizat i de mbuntit;
7. genereaz puine erori.

Modul de funcionare a unui server de baze de date pentru Web:


server web i browser
n cazul n care server-ul lucreaz cu pagini web dinamice care preiau datele
dintr-o baz de date i le afieaz se realizeaz urmtorii pai:
1. browser-ul web al unui utilizator emite o cerere HTTP pentru o anumit
pagin Web;
2. server-ul web recepioneaz cererea i transfer fiierul ctre motorul PHP,
n cazul nostru, pentru prelucrare;
3. motorul php ncepe analiza paginii. n interiorul unei pagini web dinamice
exist o comand care realizeaz legtura la baza de date i execut
interogrile pe care le trimite serverului MySql;
4. serverul MySQL recepioneaz interogarea bazei de date i o prelucreaz,
iar apoi trimite rezultatele motorului PHP;
5. motorul PHP afieaz rezultatele furnizate de server-ul MySQL formatate
ntr-un cod HTML pe care l returneaz server-ului Web, n cazul nostru
Apache.

Comunicarea cu serverul MySQL


se realizeaz dup lansarea lui n execuie. n cazul n care se lucreaz n mod
comand se execut urmtorii pai:

1. Start comanda Run=>ferestra Open n care se va scrie comanda cmd;


2. se schimb cu ajutorul comenzii cd numedirector directorul curent astfel nct s se
ajung n directorul bin al serverului MySql: C:\xampp\mysql\bin>
3. Dac se dorete ca serverul de baze de date s porneasc automat la fiecare
repornire a Windows-ului, se poate aduga un shortcut n Start Menu/Start up ctre
C:\xampp\mysql\bin\mysqld.exe (respectiv mysqld-nt.exe). Se recomand ca n
Windows NT/2000/XP s se seteze serviciu pentru a porni automat.
4. Dac se dorete s testeze dac serviciul a fost pornit.
5. n command promt comanda se va scrie astfel: C:\xampp\mysql\bin\mysqladmin
version status proc
6. deschiderea unei sesiuni de lucru cu server-ul MySQL se face prin comanda
C:\mysql\bin\mysql.exe p u root
7. dup pornirea server-ului i deschiderea unei sesiuni de lucru comunicarea
utilizatorului cu acesta se face cu ajutorul comenzilor SQL

Depanarea procesului de instalare:


Problemele considerate des intalnite sunt:
1. mesajul Access denied (Accesul nu este permis) in momentul in care se incearca
conectarea la serverul MySql se verifica daca user-ul si parola sunt corecte;
2.In cazul mesajului Cant connect to server (Nu va puteti conecta la server) se verifica
daca serviciul MySql a fost pornit si ca ruleaza fara probleme
3.At cand se definesc tabele daca se specifica lungimi pt campuri ale caror tipuri nu cer
specificarea lungimii tabela nu va fi creata.
De exemplu atunci cand un camp este declarat de tipul Text acesta nu are lungime.
Probleme de securitate ale MySql
Sa se evite ca proprietarul serverului MySql sa fie utilizatorul root. Sa se ruleze serviciu
sub un utilizator non-root ca de exemplu: mysql sau database deoarece se limiteaza
accesul la server a persoanelor rau intentionate.
Metoda recomandata de initializare a serviciului este rularea scriptului safe_mysqld
localizat in directorul bin al instalarii.

Securizarea conexiunii la MySql


Daca serverul MySql este instalat local pe calc utilizatorului cel mai important este sa
nu se lase calculatorul nesupravegheat si cu instrumentele de administrare MySql
Monitor sau MySql GUI pornite si la vedere. Intr-o astfel de situatie oricine trece prin
zona poate sa stearga sau insereze date false sau sa opreasca serverul. Daca tb
lasat calc nesupravegheat in zone publice este indicat sa se foloseasca mecanisme
de blocare cu parola a ecranului.
Daca serverul MySql este instalat pe un server din afara retelei in care se afla
calculatorul. Conectarea sa se faca folosindu-se o conexiune securizata nu prin
clasicul Telnet ci prin intermediul SSH.( SSH arata si se comporta ca Telnet dar toate
transmisiile de la si catre calculatorul aflat la distanta sunt criptate).
Folosirea unei interfete de administrare bazata pe tehnologie Web cum este
phpMyAdmin (detalii la adresa phpmyadmin.sourceforge.net) sau orice alt instrument
pus la dispozitie de furnizorul de servicii Internet necesita existenta unei conexiuni HTTP
securizate.

Nume de tabele, index, baze de date


Trebuie s conin doar litere, numere, i linui de subliniere (far
spaii)
nu trebuie s fie aceeai ca i un cuvnt cheie existent (cum ar
fi un termen SQL sau un nume de funcie)
Ar trebui s fie tratate case-sensitive
Nu poate fi mai mare de 64 de caractere (aproximativ)
trebuie s fie unic n domeniul su
Aceast ultim regul nseamn c un tabel nu poate avea dou
coloane cu acelai nume i o baz de date nu poate avea dou
tabele cu acelai nume.

Arhitectura serviciilor WEB


Clientii de SQL:
1. Client text
2. Client web

SQL- limbaj de interogare a Bazelor de date


relaionale:

1.Original: "SEQUEL" (Structured English Query


Language)
2. inventat n anii 1970 i populare din anii 1980
3. cel mai comun mod de a accesa baze de date
relaionale
4. (alte tipuri de baze de date: object-oriented,
spaiale)

Proiectarea Baze de date


Se realizeaz n 4 pai:
Pas1.Design data model
1.Ce informaii ar trebui s fie depozitate?
2.cum ar trebui s fie reprezentate?
Se utilizate :
1.Diagrame entitate-relaie
2. Normalizarea
Pas2. Dezvoltare diverse tipuri de tranzacii asupra datelor:
1. Afiare date dintr-o tabel a unei baze de date
2. Scriere date n tabele din baze de date
3. Modificare date n tabele din bazele de date
4. tergere date din tabele unei baze de date
Pentru a realiza aceti pai ne trebuie drepturi corespunztoare

Pas3: Dezvoltare harta site-ului i formulare


(interfa utilizator a bazei de date)
HTML-CSS
Pas4. Implemetare utiliznd limbajele PHP+
SQL
SQL: utilizat pentru tranzacii SQL
PHP: mediator" interfa utilizator i baz de date

Comenzi de baz SQL


I. Definire
CREATE DATABASES;//creare baza de date
CREATE TABLE; // creare tabel
DROP TABLE; //tergre tabel
II. Manipulare
SELECT .. FROM .. WHERE // preluare informatii
INSERT INTO .. VALUES (..) // inserare nregistrri
DELETE FROM // tergre nregistrri
UPDATE // modificare nregistrri
REGUL:

-Comenzi SQL nu sunt case sensitive (convenie se folosesc majuscule pentru


ele)
- Numele de tabele i nregistrrile sunt case sensibile (se folosesc minuscule)

Creare tabel
CREATE TABLE mailing_list (
Nume
Nume VARCHAR (50) NOT NULL, Claudiu
email VARCHAR (100) NOT NULL) Maria
nume de cmp
(aici: email')

Tipul cmpului 'email' (lungime


maxim 100 de caracter )

email
claudiu@itu.ro
Maria@itu.ro
nregistrri e din cmp
nu poate fi "null"
(adic, trebuie s aib
o valoare)

"null" este o valoare SQL special:


diferit de 0 (zero) sau "" (ir gol)

Primary Keys
Cheia primar este un cmp care identific n mod unic o nregistrare (rnd
de tabel)
Email" este un candidat bun aici:
CREATE TABLE mailing_list (
name VARCHAR(100) NOT NULL,
email VARCHAR(100) PRIMARY KEY
)

Obs: un cmp cheie primar presupune n mod automat c


acesta nu poate fi nul)
Chei primare sunt declarate la crearea tabel
Obs: fr chei primare, nregistrrile nu pot fi identificate n mod
unic (deci avem nevoie de ele!)

Funcie special MySQL:


AUTO_INCREMENT
=>se foloseste pentru a genera automat valori unice
CREATE TABLE studenti (
stud_id INT PRIMARY KEY
AUTO_INCREMENT,
nume VARCHAR(50) NOT NULL,
varsta INT NOT NULL,
)

stud_id nume

varsta

claudiu

14

Maria

12

Acest lucru simplific introducerea de noi inregistrari:


-de fiecare dat cnd se introduce o nou nregistrare aceasta
primete automat un numr nou(1, 2, 3, ...

Exemple INSERT
INSERT INTO mailing_list (Nume, email) VALUES ('Claudiu', claudiu@itu.ro') ;
INSERT INTO mailing_list (Nume, email) VALUES ('Bianca', bianca@hotmail.co') ;
INSERT INTO mailing_list (Nume, email)VALUES (Ion', Ion@hotmail.com') ;

Nume

email

Claudiu

claudiu@itu.ro

Bianca

Bianca@itu.ro

Ion

Ion@hotmail.com

Afiare rezultate

SELECT nume_cmp1, nume_cmp2


nume_cmp1=valoare;

FROM

nume_tabel

Comanada Select se folosete n urmtoare cazuri:


1. afieaz toate nregistrrile dintr-o tabel astfel:
mysql>SELECT * FROM PRODUSE;

WHERE

SELECT * FROM mailing_list ;

SELECT nume, varsta FROM students ;

Nume

email

Claudiu

claudiu@itu.ro

Maria

Maria@itu.ro

Bianca

Bianca@itu.ro

Ion

Ion@hotmail.com

nume

varsta

claudiu

14

Maria

12

SELECT nume FROM studenti WHERE id > 1;

nume
Maria

SELECT stud_id, nume FROM studenti WHERE nume = claudiu' ;

stud_id

nume

claudiu

SELECT * FROM studenti WHERE varsta = '12' ;

stud_id nume

varsta

12

Maria

SELECT * FROM studenti ORDER BY varsta ;

stud_id nume

varsta

Maria

12

claudiu

14

SELECT * FROM studenti ORDER BY varsta DESC ;

stud_id nume

varsta

claudiu

14

Maria

12

2. afieaz nregistrrile dintr-un cmp astfel:


mysql>Select produs_nume FROM Produse;

Comenzile Grant i Revoke sunt folosite pentru a acorda, respectiv anula privilegii
utilizatorilor.

3. afieaz nregistrrile din cmpurile tabelei fr s se in cont de ordinea acestora;


4. afieaz doar anumite valori dintr-o tabel care ndeplinesc o anumit condiie
specificat n clauza WHERE a acesteia, ca n exemplu de mai jos:

mysql> select produs_nume, produs_pret from produse where produs_oferta=1;

5. afieaz pe ecran toate nregistrrile egale cu o valoare cutat sau care o conin n
interiorul lor. n exemplul urmtor, se va afia pe ecran toate produsele al cror nume
conin litera a.

mysql>SELECT * FROM produse WHERE produs_nume LIKE '%a%';

6. afieaz pe ecran nregistrrile dorite n ordine cresctoare sau descresctoare


folosind clauza ORDER BY astfel:
mysql> SELECT produs_nume FROM produse ORDER BY produs_nume DESC;
mysql> SELECT produs_nume, produs_pret FROM produse ORDER BY produs_nume
DESC, produs_pret ASC;

LIMIT and ORDER-BY n


Putem limita numrul de nregistrri afiate:
1. Preluare 100 de reete:
SELECT * FROM retete LIMIT 100;
2. Afiare cel mai tanar student

SELECT * FROM studenti ORDER BY varsta LIMIT 1;


3.Preluare (n ordine alfabetic) ultimele trei cursuri :
SELECT * FROM cursuri ORDER BY nume DESC LIMIT 3 ;

COUNT
Afiare tabel:

stud_id nume

varsta

Claudiu

14

Maria

12

3.

Ana

23

SELECT * FROM studenti ;


COUNT (se numr numrul de nregistrri):

SELECT COUNT(*) FROM studenti ;

Count(*)
3

COUNT AS (se atribuie un nume numrului de nregistrri):


SELECT COUNT(*) AS numar_cursanti FROM studenti ;
Numar_cursanti
3

stud_id

nume

varsta

Claudiu

14

Min(varsta)

Maria

12

12

3.

Ana

23

MIN, MAX, SUM, AVG


1. MIN (minimum):

SELECT MIN(varsta) FROM studenti;


Max(varsta)

2. MAX (maximum):

SELECT MAX(varsta) AS batran FROM studenti ;

23

3. SUM:

SELECT SUM(varsta) FROM studenti ;

Suma(varsta)
49

4. AVG (media):

SELECT AVG(varsta) AS media FROM studenti ; media


24,1

n comanda SELECT se mai pot folosi urmtoarele:


1. clauza GROUP BY care are rolul de a nu afia pe ecran duplicatele din
cadrul rezultatelor comenzii SELECT;
mysql>SELECT produs_nume, produs_pret FROM produse GROUP BY
produs_nume ORDER BY produs_nume DESC;
2. clauza LIMIT are rolul de a limita rezultatele afiate pe ecran la numrul
dorit de utilizator;
mysql>SELECT produs_nume, produs_pret FROM produse LIMIT 1;
mysql>SELECT produs_nume, produs_pret FROM produse LIMIT 5,5;
Primul numr din clauza LIMIT semnific nregistrarea de la care se ncepe
s se afieze urmtoarele cinci nregistrri.
3. funcia count() returneaz numrul de nregistrri a unei tabele.
mysql> SELECT count(produs_nume) FROM produse;
4. funciile max, min, avg, sum aplicate asupra unui cmp numeric vor calcula
i afia pe ecran valoare maxima, minim, medie i suma datelor existente n
cadrul acestuia.
mysql> SELECT min(produs_pret) FROM produse;

Subinterogari
O subinterogare este o interogare imbricata intr-o alta interogare.
Aceasta caracteristica s-a introdus in MYSQL 4.1..
Subinterogari elementare
-cea mai comuna utilizare a subinterogarilor este pt compararea rezultatelor a
2 interogari.
Problem:S se determine comanda care a continut cel mai mare numar de
articole se foloseste interogarea :
Select idclient, cantitate from comenzi where cantitate=(select
max(cantitate) from comenzi) ;
Obs: subinterogarea va returna o sg valoare si anume cantitatea maxima si se
va folosi pt compararea cu interogarea externa. Interogarea de mai sus nu se
poate realiza elegant cu asocieri cum este mai jos :
select idclient, cantitate from comenzi order by cantitate desc limit 1;
Obs:deoarece se bazeaza pe limit 1 aceasta interogare este incompatibila cu
majoritatea SGBDR_urilor, dar in MYSQL se executa mai usor si eficient dacat
subinterogarea.
Valorile subinterogarilor se pot utiliza in acest mod cu toti operatorii de
comparare comuni. Operatorii speciali folositi in subinterogari sunt :

Grupul 1 : operatori pt subinterogari sunt :


Nume

Sintaxa exemplu

Descriere

ANY

SELECT c1 FROM t1 WHERE c1> Returneaza TRUE in cazul in care


ANY(SELECT c1 FROM t2) ;
comparatia este adevarata pt oricare
linie din subinterogare.

IN

SELECT c1 FROM t1 WHERE c1 Echivalent cu ANY


IN(SELECT c1 FROM t2) ;

SOME

SELECT c1 FROM t1 WHERE c1> Alias pt ANY. Uneori este perceput


SOME (SELECT c1 FROM t2) ;
mai usor de oameni.

ALL

SELECT c1 FROM t1 WHERE c1> Returneaza true in cazul in care


ALL (SELECT c1 FROM t2) ;
comparatia este adevarata pt toate
liniile din subinterogare.

Obs: Fiecare din operatorii de mai sus pot fi folositi numai dupa un operator de
comparare, singura exceptie fiind IN despre care se poate spune ca are incorporat
operatorul de comparare =

Grupul 2 operatori:
1. operatorul EXISTS returneaza true daca in subinterogare exista linii
care se potrivesc.
2. NOT EXISTS returneaza true daca in subinterogare nu exista linii care
se potrivesc.
Subinterogari corelate
-in interogarea interna se pot utiliza elemente din interogarea externa.
Exemplu:
Select isbn, titlu from carti where not exist (select * from comanda_item
where comanda_item.isbn=carti.isbn) ;
Efectul comenzii: returneaza cartile din care nu s-au comandat nici un
exemplar
Interogarea interna se refera la datele din interogarea externa, aceasta fiind si
definitia subinterogarii corelate. Intr-o subinterogare corelata se cauta liniile
interne care se potrivesc cu liniile externe.

Subinterogarile linie
Toate subinterogarile prezentate pana in acest moment au returnat TRUE sau FALSE in
cele mai multe cazuri, adica o sg valoare.
Subinterogarile linie returneaza o linie completa care poate fi comparata cu liniile
complete din interogarea externa.
Aceasta abordare este utilizata in general pentru a cauta intr-o tabela linii care exista si
intr-o alta tabela.
Exemplu generalizat :
select c1,c2,c3 from t1 where (c1,c2,c3) in (select c1, c2, c3 from t2) ;
Utilizarea unei subinterogari ca tabela temporara
O subinterogare poate fi utilizata in clauza FROM a unei subinterogari externe.
Acesta abordare permite o interogare eficienta a rezultatului unei subinterogari, tratando ca tabela temporara.
Forma :
select * from (select idclient, client_nume from clienti where oras= clujnapoca) as subinterogare;
unde subinterogare este un alias. Rezultatul acestei subinterogari il atribuim
aliasului care se trateaza in interogarea externa ca o tabela obisnuita.

JOIN
Pas1: Tabelele pe care se aplica JOIN
sunt:
lista_email

numbere_telefon

Nume

email

Telefon

email

Claudiu

claudiu@itu.ro

121212121

claudiu@itu.ro

Maria

Maria@itu.ro

747474747

Maria@itu.ro

Bianca

Bianca@itu.ro

454545454

Bianca@itu.ro

Ion

Ion@hotmail.com

888383833

Ion@hotmail.com

SELECT * FROM lista_email , numbere_telefon ;


Operaia JOIN are rezultatul:

Nume

email

Telefon

email

Claudiu

claudiu@itu.ro

121212121

claudiu@itu.ro

Maria

Maria@itu.ro

747474747

Maria@itu.ro

Bianca

Bianca@itu.ro

454545454

Bianca@itu.ro

Ion

Ion@hotmail.com

888383833

Ion@hotmail.com

Claudiu

claudiu@itu.ro

121212121

claudiu@itu.ro

Maria

Maria@itu.ro

747474747

Maria@itu.ro

Bianca

Bianca@itu.ro

454545454

Bianca@itu.ro

Ion

Ion@hotmail.com

888383833

Ion@hotmail.com

Claudiu

claudiu@itu.ro

121212121

claudiu@itu.ro

Maria

Maria@itu.ro

747474747

Maria@itu.ro

Bianca

Bianca@itu.ro

454545454

Bianca@itu.ro

Ion

Ion@hotmail.com

888383833

Ion@hotmail.com

Claudiu

claudiu@itu.ro

121212121

claudiu@itu.ro

Maria

Maria@itu.ro

747474747

Maria@itu.ro

Bianca

Bianca@itu.ro

454545454

Bianca@itu.ro

Ion

Ion@hotmail.com

888383833

Ion@hotmail.com

JOIN
SELECT * FROM lista_email, numbere_telefon WHERE lista_email.email =
numbere_telefon.email ;
Operaie JOIN mai bun pt c rezult doar nregistrriele
care sunt asociate
Nume

email

Telefon

email

Claudiu

claudiu@itu.ro

121212121

claudiu@itu.ro

Maria

Maria@itu.ro

747474747

Maria@itu.ro

Bianca

Bianca@itu.ro

454545454

Bianca@itu.ro

Ion

Ion@hotmail.com

888383833

Ion@hotmail.com

SELECT Nume, lista_email.email, telefon Acest model este


extrem de comun!
FROM lista_email, numbere_telefon
WHERE lista_email.email = numbere_telefon.email ;

Nume

email

Telefon

Claudiu

claudiu@itu.ro

121212121

Maria

Maria@itu.ro

747474747

Bianca

Bianca@itu.ro

454545454

Ion

Ion@hotmail.com

888383833

Este un JOIN mai


bun pentru ca se
obtin doar coloanele
care se doresc.

Tabela Suspecti
Nume

Adn_Profil

Claudiu

ACTTC

Maria

ACTGC

Bianca

ACGTC

scenacrimei
Loc_crima

obiect

Adn_Profil

Sufragerie

Masa

ACCTC

Sufragerie

Lampa

AGTGC

Holl

Scaun

ACCTC

Camera

Cutit

ACTGC

Baie

Shampon

ACCTC

Bucatatrie
Carton
JOIN pentru a determina numele criminalului si caracteristicile lui?
SELECT Nume, Loc_crima, obiect
FROM Suspecti, scenacrimei
WHERE adn_profil = adn_profil ;
Nume

Loc_crima

obiect

Claudiu

Bucatatrie

Carton

Maria

Camera

Cutit

ACTTC

Studenti

Clienti

CNP

Nume

adresa

telefon

CNP

Total

12345566

Pop

Str. Ialomita

0264-246245

12345566

1,525.24

12456778

Bucium

Str. Bucura

0264-246234

12456778

195.56

13456789

Steluta

Str.Teilor

0264-246243

134567

1,020,30

13454321

Stratan

Str.Iasi

0264-146245

13454321

897.20

Determinare studeni care sunt clienti care platesc pe produse mai mult de 500
SELECT Nume, telefon, Total
FROM studenti , clienti
WHERE ( studenti.CNP = clienti.CNP AND Total > 500 ) ;

Nume

telefon

Total

Pop

0264-246245

1,525.24

Stratan

0264-146245

897.20

Durata de execuie a unui


Query
A join ntre 2 tabele poate dura foarte mult pt c fiecare
nregistrare din prima tabel trebuie s se compare cu toate
nregistrrile din a doua tabel.
SELECT * FROM table1 , table2 WHERE table.id1 =
table.id2 ;

Dac fiecare tabel are 10,000 de nregistrri atunci


avem 10,000 X10,000=100,000,000 de comparaii.
Aceste comparaii pot dura uor 20 secunde

n cazul n care ID1 i ID2 au fost indexate


Acest lucru dureaz doar 0.05 secunde!

Modificare nregistrri
UPDATE mailing_list SET email=Maria@yahoo.ro' WHERE nume=Maria' ;

Nume

email

Nume

email

Claudiu

claudiu@itu.ro

Claudiu

claudiu@itu.ro

Maria

Maria@itu.ro

Maria

Maria@yahoo.ro

Bianca

Bianca@itu.ro

Bianca

Bianca@itu.ro

Ion

Ion@hotmail.com

Ion

Ion@hotmail.com

tergre nregistrri
DELETE FROM mailing_list WHERE nume=Bianca' ;

Nume

email

Claudiu

claudiu@itu.ro

Maria@itu.ro

Maria

Maria@itu.ro

Bianca

Bianca@itu.ro

Ion

Ion@hotmail.com

Ion

Ion@hotmail.com

Nume

email

Claudiu

claudiu@itu.ro

Maria

Tipuri de Indexi
Tip

Ttrebuie s fie unici?

este permis s fie nul?

PRIMARY KEY

DA

NU

UNIQUE

DA

DA

INDEX

NU

DA

Un tabel poate avea o sg cheie primar


CREATE TABLE studenti (
idstud INT PRIMARY KEY,
nume VARCHAR(50) NOT NULL,
varsta INT NOT NULL,
)

idstud

nume

varsta

112

Claudiu

20

113

Maria

21

114

Bianca

22

115

Ion

23

Indexul cel mai frecvent este o coloan care este:


frecvent folosit n clauza WHERE
SELECT * FROM table WHERE varsta> 20 ;

frecvent folosit n clauza ORDER BY


SELECT * FROM table ORDER BY name ;

folosit ca parte a JOIN


SELECT * FROM table1 , table2 WHERE table.id1 = table.id2 ;

GROUP-BY
S se calculeze total cheltuieli per departament
SELECT dept, SUM(amount) FROM expenses GROUP BY dept ;
GROUP BY are ca efect: nregistrrile sunt sortate i grupate dup valoarea lor dept:

Cnd se afieaz rezultatul se


afieaz coloana calculat
SUM(amount)

GROUP BY
Suma cheltuielilor se grupeaz dup cheltuieli i departament:
SELECT expense, dept, SUM(amount) AS total FROM expenses GROUP BY
expense, dept ;

Tabelul se grupeaz mai


nti dup cheltuieli

Tabelul se sub-grupeaz
dup departament

In final se obtine rezultatul:

Group-By
Suma cheltuielilor se grupeaz dup cheltuieli i departament 2002-03:
SELECT expense, dept, SUM(amount) AS total FROM expenses WHERE 2002 <=
year AND year <= 2003 GROUP BY expense, dept ;

Tabelul se grupeaz mai


nti dup cheltuieli

Tabelul se sub-grupeaz
dup departament

In final se obtine rezultatul:

Exerciiul 1
Care este suma total cheltuit pe cheltuiala?
SELECT expense, SUM(amount) FROM expenses GROUP BY expense ;

Tabelul se grupeaz mai


nti dup cheltuieli

Rezultatul consta n calcului


sumei cheltuielilor pe
categorie de cheltuieli:

Exerciiul 2
Care este media cheltuit pe cheltuiala?
SELECT expense, AVG(amount) FROM expenses GROUP BY expense ;

Tabelul se grupeaz mai


nti dup cheltuieli

Rezultatul consta n calcului


media cheltuielilor pe
categorie de cheltuieli:

Exerciiul 3
Care este suma total cheltuit per an?
SELECT year, SUM(amount) FROM expenses GROUP BY year ;

Tabelul se grupeaz dup an

Rezultatul consta n calcului


suma
cheltuielilor
pe
categorie de cheltuieli:

Exerciiul 4
Care este suma total cheltuit per an per departament ?
SELECT year, dept, SUM(amount) AS total FROM expenses
GROUP BY year, dept ;
Tabelul se grupeaz dup an

n final rezultatul este

Apoi tabelul se
grupeaz dup
departament

Exerciiul 5
Care este suma total cheltuit per an n 03-2002?
SELECT year, SUM(amount) FROM expenses WHERE 2002 <= year AND year <=
2003 GROUP BY year ;
Tabelul se grupeaz dup an

n final rezultatul este

Exerciiul 6
Care este cea mai mare cheltuial per fiecare departament?
SELECT dept, MAX(amount) FROM expenses GROUP BY dept ;

Tabelul se grupeaz dup dep

n final rezultatul este

Exerciiul 7
Care este cea mai mare cheltuial per fiecare departament per
an?
SELECT dept, year, MAX(amount) FROM expenses GROUP BY dept, year ;
Tabelul se grupeaz dup dep

n final rezultatul este

Apoi tabelul se
grupeaz dup an

HAVING
Care este cea mai mare cheltuial per fiecare departament per
an?
SELECT dept, year, MAX(amount) FROM expenses HAVING MAX(amount) >
500000;
Tabelul se grupeaz dup dep

n final rezultatul este

Apoi tabelul se
grupeaz dup an

Abbreviations (aliases)
Interogarea
SELECT studenti.id, studenti.nume
FROM studenti, cursuri, inscrisi
WHERE studenti.id = inscrisi.id
AND inscrisi.id = cursuri.id ;

poate fi Abbreviations cu ajutorul aliases


SELECT s.id, s.nume
FROM studenti AS s, cursuri AS c,
inscrisi AS e
WHERE s.id = e.id
AND e.id = c.id ;

Din nou JOIN


Tabela Suspecti

scenacrimei
Loc_crima

obiect

Adn_Profil

ACTTC

Sufragerie

Masa

ACCTC

Maria

ACTGC

Sufragerie

Lampa

AGTGC

Bianca

ACGTC

Holl

Scaun

ACCTC

Camera

Cutit

ACTGC

Baie

Shampon

ACCTC

Carton

ACTTC

Nume

Adn_Profil

Claudiu

Bucatatrie
JOIN pentru a determina multipli autori?
SELECT Nume, Loc_crima, obiect
FROM Suspecti, scenacrimei
WHERE adn_profil = adn_profil ;
Nume

Loc_crima

obiect

Claudiu

Bucatatrie

Carton

Maria

Camera

Cutit

Probleme cu JOINscenacrimei
Tabela Suspecti
Nume
Claudiu
Maria
Bianca

Loc_crima

obiect

Adn_Profil

Sufragerie

Masa

ACCTC

Sufragerie

Lampa

AGTGC

Holl

Scaun

ACCTC

Camera

Cutit

ACTGC

Baie

Shampon

ACCTC

Carton

ACTTC

Adn_Profil

ACTTC
ACTGC
ACGTC

Bucatatrie
S presupunem c s-ar dori s se genereze Loc_crima
SELECT Loc_crima, obiect, nume
Sufragerie
FROM
Suspecti RIGHT JOIN scenacrimei
Sufragerie
ON Adn_profil = Adn_profil ;

obiect

Nume (dac
se potrivete)

Masa

NULL

Lampa

NULL

Holl

Scaun

NULL

Camera

Cutit

Maria

Baie

Shampon

NULL

Bucatatrie

Carton

Claudiu

LEFT JOIN vs RIGHT


JOIN
scenacrimei
Tabela Suspecti
Nume
Claudiu
Maria
Bianca

Loc_crima

obiect

Adn_Profil

Sufragerie

Masa

ACCTC

Sufragerie

Lampa

AGTGC

Holl

Scaun

ACCTC

Camera

Cutit

ACTGC

Shampon

ACCTC

Carton

ACTTC

Adn_Profil

ACTTC
ACTGC
ACGTC

Acelai lucru cu LEFT JOIN:


Baie
se schimba doar argumente
Bucatatrie
SELECT Loc_crima, obiect, nume
Loc_crima
FROM
Suspecti RIGHT JOIN scenacrimei
Sufragerie
ON suspecti.Adn_profil = scenacrimei
Sufragerie
.Adn_profil ;

SELECT Loc_crima, obiect, nume


FROM
scenacrimei LEFT JOIN Suspecti
ON suspecti.Adn_profil = scenacrimei
.Adn_profil ;

obiect

Nume (dac
se potrivete)

Masa

NULL

Lampa

NULL

Holl

Scaun

NULL

Camera

Cutit

Maria

Baie

Shampon

NULL

Bucatatrie

Carton

Claudiu

JOIN NORMAL,LEFT, RIGHT


a:

b:

Nume

id

Curs

Claudiu

DSDS 1

Maria

GSD

Bianca

IWJX

id

Nume

id

Curs

Normal join:

Claudiu

DSDS

SELECT Nume, a.id, curs


FROM a , b WHERE a.id = b.id ;

Maria

GSD

Nume

id

Curs

Left join:

Claudiu

DSDS

SELECT Nume, a.id, curs


FROM a LEFT JOIN b ON a.id = b.id ;

Maria

GSD

Bianca

NULL

Right join:

Nume

id

Curs

SELECT Nume, b.id, curs


FROM a RIGHT JOIN b ON a.id = b.id ;

Claudiu

DSDS

Maria

GSD

NULL

IWJX

Funcia SHA1 ( ), -este o modalitate de a cripta datele .


- creeaz un ir criptat ce este ntotdeauna exact 40 caractere
(coloana care memoreaz informaia criptat este definit ca CHAR ( 40 ) ) .
SHA1 ( ) este o tehnica de criptare ntr-o direcie , ceea ce nseamn c acesta nu poate
fi inversat .
-este disponibil ca de MySQL 5.0.2 ,
Obs:Versiunile anterioar , se folosea MD5 ( ) . Aceast funcie face aceeai sarcin ,
folosind un algoritm diferit , i returneaz un ir de 32 caractere lungime (=> coloana se
declara char ( 32 )) .
Functia NOW ( ), funcia folosit pentru a introduce in tabele data, ora , si coloanele
timestamp , deoarece aceasta va introduce data i ora curente ( de pe server) pentru
acel cmp .

Exerciii

Baza de date
Client(IDClient,Nume,Adresa,Oras);
Comenzi(IDComanda,IDclient,Cantitate,Data);
Carti(ISBN,Autor,Title, Pret);
Comanda_Item(IDComanada,ISBN,Cantitate);
Reviews_Carti(ISBN,Review);
Creare tabele
create table client( idclient int unsigned not null auto_increment primary key,
nume char(50) not null,
adresa char(100) not null,
oras char(30) not null);
create table comenzi( idcomanda int unsigned not null auto_increment primary key,
idclient int unsigned not null,
plata float(6,2)
data date not null);
create table carti(isbn char(13) not null primary key,
autor char(50),
title char(100),
pret float(4,2));
create table comanda_item(idcomanda int unsigned not null,
isbn char(13) not null,
cantitate tinyint unsigned,
primary key(idcomanda, isbn));
create table Reviews_Carti(
ISBN char(13) not null primary key,
Review text);

Regasirea datelor din mai multe tabele


Ex1: cate comenzi a formulat un client in acesta luna va trebui
sa se interogheze tabela comenzi si client.
Rezolvare: Daca se doreste sa se vizualizeze comenzile lui POP VASILE
va trebui sa se consulte tabela client pt a determina ID acestuia cu
ajutorul caruia vom cauta in tabela comenzi, comenzile pe care le-a
efectuat.
Deci are loc o asocierea simpla de 2 tabele (INNER JOIN sau CROSS JOIN)
Select clienti.idclient, comenzi.pret, comenzi.data from clienti, comenzi
where
client.numeclient=Pop
Vasile
and
client.idclienti
=comenzi.idclienti;
Deci: virgula dintre numele tabelelor este echivalenta cu cuvintelor INNER
JOIN sau CROSS JOIN

Ex2: se doreste sa se afle care sunt clientii care au comandat carti despre
JAVA:

Rezolvare:
Pas1.trebuie sa se identifice clientii care au formulat cel putin o comanda care sa
contina o carte de JAVA.
Pas2.Pt a se ajunge la tabela client din tabela comenzi se foloseste idclient.
Pas3. Din tabela comanda la tabela carti se foloseste idcomanda.
Pas4. Pt a identifica in tabela carti, cartea java se foloseste isbn.
Pas5. Dupa ce s-au facut toti acesti pasi se poate cauta in titlu cuvantul JAVA.

Select client.nume from client, comanda, comanda_item, carti where


client.idclient=comanda.idclient and
comanda_item.idcomanda=comanda.idcomanda and
comanda_item.isbn=carti.isbn and carti.title like %Java%;
Regul:
numarul total de conditii de asociere este cu 1 mai mic decat numarul total de
tabele care se doresc a fi asociate.

Asocierea la stg (left-join)


Ex3.1: determinarea liniilor care nu se potrivesc, cum ar fi de exemplu clientii care
nu au comandata nici o carte sau cartile care nu au fost comandate.

Regula: daca nu exista in tabela din dreapta nici o linie care sa se


potriveasca at la rezultat se va adauga o linie care va contine valori NULL
in coloanele din dreapta.
Select clienti.idclient, clienti.nume, comanda.idcomanda from clienti left
join comanda on clienti.idcomanda=comanda.idcomanda;

Efect generat de on:


se afiseaza atat clientii care au in idcomanda NULL cat si clientii care au
un id de comanda in campul idcomanda

Ex3.2: determinarea liniilor care nu se potrivesc, cum ar fi de exemplu clientii care


nu au comandata nici o carte sau cartile care nu au fost comandate.

Rezolvare: Daca se doreste sa se afiseze toti cei care nu au comandat nimic, se


poate realiza acest lucru comparand valorile NULL din campul cheie primara al tabelei
din dreapta in cazul nostru comanda

Select clienti.idclient, clienti.nume from clienti


(idcomanda) where comanda.idcomanda is null;

left

join

comanda

using

Efect generat comanda:


se vor afisa doar inregistrarile care au NULL in campul idcomanda

Diferenta on using
In cadrul sintaxei USING nu se precizeaza tabela din care provine atributul de
asociere, => coloanele din cele 2 tabele trebuie sa detina acelasi nume in cazul
folosirii clauzei USING

Aliasuri
Destinate rezolvrilor problemelor de genul:
S se determine intr-o tabela liniile care au aceleasi valori

Exercitiu4: Sa se determine clientii care traiesc in acelasi oras.

Select c1.nume,c2.nume, c1.oras from clienti as c1, clienti as


c2 where c1.oras=c2.oras and c1.nume!=c2.nume;
Explicatie:
Pas1. Se presupune ca tabela clienti reprezinta 2 tabele diferite
c1 si c2
Pas2. Se realizeaza o asociere dupa coloana oras.
Pas3. A 2-a conditie c1.nume!=c2.nume elimin ideea ca fiecare
client sa se potriveasca cu el insusi.

MySQL
PHPMyAdmin

Selectarea datelor din tabele - comanda SELECT phpMyAdmin


Editarea comenzilor in tabul SQL

Comanda sql se editeaza de mana si se selecteaza campurile din zona Fields. Se


efectueaza click pe butonu GO iar rezultatul este:

In phpMyadmin se pot crea interogari din fila QUERY care este activa doar at cand
suntem in baza de date nu intr-un tabel al acesteia. Deci, click pe numele bazei de date
din partea dreapta a ecranului si se va afisa fereastra:

In fereastra de mai sus se selecteaza fila Query si rezultatul este:

Cu ajutorul acestei ferestre se pot crea interogari asupra tabelelor bazei de date astfel:
Pas1: se selecteaza `datepers`.* din lista drop-down a zonei Field
Pas2: se bifeaza check box-ul Show
Pas3: in partea de jos a ferestrei in zona Use Tables se selecteaza tabela datepers
Pas4: Click pe butonul Update Query actiune ce va genera instructiunea SQL in zona
SQL query on database student

Pas5. Pt a se executa interogarea se actioneaza click pe Submit Query din zona SQL
query on database student. Rezultatul este:

La click pe Create View se obtine fereastra cu ajutorul careia se creaza view-uri

La click pe Go se obtine:

Deci cum se observa s-a creat un VIEW numit exemplu1 pe baza conditiilor puse de noi
la generarea interogari. Acest view se poate utiliza de cate ori avem nevoie de rezultatul
interogarii pt a nu o tot crea.

Pentru a incorpora clauza WHERE in Query se executa pasii:


Pas1: se selecteaza in zona Field campurile nume respective prenume si in ultimul
camp idstudent(campul pe care se aplica clauza WHERE)
Pas2:se selecteaza Show doar pt campurile nume si prenume deoarece doar acestea
dorim sa apara in rezultatul final
Pas3 In ultima zona Field in care apare idstudent in zona Criteria se introduce >1
Pas4 in zona Use Table se selecteaza datepers
Pas5. Click pe butonul Update Query

Pas6. Click pe butonul Submit Query

Pas7. Acest rezultat se poate salva ca un View daca se activeaza Create View sau se
poate exporta daca se activeaza Export sau se poate scoate la imprimanta daca se
activeaza Print view.

O interogare (Query) pe mai multe tabele:


Pas1: se selecteaza in zona Field campurile nume respective prenume din tabela
student. Si campul Materie din tabela materii. In ultimul camp Materie din tabela
materii(campul pe care se aplica clauza WHERE)
Pas2:se selecteaza Show doar pt campurile nume, prenume si materie deoarece doar
acestea dorim sa apara in rezultatul final
Pas3 In ultima zona Field in care apare materie in zona Criteria se introduce
=informatica
Pas4 in zona Use Table se selecteaza datepers si materie
Pas5. Click pe butonul Update Query

Pas6. Click pe butonul Submit Query

Pas7. Acest rezultat se poate salva ca un View daca se activeaza Create View sau se
poate exporta daca se activeaza Export sau se poate scoate la imprimanta daca se
activeaza Print view.

Zona Sort
Se foloseste pt a sorta datele cresactor sau descrescator in cadrul unui camp dintr-o
interogare. Adaugarea a 2 conditii care sa fie indeplinite OR una OR alta.

Rezultatul optinut dupa click pe Submit Query este:

Se observa ca nu a gasit inregistrari care sunt egale cu Pop dar a gasit inregistrari care
contin litera a in nume.

Stabilirea numarului de randuri pe cate se extinde criteriul


Numrul de rnduri de criterii pot fi modificate n dou moduri.
1.n primul rnd, putem selecta caseta de Ins n temeiul unor criterii pentru a aduga un
rnd criterii (dup clic pe Update Query):

Rezultatul generat dupa click pe Update Query este introducerea unei zone goale:

Stergerea unei zone de criterii se face prin selectarea lui Del si apoi click pe Update
Query. Rezultatul aplicarii acestei actiuni asupra ferestrei anterioare este:
Pas1: se selecteaza Del din zona criteria goala.

Pas2 la click pe Update Query se obtine:

2. Stabilirea unui anumit numr de zone pt definirea de criterii se stabileste alegand din
zona Add/Delete Criteria Row astfel:

Zonele destinate definirii de noi criteria pt campurile tabele devin active/vizibile dupa
click pe Update Query.
La click pe butonul Update Query se obtine:

Stergerea se face prin selectarea lui Del din fata criteriilor goale. La click pe butonul
Update Query .

Tabul Search
-se foloseste pt a cauta cuvinte in tabele bazei de date

La click de Select All se selecteaza toate tabele bazei de date iar la click pe butonul Go
se obtine:

Se observa rezultatul dorit s-a gasit in tabela datepers respective in view-ul exemplu1.
La click pe browse se afiseaza pe ecran fereastra:

La click pe delete se sterge inregistrarea.

Comanda UPDATE -are rolul de a modifica datelor existente ntr-o tabel


- sintaxa este:

UPDATE nume_tabel SET nume_coloan1=`noua valoare a coloanei 1`,


nume_coloana2=`noua valoare a coloanei 2` WHERE condiii;
Comanda UPDATE se folosete n urmtoarele situaii:
I. cnd se dorete modificarea valorilor nregistrrilor unei tabele;

Exemplu:
1. modificarea valorilor nregistrrilor
mysql>
update
produse
Set
produs_nume='boxa',
produs_pret=345678,
produs_imagine="",produs_categorie='hardware',produs_descriere='boxe de ultima
generatie', produs_descrierecompleta= 'boxe ce au iesire usb', produs_stare='3',
produs_oferta='1', produs_noutati='3';
II. cnd se dorete modificarea valorilor, din unul sau mai multe cmpuri ale unei
tabele, care ndeplinesc una sau mai multe condiii;
1. modificarea valorilor tuturor cmpurilor
mysql>
update
produse
Set
produs_nume='boxa',
produs_pret=345678,
produs_imagine="",produs_categorie='hardware', produs_descriere='boxe de ultima
generatie', produs_descrierecompleta= 'boxe ce au iesire usb', produs_stare='3',
produs_oferta='1', produs_noutati='3' where produs_pret=45454;

2. Modificarea valorilor doar a primelor trei cmpuri care au pret_produs egal


cu 45454 i conin litera a n numele produselor se face astfel:
mysql>update produse Set produs_nume='boxa',produs_pret=345678 where
produs_pret=45454 and produs_nume LIKE '%a%';

Comanda ALTER TABLE:- are rolul de a modifica structura unui tabel existent
-perimte

adugarea

-permite

redenumirea

sau

tergerea

coloanelor

respectiv indexilor,
coloanelor

sau

chiar

tabelului n sine
-permite schimbarea tipului de date coninut de o
coloan.
-permite aduga un nou cmp la sfritul unei
tabele astfel:
ALTER TABLE nume_tabel ADD nume_cmp tip_cmp;

Exemple:
1. adugarea unei noi coloane la sfritul tabelului Produse se face astfel:
mysql>ALTER TABLE produse ADD produs_unitatemasura varchar(10);
2.adugarea unei noi coloane dup cmpul produs_pret n cadrul tabelului
Produse se face astfel:
mysql>ALTER TABLE produse ADD exemplu int(3) unsigned AFTER
produs_pret;
3.modificarea numelui unui cmp exemplu n produs_exemplu din cadrul
tabelei Produse se face:
mysql>ALTER TABLE produse CHANGE exemplu produs_exemplu int(3)
unsigned;
4.modificarea tipului de date pentru cmpul produs_exemplu se face:
mysql>ALTER TABLE produse CHANGE produs_exemplu produs_exemplu
mediumint unsigned;
5. tergerea unei coloane din cadrul tabelei Produse se face astfel:
mysql> ALTER TABLE produse DROP produs_exemplu;
mysql> ALTER TABLE produse DROP produs_unitatedemasurare;
6.redenumirea unei tabele se face cu comanda RENAME astfel:
mysql> ALTER TABLE produse RENAME produs;

Comanda REPLACE este specifica MySQL, imita actiunea secventei de


instructiuni DELETE si INSERT, in aceasta ordine.

Aceasta instructiune functioneaza astfel :


Daca o inregistrare care se insereaza in tabel contine o valoare cheie primara
care se potriveste cu o inregistrare care exista deja in tabel at inregistrarea din
tabel va fi stearsa iar noua inregistrare se va insera in locul acesteia.
Daca valoarea cheii inregistrarii nu se va potrivi cu nici una din tabel at
inregistrarea se va adauga la sfarsitul tabelei.
REPLACE INTO nume_tabele (lista coloane) VALUES (lista valori pt coloane) ;

Modificarea inregistrarilor din cadrul unei tabele-phpMyAdmin


Se selecteaza tabela si apoi tab-ul SQL
Comanda UPDATE permite att modificarea structurii tabelelor bazei de date ct si
modificarea valorilor continute de acestea. Deoarece modificarea structurii tabelelor se
realizeaz mai elegant folosind phpMyAdmin, n cele ce urmeaz comanda va fi folosit
numai pentru editarea datelor din tabele.

Se executa click pe butonul GO.Rezultatul se poate vizualiza cu fila BROWSE

Comanda DELETE -are rolul de a terge datele existente ntr-o


tabel
- sintaxa este:
DELETE FROM nume_tabel WHERE condiii;
Comanda DELETE se folosete n urmtoarele situaii:
1. tergerea tuturor nregistrrilor dintr-o tabel;
mysql>Delete FROM produse;
2. tergerea nregistrrilor dintr-o tabel care ndeplinesc anumite
condiiile;
mysql>DELETE FROM produse WHERE produs_pret=45454;
3. tergerea din tabela Produse a nregistrrilor care au
pret_produs egal cu 45454 i conin litera a n numele
produselor se face astfel:
mysql>DELETE FROM produse WHERE produs_pret=45454 and
produs_nume LIKE '%a%';

Stergerea unei inregistrari se face cu comanda Delete editata in fila SQL al lui
phpMyAdmin astfel:
Comanda DELETE permite stergerea nregistrrilor din tabele.

La click pe Go se obtine:

In mesajul aparut pe ecran se da click pe ok si at inregistrarea este stearsa la click pe


cancel se renunta la stergerea inregistrarii. In fila Browse se vede rezultatul acestei
actiuni.

n clauza WHERE a comenzilor MySQL ce o accept, pot aprea urmtorii operatori de


comparaie:
Operator

Nume

Exemplu

eqalitate

produs_id = 2

>

mai mare

produs_oferta>2

<

mai mic

produs_pret<5555

>=

mai mic sau egal

produs_pret >=60.00

<=

mai mic sau egal

produs_pret <=60.00

!= sau <>

diferit

produs_nume <>tastatura

IS NOT NULL

valoare nenula

IS NULL

valoare nula

BETWEEN

interval de valori

produs_pret between 30 and 55555

IN

inclus ntr-un set predefinit

produs_oferta (1, 4)

NOT IN

neinclus ntr-un set predefinit

produs_oferta not in (1,4)

LIKE

valoare cutat

produs_nume like(%tastaura%)

NOT LIKE

valoare cutat

produs_nume not like (%tastaura%)

Tem Laborator
S se creeze o baz de date care s conin tabelele:
Tabela1. Profesori:
Idprofesor int unsigned not null auto_increment primary key
idstudent int unsigned not null
idmaterie int unsigned not null
Nume_Profesor varchar(30)
Materie varchar(30)
Tabela 2: Materii
idmateria int unsigned not null auto_increment primary key
idprofesor int unsigned not null
idstudent int unsigned not null
Numematerie varchar(20)
anstudiu tinyint(1)
Tabela3. Studenti
idstudent int unsigned not null auto_increment primary key
idmateria int unsigned not null
idprofesor int unsigned not null
Numestudent varchar(30)
Adresa varchar(40)
anstudiu tinyint(1)

Tabela4. Note
idnota int unsigned not null auto_increment primary key
idmateria int unsigned not null
idstudent int unsigned not null
note_sesiune_vara double(10,2)
note_sesiune_restanta double(10,2)
note_reexaminare double(10,2)

21.S se aduge o nou coloan la sfritul tabelului Produse cu


caracteristicile : produs_unitatemasura varchar(10);
22. S se aduge coloana exemplu int(3) unsigned dup cmpul produs_pret
n cadrul tabelului Produse
23. S se modifice numelui cmpui exemplu n produs_exemplu
24. S se modifice tipului de date al cmpului produs_exemplu din int(3)
unsigned n mediumint unsigned;
25. S se tearg coloana produs_exemplu din cadrul tabelei Produse
26. S se redenumeasc tabela Produse n Produs.
27. S se tearg din tabela Produse nregistrrile care au pret_produs mai
mare egal cu 400
28.S se tearg din tabela Produse nregistrrile care au pret_produs mai
mare egal cu 400 i conin litera a n numele produselor
29.S se creeze o pagin php care s afieze pe ecran textul E vacan iar
titlul pagini s fie prima pagin PHP. Pagina s se numeasc pag1.php

1. S se populeze toate tabele cu minim 5 nregistrri


2. S se introduc n tabela Studenti valori doar n 3 cmpuri neconsecutive
se va proceda astfel:
3. S se introduc n tabela Studenti n cmpul Numestudent o valoare nul.
4. Afiarea pe rnd a datelor existente n toate tabele
5. Afiarea valorilor cmpului Numestudent din tabela Studenti
6. Afiarea valorilor cmpurilor anstudiu, Numematerie din tabela Materii n
aceast ordine
7. Afiarea din tabela Note a a nregistrrilor care au n cmpul
note_sesiune_vara valoare 9
8. Afiarea valorilor cmpului Numestudent din tabela Studenti care au
numele POP
9. Afiarea valorilor cmpului Numestudent din tabela Studenti care au anul
de studiu 1
10.Afia pe ecran a tutror profesorilor al cror nume conin litera a.
11.Afia pe ecran a tutror materilor din tabela Profesori al cror denumire
conine litera i.
12.S se afieze numele profesorilor n ordine descresctoare.
13.S se afieze numele studenilor n ordine cresctoare.
14.Afiai numrului de studeni existente n tabela Studenti

15. Afiai doar primele 2 nregistrri din tabela Studenti


16. Calculai nota maxim din cmpul note_sesiune_vara a tabelei Note
17. S se modifice valorile ultimei nregistrri din tabela Studeni
18. S se modifice valorilor tuturor cmpurilor pentru nregistrrile din tabela Studenti
care sunt n anul 2
19. S se modifice valorilor tuturor cmpurilor pentru nregistrrile din tabela Studenti
care sunt n anul de studiu 2 i care conin litera a n cmpul Numestudent
20. Creai o baza de date magazin care s conin tabela produse a crei structur este