Het generieke select statement

select <kolomnamen|*> 
from <tabel> 
where <conditie> 
order by <kolomnaam>

Joins

Cartesisch product

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

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
select s.student_nr
,   s.voornaam 
,   s.tussenvoegsels 
,   s.achternaam 
,   k.klas_id 
,   k.klas_naam 
from student s , klas k

Van cartesisch product naar join

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

  • Bijv. 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

Equi join

  • We kunnen tabellen aan elkaar joinen op basis van een foreign key die verwijst naar een Primary key
  • Dit noemen we een equi join:
    • de waardes zijn gelijk
  • Wanneer we de foreign key gelijkstellen aan de primary key koppelen we op basis van gelijkheid (equi join)


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

maar ook waar die moet joinen

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

Equi Join types

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

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

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

Outer Join

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
select voornaam, klas_naam
from student 
right outer join klas 
on (s.klas_id = k.klas_id

Types outer join

de standaard from leest van links naar rechts standaard is de overlap (inner) bij outer gaan

In de ISO syntax hebben we

  • Left outer join
  • Right outer join
  • Full outer join (niet in MySQL!)


ISO SQL 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

ISO Standaard

International Standards Organisation

  • Wereldwijde standaard afspraak voor de schrijfwijze (syntax) van SQL statements
  • Hierdoor luisteren alle databases naar hetzelfde SQL statement