AUTO JOIN si Subinterogari corelate in MySQL

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
patricia
Mesaje:82

AUTO JOIN si Subinterogari corelate in MySQL

As fi foarte recunoscatoare daca poate sa imi dea cineva cateva exemple clare cu autouniri (auto join) si subinterogari corelate.
Definitie:
- O subinterogare e corelata cand valoarea produsa de ea depinde de o valoare produsa de o instructiune select exterioara care o contine.

MarPlo Mesaje:4343
Salut
Din definitie, cred ca o interogare corelata cu o subinterogare ar fi asa:

Cod: Selectaţi tot

UPDATE `tabel_1` SET `col`='val' WHERE `tabel_1`.`id`=(SELECT `tabel_2`.`id` FROM `tabel_2` WHERE `tabel_2`.`col`='o_val' LIMIT 1)
- Select-ul fiind subinterogare in interogarea Update.

Iar AUTO JOIN (din ce am gasit pe net, fiindca personal nu am folosit) se face intre tabele care au coloana index cu acelasi nume, si astfel nu mai trebuie specificata acea coloana.
De exemplu, in acest Select:

Cod: Selectaţi tot

SELECT * FROM tabel1
JOIN tabel2 ON tabel1.id = tabel2.id
- Daca coloana "id" e PRIMARY KEY in abele tabele, se poate scrie cu AUTO JOIN asa:

Cod: Selectaţi tot

SELECT * FROM tabel1
AUTO JOIN tabel2
Sau asa:

Cod: Selectaţi tot

SELECT * FROM tabel1
AUTO JOIN tabel2 USING (id)

patricia Mesaje:82
Am gasit cateva exemple, dar nu inteleg care e mecanismul, cum functioneaza exact , care sunt pasii exacti care se executa.
O sa enumar exemplele si daca intelege careva va rog sa explicati si pentru "nelamuritii" ca mine:

Se dau 3 tabele ce respecta structura:
articole (id_articol, denumire_articol, id_fabrica, pret_unitar);
fabrici (id_fabrica, nume_fabrica,oras, strada, numar);
comenzi (numar_comanda, data_comenzii, data_livrarii, id_client);

a) Determinati comenzile care contin mai mult de trei articole:

Cod: Selectaţi tot

SELECT numar_comanda FROM comenzi, c
WHERE 3<(SELECT COUNT(*) FROM articole, a
WHERE c.numar_comanda = a.numar_comanda)
b) Determinati toate comenzile de cielo:

Cod: Selectaţi tot

SELECT * FROM comenzi, c
WHERE "CIELO" = (SELECT denumire_articol FROM articole, a
WHERE c.id_articol=a.id_articol)