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: 29409 29409 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:
1 23456789 »
comenteaza printeaza

Tabelul pet tine evidenta animalelor pe care le ai. Daca doresti sa inregistrezi alte informatii despre ele, cum ar fi evenimente din viata lor, precum vizitele la veterinar sau data la care li se nasc puii, foloseste un alt tabel. Cum ar trebui sa arate acest tabel? El va trebui sa:
• Contina numele animalului de casa caruia ii corespunde fiecare eveniment.
• O data, pentru a sti cand s-a petrecut evenimentul.
• Un camp pentru a descrie evenimentul.
• Un camp care sa desemneze tipul evenimentului, daca doresti sa poti clasifica evenimentele.

Avand in vedere toate aceste considerente, instructiunea CREATE TABLE pentru tabelul event ar putea arata astfel:

mysql> CREATE TABLE event (name VARCHAR(20), date DATE,
    -> type VARCHAR(15), remark VARCHAR(255));

Ca si in cazul tabelului pet, cel mai convenabil este sa incarci datele initiale creand un fisier text tab-delimited care sa cuprinda urmatoarele informatii:


name

date

type

remark

Fluffy

1995-05-15

litter

4 kittens, 3 female, 1 male

Buffy

1993-06-23

litter

5 puppies, 2 female, 3 male

Buffy

1994-06-19

litter

3 puppies, 3 female

Chirpy

1999-03-21

vet

needed beak straightened

Slim

1997-08-03

vet

broken rib

Bowser

1991-10-12

kennel

 

Fang

1991-10-12

kennel

 

Fang

1998-08-28

birthday

Gave him a new chew toy

Claws

1998-03-17

birthday

Gave him a new flea collar

Whistler

1998-12-09

birthday

First birthday

Incarca inregistrarile astfel:

mysql> LOAD DATA LOCAL INFILE 'event.txt' INTO TABLE event;

Bazandu-te pe ceea ce ai invatat din interogarile pe care le-ai rulat pe tabelul pet, ar trebui sa fii capabil sa efectuezi extrageri de date din tabelul event; principiile de baza raman aceleasi. Dar care sunt cazurile in care tabelul event, de unul singur, este insuficient pentru a raspunde intrebarilor pe care i le-ai putea adresa?

Sa presupunem ca doresti sa afli varstele la care fiecare animal de casa si-a fatat puii. Am vazut mai devreme modul in care se calculeaza varstele pornind de la data nasterii. Data la care mama si-a fatat puii se afla in tabelul event, insa, pentru a calcula varsta pe care o avea la acea data, ai nevoie de ziua ei de nastere, care este stocata in tabelul pet. Acest lucru inseamna ca interogarea necesita ambele tabele:

mysql> SELECT pet.name,
    -> (YEAR(date)-YEAR(birth)) - (RIGHT(date,5)<RIGHT(birth,5)) AS age,
    -> remark
    -> FROM pet INNER JOIN event
    ->   ON pet.name = event.name
    -> WHERE event.type = 'litter';
+--------+------+-----------------------------+
| name   | age  | remark                      |
+--------+------+-----------------------------+
| Fluffy |    2 | 4 kittens, 3 female, 1 male |
| Buffy  |    4 | 5 puppies, 2 female, 3 male |
| Buffy  |    5 | 3 puppies, 3 female         |
+--------+------+-----------------------------+

Ar fi mai multe lucruri care trebuie aduse in atentie in legatura cu acesta interogare:
• Clauza FROM uneste cele doua tabele, intrucat interogarea are nevoie sa isi extraga informatii din ambele.
• In momentul combinarii informatiilor apartinand mai multor tabele, trebuie sa specifici modul in care inregistrarile dintr-un tabel pot fi asociate inregistrarilor din celalalt. Acest lucru este simplu, deoarece ambele au cate o coloana name. Interogarea foloseste o clauza ON pentru a face o corespondenta intre inregistrarile din cele doua tabele care se bazeaza pe valorile name.

Interogarea foloseste un INNER JOIN pentru a uni tabelele. Un INNER JOIN permite randurilor din oricare tabel sa apara in rezultat daca si numai daca ambele tabele intrunesc conditiile specificate in clauza ON. In exemplul de fata, clauza ON impune coloanei name din tabelul pet sa corespunda coloanei name din tabelul event. Daca un nume apare intr-un tabel dar nu si in celalalt, randul respectiv nu va aparea in rezultat, deoarece conditia din clauza ON esueaza.

• Intrucat coloana name apare in ambele tabele, trebuie sa precizezi cu exactitate la care tabel te raportezi atunci cand mentionezi coloana. Acest lucru se realizeaza antepunand numele tabelului numelui coloanei.

Nu ai neaparat nevoie de doua tabele pentru a efectua o combinare. Uneori este util sa unesti un tabel cu el insusi, in cazul in care doresti sa compari inregistrarile dintr-un tabel cu alte inregistrari, din acelasi tabel. De exemplu, pentru a gasi perechi care sa dea nastere la pui printre animalele de casa, poti uni tabelul pet cu sine insusi pentru a returna perechi mascul-femela apartinand unor specii similare:

mysql> SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species
    -> FROM pet AS p1 INNER JOIN pet AS p2
    ->   ON p1.species = p2.species AND p1.sex = 'f' AND p2.sex = 'm';
+--------+------+--------+------+---------+
| name   | sex  | name   | sex  | species |
+--------+------+--------+------+---------+
| Fluffy | f    | Claws  | m    | cat     |
| Buffy  | f    | Fang   | m    | dog     |
| Buffy  | f    | Bowser | m    | dog     |
+--------+------+--------+------+---------+

In aceasta interogare, vom specifica un alias pentru numele tabelului pentru a ne referi la coloane si pentru a afla exact carui element din tabel ii este asociata fiecare referinta din coloana.

Pagina:
1 23456789 »
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
4320
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
4180
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
4170
Tutoriale scrise de kheops
kheops Rang utilizator kheops - Mediu
4084
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
4000
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
AJAX Fotografie Bridge Excel StyleSheet XML Ruby on Rails PSD Word RoR Vista SEO Fireworks Gimp Lightroom COREL DRAW Dreamweaver PHP Python SWF Powerpoint Illustrator Photoshop Verilog Java MySQL Swift 3D Javascript Sony Vegas Flash CSS Outlook JSON Action Script HTML XHTML
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