Alles over joins

Queryprestaties verbeteren in PostgreSQL

Amy McCarty

Instructor

Cursusoverzicht

  • Query-structuur, incl. joins, subquery's en tijdelijke tabellen
  • Beperken en aggregeren van data
  • Opslageigenschappen en optimalisatietools
  • Queryplanning en -uitvoering
Queryprestaties verbeteren in PostgreSQL

Queryplanner

Query

  • SQL-instructies

Een restaurantober

Query(plan)

  • Werkelijke stappen

Meerdere koks rond een grote kookpot

Queryprestaties verbeteren in PostgreSQL

Queryplanner

Ober serveert eten

Ober brengt drankjes

Queryprestaties verbeteren in PostgreSQL

 

Wat zijn joins?

  • Combineer meerdere tabellen
Queryprestaties verbeteren in PostgreSQL

 

Wat zijn joins?

  • Combineer meerdere tabellen

Waarom joins?

  • Opzoeken met tabellen
  • Data combineren

Hoe?

  • Inner en outer

 

Sales ID Order Dt Amt Cust No
01 2019-02-02 145.30 911

 

ID Name Customer Since
911 Jim Smith 2019-01-01

 

Sales ID Order Dt Amt Name
01 2019-02-02 145.30 Jim Smith
Queryprestaties verbeteren in PostgreSQL

Inner joins

Een athletentabel met vier records voor atleet en land. Jack - AUT. Aditya - IND. Mikhail - RUS. Javier - MEX. Een landentabel met vier records voor land, naam, bevolking in miljoenen. AUT - Oostenrijk - 9. IND - India - 1.339. RUS - Rusland - 145. BRA - Brazilië - 209

SELECT *
FROM athletes a
INNER JOIN countries c
ON a.country = c.country

 

 

 

Atleet Land Land1 Naam Bev (mln)
Jack AUT AUT Oostenrijk 9
Aditya IND IND India 1.339
Mikhail RUS RUS Rusland 145
Queryprestaties verbeteren in PostgreSQL

Inner joins

Een athletentabel met vier records voor atleet en land. Jack - AUT. Aditya - IND. Mikhail - RUS. Javier - MEX. Het laatste record is vet. Een landentabel met vier records voor land, naam, bevolking in miljoenen. AUT - Oostenrijk - 9. IND - India - 1.339. RUS - Rusland - 145. BRA - Brazilië - 209. Het laatste record is vet.

SELECT *
FROM athletes a
INNER JOIN countries c
ON a.country = c.country

 

 

 

Atleet Land Land1 Naam Bev (mln)
Jack AUT AUT Oostenrijk 9
Aditya IND IND India 1.339
Mikhail RUS RUS Rusland 145
Queryprestaties verbeteren in PostgreSQL

USING inner joins

Een athletentabel met vier records voor atleet en land. Jack - AUT. Aditya - IND. Mikhail - RUS. Javier - MEX. Een landentabel met vier records voor land, naam, bevolking in miljoenen. AUT - Oostenrijk - 9. IND - India - 1.339. RUS - Rusland - 145. BRA - Brazilië - 209

SELECT *
FROM athletes
INNER JOIN countries
USING (country)

 

 

 

Atleet Land Naam Bev (mln)
Jack AUT Oostenrijk 9
Aditya IND India 1.339
Mikhail RUS Rusland 145
Queryprestaties verbeteren in PostgreSQL

USING inner joins

Een athletentabel met vier records voor atleet en land. Jack - AUT. Aditya - IND. Mikhail - RUS. Javier - MEX. Het laatste record is vet. Een landentabel met vier records voor land, naam, bevolking in miljoenen. AUT - Oostenrijk - 9. IND - India - 1.339. RUS - Rusland - 145. BRA - Brazilië - 209. Het laatste record is vet.

SELECT *
FROM athletes
INNER JOIN countries
USING (country)

 

 

 

Atleet Land Naam Bev (mln)
Jack AUT Oostenrijk 9
Aditya IND India 1.339
Mikhail RUS Rusland 145
Queryprestaties verbeteren in PostgreSQL

Left outer join

Een athletentabel met vier records voor atleet en land. Jack - AUT. Aditya - IND. Mikhail - RUS. Javier - MEX. Een landentabel met vier records voor land, naam, bevolking in miljoenen. AUT - Oostenrijk - 9. IND - India - 1.339. RUS - Rusland - 145. BRA - Brazilië - 209

SELECT *
FROM athletes a
LEFT JOIN countries c
ON a.country = c.country

 

 

Atleet Land Land1 Naam Bev (mln)
Jack AUT AUT Oostenrijk 9
Aditya IND IND India 1.339
Mikhail RUS RUS Rusland 145
Javier MEX
Queryprestaties verbeteren in PostgreSQL

Left outer join

Een athletentabel met vier records voor atleet en land. Jack - AUT. Aditya - IND. Mikhail - RUS. Javier - MEX.  Een landentabel met vier records voor land, naam, bevolking in miljoenen. AUT - Oostenrijk - 9. IND - India - 1.339. RUS - Rusland - 145. BRA - Brazilië - 209. Het laatste record is vet.

SELECT *
FROM athletes a
LEFT JOIN countries c
ON a.country = c.country

 

 

Atleet Land Land1 Naam Bev (mln)
Jack AUT AUT Oostenrijk 9
Aditya IND IND India 1.339
Mikhail RUS RUS Rusland 145
Javier MEX
Queryprestaties verbeteren in PostgreSQL

Right outer join

Een athletentabel met vier records voor atleet en land. Jack - AUT. Aditya - IND. Mikhail - RUS. Javier - MEX. Een landentabel met vier records voor land, naam, bevolking in miljoenen. AUT - Oostenrijk - 9. IND - India - 1.339. RUS - Rusland - 145. BRA - Brazilië - 209

SELECT *
FROM athletes a
RIGHT JOIN countries c
ON a.country = c.country

 

 

Atleet Land Land1 Naam Bev (mln)
Jack AUT AUT Oostenrijk 9
Aditya IND IND India 1.339
Mikhail RUS RUS Rusland 145
BRA Brazilië 209
Queryprestaties verbeteren in PostgreSQL

Right outer join

Een athletentabel met vier records voor atleet en land. Jack - AUT. Aditya - IND. Mikhail - RUS. Javier - MEX.  Het laatste record is vet. Een landentabel met vier records voor land, naam, bevolking in miljoenen. AUT - Oostenrijk - 9. IND - India - 1.339. RUS - Rusland - 145. BRA - Brazilië - 209.

SELECT *
FROM athletes a
RIGHT JOIN countries c
ON a.country = c.country

 

 

Atleet Land Land1 Naam Bev (mln)
Jack AUT AUT Oostenrijk 9
Aditya IND IND India 1.339
Mikhail RUS RUS Rusland 145
BRA Brazilië 209
Queryprestaties verbeteren in PostgreSQL

Full outer join

SELECT *
FROM athletes a
FULL OUTER JOIN countries c
ON a.country = c.country
  • Query (uitvoerings)plan

Meerdere koks rond een grote kookpot

  • Beperkt de queryplanner
Atleet Nm Land Land1 Naam Bev (mln)
Jack AUT AUT Oostenrijk 9
Aditya IND IND India 1.339
Mikhail RUS RUS Rusland 145
Javier MEX
BRA Brazilië 209
Queryprestaties verbeteren in PostgreSQL

Laten we oefenen!

Queryprestaties verbeteren in PostgreSQL

Preparing Video For Download...