Завантаження кількох таблиць за допомогою з'єднань

Оптимізоване завантаження даних із pandas

Amany Mahfouz

Instructor

Ключі

  • Записи в базі даних мають унікальні ідентифікатори, або ключі

Дані звернень 311, підсвічено стовпець unique_key. Унікальні ключі — це числа.

Оптимізоване завантаження даних із pandas

Ключі

  • Записи в базі даних мають унікальні ідентифікатори, або ключі

Дані каталогу курсів, підсвічено стовпець course_code. Коди складаються зі скорочень предметів і чисел.

Оптимізоване завантаження даних із pandas

Ключі

  • Записи в базі даних мають унікальні ідентифікатори, або ключі

Дані каталогу курсів, підсвічено стовпець instructor_id. Значення — 9-значні цілі числа.

Оптимізоване завантаження даних із pandas

Ключі

Таблиця Professor, підсвічено стовпець id. Значення — 9-значні цілі числа, як у instructor_id каталогу курсів.

Оптимізоване завантаження даних із pandas

Ключі

Дані каталогу курсів із приєднаною колонкою імен професорів

Оптимізоване завантаження даних із pandas

З'єднання таблиць

Дані про погоду, підсвічено стовпець date

Дані викликів 311, підсвічено стовпець created_date

Оптимізоване завантаження даних із pandas

З'єднання таблиць

SELECT *
  FROM hpd311calls
Оптимізоване завантаження даних із pandas

З'єднання таблиць

SELECT *
  FROM hpd311calls
       JOIN weather 
       ON hpd311calls.created_date = weather.date;
  • Використовуйте крапкову нотацію (table.column) для кількох таблиць
  • Типовий JOIN повертає лише записи, чиї ключі є в обох таблицях
  • Слідкуйте, щоб типи даних ключів збігалися, інакше збігів не буде
Оптимізоване завантаження даних із pandas

З'єднання та фільтрування

/* Отримати лише звернення щодо тепла/гарячої води та приєднати дані погоди */
SELECT *
  FROM hpd311calls
       JOIN weather 
       ON hpd311calls.created_date = weather.date
 WHERE hpd311calls.complaint_type = 'HEAT/HOT WATER';
Оптимізоване завантаження даних із pandas

З'єднання та агрегація

/* Отримати кількість звернень за боро */
SELECT hpd311calls.borough, 
         COUNT(*)
  FROM hpd311calls
 GROUP BY hpd311calls.borough;
Оптимізоване завантаження даних із pandas

З'єднання та агрегація

/* Отримати кількість звернень за боро
   та приєднати дані про населення і житловий фонд */
SELECT hpd311calls.borough, 
       COUNT(*), 
       boro_census.total_population,
       boro_census.housing_units
  FROM hpd311calls
 GROUP BY hpd311calls.borough
Оптимізоване завантаження даних із pandas

З'єднання та агрегація

/* Отримати кількість звернень за боро
   та приєднати дані про населення і житловий фонд */
SELECT hpd311calls.borough, 
       COUNT(*), 
       boro_census.total_population,
       boro_census.housing_units
  FROM hpd311calls
       JOIN boro_census 
       ON hpd311calls.borough = boro_census.borough
 GROUP BY hpd311calls.borough;
Оптимізоване завантаження даних із pandas
query = """SELECT hpd311calls.borough, 
                    COUNT(*), 
                    boro_census.total_population,
                    boro_census.housing_units
             FROM hpd311calls
                  JOIN boro_census 
                  ON hpd311calls.borough = boro_census.borough
            GROUP BY hpd311calls.borough;"""

call_counts = pd.read_sql(query, engine)
print(call_counts)
         borough  COUNT(*)  total_population  housing_units
0          BRONX     29874           1455846         524488
1       BROOKLYN     31722           2635121        1028383
2      MANHATTAN     20196           1653877         872645
3         QUEENS     11384           2339280         850422
4  STATEN ISLAND      1322            475948         179179
Оптимізоване завантаження даних із pandas

Підсумок

  • Порядок ключових слів у SQL
    • SELECT
    • FROM
    • JOIN
    • WHERE
    • GROUP BY
Оптимізоване завантаження даних із pandas

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

Оптимізоване завантаження даних із pandas

Preparing Video For Download...