SQLShack (Română)

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
Emil este un profesionist în baze de date cu peste 10 ani de experiență în tot ceea ce privește bazele de date. De-a lungul anilor, a lucrat în industria IT și financiară și acum lucrează ca freelancer.
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

Ultimele mesaje ale lui Emil Drkusic (vezi toate)
  • 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

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *