Noções de SQL

Com Python

Cácio Costa

Banco de 

dados

01.

Modelagem de dados

02.

Introdução ao SQL

03.

Python com

Banco de dados

04.

Conteúdo desta aula

Banco de 

dados

01.

Modelagem de dados

02.

Introdução ao SQL

03.

Python com

Banco de dados

04.

O que você pensa quando ouve falar em base de dados?

🤔

Bases de dados

Bases de dados

Bases de dados

Bases de dados

"Banco de dados"

Características

  • Software responsável por gerenciar um ou mais bancos de dados (SGBD - Sistema Gerenciador de Banco de Dados);
  • Capazes de lidas com quantidades absurdas de informações de forma organizada e consistente;
  • Classicados como Bancos Relacionais ou NoSQL.

SGBD organizado em vários

bancos de dados

Qual a diferença entre um Banco de Dados Relacional e um Banco de dados NoSQL?

🤔

Relacional X NoSQL

Relacional

NoSQL

  • Usa tabelas como estrutura de armazenamento;
  • Esquema rígido de campos e tipos e pré-definidos;
  • Escalabilidade vertical (aumento de memória/processador);
  • Suporte a transações ACID;
  • Utilizam SQL para consulta e manipulação de dados;
  • etc...
  • Estruturas de dados variadas (documentos, grafos, etc);
  • Permite incluir/suprimir campos e estruturas livremente;
  • Escalabilidade horizontal (introdução de novas máquinas);
  • Consistência eventual;
  • Cada SGBD tem sua própria linguagem/operações;
  • etc...

Relacional X NoSQL

Relacional

NoSQL

  • Usa tabelas como estrutura de armazenamento;
  • ...
  • Estruturas de dados variadas (documentos, grafos, etc);
  • ...

"Já sei Excel, então vai ser moleza!"

😌

Tabela de Pedidos - Exemplo Excel

Número do Pedido Data do Pedido CNPJ do
Fornecedor
Nome do Fornecedor Telefone do Fornecedor Código do Produto Nome do Produto Preço do Produto Quantidade
001 01/01/2024 57.381.404/0001-90 Forn. A (61) 3722-6845 P-01 Corona 2,99 250
001 01/01/2024 57.381.404/0001-90 Forn. A (61) 3722-6845 P-23 Pepsi 5,99 180
002 01/02/2024 00.709.901/0001-57 Forn. B (61) 3775-8780 P-11 Hoegaarden 6,87 500
003 01/03/2024 00.709.901/0001-57 Forn. B (61) 3775-8780 P-09 Guaraná 5,99 100
004 01/03/2024 60.912.661/0001-15 Forn. C (61) 2227-4065 P-33 Água com gás 1,89 150
... ... ... ... ... ... ... ... ...

Uma planilha bem comum de ser encontrada.

Mas você vê algum problema nessa estrutura?

 

🤔

Tabela de Pedidos - Exemplo Excel

Número do Pedido Data do Pedido CNPJ do
Fornecedor
Nome do Fornecedor Telefone do Fornecedor Código do Produto Nome do Produto Preço do Produto Quantidade
001 01/01/2024 57.381.404/0001-90 Forn. A (61) 3722-6845 P-01 Corona 2,99 250
001 01/01/2024 57.381.404/0001-90 Forn. A (61) 3722-6845 P-23 Pepsi 5,99 180
002 01/02/2024 00.709.901/0001-57 Forn. B (61) 3775-8780 P-11 Hoegaarden 6,87 500
003 01/03/2024 00.709.901/0001-57 Forn. B (61) 3775-8780 P-09 Guaraná 5,99 100
004 01/03/2024 60.912.661/0001-15 Forn. C (61) 2227-4065 P-33 Água com gás 1,89 150
... ... ... ... ... ... ... ... ...
  • Entidades diferentes estão agrupadas na mesma tabela;
  • Traz problemas (anomalias) de inclusão, alteração e exclusão;
  • Extração de relatórios é dificultada;
  • Numa base de dados relacional, cada entidade tem sua própria tabela.

Precisamos reaprender a estruturar e organizar nossas informações.

Quiz 1

a)

Um SGBD é um software que gerencia um único banco de dados dedicado.

b)

Banco de dados NoSQL utilizam SQL como linguagem de manipulação de dados.

c)

SGBDs Relacionais possuem um esquema rígido de campos e tipos.

d)

Banco Relacionais armazenam suas informações em estruturas de tabelas.

Quais das seguintes afirmações estão corretas?

Quiz 1 - Resposta

a)

Um SGBD é um software que gerencia um único banco de dados dedicado.

b)

Banco de dados NoSQL utilizam SQL como linguagem de manipulação de dados.

c)

SGBDs Relacionais possuem um esquema rígido de campos e tipos.

d)

Banco Relacionais armazenam suas informações em estruturas de tabelas.

Quais das seguintes afirmações estão corretas?

Banco de 

dados

01.

Modelagem de dados

02.

Introdução ao SQL

03.

Python com

Banco de dados

04.

Modelagem de dados

Processo genérico para representar um modelo de dados graficamente.

01.

Observar elementos de um ambiente (negócio, área, processo, etc);

02.

Caracterizá-los;

03.

Abstrair características;

04.

Representá-los;

05.

Estabelecer o relacionamento entre eles.

O que é um modelo?

🤔

"Modelo é a representação abstrata e simplificada de um sistema real, com a qual se pode explicar ou testar o seu comportamento, em seu todo ou em partes."

 

COUGO, Paulo. Modelagem conceitual e projeto de banco de dados. Rio de Janeiro: Elsevier, 1997.

Modelo de dados relacional (notação simplificada)

Modelagem de dados

Entidades

  • As "caixinhas" são as entidades do negócio modelado;
  • entidades são identificadas por chaves primárias (PK);
  • ​Campos das entidades possuem tipos definidos (texto, inteiro, decimal, data, etc).
Código (PK) Nome Preço
P-01 Corona 2.99
P-23 Pepsi 5.59
P-11 Hoegaarden 6.87
P-09 Guaraná 5.99
P-33 Água com gás 1.98
... ... ...

Tabela PRODUTO

Modelagem de dados

Relacionamentos

  • Relacionamentos representados por chaves estrangeiras (FK);
  • Via de regra, migra do lado "1" para o lado "N".
CNPJ (PK) Nome Telefone
57.381.404/0001-90 Fornecedor A (61) 3722-6845
00.709.901/0001-57 Fornecedor B (61) 3775-8780
60.912.661/0001-15 Fornecedor C (61) 2227-4065

Tabela FORNECEDOR

Número (PK) Data CNPJ_Fornecedor (FK)
1 01/01/2024 57.381.404/0001-90
2 01/02/2024 00.709.901/0001-57
3 01/03/2024 00.709.901/0001-57
4 01/03/2024 60.912.661/0001-15

Tabela PEDIDO

Modelagem de dados

Cardinalidade

  • ​indicam a quantidade de registros de uma entidade relacionados a outra;
  • Três tipos: 1-1, 1-N e N-N.
Código (PK) Nome
1 Cerveja
2 Refrigerante
3 Sem álcool

Tabela CATEGORIA

Tabela PRODUTO

Código (PK) Nome Preço
1 Corona 2.99
2 Pepsi 5.59
3 Hoegaarden 6.87

Em que tabela colocamos a chave estrangeira (FK)?

🤔

Modelagem de dados

Cardinalidade N-N

Código (PK) Nome
1 Cerveja
2 Refrigerante
3 Sem álcool

Tabela CATEGORIA

Tabela PRODUTO

Código (PK) Nome Preço
1 Corona 2.99
2 Pepsi 5.59
3 Hoegaarden 6.87

Tabela CATEGORIA_PRODUTO

Código_Categoria
(PK) (FK)
Código_Produto
(PK) (FK)
1 1
3 1
2 2
1 3

Relacionamentos N-N SEMPRE darão origem a uma tabela associativa no meio.

Modelo de dados relacional (notação simplificada)

Quiz 2

a) Cardinalidade

b) Chave estrangeira

d) Tabela associativa

Sobre modelagem de dados, associe as definições aos seus respectivos conceitos:

1)

Representa um conceito do negócio sendo modelado.

2)

Mecanismo usado para definir relacionamentos entre tabelas.

3)

Indica a quantidade de registros que podem ser relacionar com registros de outra tabela.

4)

Estrutura criada para possibilitar o relacionamento N-N entre duas entidades.

c) Entidade

Quiz 2 - Resposta

a) Cardinalidade

b) Chave estrangeira

d) Tabela associativa

Sobre modelagem de dados, associe as definições aos seus respectivos conceitos:

1)

Representa um conceito do negócio sendo modelado.

2)

Mecanismo usado para definir relacionamentos entre tabelas.

3)

Indica a quantidade de registros que podem ser relacionar com registros de outra tabela.

4)

Estrutura criada para possibilitar o relacionamento N-N entre duas entidades.

c) Entidade

Banco de 

dados

01.

Modelagem de dados

02.

Introdução ao SQL

03.

Python com

Banco de dados

04.

Linguagem SQL

SQL (Structured Query Language) é uma linguagem padrão utilizada para gerenciar e manipular bancos de dados relacionais. Desenvolvida na década de 1970 pela IBM.

 

Pronuncia-se SEQUEL, porque era seu nome original (Structured English Query LanguageI).

01.

Baseada na álgebra relacional;

02.

Linguagem declarativa;

03.

Possui categorias de comando SQL (DML, DQL, DDL, DCL e TCL)

04.

Foi "padronizada", mas cada SGBD tem suas peculiaridades.

05.

É case insensitive - não diferencia letras maiúsculas de minúsculas.

Categorias de SQL

DML (Data Manipulation Language):

  • INSERT: Usado para inserir dados em uma tabela.
  • UPDATE: Usado para atualizar os dados existentes em uma tabela.
  • DELETE: Usado para excluir dados de uma tabela.

DQL (Data Query Language):

  • SELECT: Usado para consultar dados de uma ou mais tabelas.

DDL (Data Definition Language):

  • CREATE: Usado para criar novos objetos no banco de dados, como tabelas, índices, e visões.
  • ALTER: Usado para modificar a estrutura de um objeto existente no banco de dados.
  • DROP: Usado para excluir objetos do banco de dados.

DCL (Data Control Language):

  • GRANT: Usado para conceder privilégios a usuários ou grupos.
  • REVOKE: Usado para remover privilégios anteriormente concedidos.

TCL (Transaction Control Language):

  • COMMIT: Usado para finalizar uma transação, salvando todas as mudanças.
  • ROLLBACK: Usado para desfazer as mudanças até um ponto específico ou até o início da transação, caso ocorra algum erro.
  • SAVEPOINT: Usado para definir um ponto dentro de uma transação ao qual você pode posteriormente fazer um rollback.

Foco de hoje

SQL

Data Query Language

Data Manipulation Language

Data Definition Language

Data Control Language

Transaction Control Language

Manipular dados em SQL é fácil. Quero ver consultar!

Calma! Vai ser moleza.

😎

Conexão com SGBD

Agora sim, mão na massa!

DQL - SELECT "cru"

SELECT cnpj, nome, telefone 
  FROM fornecedor;          
  
SELECT * 
  FROM fornecedor;
  
-- SELECT: quais campos aparecem no resultado.
--   FROM: qual tabela será consultada.

Quais são os fornecedores cadastrados?

Consulta - ORDER BY

Quero os fornecedores ordenados pelo nome

select *
  from fornecedor
 order by nome;

select *
  from fornecedor
 order by nome desc;
 
-- ORDER BY: Diz por quais colunas ordenar o resultado.
--           Pode ser ASC (ascendente) ou DESC (decrescente). 
--           Por padrão é ASC.
--           Pode estipular várias colunas para ordenação.

Consulta - WHERE

Qual o preço da Coca Cola?

select preco
  from produto
 where nome = 'Pepsi';
 
-- WHERE: Cláusula usada para filtrar dados que serão exibidos no resultado.

select preco
  from produto
 where lower(nome) = 'Pepsi';
 
-- LOWER: função que retorna um texto em letras minúsculas.
-- UPPER: função que retorna um texto em letras maiúsculas.

Consulta - Filtros compostos

-- LISTAR FORNECEDORES DO RJ (ddd 21), ou de SP (ddd 11)
select *
  from fornecedor
 where substring(telefone, 2, 2) = '21'
    OR substring(telefone, 2, 2) = '11';
 

-- LISTAR PRODUTOS com preço entre 5 e 10
select *
  from produto
 where preco >= 5
   AND preco <= 10;
   
-- SUBSTRING(valor, INÍCIO, QUANTIDADE): Extrai um pedaço do texto.
--                                       Começa na posição indicada no INÍCIO,
--                                       e retorna a QUANTIDADE de caracteres desejada.

Quais os fornecedores do RJ e SP?

Quais produtos entre 5 e 10 reais?

Consulta - Funções de agregação

Quantos pedidos feitos?

Qual o maior e o menor preço de produto?

select count(*)
  from pedido;

select max(preco), min(preco)
  from produto;
  
-- COUNT: Conta a quantidade de registros.
--   MIN: Exibe o menor valor do campo.
--   MAX: Exibe o maior valor do campo.

Consulta - ALIAS

Melhorar visualização do resultado

select count(*) AS quantidade_pedido -- apelido temporário para o resultado
  from pedido;

select max(preco) maior_preco, -- O "AS" é opcional.
       min(preco) menor_preco
  from produto;

Antes do ALIAS

Depois do ALIAS

Consulta - GROUP BY

Quantos pedidos cada fornecedor atendeu, do maior pro menor?

select cnpj_fornecedor, count(*) quantidade_atendida
  from pedido
 group by cnpj_fornecedor
 order by count(*) desc;
 
 -- Todos os campos que não estiverem em funções de agregação
 -- devem estar listados no GROUP BY.

Resultado

Consulta - HAVING

Quantos pedidos cada fornecedor atendeu, do maior pro menor?

select codigo_produto, count(*) numero_pedidos
  from item_pedido
 group by codigo_produto
having count(*) > 5;

-- HAVING: A cláusula WHERE é aplicada ANTES dos registros serem agrupados.
--         O having é executado DEPOIS dos registros serem agrupados.

Resultado

Consulta - INNER JOIN

select p.nome, i.quantidade, i.numero_pedido
  from produto p
 inner join item_pedido i
    on p.codigo = i.codigo_produto
 order by p.nome, i.quantidade desc;
 
 -- INNER JOIN: Apresenta somente registros que satisfazem a condição.
 --             Se houver produto que não tenha relacionamento com 
 --             ITEM_PEDIDO, ele não aparece no resultado final.

Informe o nome do produto e a quantidade vendida em cada pedido

Resultado

Consulta - LEFT JOIN

select *
  from fornecedor f
 left join pedido p
   on f.cnpj = p.cnpj_fornecedor;
 
 -- LEFT JOIN: Apresenta todos os registros que satisfazem a condição.
 --            Apresenta também registros do lado esquerdo (FORNECEDOR apareceu antes),
 --            mesmo que não tenham relacionamento no lado direito (PEDIDO).

Descubra se tem fornecedor que não atendeu pedido.

Consulta - LEFT JOIN

select *
  from fornecedor f
 left join pedido p
   on f.cnpj = p.cnpj_fornecedor;

Resultado

Como listar somente os registros que NÃO possuem relacionamento na outra tabela?

🤔

Consulta - LEFT JOIN

select *
  from fornecedor f
  left join pedido p
    on f.cnpj = p.cnpj_fornecedor
 where p.numero is null;

Resultado

Quais fornecedores que NÃO atenderam pedidos?

Consulta - Outros JOINS

Consulta - CUIDADOS com JOIN

Quais produtos os fornecedores venderam?

inner join

inner join

inner join

inner join

Consulta - CUIDADOS com JOIN

Quais produtos os fornecedores venderam?

select distinct f.nome, prod.nome
  from fornecedor f
 inner join pedido p 
    on f.cnpj = p.cnpj_fornecedor
 inner join item_pedido ip 
    on p.numero = ip.numero_pedido
 inner join produto prod 
    on ip.codigo_produto = prod.codigo
 order by f.nome, prod.nome;

Resultado

E tem muito mais...

Passamos pelas estruturas mais básicas do SQL, mas já poderosas.

Vimos

Banco de 

dados

01.

Modelagem de dados

02.

Introdução ao SQL

03.

Python com

Banco de dados

04.

Python - Revisão

print('Olá, Mundo Python com SQL')

# A função `print` escreve o texto na saída do sistema operacional

Olá, Mundo!

1. Cria um arquivo com a extensão .py (ola.py, por exemplo);

2. Insere código Python nele;

C:\> cd pasta_do_arquivo
C:\pasta_do_arquivo> python ola.py
Olá, Mundo Python com SQL!

3. Abre a linha de comando;

4. Acessa a pasta onde está o código fonte;

5. Executa o arquivo.

Código Fonte

Python - Revisão

# Programa que calcula a média de idade de uma família

print( (40 + 37 + 0.5) / 3 ) # Saída -> 25.833333
# Operadores matemáticos
#   +  -> Adição
#   -  -> Subtração
#   *  -> Multiplicação
#   /  -> Divisão
#   %  -> Módulo (resto da divisão)
#   ** -> Exponenciação
#   // -> Divisão inteira
#   
#   Parênteses, numa expressão, indicam a precedência


# Versão coom variáveis

idade_do_pai = 40 
# a partir desse momento, o programa conhece
# o nome "idade_do_pai" com o valor 40

idade_da_mae = 37
idade_do_filho = 0.5

soma_das_idades = (idade_do_pai + idade_da_mae + idade_do_filho) 
media = soma_das_idades / 3

print(f'A média das idades é {media}')
# SAÍDA: A média das idades é 25.833333333333332

Variáveis e operações básicas

  • O programa é executado de cima para baixo, linha a linha.
  • Variáveis são "caixinhas" na memória do programa que armazenam valores para uso futuro;
  • Tipos básicos:
    • números: ​int, float e complex;
    • str: string de texto (aspas duplas ou simples);
    • bool: True ou False.

Python - Revisão

# Lista com as notas de um aluno
notas = [8.9, 9.4, 7.8]


# Tupla representando um registro lido do banco de dados
fornecedor = ('47.508.411/0001-86', "Distribuidora Água Viva Bebidas", '(11) 2564-7890')


# Elementos das listas e tuplas são acessados pelo índice.
# Começa pelo índice ZERO (0).
print(notas[1]) # SAÍDA -> 9.4
print(fornecedor[0]) # SAÍDA -> 47.508.411/0001-86


# Dicionário representando um produto
pepsi = {
  'codigo': 2,
  'nome': 'Pepsi',
  'preco': 4.99
}


# O acesso aos valores dos dicionários se dá pela CHAVE
print(pespi['preco'])

Listas, tuplas e dicionários

Lista:

  • sequência ordenada e indexada de elementos;
  • mutável;
  • símbolos são os colchetes.

Tupla:

  • também ordenada e indexada;
  • imutável;
  • símbolos são os parênteses.

Dicionário:

  • estrutura chave-valor desordenada;
  • Mutável;
  • símbolos são as chaves.

Python - Revisão

# Avalia a bebida: está barata se o preço for menor que 5 reais
pepsi = {
	'codigo': 2,
	'nome': 'Pepsi',
	'preco': 4.99
}

if pepsi['preco'] < 5:
	print('Está barata')
else:
	print('Me rouba logo!!!')

# SAÍDA: -> Está barata, porque o preço da Coca (4.99) < 5


# Exibir todos os dados do fornecedor
fornecedor = ('47.508.411/0001-86', "Distribuidora Água Viva Bebidas", '(11) 2564-7890')

for campo in fornecedor:
	print(campo)

# SAÍDA (cada informação é impressa em uma nova linha)
#   -> 47.508.411/0001-86
#   -> Distribuidora Água Viva Bebidas
#   -> (11) 2564-7890

Condicionais e Laços

IF:

  • Controla o fluxo de execução de acordo com uma condição;
  • Só executa o que está dentro do bloco se ela for verdadeira.

​ELSE:

  • Executa caso o IF não seja executado;
  • Não é obrigatório.


FOR:

  • Acessa os elementos de uma sequência, um a um, desde o primeiro;
  • Disponibiliza o elemento dentro do bloco.

Python - Revisão

# Cria função para calcular a média final nas disciplinas da escola.
#
#  -> Precisa receber 3 parâmetros para realizar o cálculo.
#  -> Retorna o valor da média ao ponto em que foi invocada.

def calcula_media_final(nota1, nota2, nota3):
    soma_das_notas = nota1 + nota2 + nota3
    
    media = soma_das_notas / 3
    return media


# Parâmetros seguem a ordem em que são passados: nota1=5.7, nota2=6.8 e nota3=3.4
media_do_joao = calcula_media_final(5.7, 6.8, 3.4) 

media_da_maria = calcula_media_final(nota1=8.8, nota2=8.5, nota3=9.9)

print(media_do_joao) # Saída -> 5.3
print(media_da_maria) # Saída -> 9.06

Funções

O que é uma função?

  • É um bloco de código definido que executa uma lógica;
  • precisa ser invocada para executar seu código;
  • pode receber parâmetros;
  • pode retornar valores.

 

Para que serve?

  • Evitar código duplicado e reaproveitar código;
  • Isolar uma regra de negócio;
  • Deixar um código mais claro;
  • etc...

Análise de dados com Python e SQL

Fluxograma de interação e bibliotecas

Análise 1 - Buscar dados no MySQL

# Importar as bibliotecas base
from sqlalchemy import create_engine, text

import pandas as pd
import matplotlib.pyplot as plt

# Cria motor para interagir com o MySQL
string_de_conexao = "mysql+mysqlconnector://localhost:3307/ambev_pedidos"
engine = create_engine(string_de_conexao)

# Consulta que executamos anteriormente
query = '''select cnpj_fornecedor fornecedor, count(*) quantidade_pedidos
             from pedido
            group by cnpj_fornecedor
            order by count(*) desc;
        '''

# Realiza a consulta e pega os dados retornados
with engine.connect() as conexao:
    resultado = conexao.execute(text(query))
    dados = resultado.mappings()

# Continua ...

Quantos pedidos cada fornecedor atendeu, do maior pro menor?

Análise 1 - Carregar Dataframe e Gráfico

# ... continuando: carrega dados do banco num DataFrame do Pandas
df_pedidos_atendidos = pd.DataFrame(dados)

# Plota um gráfico de colunas para exibir as métricas
plt.figure(figsize=((10, 8)))
plt.bar(df_pedidos_atendidos['fornecedor'], df_pedidos_atendidos['quantidade_pedidos'])
plt.title('Quantidade de pedidos atendidos por fornecedor')
plt.show()

Quantos pedidos cada fornecedor atendeu, do maior pro menor?

Análise 1 - Resultado final

Análise 2 - Buscar dados no MySQL

Quanto cada produto rendeu em faturamento (consulta inédita)?

# Bibliotecas e Engine do MySQL já foram criadas anteriormente


# Consulta que executamos anteriormente
query = '''select p.nome, sum(i.preco_unitario * i.quantidade) faturamento
             from item_pedido i
             left join produto p on i.codigo_produto = p.codigo
            group by p.nome
            order by faturamento
        '''

# Realiza a consulta e pega os dados retornados
with engine.connect() as conexao:
    resultado = conexao.execute(text(query))
    dados = resultado.mappings()

df_faturamento_produtos = pd.DataFrame(dados)
df_faturamento_produtos['faturamento'] = df_faturamento_produtos['faturamento'].astype(float)


# Plota o gráfico
import locale

locale.setlocale(locale.LC_MONETARY, 'pt_BR')
total = df_faturamento_produtos['faturamento'].sum()

def my_fmt(percentual):
    valor = total * percentual / 100
    valor = locale.currency(valor, symbol=False, grouping=True)
    return f'R$ {valor}\n({percentual:.2f}%)'

plt.figure(figsize=((10, 8)))
plt.pie(df_faturamento_produtos['faturamento'], labels=df_faturamento_produtos['nome'], autopct=my_fmt, pctdistance=0.8)

Análise 2 - Resultado final

Obrigado!!!

Sobre mim

Cácio Costa

  • Bacharel em Ciência da Computação pelo Centro Universitário de Brasília e pós-graduado em Tecnologias Disruptivas pelo Centro Universitário IESB;
  • Servidor público aprovado em 1º lugar em seu cargo atual no Judiciário Federal;
  • Instrutor em tecnologia desde 2016 na Caelum e na Alura;
  • Professor da pós de segurança da informação do Grancursos Online;
  • Músico e capoeirista nas horas vagas.

/cacio-costa

Apêndice DDL e DML

05*.

DDL - CREATE TABLE

CREATE TABLE produto (

	codigo BIGINT NOT NULL AUTO_INCREMENT,
    nome VARCHAR(255) NOT NULL,
    preco DECIMAL(10, 2) NOT NULL,

    PRIMARY KEY(codigo)
);

Criar a tabela produto

SQL - Tipos de dados

Categoria

Tipo

\begin{align*} & smallint,\hspace{1 mm} bigint,\hspace{1 mm} decimal(p,s)^{1},\hspace{1 mm} numeric(p,s)^{1}, float,\hspace{1 mm} real,\hspace{1 mm} double\hspace{1 mm} \\ & precision \end{align*}
Numérico
Data/Hora
Texto
Lógico
Binário
\begin{align*} & date^{2},\hspace{1 mm} time^{3},\hspace{1 mm} timestamp^{4},\hspace{1 mm} interval \end{align*}

1. p é a precisão (quantidade de dígitos antes da vírgula). s é a escala (quantidade de casas após a vírgula).

2. Data no formato YYYY-MM-DD.

3. Hora no formato HH:MM:SS.

4. Combinação dos formatos de data e hora.

5. n é a quantidade de caracteres/bytes.

\begin{align*} & char\left( n \right)^{5},\hspace{1 mm} varchar\left ( n \right )^{5},\hspace{1 mm} text \end{align*}
\begin{align*} & boolean \end{align*}
\begin{align*} & binary\left( n \right)^{5},\hspace{1 mm} varbinary\left ( n \right )^{5},\hspace{1 mm} blob \end{align*}

DML - INSERT

INSERT INTO produto 
  (nome, preco) 
VALUES 
  ('Eisenbahn', 2.99);
  
INSERT INTO produto (nome, preco) 
VALUES ('Coca Cola', 5.59);
  
INSERT INTO produto (nome, preco) 
VALUES ('Colorado Appia', 6.87);

-- Texto, no SQL, sempre entre aspas simples
-- Números decimais separados por ponto (.)

Tabela PRODUTO

Codigo(PK) Nome Preco
1 Eisenbahn 2.99
2 Coca cola 5.59
3 Colorado Appia 6.87

Incluir os registros abaixo

DML - UPDATE

UPDATE produto
   SET preco = 6.19;
-- Se executar assim, atualiza TODOS os registros

-- Precisa colocar uma condição que indique
-- somente o registro que deve ser alterado
UPDATE produto
   SET preco = 6.19
 WHERE codigo = 2;
 
-- Também funcionaria NESTE CONJUNTO DE DADOS
UPDATE produto
   SET preco = 6.19
 WHERE nome = 'Coca Cola';
 

Tabela PRODUTO

Codigo(PK) Nome Preco
1 Eisenbahn 2.99
2 Coca cola 5.59 6.19
3 Colorado Appia 6.87

Atualizar preço da Coca

DML - DELETE

DELETE FROM produto;
-- Se executar assim, REMOVE TODOS os registros

-- Precisa colocar uma condição que indique
-- somente o registro que deve ser alterado
DELETE FROM produto
 WHERE codigo = 3; 

Tabela PRODUTO

Codigo(PK) Nome Preco
1 Eisenbahn 2.99
2 Coca cola 6.19
3 Colorado Appia 6.87

Remover a Colorado

SQL com Python

By cacio-costa

SQL com Python

  • 37