[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
  • CROSS JOIN
  • INNER JOIN

Was this helpful?

Export as PDF
  1. Semester 1: databanken intro
  2. (My)SQL
  3. JOINS

JOINs bij simpele relaties

PreviousJOINSNextJOINs via tussenliggende tabel

Last updated 2 years ago

Was this helpful?

Om de integriteit van de database te bewaren, normaliseren we de gegevens in de database. Door normalisering geraakt de informatie echter verspreid over meer dan één tabel. De gebruiker heeft daar echter niet veel aan. Primaire en vreemde sleutels zeggen de gebruiker niets. Anders gesteld, een tabel vol getallen zoals onderaan op is op zich niet leesbaar. We moeten dus een manier vinden om de informatie weer voor te stellen alsof die uit één tabel komt.

CROSS JOIN

De "domste" manier om data uit meerdere tabellen te combineren tot data die uit één tabel lijkt te komen, is de "cross join". Deze "plakt" elke rij uit tabel A aan elke rij uit tabel B. Veronderstel bijvoorbeeld volgende tabellen voor taken en voor personen:

omschrijving

Id

bestek voorzien

1

frisdrank meebrengen

2

aardappelsla maken

3

voornaam

Id

Taken_Id

Yannick

1

2

Bavo

2

1

Max

3

3

Deze kunnen we op deze manier combineren en tonen:

SELECT *
FROM Taken
CROSS JOIN Leden
ORDER BY Taken.Id, Leden.Id;

Dit levert dan een resultaat dat er als volgt uitziet:

omschrijving

Taken.Id

voornaam

Leden.Id

Taken_Id

bestek voorzien

1

Yannick

1

2

bestek voorzien

1

Bavo

2

1

bestek voorzien

1

Max

3

3

frisdrank meebrengen

2

Yannick

1

2

frisdrank meebrengen

2

Bavo

2

1

frisdrank meebrengen

2

Max

3

3

aardappelsla maken

3

Yannick

1

2

aardappelsla maken

3

Bavo

2

1

aardappelsla maken

3

Max

3

3

Dit bevat nuttige informatie, maar ook rijen waar we niets aan hebben. De interessante rijen zijn die, die een persoon koppelen aan een taak. Dat zijn de rijen waarin Taken.Id gelijk is aan Taken_Id (afkomstig uit Leden).

Je kan dus personen koppelen aan hun taak via:

SELECT *
FROM Taken
CROSS JOIN Leden
WHERE Taken.Id = Taken_Id;

Hier moet je Taken.Id schrijven omdat zowel Taken als Leden een kolom Id hebben. Door de tabelnaam toe te voegen, maak je duidelijk over welke kolom het precies gaat.

INNER JOIN

Dit laatste voorbeeld werkt in MySQL, maar het wordt typisch anders geschreven. Meestal zal CROSS JOIN vervangen worden door INNER JOIN, terwijl WHERE vervangen wordt door ON. Wanneer we twee tabellen willen koppelen zodat samenhorende rijen uit tabel A en tabel B één nieuwe rij opleveren, zullen we deze conventie volgen.

Het resultaat zal er dus zo uitzien:

SELECT *
FROM Taken
INNER JOIN Leden
ON Taken.Id = Taken_Id;

Het resultaat is hetzelfde, maar in dit scenario wordt INNER JOIN verkozen. ON is ook geen synoniem voor WHERE, want het kan alleen gebruikt worden in een JOIN-statement.

Om precies te zijn: ON kan gebruikt worden in een JOIN-statement die geen CROSS JOIN-statement is. Er bestaan nog andere soorten JOINs dan CROSS en INNER, maar die zijn voor een latere cursus.

In MySQL is er eigenlijk tussen een CROSS JOIN met een WHERE clause en een INNER JOIN met een ON clause, die we dadelijk zullen bekijken. We kiezen voor de ene of de andere vorm om uit te drukken wat we bedoelen, maar het resultaat zal hetzelfde zijn.

Kennisclip
de pagina over primary keys
geen verschil