Cartesisch product

Het cartesisch product is een koppeling van alle rijen uit de ene tabel aan alle rijen uit de andere tabel.

Cartesisch product wordt ook wel cross join genoemd.

Bijvoorbeeld:

select * from student 
,    klas;

Wanneer een join conditie ontbreekt verkrijg je altijd het cartesisch product

De relatie tussen tabellen is terug te vinden in de tabellen

Equi join

We kunnen tabellen aan elkaar koppelen op basis van een foreign key die verwijst naar een primary key

Wanneer we de foreign key gelijkstellen aan de primary key koppelen we op basis van gelijkheid (equi join)

Dit noemen we een equi join: de waardes zijn gelijk

select s.student_nr 
, s.voornaam 
, s.tussenvoegsels 
, s.achternaam 
, s.klas_id 
, k.klas_id 
, k.klas_naam from student s 
, klas k 
where s.klas_id = k.klas_id

Van Cartesisch product naar join

Wanneer het cartesisch product als uitgangspunt wordt genomen zien we combinaties van alle rijen

Een student koppelen we aan alle klassen

Door de conditie er op te leggen dat klas_id = klas_id filteren we op rijen waarbij de fk = pk

ISO syntax

ISO: Internationale Organisatie voor Standaardisatie

Op internationaal niveau is een syntax afgesproken voor het schrijven van query’s zodat alle relationele databases dezelfde syntax begrijpen

Hierdoor luisteren alle databases naar hetzelfde SQL statement

Equi join

De equi join kunnen we herschrijven:

  • natural join
  • join using
  • join on

Natural join

Een natural join zal op basis van gelijke kolomnamen tabellen koppelen

select voornaam 
, achternaam 
, klas_naam 
from student 
natural join klas

Join using

Als in een tabel meerdere kolommen voor komen met dezelfde naam kun je met join using aangeven welke kolom je daar uit wilt gebruiken

select * 
from student 
join docent using(slb_id)

Join on

Om tabellen te koppelen die geen overeenkomstige namen hebben gebruik je join on

select * 
from student s 
join docent d 
on(s.slb_id = d.slb_id)

Outer joins

Bij sommige rijen zul je geen match hebben met een andere rij

Bijvoorbeeld: Er zijn geen studenten voor klas Bin-2a

Als je zo’n rij toch wilt zien gebruik je een outer join

ISO syntax

select voornaam 
, klas_naam 
from student 
right outer join klas 
using (klas_id)