Связи в SQL

Введение в базы данных на Python

Jason Myers

Co-Author of Essential SQLAlchemy and Software Engineer

Связи

  • Позволяют избежать дублирования данных
  • Упрощают изменения в одном месте
  • Удобны для вынесения редко используемых данных из таблицы
Введение в базы данных на Python

Связи

Введение в базы данных на Python

Автоматические соединения

stmt = select([census.columns.pop2008, 
        state_fact.columns.abbreviation])

results = connection.execute(stmt).fetchall() print(results)
[(95012, u'IL'),
 (95012, u'NJ'),
 (95012, u'ND'),
 (95012, u'OR'),
 (95012, u'DC'),
 (95012, u'WI'),
 ...
Введение в базы данных на Python

Join

  • Принимает таблицу и необязательное выражение, описывающее связь между двумя таблицами
  • Выражение не требуется, если связь предопределена и доступна через рефлексию
  • Указывается сразу после select() и до where(), order_by() или group_by()
Введение в базы данных на Python

select_from()

  • Заменяет стандартное автоматическое предложение FROM на соединение
  • Оборачивает конструкцию join()
Введение в базы данных на Python

Пример select_from()

stmt = select([func.sum(census.columns.pop2000)])

stmt = stmt.select_from(census.join(state_fact))
stmt = stmt.where(state_fact.columns.circuit_court == '10')
result = connection.execute(stmt).scalar() print(result)
14945252
Введение в базы данных на Python

Соединение таблиц без предопределённой связи

  • Join принимает таблицу и необязательное выражение, описывающее связь между таблицами
  • Соединяет только совпадающие данные из обоих столбцов
  • Не рекомендуется соединять столбцы разных типов
Введение в базы данных на Python

Пример select_from()

stmt = select([func.sum(census.columns.pop2000)])

stmt = stmt.select_from( census.join(state_fact, census.columns.state == state_fact.columns.name))
stmt = stmt.where( state_fact.columns.census_division_name == 'East South Central')
result = connection.execute(stmt).scalar() print(result)
16982311
Введение в базы данных на Python

Давайте потренируемся!

Введение в базы данных на Python

Preparing Video For Download...