INNER JOIN vs LEFT JOIN, adică intrebarea. Astăzi, vom explica pe scurt modul în care sunt utilizate aceste două tipuri de îmbinare și care este diferența. Vom trece din nou la acest subiect mai târziu, când vom extinde modelul nostru și vom putea scrie interogări mult mai complexe.
Modificări ale datelor
Înainte de a compara INNER JOIN vs. ÎNREGISTRARE LA STÂNGA, să vedem ce știm în prezent. Până acum, în această serie, am explicat elementele de bază ale bazelor de date – cum să creați baze de date și tabele, cum să completați tabelele cu date și să verificați ce este stocat în ele folosind interogări simple. Am adăugat chiar și două tabele în articolul anterior. Acum suntem pregătiți pentru pasul următor.
Dar înainte de a trece la el, să facem o singură modificare minoră la datele noastre. Vom adăuga 2 rânduri în tabelul de țară, folosind următoarele comenzi INSERT INTO:
Acum vom verifica conținutul ambelor tabele:
Puteți observa cu ușurință că avem 2 rânduri noi în țara tabelului, unul pentru Spania și unul pentru Rusia. ID-urile lor sunt 6 și 7. De asemenea, observați că în tabelul orașului nu există country_id cu valoarea 6 sau 7. Acest lucru înseamnă pur și simplu că nu avem un oraș din Rusia sau Spania în baza noastră de date. Vom folosi acest fapt mai târziu.
INNER JOIN
Să discutăm aceste două întrebări:
Rezultatul pe care îl returnează este prezentat în imaginea de mai jos:
Ambele interogări returnează exact același rezultat. Acest lucru nu este întâmplător, ci rezultatul faptului că aceasta este aceeași interogare scrisă în două moduri diferite. Ambele moduri sunt corecte și puteți utiliza oricare dintre ele.
În prima interogare, am listat toate tabelele pe care le folosim în partea FROM a interogării (FROM țară, oraș) și apoi am mers cu join condiție în partea WHERE a interogării (WHERE city.country_id = country.id). În cazul în care am uitat să notăm această condiție de asociere, am avea produsul cartezian din ambele tabele.
În a doua interogare, avem un singur tabel în partea FROM a interogării (FROM țară) și apoi avem al doilea tabel și condiția JOIN în partea JOIN a interogării (INNER JOIN city ON city.country_id = country.id).
Deși ambele interogări sunt bine scrise, aș sugera că folosiți întotdeauna INNER JOIN în loc să listați tabele și să le alăturați în partea WHERE a interogării. Există câteva motive pentru acest lucru:
- Citibilitatea este mult mai bună, deoarece tabelul folosit și condiția JOIN aferentă sunt în aceeași măsură linia. Puteți vedea cu ușurință dacă ați omis condiția JOIN sau nu
- Dacă doriți să utilizați alte JOIN-uri mai târziu (STÂNGA sau DREAPTA), nu ați putea face acest lucru (cu ușurință) decât dacă ați folosit INNER JOIN înainte că
Acum, să comentăm ce întrebări au returnat efectiv:
- Toate perechile de țări și orașe care sunt înrudite (prin cheie străină)
- Nu avem 2 țări în listă (Spania și Rusia), deoarece nu au niciun oraș înrudit în tabelul orașului
ÎNREGISTRARE STÂNGĂ
Voi repeta acest lucru – „Nu avem 2 țări pe listă (Spania și Rusia) pentru că nu au niciun oraș înrudit în tabelul orașului”. Acest lucru se va dovedi crucial atunci când se compară INNER JOIN vs LEFT JOIN.
În unele cazuri, dorim să avem chiar și aceste înregistrări în rezultatele noastre. De exemplu, pur și simplu doriți să vedeți în rezultat că aceste țări nu au înregistrări conexe într-un alt tabel. Acest lucru ar putea face parte dintr-un anumit control, sau poate doar numărarea cazurilor, etc. Indiferent care este motivația din spatele acelei dorințe, ar trebui să fim capabili din punct de vedere tehnic să facem acest lucru. Si noi suntem. În bazele de date, LEFT JOIN face exact asta.
Rezultatul LEFT JOIN va fi același cu rezultatul INNER JOIN + vom avea rânduri, din tabelul „stânga”, fără o pereche în tabelul „dreapta”. Vom folosi aceeași interogare INNER JOIN și vom înlocui cuvântul INNER cu STÂNGA. Acesta este rezultatul:
Puteți observa cu ușurință că mai avem încă 2 rânduri, comparativ cu rezultatul INNER ÎNSCRIEȚI-VĂ la interogare. Acestea sunt rânduri pentru Rusia și Spania. Deoarece ambii nu au niciun oraș legat, toate atributele orașului din aceste două rânduri au valori NULL (nu sunt definite). Aceasta este cea mai mare diferență atunci când comparați INNER JOIN vs LEFT JOIN.
RIGHT JOIN
Cel puțin veți auzi despre RIGHT JOIN Este rar folosit, deoarece returnează același rezultat ca și ÎNREGISTRAREA STÂNGA. Pe de altă parte, interogările care utilizează LEFT JOIN sunt mult mai ușor de citit, deoarece listăm tabelele unul după altul.
Acesta este echivalentul interogării anterioare folosind RIGHT JOIN:
Puteți observa că valorile returnate sunt aceleași, numai în acest caz valorile din tabelul orașului sunt în primele 5 coloane și țară- valorile aferente vin după ele.
INNER JOIN vs LEFT JOIN
INNER JOIN vs LEFT JOIN?De fapt, aceasta nu este deloc întrebarea. Veți utiliza INNER JOIN atunci când doriți să returnați numai înregistrări cu perechi pe ambele părți și veți utiliza LEFT JOIN când aveți nevoie de toate înregistrările din tabelul „stânga”, indiferent dacă au pereche în tabelul „dreapta” sau nu. Dacă veți avea nevoie de toate înregistrările de pe ambele tabele, indiferent dacă au perechi, va trebui să utilizați CROSS JOIN (sau să o simulați folosind STÂNGĂ COMUNICĂRI și UNION). Mai multe despre asta în articolele viitoare.
Cuprins
Aflați SQL: CREATE DATABASE & CREATE TABLE Operations
Learn SQL: INSERT INTO TABLE
Learn SQL: Primary Key
Learn SQL: Foreign Key
Aflați SQL: Instrucțiune SELECT
Aflați SQL: INNER JOIN vs LEFT JOIN
Learn SQL: SQL Scripts
Aflați SQL: Tipuri de relații
Aflați SQL: Alăturați-vă mai multor tabele
Aflați SQL: Funcții agregate
Aflați SQL: Cum se scrie o interogare SELECT SELECT
Aflați SQL: baza de date INFORMATION_SCHEMA
Aflați SQL: Tipuri de date SQL
Learn SQL: Set Theory
Learn SQL: User-Defined Functions
Learn SQL: User-Defined Stored Procedures
Learn SQL: SQL Views
Learn SQL: SQL Triggers
Learn SQL: Practice SQL Queries
Aflați SQL: exemple de interogare SQL
Aflați SQL: creați manual un raport folosind interogări SQL
Aflați SQL: funcții de dată și oră SQL Server
Aflați SQL: creați rapoarte SQL Server utilizând funcții de dată și oră
Learn SQL: SQL Server Pivot Tables
Learn SQL: SQL Server export to Excel
Learn SQL: Introducere în buclele SQL Server
Aflați SQL: cursori SQL Server
Aflați SQL: Cele mai bune practici SQL pentru ștergerea și actualizarea datelor
Aflați SQL: Convenții de numire
Learn SQL: SQL-Related Jobs
Learn SQL: Non-Equi Joins in SQL Server
Learn SQL: SQL Injecție
- Autor
- Postări recente
Angajamentele sale din trecut și prezent variază de la proiectarea și codificarea bazelor de date până la predare, consultanță și scriere despre baze de date. De asemenea, să nu uităm, BI, creând algoritmi, șah, filatelie, 2 câini, 2 pisici, 1 soție, 1 bebeluș …
Îl poți găsi pe LinkedIn
Vezi toate mesajele lui Emil Drkusic
- Learn SQL: SQL Injection – 2 noiembrie 2020
- Learn SQL: Non-Equi Joins in SQL Server – 29 septembrie 2020
- Learn SQL: Locuri de muncă legate de SQL – 1 septembrie 2020