Усе про джоїни

Покращення продуктивності запитів у PostgreSQL

Amy McCarty

Instructor

Огляд курсу

  • Структура запиту: джоїни, підзапити та тимчасові таблиці
  • Обмеження й агрегація даних
  • Властивості зберігання БД та інструменти оптимізації
  • Планування й виконання запитів
Покращення продуктивності запитів у PostgreSQL

Планувальник запитів

Запит

  • Інструкції SQL

Офіціант у ресторані

План (виконання) запиту

  • Реальні кроки

Кілька кухарів навколо великої каструлі

Покращення продуктивності запитів у PostgreSQL

Планувальник запитів

Офіціант несе їжу

Офіціант несе напої

Покращення продуктивності запитів у PostgreSQL

 

Що таке джоїни?

  • Обʼєднують кілька таблиць
Покращення продуктивності запитів у PostgreSQL

 

Що таке джоїни?

  • Обʼєднують кілька таблиць

Навіщо використовувати джоїни?

  • Пошук у довідкових таблицях
  • Поєднання даних

Як?

  • Внутрішні та зовнішні

 

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
Покращення продуктивності запитів у PostgreSQL

Внутрішні джоїни

Таблиця athletes з чотирма записами: спортсмен і країна. Jack — AUT. Aditya — IND. Mikhail — RUS. Javier — MEX. Таблиця countries з чотирма записами: код країни, назва, населення (млн). AUT — Austria — 9. IND — India — 1,339. RUS — Russia — 145. BRA — Brazil — 209

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

 

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
Покращення продуктивності запитів у PostgreSQL

Внутрішні джоїни

Таблиця athletes з чотирма записами: Jack — AUT. Aditya — IND. Mikhail — RUS. Javier — MEX. Останній запис виділено. Таблиця countries: AUT — Austria — 9. IND — India — 1,339. RUS — Russia — 145. BRA — Brazil — 209. Останній запис виділено.

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

 

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
Покращення продуктивності запитів у PostgreSQL

Внутрішні джоїни з USING

Таблиця athletes з чотирма записами: спортсмен і країна. Jack — AUT. Aditya — IND. Mikhail — RUS. Javier — MEX. Таблиця countries з чотирма записами: код країни, назва, населення (млн). AUT — Austria — 9. IND — India — 1,339. RUS — Russia — 145. BRA — Brazil — 209

SELECT *
FROM athletes
INNER JOIN countries
USING (country)

 

 

 

Athlete Country Name Pop (mil)
Jack AUT Austria 9
Aditya IND India 1,339
Mikhail RUS Russia 145
Покращення продуктивності запитів у PostgreSQL

Внутрішні джоїни з USING

Таблиця athletes з чотирма записами: Jack — AUT. Aditya — IND. Mikhail — RUS. Javier — MEX. Останній запис виділено. Таблиця countries: AUT — Austria — 9. IND — India — 1,339. RUS — Russia — 145. BRA — Brazil — 209. Останній запис виділено.

SELECT *
FROM athletes
INNER JOIN countries
USING (country)

 

 

 

Athlete Country Name Pop (mil)
Jack AUT Austria 9
Aditya IND India 1,339
Mikhail RUS Russia 145
Покращення продуктивності запитів у PostgreSQL

Left outer join

Таблиця athletes з чотирма записами: спортсмен і країна. Jack — AUT. Aditya — IND. Mikhail — RUS. Javier — MEX. Таблиця countries з чотирма записами: код країни, назва, населення (млн). AUT — Austria — 9. IND — India — 1,339. RUS — Russia — 145. BRA — Brazil — 209

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

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
Javier MEX
Покращення продуктивності запитів у PostgreSQL

Left outer join

Таблиця athletes з чотирма записами: Jack — AUT. Aditya — IND. Mikhail — RUS. Javier — MEX. Таблиця countries з чотирма записами: код країни, назва, населення (млн). AUT — Austria — 9. IND — India — 1,339. RUS — Russia — 145. BRA — Brazil — 209. Останній запис виділено.

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

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
Javier MEX
Покращення продуктивності запитів у PostgreSQL

Right outer join

Таблиця athletes з чотирма записами: спортсмен і країна. Jack — AUT. Aditya — IND. Mikhail — RUS. Javier — MEX. Таблиця countries з чотирма записами: код країни, назва, населення (млн). AUT — Austria — 9. IND — India — 1,339. RUS — Russia — 145. BRA — Brazil — 209

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

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
BRA Brazil 209
Покращення продуктивності запитів у PostgreSQL

Right outer join

Таблиця athletes з чотирма записами: Jack — AUT. Aditya — IND. Mikhail — RUS. Javier — MEX. Останній запис виділено. Таблиця countries з чотирма записами: AUT — Austria — 9. IND — India — 1,339. RUS — Russia — 145. BRA — Brazil — 209.

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

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
BRA Brazil 209
Покращення продуктивності запитів у PostgreSQL

Full outer join

SELECT *
FROM athletes a
FULL OUTER JOIN countries c
ON a.country = c.country
  • План (виконання) запиту

Кілька кухарів навколо великої каструлі

  • Обмежує роботу планувальника запитів
Athlete Nme Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
Javier MEX
BRA Brazil 209
Покращення продуктивності запитів у PostgreSQL

Давайте потренуємось!

Покращення продуктивності запитів у PostgreSQL

Preparing Video For Download...