E-learn.ro
Panou utilizatori
Utilizator Parola
Creeaza cont nou    Recupereaza parola
Login
Newsletter
Introdu adresa ta de email
Inscrie-te
Inchide panoul de utilizatori
Add to Google

Tutoriale MySQL

Descarca toolbar

Toolbar E-learn.ro Facebook Twitter

BAZE DE DATE  /  MySQL  /  Bazele MySQL (3)

III. Bazele MySQL - Interogari din tabele multiple

17.12.2008
III. Bazele MySQL - Interogari din tabele multiple

Afisarea datelor din tabele multiple.

Total vizualizari: 29392 29392 afisari   |   Comentarii  1   |   Rating   |   (12 voturi)   |   Timp necesar: 1h 30 min 1h 30 min   |   Nivel de cunostiinte necesar: Incepator  Incepator

Sursa:  MySQL  
Autor:  E-learn.ro
Adauga la tutoriale favorit Adauga la tutoriale favorite
Pagina:
« 12345 6 789 »
comenteaza printeaza

Pentru a gasi nume formate din exact cinci caractere, foloseste de cinci ori caracterul-pattern "_":

mysql> SELECT * FROM pet WHERE name LIKE '_____';
+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+

Celalalt tip de cautare de sabloane asigurat de catre MySQL foloseste expresii regulate extinse. Atunci cand efectuezi un test pentru a gasi un corespondent pentru acest tip de sablon, foloseste operatorii REGEXP si NOT REGEXP (sau RLIKE si NOT RLIKE, care le sunt sinonimi).

Iata cateva caracteristici ale expresiilor regulate extinse:
• "." Corespunde oricarui caracter unic.
• O clasa de caractere "[...]" corespunde oricarui caracter cuprins intre parantezele patrate. De exemplu, "[abc]" corespunde lui "a", "b", sau "c". Pentru a numi un sir de caractere, foloseste o cratima. "[a-z]" corespunde oricarei litere, pe cand "[0-9]" corespunde oricarei cifre.
• "*" inseamna zero sau mai multe aparitii ale elementului anterior. De exemplu, "x*" corespunde oricarui numar de aparitii ale caracterului "x" , "[0-9]*" corespunde oricarui numar de cifre, iar ".*"- oricarui numar din oricare element.
• Un apel REGEXP se incheie cu succes daca sablonul se potriveste oriunde in cadrul valorii testate. (Acesta difera de o cautare LIKE , care se termina cu succes doar daca sablonul se potriveste intregii valori.)
• Pentru a ancora un sablon astfel incat sa se potriveasca inceputului sau sfarsitului valorii testate, foloseste "^" la inceputul sau "$" la sfarsitul sablonului.

Pentru a demonstra cum functioneaza expresiile regulate extinse, interogarile LIKE prezentate mai devreme vor fi scrise aici folosind REGEXP.
Pentru a gasi nume care incep cu "b", foloseste "^" astfel incat sa il asociezi cu inceputul fiecarui nume:

mysql> SELECT * FROM pet WHERE name REGEXP '^b';
+--------+--------+---------+------+------------+------------+
| name   | owner  | species | sex  | birth      | death      |
+--------+--------+---------+------+------------+------------+
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL       |
| Bowser | Diane  | dog     | m    | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+

Daca intr-adevar doresti sa fortezi o comparatie REGEXP astfel incat sa fie case-sensitive, foloseste cuvantul-cheie BINARY pentru a transforma unul dintre siruri intr-un sir binar. Aceasta interogare se va potrivi doar literei mici "b" de la inceputul unui nume:

mysql> SELECT * FROM pet WHERE name REGEXP BINARY '^b';

Pentru a gasi nume care se termina in "fy", foloseste "$" pentru a-l asocia sfarsitului numelui:

mysql> SELECT * FROM pet WHERE name REGEXP 'fy$';
+--------+--------+---------+------+------------+-------+
| name   | owner  | species | sex  | birth      | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat     | f    | 1993-02-04 | NULL  |
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL  |
+--------+--------+---------+------+------------+-------+

Pentru a gasi nume care contin un "w", foloseste aceasta interogare:

mysql> SELECT * FROM pet WHERE name REGEXP 'w';
+----------+-------+---------+------+------------+------------+
| name     | owner | species | sex  | birth      | death      |
+----------+-------+---------+------+------------+------------+
| Claws    | Gwen  | cat     | m    | 1994-03-17 | NULL       |
| Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL       |
+----------+-------+---------+------+------------+------------+

Deoarece sablonul dat de o expresie regulata va fi gasit indiferent de pozitia sa in cadrul unui sir de caractere, nu este necesar sa folosesti "%" inainte si dupa sablon, cum ai fi procedat daca era vorba despre un sablon SQL clasic.

Pentru a gasi nume care contin exact cinci caractere, foloseste "^" si "$" pentru a identifica inceputul si sfarsitul numelui, si de cinci ori ".", intre:

mysql> SELECT * FROM pet WHERE name REGEXP '^.....$';
+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+

Ai putea de asemenea sa scrii interogarea precedenta folosind operatorul ("repeta-de-n-ori"):

mysql> SELECT * FROM pet WHERE name REGEXP '^.$';
+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+

Bazele de date sunt adesea folosite pentru a raspunde la intrebarea, "De cate ori apare un anumit tip de data intr-un tabel?". De exemplu, ai putea dori sa stii cate animale de casa ai, sau cate animale de casa detine fiecare stapan, sau ai putea dori sa efectuezi diverse tipuri de statistici de recensamant in legatura cu animalele.

Sa obtii numarul total de animale pe care il ai este un demers echivalent cu intrebarea "Cate randuri exista in tabelul pet?" , pentru ca exista cate o inregistrare pentru fiecare animal de casa. Functia COUNT(*) numara randurile, astfel incat interogarea privind numarul de animale arata dupa cum urmeaza:

mysql> SELECT COUNT(*) FROM pet;
+----------+
| COUNT(*) |
+----------+
|        9 |
+----------+
Pagina:
« 12345 6 789 »
comenteaza printeaza
Alte tutoriale MySQL:
Noteaza acest tutorial
Rating tutorial
 
(12 voturi)
Pentru a nota acest tutorial, trebuie sa fii logat!
COMENTARII (1) spune-ti parerea
nicuslick , Joi, 06 Iunie 2013, ora 07:19
#1

Buna ziua. Am o baza de date cu 2 tabele. Primul tabel (users) are campurile nume si id iar al doilea tabel (categorie) id_categorie si tip_utilizator. Cum asociez tipul de utillizator userului? Si toata treaba asta in PHPmyadmin. Folosesc EasyPHP. Multumesc anticipat

Raporteaza acest comentariu ca injurios!
Posteaza un comentariu
Pentru a posta un comentariu, trebuie sa fii logat!
0 TOP UTILIZATORI* 0 0
Tutoriale scrise de claibornelara
claibornelara Rang utilizator claibornelara - Incepator
4305
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
4165
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
4160
Tutoriale scrise de kheops
kheops Rang utilizator kheops - Mediu
4084
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
3985
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
AJAX Ruby on Rails Outlook MySQL Flash Javascript HTML Excel COREL DRAW Gimp Fireworks PSD RoR SEO SWF StyleSheet Photoshop Verilog Swift 3D Sony Vegas Bridge Vista PHP Java XML Powerpoint CSS Lightroom XHTML Action Script Illustrator Fotografie Dreamweaver Python JSON Word
Promovare:
Daca faci parte din comunitatea E-learn.ro si doresti promovarea acesteia, poti accesa pagina de promovare.
Arhiva newsletter:
Daca ai ratat un numar mai vechi, sau vrei sa revezi care au fost noutatile E-learn.ro la un moment dat, poti accesa arhiva de newslettere.
  Copyright © 2008-2013 E-LEARN.ro. Toate drepturile rezervate. Termeni si conditii.
Conceput si realizat de Neokinetics Software