INNER JOIN vs LEFT JOIN, altså spørsmålet. I dag vil vi kort forklare hvordan begge disse to sammenføyningstyper brukes og hva som er forskjellen. Vi vil gå gjennom dette emnet igjen senere når vi utvider modellen og kan skrive mye mer komplekse spørsmål.
Endringer i dataene
Før vi sammenligner INNER JOIN vs. VENSTRE MEDLEM, la oss se hva vi for øyeblikket vet. Så langt har vi i denne serien forklart det grunnleggende om databaser – hvordan du lager database og tabeller, hvordan du fyller ut tabeller med data og sjekker hva som er lagret i dem ved hjelp av enkle spørsmål. Vi har til og med blitt med i to tabeller i forrige artikkel. Nå er vi klare for neste trinn.
Men før vi går videre til det, la oss bare gjøre en mindre endring til våre data. Vi legger til to rader i landstabellen ved å bruke følgende INSERT INTO-kommandoer:
Nå sjekker vi innholdet i begge tabellene:
Du kan enkelt merke at vi har to nye rader i tabelllandet, en for Spania og en for Russland. IDene deres er 6 og 7. Legg også merke til at det i bytabellen ikke er noe land_id med verdi 6 eller 7. Dette betyr ganske enkelt at vi ikke har en by fra Russland eller Spania i databasen vår. Vi vil bruke dette faktum senere.
INNER JOIN
La oss diskutere disse to spørsmålene:
Resultatet de returnerer er presentert på bildet nedenfor:
Begge spørsmålene gir nøyaktig samme resultat. Dette er ikke ved et uhell, men resultatet av det faktum at dette er det samme spørsmålet skrevet på to forskjellige måter. Begge måtene er riktige, og du kan bruke hvilken som helst av dem.
I den første spørringen listet vi opp alle tabellene vi bruker i FROM-delen av spørringen (FRA land, by) og gikk deretter med join tilstand i WHERE-delen av spørringen (WHERE city.country_id = country.id). Hvis vi glemte å skrive ned denne sammenkoblingsbetingelsen, ville vi ha det kartesiske produktet av begge tabellene.
I den andre spørringen har vi bare en tabell i FROM-delen av spørringen (FRA land) og så har vi den andre tabellen og JOIN-tilstanden i JOIN-delen av spørringen (INNER JOIN city ON city.country_id = country.id).
Mens begge spørsmålene er velskrevne, vil jeg foreslå at du bruker alltid INNER JOIN i stedet for å liste opp tabeller og bli med i WHERE-delen av spørringen. Det er noen grunner til det:
- Lesbarhet er mye bedre fordi tabellen som brukes og tilhørende JOIN-tilstand er i den samme linje. Du kan enkelt se om du har utelatt JOIN-tilstanden eller ikke
- Hvis du vil bruke andre JOIN-er senere (VENSTRE eller HØYRE), kunne du ikke gjøre det (enkelt) med mindre du har brukt INNER JOIN før det
La oss nå kommentere hvilke spørsmål som faktisk returnerte:
- Alle par av land og byer som er relatert (via utenlandsk nøkkel)
- Vi har ikke to land på listen (Spania og Russland), fordi de ikke har noen beslektet by i bytabellen
VENSTRE MEDLEM
Jeg skal gjenta dette – «Vi har ikke 2 land på listen (Spania og Russland) fordi de ikke har noen beslektet by i bytabellen». Dette skal være avgjørende når vi sammenligner INNER JOIN vs LEFT JOIN.
I noen tilfeller ønsker vi å ha til og med disse postene i resultatene våre. For eksempel vil du bare se i resultatet at disse landene ikke har relaterte poster i en annen tabell. Dette kan være en del av en eller annen kontroll, eller bare telle saker osv. Uansett motivasjonen bak dette ønsket, bør vi være teknisk i stand til å gjøre det. Og det er vi. I databaser gjør LEFT JOIN akkurat det.
Resultatet av LEFT JOIN skal være det samme som resultatet av INNER JOIN + vi har rader fra «venstre» tabellen, uten et par i «riktig» bord. Vi bruker den samme INNER JOIN-spørringen og erstatter bare ordet INNER med VENSTRE. Dette er resultatet:
Du kan enkelt merke at vi har to rader til, sammenlignet med resultatet av INNER BLI MED Dette er rekker for Russland og Spania. Siden begge ikke har noen relatert by, har alle byattributter i disse to radene NULL-verdier (er ikke definert). Det er den største forskjellen når man sammenligner INNER JOIN vs LEFT JOIN.
RIGHT JOIN
Du vil i det minste høre om RIGHT JOIN. Den brukes sjelden fordi den returnerer det samme resultatet som LEFT JOIN. På den annen side er spørsmål som bruker LEFT JOIN mye lettere å lese fordi vi ganske enkelt lister opp tabeller etter hverandre.
Dette tilsvarer forrige spørsmål ved å bruke RIGHT JOIN:
Du kan legge merke til at returnerte verdier er de samme, bare i dette tilfellet er verdier fra bytabellen i de første 5 kolonnene, og land- relaterte verdier kommer etter dem.
INNER JOIN vs LEFT JOIN
INNER JOIN vs LEFT JOIN?Egentlig er det ikke spørsmålet i det hele tatt. Du bruker INNER JOIN når du bare vil returnere poster som har par på begge sider, og du vil bruke LEFT JOIN når du trenger alle poster fra «venstre» tabellen, uansett om de har par i «høyre» tabellen. eller ikke. Hvis du trenger alle poster fra begge tabeller, uansett om de har par, må du bruke CROSS JOIN (eller simulere det ved hjelp av LEFT JOINs og UNION). Mer om det i de kommende artiklene.
Innholdsfortegnelse
Lær SQL: CREATE DATABASE & CREATE TABLE Operations
Lær SQL: INSERT IN TABLE
Lær SQL: Primær nøkkel
Lær SQL: Fremmed nøkkel
Lær SQL: SELECT-setning
Lær SQL: INNER JOIN vs LEFT JOIN
Lær SQL: SQL-skript
Lær SQL: Typer relasjoner
Lær SQL: Bli med i flere tabeller
Lær SQL: Aggregerte funksjoner
Lær SQL: Hvordan skrive en kompleks SELECT-spørring
Lær SQL: INFORMASJON_SCHEMA-databasen
Lær SQL: SQL-datatyper
Lær SQL: Sett teori
Lær SQL: Brukerdefinerte funksjoner
Lær SQL: Brukerdefinerte lagrede prosedyrer
Lær SQL: SQL-visninger
Lær SQL: SQL-utløsere
Lær SQL: Øv SQL-spørsmål
Lær SQL: SQL-spørringseksempler
Lær SQL: Opprett en rapport manuelt ved hjelp av SQL-spørringer
Lær SQL: SQL Server-dato- og tidsfunksjoner
Lær SQL: Opprett SQL Server-rapporter ved hjelp av dato- og tidsfunksjoner
Lær SQL: SQL Server-pivottabeller
Lær SQL: SQL Server-eksport til Excel
Lær SQL: Introduksjon til SQL Server-sløyfer
Lær SQL: SQL Server-markører
Lær SQL: SQL beste fremgangsmåter for sletting og oppdatering av data
Lær SQL: Navngivningskonvensjoner
Lær SQL: SQL-relaterte jobber
Lær SQL: Ikke-Equi-sammenkoblinger i SQL Server
Lær SQL: SQL Injeksjon
- Forfatter
- Nylige innlegg
Hans tidligere og nåværende engasjement varierer fra databasedesign og koding til undervisning, rådgivning og skriving om databaser. Ikke å glemme, BI, å lage algoritmer, sjakk, filateli, 2 hunder, 2 katter, 1 kone, 1 baby …
Du finner ham på LinkedIn
Vis alle innlegg av Emil Drkusic
- Lær SQL: SQL Injection – 2. november 2020
- Lær SQL: Non-Equi-sammenkoblinger i SQL Server – 29. september 2020
- Lær SQL: SQL-relaterte jobber – 1. september 2020