Sintaxa celei mai simple îmbinări este:
SELECT tbl_name_table_1, tbl_name_table_title_2 FROM tbl_name_1, tbl_name2;
Să creați o simplă îmbinare:
Nu sa dovedit exact ceea ce ne-am așteptat. O astfel de uniune este denumită științific produsul cartezian, atunci când fiecare rând al primei mese este asociat cu fiecare rând din al doilea tabel. Poate că există cazuri când o astfel de asociere este utilă, dar acest lucru nu este în mod evident cazul nostru.
Acordați atenție la două lucruri:
· Dacă într-una din tabelele integrate există un șir cu un identificator care nu se află în cealaltă tabelă asociată, atunci în tabelul rezultat nu va exista nici o linie cu un astfel de identificator. În exemplul nostru, există utilizator Oleg (id = 5), dar el nu a creat fire, astfel că interogarea nu o are.
· Când se specifică o condiție, numele coloanei este scris după numele tabelului în care se află această coloană (prin punct). Acest lucru este făcut pentru a evita confuzia, deoarece coloanele din diferite tabele pot avea aceleași nume, iar MySQL poate să nu înțeleagă despre ce coloane specifice vorbesc.
În general, sintaxa corectă de combinare cu condiția arată astfel:
Dacă numele coloanei este unic, atunci numele tabelului poate fi omis (așa cum am făcut în exemplu), dar acest lucru nu este recomandat.
După cum înțelegeți, sindicatele vă permit să selectați orice informație din orice tabel, iar tabelele îmbinate pot fi trei sau patru, iar condiția pentru unificare ar putea să nu fie una.
Prin urmare, dacă trebuie să facem o cerere ușor diferită - să retragem toți utilizatorii și subiectele pe care le-au creat, dacă există - atunci va trebui să folosim Uniunea Externă. Permite afișarea tuturor rândurilor unui tabel și a rândurilor asociate dintr-un alt tabel. Vom vorbi despre astfel de asociații în următoarea lecție.
SQL - Lecția 7. Combinarea tabelelor (conexiune externă)
Deci, în cursul ultimei lecții, trebuie să deducem toți utilizatorii și temele pe care le-au creat, dacă există. Dacă profităm de asocierea interioară examinată în ultima lecție, vom ajunge la următoarele:
Adică, în tabelul rezultat există numai acei utilizatori care au creat subiectul. Și trebuie să vedem toate numele. Pentru a face acest lucru, vom schimba ușor interogarea:
SELECT users.name, topics.topic_name
De la utilizatori, LEFT OUTER JOIN subiecte
Și obțineți rezultatul dorit - toți utilizatorii și temele pe care le-au creat. Dacă utilizatorul nu a creat o temă, dar coloana corespunzătoare este NULL.
Așadar, am adăugat cuvântul cheie LEFT OUTER JOIN la interogarea noastră. indicând faptul că din tabelul din stânga trebuie să luați toate liniile și ați modificat cuvântul cheie WHERE la ON. În plus față de cuvântul cheie LEFT OUTER JOIN, poate fi folosit cuvântul cheie RIGHT OUTER JOIN. Apoi vor fi selectate toate rândurile din tabelul din dreapta și cele asociate din tabelul stâng. În cele din urmă, este posibilă o legătură exterioară completă, care va extrage toate rândurile din ambele mese și va lega cele care pot fi legate între ele. Cuvântul cheie pentru o intrare externă completă este FULL OUTER JOIN.
Să schimbăm în cererea noastră uniunea de stânga pe dreapta:
După cum puteți vedea, acum avem toate subiectele (toate liniile din tabelul din dreapta), dar utilizatorii sunt doar cei care au creat temele (adică numai acele rânduri care sunt asociate cu tabela dreaptă sunt selectate din tabelul din stânga).
Din păcate, MySQL nu suportă consolidarea completă a bazei de date.
Să rezumăm această scurtă lecție. Sintaxa pentru asamblarea exterioară este:
SELECT tbl_name_1.column_name, tbl_name_2.column_name
FROM tbl_name_1 TIPUL DE ASOCIERE tbl_name_2
în cazul în care TIPUL DE ASOCIERE este fie JOIN OUT EXTERIOR, fie DREAPTA JOIN