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: 30925 30925 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:
« 1234 5 6789 »
comenteaza printeaza

O interogare similara poate fi folosita pentru a determina varsta decesului, in cazul animalelor care au murit. Vei determina care anume sunt aceste animale verificand daca valoarea pentru death este NULL. Apoi, pentru cele cu valori non-NULL, calculeaza diferenta dintre valorile aferente campurilor death si birth:

mysql> SELECT name, birth, death,
    -> (YEAR(death)-YEAR(birth)) - (RIGHT(death,5)<RIGHT(birth,5))
    -> AS age
    -> FROM pet WHERE death IS NOT NULL ORDER BY age;
+--------+------------+------------+------+
| name   | birth      | death      | age  |
+--------+------------+------------+------+
| Bowser | 1989-08-31 | 1995-07-29 |    5 |
+--------+------------+------------+------+

Interogarea va utiliza mai degraba death IS NOT NULL decat death <> NULL intrucat NULL este o valoare aparte care nu poate fi comparata folosind operatorii obisnuiti de comparare. Acest aspect este discutat mai tarziu.

Dar daca doresti sa afli ce animale au ziua de nastere in cursul lunii curente? Pentru acest tip de calcul, anul si ziua sunt irelevante; nu doresti decat sa extragi partea corespunzatoare lunii din coloana birth. MySQL asigura mai multe functii pentru extragerea partilor din date, cum ar fi YEAR(), MONTH(), si DAYOFMONTH(). MONTH() este functia adecvata acestui caz. Pentru a vedea cum functioneaza, ruleaza o interogare simpla ce afiseaza atat valoarea lui birth , cat si a lui MONTH(birth):

mysql> SELECT name, birth, MONTH(birth) FROM pet;
+----------+------------+--------------+
| name     | birth      | MONTH(birth) |
+----------+------------+--------------+
| Fluffy   | 1993-02-04 |            2 |
| Claws    | 1994-03-17 |            3 |
| Buffy    | 1989-05-13 |            5 |
| Fang     | 1990-08-27 |            8 |
| Bowser   | 1989-08-31 |            8 |
| Chirpy   | 1998-09-11 |            9 |
| Whistler | 1997-12-09 |           12 |
| Slim     | 1996-04-29 |            4 |
| Puffball | 1999-03-30 |            3 |
+----------+------------+--------------+

Detectarea animalelor cu zile de nastere in urmatoarea luna este la fel de simplu. Sa presupunem ca data curenta este aprilie. Atunci, valoarea lunii este 4 si poti cauta animalele nascute in mai (luna 5) astfel:

mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = 5;
+-------+------------+
| name  | birth      |
+-------+------------+
| Buffy | 1989-05-13 |
+-------+------------+

Exista o oarecare complicatie daca data curenta este decembrie. Nu poti pur si simplu sa adaugi o unitate la numarul lunii (12) si sa cauti animale nascute in luna 13, deoarece nu exista o asemenea luna. In schimb, poti cauta animale nascute in ianuarie (luna 1).

Poti scrie interogarea astfel incat sa functioneze indiferent de luna curenta, astfel incat sa nu ai nevoie sa folosesti numarul unei anumite luni. DATE_ADD() iti permite sa adaugi un interval de timp unei anumite date. Daca adaugi o luna valorii CURDATE(), iar apoi extragi partea lunii cu MONTH(), rezultatul va consta in luna in cadrul careia cauti zile de nastere:

mysql> SELECT name, birth FROM pet
    -> WHERE MONTH(birth) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH));

O alta modalitate de a indeplini aceeasi sarcina este sa adaugi 1 si sa obtii luna imediat urmatoare celei curente dupa ce ai folosit functia modul (MOD) pentru a reduce valoarea lunii la 0 daca aceasta este in mod curent 12:

mysql> SELECT name, birth FROM pet
    -> WHERE MONTH(birth) = MOD(MONTH(CURDATE()), 12) + 1;

De remarcat ca MONTH() returneaza un numar cuprins intre 1 si 12. Iar MOD(something, 12) returneaza un numar cuprins intre 0 si 11. Astfel, adunarea trebuie efectuata dupa MOD(), caci altfel am trece de la noiembrie (11) la ianuarie (1).

MySQL furnizeaza un mecanism standard SQL de cautare de sabloane, precum si o forma de cautare de sabloane bazata pe expresii regulate extinse, similare celor utilizate de catre utilitarele Unix, cum ar fi vi, grep, si sed.

Cautarea de sabloane SQL iti permite sa folosesti "_" pentru a efectua corespondente cu orice caracter unic si "%" pentru efectua corespondente cu un numar oarecare de caractere (inclusiv caracterele nule). In MySQL, sabloanele SQL sunt predefinite in mod automat case-insensitive. Aici sunt prezentate niste exemple. De remarcat ca nu trebuie sa folosesti = sau <> atunci cand ai de-a face cu pattern-uri SQL; foloseste operatorii de comparatie LIKE sau NOT LIKE in loc.

Pentru a gasi numai animalele al caror nume incepe cu "b":

mysql> SELECT * FROM pet WHERE name LIKE "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 |
+--------+--------+---------+------+------------+------------+

Pentru a gasi animalele al caror nume se termina in "fy":

mysql> SELECT * FROM pet WHERE name LIKE "%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 numele ce contin un "w":

mysql> SELECT * FROM pet WHERE name LIKE "%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       |
+----------+-------+---------+------+------------+------------+
Pagina:
« 1234 5 6789 »
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
5455
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
5450
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
5275
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
5260
Tutoriale scrise de beacherrosa
beacherrosa Rang utilizator beacherrosa - Incepator
5010
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
Illustrator Flash StyleSheet Action Script Outlook Lightroom Ruby on Rails CSS Verilog MySQL Sony Vegas Fireworks Dreamweaver Python HTML XHTML Gimp AJAX Swift 3D XML Java PHP Excel Bridge PSD SWF COREL DRAW Javascript SEO Fotografie RoR Powerpoint Vista JSON Photoshop 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