SQL INNER JOIN (Norsk)

Sammendrag: i denne opplæringen lærer du hvordan du spør etter data fra flere tabeller ved hjelp av SQL INNER JOIN-setning.

I forrige opplæring lærte du hvordan du kan spørre om data fra en enkelt tabell ved hjelp av SELECT-setningen. Imidlertid vil du ofte spørre data fra flere tabeller for å få et komplett resultatsett for analyse. For å spørre om data fra flere tabeller bruker du sammenføyningsuttalelser.

SQL gir flere typer sammenføyninger som indre sammenføyning, ytre sammenføyning (venstre ytre sammenføyning eller venstre sammenføyning, høyre ytre sammenføyning eller høyre sammenføyning og full ytre sammenføyning ) og selv bli med. I denne opplæringen vil vi vise deg hvordan du bruker INNER JOIN klausul.

SQL INNER JOIN syntaks

Følgende illustrerer INNER JOIN syntaks for sammenføyning av to tabeller:

1
2
3
4
5

VELG
kolonne1, kolonne2
FRA
tabell_1
INNRE JOIN tabell_2 PÅ join_condition;

La oss undersøke syntaksen ovenfor mer detaljert:

  • table_1 og table_2 kalles sammenføyde tabeller.
  • For hver rad i table_1 finner spørringen den tilsvarende raden i table_2 som oppfyller tilknytningsbetingelsen. Hvis den tilsvarende raden ble funnet, returnerer spørringen en rad som inneholder data fra begge tabellene. Ellers undersøker den neste rad i table_1, og denne prosessen fortsetter til alle radene i table_1 blir undersøkt.

For å bli med i flere enn to tabeller, ble den samme logikken brukt.

Eksempler på SQL INNER JOIN

SQL INNER JOIN – spørring av data fra to tabelleksempler

I dette eksemplet bruker vi tabellene products og categories i eksempeldatabasen. Følgende bilde illustrerer databasediagrammet.

I diagrammet ovenfor:

  • En kategori kan ha mange produkter.
  • Ett produkt tilhører en og én kategori.

Derfor er det et mange-til-ett forhold mellom radene i categories tabell og rader i products tabellen. Koblingen mellom de to tabellene er categoryid -kolonnen.

Vi må spørre følgende data fra begge tabellene:

  • productID, productName fra products -tabellen.
  • categoryName fra categories tabellen.

Følgende spørring henter data fra begge tabellene:

1
2
3
4
5
6

VELG
productID, productName, categoryName
FRA
produkter
INNRE MEDLEM
kategorier PÅ kategorier.categoryID = products.categoryID;

Tilkoblingsbetingelsen er spesifisert i INNER JOIN -klausulen etter ON nøkkelordet som uttrykk:

1

categories.categoryID = products.categoryID

For hver rad i products tabell, finner spørringen en tilsvarende rad i categories tabellen som har samme categoryid. Hvis det er samsvar mellom to rader i begge tabellene, returnerer den en rad som inneholder kolonner spesifisert i SELECT-setningen, dvs. produkt-ID, produktnavn og kategorinavn; Ellers sjekker den neste rad i products -tabellen for å finne den samsvarende raden i categories -tabellen. Denne prosessen fortsetter til den siste raden i produkttabellen er undersøkt.

SQL INNER JOIN – spørring av data fra tre tabeller

Vi kan bruke de samme teknikkene for å bli med i tre tabeller.Følgende spørsmål velger productID, productName, categoryName og supplier fra products, categories og suppliers tabellene:

1
2
3
4
5
6
7
8
9
10
11

VELG
productID,
productName,
categoryName,
companyName AS leverandør
FRA
produkter
INNRE JOIN
kategorier PÅ kategorier. categoryID = products.categoryID
INNRE MEDLEM
leverandører PÅ leverandører.supplierID = products.supplierID

Implisitt SQL INNER JOIN

Det er en annen form for INNER JOIN kalt implisitt indre sammenføyning som vist nedenfor:

1
2
3
4
5
6
7

VELG
kolonne1, kolonne2
FRA
tabell_1,
tabell_2
HVOR
join_condition;

I dette skjemaet angir du alle sammenføyde tabeller i FROM klausulen og sett sammenkoblingsbetingelsen i WHERE klausul i SELECT uttalelsen. Vi kan omskrive spørreeksemplet ovenfor ved å bruke den implisitte INNER JOIN som følger:

1
2
3
4
5
6
7

VELG
productID, productName, categoryName
FRA
produkter,
kategorier
HVOR
products.categoryID = categories.categoryID;

Visualiser INNER JOIN ved hjelp av Venn-diagram

Write a Comment

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *