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 operacionalOlá, 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.833333333333332Variá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-7890Condicionais 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.06Funçõ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
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.

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 |
|
| 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 |
Remover a Colorado
SQL com Python
By cacio-costa
SQL com Python
- 37