[G_PRO] Databanken
  • Welkom
  • Inleiding
    • Benodigdheden
    • Nuttige extra's
    • Mee helpen?
  • Semester 1: databanken intro
    • Installatie van alle software
    • Databanken
      • Inleiding
      • Voorbeeld
      • Wat is een relationele databank
      • Basisstructuren van een relationele databank
      • Diagramnotatie
    • (My)SQL
      • DDL
        • Datatypes
          • Enum
        • CREATE
        • ALTER
        • DROP
        • Sleutels voor identificatie
        • Primaire sleutel toevoegen/verwijderen
        • Primaire sleutel in een nieuwe tabel
        • Vreemde sleutels
        • Relaties-voorstellen
        • Labo
      • DML
        • INSERT
        • UPDATE
        • DELETE
        • LIKE
        • Logische operatoren
        • Vergelijkingen
        • SELECT sorteren
        • Functies
        • Labo
      • SELECT
        • SELECT met clausules
        • SELECT met WHERE
      • Groeperen en samenvatten
        • Aggregaatfuncties
        • SELECT met GROUP BY
        • SELECT met HAVING
        • IN
        • BETWEEN
        • SELECT DISTINCT
        • Labo
      • JOINS
        • JOINs bij simpele relaties
        • JOINs via tussenliggende tabel
        • UPDATE van JOIN
      • apTunes project
  • PRO (GEEN LEERSTOF EN/OF IN OPBOUW)
    • PRO
      • Waarom een databank?
      • Een databank ontwerpen
      • ERM
        • Basisbegrippen
        • Constraints (voorwaarden, beperkingen)
        • Keys (Sleutels)
        • Discussiepunten bij ontwerp in ERM
        • Aanvullende begrippen
        • Herleiden van ERD's tot tabellen
        • Voorbeeld
        • Bibliografie
        • Labo oefeningen
      • NoSQL
      • Blockchain
  • SEMESTER 2: DATABANKEN
    • Join
      • INNER JOIN
      • LEFT JOIN
      • COALESCE
      • RIGHT JOIN
      • LEFT EXCLUDING JOIN
      • RIGHT EXCLUDING JOIN
      • OUTER JOIN
      • OUTER EXCLUDING JOIN
      • Samenvattende flowchart
      • Labo oefeningen
    • Views
      • CREATE
      • ALTER
      • DROP
      • UPDATE
      • RENAME
      • BESLUIT
      • Labo oefeningen
    • Subqueries
      • Een onafhankelijke subquery
      • Subqueries met tijdelijke opslag
      • Labo oefeningen
    • Indexeren
      • mogelijkheden
      • CREATE
      • DROP
      • UNIQUE
      • trage queries opvolgen
    • ERD
      • Referentiële beperkingen
      • Overzicht
      • Labo oefeningen
    • Stored programs
      • Stored procedures
      • CREATE
      • DROP
      • DELIMITER
      • Variabelen
      • Parameters
      • Gerelateerde data invoegen
      • IF -THEN-ELSE-ELSEIF
      • LOOP
      • WHILE
      • REPEAT
      • SIGNAL
      • Error handling
      • RESIGNAL
      • Stored functies
      • Triggers
      • Cursors
      • Transacties en rollbacks
      • Object access control
      • Oefeningen basisgebruik stored procedures
      • Oefeningen control flow
      • Oefeningen stored functions
      • Oefeningen triggers
      • Oefeningen error handling
      • Oefeningen transacties en access control
Powered by GitBook
On this page
  • Syntax
  • Betekenis
  • Voorbeeld

Was this helpful?

Export as PDF
  1. SEMESTER 2: DATABANKEN
  2. Join

INNER JOIN

PreviousJoinNextLEFT JOIN

Last updated 4 years ago

Was this helpful?

Deze is in het eerste semester al aan bod gekomen. We herhalen hem hier en we introduceren een Venn diagram als visueel geheugensteuntje. Let op: het Venn diagram mag je niet lezen als twee verzamelingen records en hun doorsnede. Het heeft hier een andere betekenis!

Lees ook de commentaar in elk gegeven stukje code! Deze bevat zeer belangrijke informatie.

Syntax

-- dit is niet de enige mogelijkheid
SELECT <kolommen uit A of uit B>
FROM A
INNER JOIN B ON A.Id = B.A_Id
-- alternatief waarbij je de volgorde wisselt
-- dit mag, want = betekent gewoon "is gelijk aan"
-- 2+2 = 4 betekent hetzelfde als 4 = 2+2
-- INNER JOIN B ON B.A_Id = A.Id
-- alternatief, als A de foreign key bevat:
-- INNER JOIN B ON A.B_Id = B.Id
-- ook hier kan je de volgorde nog eens omwisselen
Venn diagram inner join

Betekenis

We combineren informatie uit twee tabellen: de linkertabel (A) en de rechtertabel (B). We zeggen dat er overlapping is tussen de tabellen als de gebruikte sleutelkolommen dezelfde waarde bevatten. Het stuk van A dat we bekijken (A.Id) matcht met het stuk van B dat we bekijken (B.A_Id) en dat tekenen we als een overlappend gedeelte.

Als je dat begrepen hebt, zou het je niet mogen verbazen dat je net zo goed B INNER JOIN A kan schrijven als A INNER JOIN B. Enkel bij SELECT * maakt dit een (klein) verschil, namelijk dat de kolommen in een andere volgorde zullen staan.

Voorbeeld

Het diagram met de naam A staat voor de tabel Boeken en met de naam B voor Personen. We veronderstellen dat één auteur meerdere boeken kan hebben maar niet omgekeerd, dus de vreemde sleutel moet wel in Boeken staan. Bij elk boek staat dus een nummer dat uitdrukt: "dit boek is geschreven door persoon nummer ..."

Selecteer alle boeken en toon de voornaam en de familienaam van de auteur.

SELECT Personen.Voornaam, Personen.Familienaam,
       Boeken.Titel 
FROM Boeken
INNER JOIN Personen ON Boeken.Personen_Id = Personen.Id;

Elke rij uit de tabel Boeken wordt gecombineerd met elke rij uit de tabel Personen en de combinaties waarin een match wordt gevonden tussen Personen_Id en Personen.Id worden overgehouden. Indien er geen match is wordt de gecombineerde rij genegeerd.

Het resultaat is een nieuwe tabel, dus je kan er verder mee werken zoals je altijd gedaan hebt. We ordenen de lijst op Familienaam, Voornaam, Titel.

SELECT Personen.Voornaam, Personen.Familienaam,
       Boeken.Titel 
FROM Personen
INNER JOIN Boeken ON Boeken.Personen_Id = Personen.Id
ORDER BY Personen.Voornaam, Personen.Familienaam, Boeken.Titel;

Je mag trouwens na FROM een haakje openen en voor ORDER BY het haakje weer sluiten als je dat makkelijker vindt.

We voegen een nieuwe persoon toe in de tabel Personen:

INSERT INTO Personen (
   Voornaam, 
   Familienaam,
   AanspreekTitel,
   Straat, 
   Huisnummer,
   Stad, 
   Commentaar,
   Biografie
)
VALUES
(
   'Simone', 
   'De Beauvoir', 
   'Mevrouw',
   'Rue Charles De Gaulle', 
   '38', 
   'Paris', 
   'Feministe',
   'Compagnon van Jean-Paul Sartre'
);

We selecteren alle personen geordend op Familienaam en Voornaam:

SELECT * FROM Personen
ORDER BY Familienaam, Voornaam;

En we zien dat Simone De Beauvoir is toegevoegd.

Alle auteurs en hun boeken te selecteren, maar ordenen de lijst nu op Familienaam, Voornaam en Titel:

SELECT Personen.Voornaam, Personen.Familienaam,
       Boeken.Titel 
FROM Personen
INNER JOIN Boeken ON Boeken.Personen_Id = Personen.Id
ORDER BY Personen.Familienaam, Personen.Voornaam, Boeken.Titel;

Nu merken we dat Simone De Beauvoir niet meer in de lijst voorkomt. Dat komt doordat er voor Simone de Beauvoir geen boeken in de boekentabel zijn opgenomen.

Een INNER JOIN gaat alleen die personen tonen waarvoor een match in de tabel Boeken wordt gevonden.

INNER JOIN Boeken Personen Simone De Beauvoir
Kennisclip diagramnotatie
Kennisclip demo