Atunci când dezvoltăm proiecte web cu participarea unei baze de date, adesea trebuie să combinăm tabelele bazei de date în interogări pentru a obține datele necesare.
Avertisment: în articol în starea de combinare a tabelelor se utilizează atât ON, cât și UTILIZARE, pentru o schimbare. Vă reamintesc că, dacă coloanele în care are loc combinarea, au același nume, trebuie să utilizați FOLOSIND ( `imya_stolbtsa`), utilizați în caz contrar ON`` = TableA`.`imya_stolbtsa_iz_TableA` TableB`.`imya_stolbtsa_iz_TableB`
Deci, să presupunem că avem două mese. Tabelul A (tabelul A) din partea stângă și tabelul B (tabelul B) din dreapta. Vom umple fiecare patru personaje, ale căror nume pot fi prezente pe ambele mese.
Esența acestei construcții constă în faptul că baza de date însăși alege care coloane să compare și să îmbine tabelele. Iar această alegere cade pe coloanele cu același nume. Aceasta este ambuscada Baza de date mdash poate selecta complet coloanele greșite pentru join și interogarea va funcționa complet diferit decât v-ați așteptat.
SELECT * FROM `TableA`
NATURAL JOIN `TableB`
În acest caz, DBMS alege id-ul și numele coloanelor pentru a se alătura tabelelor, deoarece acestea sunt prezente în ambele tabele și transformă interogarea originală într-o interogare cu următoarea formă:
SELECT * FROM `TableA`
INNER JOIN `TableB`
Dar, deoarece nu avem înregistrări cu același id și nume simultan în ambele tabele, interogarea returnează un rezultat gol.
Dacă faceți controlul tabelului stâng și modificați interogarea:
SELECTați "TableA". *, `TableB`. * FROM` TableA`
AJUTOR NATURAL STÂNGA `TableB`
O astfel de solicitare este dată de DBMS la următoarele:
SELECTați "TableA". *, `TableB`. * FROM` TableA`
LEFT JOIN `TableB`
Rezultatul va fi:
Astfel, baza de date însăși alege care coloane și cum să combine tabelele. Pe de o parte, este foarte convenabil, pe de alta parte are un dezastru: unde este garantia ca coloanele cu aceleasi denumiri in tabele vor fi cele cheie si sunt destinate integrarii? NATURAL JOIN degradează citibilitatea codului, deoarece dezvoltatorul nu va putea determina la cerere modul în care sunt combinate mesele. Prin urmare, acordând atenție unor astfel de factori, nu se recomandă utilizarea NATURAL JOIN.
RĂSPUNSUL STRAIGHT efectuează aceleași funcții ca INNER JOIN normal, cu excepția faptului că tabelul stâng este citit înainte de tabelul din dreapta.
SELECT * FROM `TableA`
PRELUARE JOIN `TableB` UTILIZARE (` nume`)
SELECT * FROM `TableB`
PRELUCRAREA JOCULUI "TableA" UTILIZAREA (denumirea)
Dacă se alătură tabele nu specifică o condiție se alăture prin ON sau FOLOSIREA clauza, atunci baza va produce eșantionarea așa-numita cartezian, atunci când valoarea unui tabel este egal cu valoarea reciproc. Astfel, DBMS, în cazul nostru, returnează 4x4 = 16 linii.
SELECT * FROM `TableA`
P.S. corecție: înregistrările ID se pot potrivi, atunci.