Relacionamentos em SQL

Introdução a Bancos de Dados em Python

Jason Myers

Co-Author of Essential SQLAlchemy and Software Engineer

Relacionamentos

  • Evitam dados duplicados
  • Facilita mudar algo em um só lugar
  • Úteis para separar informações de uma tabela pouco usada
Introdução a Bancos de Dados em Python

Relacionamentos

Introdução a Bancos de Dados em Python

Junções automáticas

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'),
 ...
Introdução a Bancos de Dados em Python

Join

  • Aceita uma Table e uma expressão opcional que explica como as duas tabelas se relacionam
  • A expressão não é necessária se o relacionamento estiver predefinido e disponível via reflexão
  • Vem logo após select() e antes de where(), order_by() ou group_by()
Introdução a Bancos de Dados em Python

select_from()

  • Substitui a cláusula FROM padrão/derivada por uma junção
  • Envolve a cláusula join()
Introdução a Bancos de Dados em Python

Exemplo de 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
Introdução a Bancos de Dados em Python

Juntando tabelas sem relacionamento predefinido

  • Join aceita uma Table e uma expressão opcional que explica como as duas tabelas se relacionam
  • Só faz junção em dados que correspondem entre as duas colunas
  • Evite juntar colunas de tipos diferentes
Introdução a Bancos de Dados em Python

Exemplo de 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
Introdução a Bancos de Dados em Python

Vamos praticar!

Introdução a Bancos de Dados em Python

Preparing Video For Download...