MySQL aula 25/jun
1. SELECT * FROM salesorderdetail LIMIT 15;
Este comando recupera os primeiros 15 registros da tabela
salesorderdetail .
2. SELECT * FROM salesorderheader LIMIT 15;
Aqui, você obtém os primeiros 15 registros da tabela salesorderheader .
3. SELECT sh.* FROM salesorderheader sh INNER JOIN salesorderdetail od ON
[Link] = [Link] LIMIT 15;
Essa consulta combina dados das tabelas salesorderheader e
salesorderdetail usando a coluna SalesOrderID . Ela retorna os primeiros
15 registros resultantes.
4. SELECT od.* FROM salesorderheader sh INNER JOIN salesorderdetail od ON
[Link] = [Link] LIMIT 15;
Similar à consulta anterior, mas desta vez retorna os primeiros 15
registros da tabela salesorderdetail .
5. SELECT [Link], [Link], [Link], [Link], [Link],
[Link], [Link] FROM salesorderheader sh INNER JOIN salesorderdetail od ON
[Link] = [Link] LIMIT 15;
Aqui, você seleciona informações específicas das tabelas
salesorderheader e salesorderdetail , combinando-as com base na coluna
SalesOrderID .
6. SELECT * FROM product LIMIT 15;
Retorna os primeiros 15 registros da tabela product .
7. CREATE VIEW vw_vendas_produtos AS ...
Você está criando uma visão chamada vw_vendas_produtos que contém os
dados combinados das tabelas salesorderheader , salesorderdetail , product
e productsubcategory .
8. SELECT * FROM vw_vendas_produtos LIMIT 20;
Esta consulta recupera os primeiros 20 registros da visão
vw_vendas_produtos .
MySQL aula 25/jun 1
9. SELECT * FROM product p INNER JOIN productsubcategory ps ON [Link] =
[Link];
Aqui, você está combinando dados das tabelas product e
productsubcategory com base na coluna ProductSubcategoryID .
10. SELECT * FROM product p LEFT JOIN productsubcategory ps ON [Link] =
[Link];
Similar à consulta anterior, mas usando uma junção esquerda (LEFT
JOIN).
1. INNER JOIN (Junção Interna):
O INNER JOIN combina registros de duas tabelas com base em uma
condição de correspondência. Apenas os registros que têm valores
correspondentes nas colunas especificadas são incluídos no
resultado.
Se não houver correspondência para um registro em uma das
tabelas, esse registro é excluído do resultado.
É útil quando você deseja obter apenas os registros que têm
correspondência em ambas as tabelas.
2. LEFT JOIN (Junção à Esquerda):
O LEFT JOIN também combina registros de duas tabelas, mas inclui
todos os registros da tabela à esquerda (a primeira tabela
mencionada) e os registros correspondentes da tabela à direita.
Se não houver correspondência para um registro na tabela à direita,
ele ainda aparecerá no resultado, preenchendo as colunas da
tabela à direita com valores nulos.
É útil quando você deseja obter todos os registros da tabela à
esquerda, independentemente de haver correspondência na tabela
à direita.
Em resumo:
INNER JOIN : Retorna apenas registros com correspondência.
: Retorna todos os registros da tabela à esquerda e os
LEFT JOIN
registros correspondentes da tabela à direita.
MySQL aula 25/jun 2
MySQL aula 28/mai
Acesso ao MySQL
1. Conectar ao banco de dados remoto:
mysql -h [Link]
[Link] -u Aula01 -p
h : Host do banco de dados.
u : Usuário.
p : Solicita a senha.
2. Conectar ao MySQL local como root:
mysql -u root -p
Navegação no Sistema de Arquivos
1. Acessar o diretório do MySQL Workbench no Windows:
cd "C:\\Program Files\\MySQL\\MySQL Workbench 8.0 CE"
Comandos SQL
1. Contar o número de produtos na tabela product :
SELECT COUNT(ProductID) FROM product;
2. Selecionar todos os produtos de cor azul:
SELECT * FROM product WHERE color = 'blue';
3. Selecionar produtos com DaysToManufacture igual a 4:
MySQL aula 28/mai 1
SELECT * FROM product WHERE DaysToManufacture = 4;
4. Selecionar produtos com DaysToManufacture igual a 0:
SELECT * FROM product WHERE DaysToManufacture = 0;
5. Selecionar produtos com ListPrice maior que 0:
SELECT * FROM product WHERE listprice > 0;
6. Selecionar campos específicos de produtos com ListPrice maior que 0:
SELECT ProductID, name, ProductNumber, color, listprice
FROM product
WHERE listprice > 0;
7. Selecionar campos específicos de produtos com ListPrice entre 1 e 200,
ordenando de forma crescente:
SELECT ProductID, name, ProductNumber, color, listprice
FROM product
WHERE listprice >= 1 AND listprice <= 200
ORDER BY listprice;
8. Selecionar campos específicos de produtos com ListPrice entre 1 e 200,
ordenando de forma decrescente:
SELECT ProductID, name, ProductNumber, color, listprice
FROM product
WHERE listprice >= 1 AND listprice <= 200
ORDER BY listprice DESC;
9. Selecionar todos os produtos ordenados por nome de forma decrescente:
MySQL aula 28/mai 2
SELECT * FROM product ORDER BY name DESC;
10. Selecionar todos os produtos ordenados por nome de forma crescente:
SELECT * FROM product ORDER BY name;
11. Selecionar campos específicos de produtos com ProductID em uma lista de
valores:
SELECT ProductID, name, ProductNumber, color, listprice
FROM product
WHERE ProductID IN (4, 316, 469);
12. Selecionar campos específicos de produtos com ProductID não em uma lista
de valores:
SELECT ProductID, name, ProductNumber, color, listprice
FROM product
WHERE ProductID NOT IN (4, 316, 469);
13. Selecionar campos específicos de produtos cujo nome contém "grip":
SELECT ProductID, name, ProductNumber, color, listprice
FROM product
WHERE name LIKE '%grip%';
14. Selecionar campos específicos de produtos cujo nome não contém "grip":
SELECT ProductID, name, ProductNumber, color, listprice
FROM product
WHERE name NOT LIKE '%grip%';
15. Selecionar campos específicos de produtos cujo nome começa com 'H':
MySQL aula 28/mai 3
SELECT ProductID, name, ProductNumber, color, listprice
FROM product
WHERE name LIKE 'H%';
16. Selecionar campos específicos de produtos cujo ProductNumber começa com
'R':
SELECT ProductID, name, ProductNumber, color, listprice
FROM product
WHERE ProductNumber LIKE 'R%';
parte 2
1. Mostrar todas as tabelas no banco de dados
SHOW TABLES;
Este comando lista todas as tabelas presentes no banco de dados atual.
2. Selecionar todos os registros da tabela employee
SELECT * FROM employee;
Este comando retorna todos os registros da tabela employee .
3. Selecionar todos os registros da tabela customer
SELECT * FROM customer;
Este comando retorna todos os registros da tabela customer .
4. Selecionar informações específicas da tabela product com
um campo calculado TIPO_FLAG
MySQL aula 28/mai 4
SELECT
productid,
name,
ProductNumber,
color,
StandardCost,
listprice,
makeflag,
CASE WHEN makeflag=0 THEN 'INATIVO'
ELSE 'ATIVO'
END TIPO_FLAG
FROM
product;
Este comando seleciona campos específicos da tabela product e adiciona um
campo calculado TIPO_FLAG que indica se o produto está 'ATIVO' ou 'INATIVO'
com base no valor de makeflag .
5. Selecionar informações específicas da tabela product com
um campo calculado tipo_preco
SELECT
productid,
name,
ProductNumber,
color,
StandardCost,
listprice,
CASE
WHEN listprice < 200 THEN 'preco baixo'
WHEN listprice >= 200 AND listprice <= 1000 THEN
'preco medio'
WHEN listprice > 1000 THEN 'preco alto'
END tipo_preco
MySQL aula 28/mai 5
FROM
product;
Este comando seleciona campos específicos da tabela product e adiciona um
campo calculado tipo_preco que classifica o preço do produto em 'preco
baixo', 'preco medio' ou 'preco alto' com base no valor de listprice .
6. Selecionar produtos da tabela product onde color é nulo
SELECT
productid,
name,
ProductNumber,
color,
StandardCost,
listprice
FROM
product
WHERE
color IS NULL;
Este comando seleciona produtos da tabela product onde o campo color é
nulo.
7. Selecionar produtos da tabela product onde color não é
nulo
SELECT
productid,
name,
ProductNumber,
color,
StandardCost,
listprice
FROM
product
MySQL aula 28/mai 6
WHERE
color IS NOT NULL;
Este comando seleciona produtos da tabela product onde o campo color não
é nulo.
8. Selecionar produtos da tabela product com substituição de
valor nulo no campo color
SELECT
productid,
name,
ProductNumber,
CASE WHEN color IS NULL THEN 'N/D' ELSE color END AS c
olor,
StandardCost,
listprice
FROM
product;
Este comando seleciona produtos da tabela product e substitui o valor nulo do
campo color por 'N/D'.
Referência
Para mais informações sobre otimização de consultas SQL, consulte a
documentação oficial do MySQL.
MySQL aula 28/mai 7
MySQL aula do dia 02/07
Criação de Procedimentos Armazenados
Procedimento para Verificar Quantidade de Produtos por Cor
Este procedimento armazenado, sp_verifica_qtd_produtos , recebe um parâmetro
de entrada ( vcor ) e retorna a quantidade de produtos com a cor especificada.
DELIMITER //
CREATE PROCEDURE sp_verifica_qtd_produtos(IN vcor VARCHAR(1
0), OUT quantidade INT)
BEGIN
SELECT COUNT(1) INTO quantidade FROM product WHERE colo
r = vcor;
END //
DELIMITER ;
Para chamar este procedimento e obter a quantidade de produtos da cor 'blue':
CALL sp_verifica_qtd_produtos('blue', @qtde);
SELECT @qtde;
Procedimento para Inserir Produto na Tabela de Backup
Este procedimento armazenado, sp_insert_produto_bkp , insere um produto na
tabela product_bkp com base nos parâmetros fornecidos ( pcod e pdescr ).
DELIMITER //
CREATE PROCEDURE sp_insert_produto_bkp(IN pcod INT, IN pdes
cr VARCHAR(10))
BEGIN
INSERT INTO product_bkp(ProductID, name) VALUES (pcod,
pdescr);
END //
MySQL aula do dia 02/07 1
DELIMITER ;
Para chamar este procedimento e inserir um produto na tabela de backup:
CALL sp_insert_produto_bkp(150, 'bike 75');
SELECT * FROM product_bkp;
Manipulação de Tabelas
Criação de Tabela product
A tabela product é criada no banco de dados db_t5_valdomiro com base nos
primeiros 100 registros da tabela product do banco de dados adventureworks .
USE db_t5_valdomiro;
CREATE TABLE product AS
SELECT * FROM [Link] LIMIT 100;
Consultas SQL com Funções de String
Consulta com Funções de String
A consulta a seguir demonstra o uso de várias funções de string no MySQL,
incluindo UPPER , LOWER , LENGTH ,e SUBSTRING .
SELECT
productid,
UPPER(name) AS name_product,
LOWER(name) AS name_product2,
LENGTH(name) AS campo_length,
productnumber,
SUBSTRING(productnumber, 1, 2) AS campo_SUBSTRING,
SUBSTRING(productnumber, 4, 5) AS campo_SUBSTRING_2
FROM
product p;
MySQL aula do dia 02/07 2
UPPER(name) : Converte o nome do produto para letras maiúsculas.
LOWER(name) : Converte o nome do produto para letras minúsculas.
LENGTH(name) : Retorna o comprimento do nome do produto.
SUBSTRING(productnumber, 1, 2) : Extrai os primeiros 2 caracteres do número do
produto.
SUBSTRING(productnumber, 4, 5) : Extrai 5 caracteres a partir da quarta posição
do número do produto.
MySQL aula do dia 02/07 3
MySQL aula do dia 09/07
Consultas e Funções de Data e Hora
Introdução
Este documento apresenta uma série de consultas SQL utilizando funções de
data e hora, funções matemáticas e de manipulação de strings, com base na
tabela purchaseorderheader e purchaseorderdetail .
Extraindo Ano, Mês e Dia da Data
A consulta a seguir extrai o ano, mês e dia da coluna orderdate da tabela
purchaseorderheader .
SELECT
YEAR([Link]) AS year_orderdate,
MONTH([Link]) AS month_orderdate,
DAY([Link]) AS day_orderdate,
ph.*
FROM
purchaseorderheader ph;
Filtrando por Ano
Esta consulta retorna todos os registros da tabela purchaseorderheader onde o
ano da orderdate é 2004.
SELECT
ph.*
FROM
purchaseorderheader ph
WHERE
YEAR([Link]) = 2004;
Filtrando por Ano e Mês
MySQL aula do dia 09/07 1
Esta consulta retorna todos os registros da tabela purchaseorderheader onde o
ano da orderdate é 2004 e o mês é maio.
SELECT
ph.*
FROM
purchaseorderheader ph
WHERE
YEAR([Link]) = 2004
AND MONTH([Link]) = 5;
Diferença de Datas
A consulta a seguir calcula a diferença em dias entre shipdate e orderdate , a
diferença entre a data atual e orderdate , e a diferença em anos arredondada.
SELECT
DATEDIFF([Link], [Link]) AS DATEDIFF_coluna,
DATEDIFF(CURRENT_DATE, [Link]) AS DATEDIFF_coluna
2,
ROUND(DATEDIFF(CURRENT_DATE, [Link]) / 365, 0) AS
valor_anos,
ph.*
FROM
purchaseorderheader ph;
Adicionando Intervalos de Tempo
A consulta a seguir adiciona diferentes intervalos de tempo à orderdate .
SELECT
[Link],
DATE_ADD([Link], INTERVAL 5 DAY) AS date_add_orde
rdate,
DATE_ADD([Link], INTERVAL 3 MONTH) AS date_add_or
derdate3,
DATE_ADD([Link], INTERVAL 2 YEAR) AS date_add_ord
erdate4,
ph.*
MySQL aula do dia 09/07 2
FROM
purchaseorderheader ph;
Dia da Semana
A consulta a seguir obtém o dia da semana a partir de orderdate e o mapeia
para o nome do dia.
SELECT
DAYOFWEEK([Link]) AS dia_semana_order_date,
CASE
WHEN DAYOFWEEK([Link]) = 1 THEN 'Domingo'
WHEN DAYOFWEEK([Link]) = 2 THEN 'Segunda'
WHEN DAYOFWEEK([Link]) = 3 THEN 'Terça'
WHEN DAYOFWEEK([Link]) = 4 THEN 'Quarta'
WHEN DAYOFWEEK([Link]) = 5 THEN 'Quinta'
WHEN DAYOFWEEK([Link]) = 6 THEN 'Sexta'
WHEN DAYOFWEEK([Link]) = 7 THEN 'Sábado'
END AS dia_semana,
ph.*
FROM
purchaseorderheader ph;
Funções Matemáticas
Módulo
A consulta a seguir demonstra o uso da função MOD para calcular o módulo de
dois números.
SELECT MOD(18, 4); -- Retorna 2
SELECT MOD(18, 2); -- Retorna 0
Número Aleatório
A consulta a seguir gera um número aleatório usando a função RAND .
SELECT RAND();
SELECT ROUND(RAND() * 50, 0); -- Gera um número aleatório e
MySQL aula do dia 09/07 3
ntre 0 e 50
Máximo e UUID
A consulta a seguir encontra o próximo productid e gera um UUID.
SELECT MAX(productid) + 1 FROM product;
SELECT UUID();
Consultas em purchaseorderdetail
Extraindo Ano e Mês de DueDate
A consulta a seguir extrai o ano e mês de DueDate na tabela purchaseorderdetail .
SELECT
YEAR([Link]),
MONTH([Link]),
po.*
FROM
purchaseorderdetail po;
Arredondamento e Truncamento de LineTotal
A consulta a seguir mostra o uso das funções ROUND e TRUNCATE para LineTotal .
SELECT
YEAR([Link]),
MONTH([Link]),
[Link],
ROUND([Link], 2) AS LineTotal_round,
TRUNCATE([Link], 2) AS LineTotal_trunc,
po.*
FROM
purchaseorderdetail po;
Agrupamento por Ano e Mês
MySQL aula do dia 09/07 4
A consulta a seguir agrupa os registros por ano e mês de DueDate , somando os
valores arredondados e truncados de LineTotal .
SELECT
YEAR([Link]) AS ano,
MONTH([Link]) AS mes,
SUM(ROUND([Link], 2)) AS LineTotal_round,
SUM(TRUNCATE([Link], 2)) AS LineTotal_trunc
FROM
purchaseorderdetail po
GROUP BY
YEAR([Link]),
MONTH([Link]);
MySQL Date and Time Functions.
MySQL aula do dia 09/07 5
MySQL aula do dia 16/07
Documentação MySQL - Funções e
Triggers
Configurações Iniciais
Habilitar a Criação de Funções e Triggers
Para permitir a criação de funções e triggers quando o log binário está ativado,
execute o seguinte comando:
SET GLOBAL log_bin_trust_function_creators = 1;
Função fc_preco_produto
Criação da Função
A função fc_preco_produto retorna o preço de lista ( listprice ) de um produto
com base no productid fornecido.
DELIMITER $$
USE adventureworks$$
CREATE DEFINER=root@% FUNCTION fc_preco_produto(p_produto I
NT) RETURNS DOUBLE
BEGIN
RETURN (SELECT listprice FROM product WHERE productid =
p_produto);
END$$
DELIMITER ;
Exibindo o Status da Função
Para verificar o status das funções criadas, utilize o comando:
MySQL aula do dia 16/07 1
SHOW FUNCTION STATUS;
Utilizando a Função
Você pode chamar a função diretamente ou utilizá-la em uma consulta. Por
exemplo, para obter o preço de um produto específico:
SELECT fc_preco_produto(773);
Para utilizar a função em uma consulta que retorna uma lista de detalhes de
pedidos:
SELECT fc_preco_produto(productid) AS preco_lista, so.*
FROM salesorderdetail so
LIMIT 10;
Removendo a Função
Para remover a função fc_preco_produto , utilize o comando:
DROP FUNCTION fc_preco_produto;
Trigger salesorderdetail_AFTER_INSERT
Criação da Trigger
A trigger salesorderdetail_AFTER_INSERT é acionada após a inserção de um novo
registro na tabela salesorderdetail . Ela atualiza o nível de estoque de segurança
( Safetystocklevel ) do produto correspondente, subtraindo a quantidade do
pedido ( orderqty ).
DELIMITER $$
USE adventureworks$$
CREATE DEFINER = CURRENT_USER TRIGGER [Link]
rderdetail_AFTER_INSERT
AFTER INSERT ON salesorderdetail
MySQL aula do dia 16/07 2
FOR EACH ROW
BEGIN
UPDATE product
SET Safetystocklevel = Safetystocklevel - [Link]
WHERE productid = [Link];
END$$
DELIMITER ;
MySQL aula do dia 16/07 3
MySQL comandos simples
Vamos utilizar um exemplo baseado em "heróis" para ilustrar os comandos
básicos do MySQL.
Passos Iniciais
1. Criar um Banco de Dados
CREATE DATABASE herois;
2. Usar o Banco de Dados
USE herois;
3. Criar uma Tabela
CREATE TABLE herois (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(255) NOT NULL,
poder VARCHAR(255) NOT NULL,
ano_aparicao INT
);
4. Inserir Dados
INSERT INTO herois (nome, poder, ano_aparicao)
VALUES
('Superman', 'Super força', 1938),
('Batman', 'Inteligência e habilidades de combate', 19
39),
('Mulher-Maravilha', 'Força e agilidade', 1941),
('Flash', 'Super velocidade', 1940),
('Aquaman', 'Comunicação com animais marinhos', 1941);
MySQL comandos simples 1
5. Selecionar e Exibir Dados
SELECT * FROM herois;
6. Atualizar Dados
UPDATE herois
SET poder = 'Força, voo e resistência'
WHERE nome = 'Superman';
7. Deletar Dados
DELETE FROM herois
WHERE nome = 'Aquaman';
Comandos Adicionais Úteis
Exibir Bancos de Dados
SHOW DATABASES;
Exibir Tabelas
SHOW TABLES;
Exibir Estrutura de uma Tabela
DESCRIBE herois;
Exibir Registros com Limitação
SELECT * FROM herois LIMIT 3;
MySQL comandos simples 2
Exemplo Completo
Aqui está o exemplo completo, compilando todos os comandos:
-- 1. Criar banco de dados
CREATE DATABASE herois;
-- 2. Usar banco de dados
USE herois;
-- 3. Criar tabela
CREATE TABLE herois (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(255) NOT NULL,
poder VARCHAR(255) NOT NULL,
ano_aparicao INT
);
-- 4. Inserir registros
INSERT INTO herois (nome, poder, ano_aparicao)
VALUES
('Superman', 'Super força', 1938),
('Batman', 'Inteligência e habilidades de combate', 193
9),
('Mulher-Maravilha', 'Força e agilidade', 1941),
('Flash', 'Super velocidade', 1940),
('Aquaman', 'Comunicação com animais marinhos', 1941);
-- 5. Selecionar e exibir registros
SELECT * FROM herois;
-- 6. Atualizar registro
UPDATE herois
SET poder = 'Força, voo e resistência'
WHERE nome = 'Superman';
MySQL comandos simples 3
-- 7. Deletar registro
DELETE FROM herois
WHERE nome = 'Aquaman';
-- Comandos adicionais úteis
-- Exibir todos os bancos de dados
SHOW DATABASES;
-- Exibir todas as tabelas no banco de dados atual
SHOW TABLES;
-- Exibir a estrutura da tabela 'herois'
DESCRIBE herois;
-- Selecionar e exibir os três primeiros registros
SELECT * FROM herois LIMIT 3;
Explicação dos Comandos
1. CREATE DATABASE: Cria um novo banco de dados chamado herois .
2. USE: Seleciona o banco de dados herois para uso.
3. CREATE TABLE: Cria uma tabela chamada herois com colunas para id , nome ,
poder e ano_aparicao .
4. INSERT INTO: Insere vários registros na tabela herois .
5. SELECT: Seleciona e exibe todos os registros da tabela herois .
6. UPDATE: Atualiza o campo poder do registro onde o nome é 'Superman'.
7. DELETE: Deleta o registro onde o nome é 'Aquaman'.
8. SHOW DATABASES: Exibe todos os bancos de dados disponíveis.
9. SHOW TABLES: Exibe todas as tabelas no banco de dados atual.
10. DESCRIBE: Exibe a estrutura da tabela herois .
11. LIMIT: Seleciona e exibe um número limitado de registros da tabela herois .
MySQL comandos simples 4
MySQL aula 04/jun
Documentação Simples e Objetiva: Importando Banco de Dados
Passo 1: Abrir o CMD
1. Abra o Prompt de Comando (CMD):
Pressione Win + R , digite cmd e pressione Enter .
Passo 2: Navegar até o Diretório do MySQL Workbench
1. Navegue até o diretório do MySQL Workbench:
cd C:\\Program Files\\MySQL\\MySQL Workbench 8.0 CE
Passo 3: Importar o Banco de Dados
1. Importar o banco de dados:
mysql -u root -p < caminho_do_arquivo_sql
Substitua caminho_do_arquivo_sql pelo caminho do seu arquivo SQL.
Passo 4: Confirmar a Importação
1. Faça login no MySQL para confirmar a importação:
mysql -u root -p
2. Liste os bancos de dados:
SHOW DATABASES;
Comandos SQL Diversos
Seleções Básicas
MySQL aula 04/jun 1
Selecionar produtos onde a cor é nula:
SELECT * FROM product WHERE color IS NULL;
Atualizar a cor de um produto específico:
UPDATE product SET color = ' ' WHERE productid = 1;
Selecionar produtos com classes específicas usando OR :
SELECT * FROM product WHERE class = 'L' OR class = 'M';
Selecionar produtos com classes específicas usando AND :
SELECT * FROM product WHERE class = 'L' AND class = 'M';
Selecionar produtos com classes específicas usando IN :
SELECT * FROM product WHERE class IN ('L', 'M');
Selecionar produtos com preço entre 100 e 1000:
SELECT * FROM product WHERE listprice BETWEEN 100 AND 100
0;
Selecionar detalhes de pedidos com data de entrega em 2001:
SELECT * FROM purchaseorderdetail WHERE duedate BETWEEN '2
001-01-01' AND '2001-12-31 [Link]';
Selecionar detalhes de pedidos com data de entrega em maio de 2001:
SELECT * FROM purchaseorderdetail WHERE duedate BETWEEN '2
001-05-01' AND '2001-05-31';
MySQL aula 04/jun 2
Descrever a estrutura da tabela purchaseorderdetail :
DESCRIBE purchaseorderdetail;
Comandos Avançados
Conectar ao Servidor de Banco de Dados
1. Abra o CMD e navegue até o diretório do MySQL Workbench:
cd C:\\Program Files\\MySQL\\MySQL Workbench 8.0 CE
2. Conectar ao servidor de banco de dados:
mysql -h [Link]
[Link] -u Aula01 -p
Quando solicitado, insira a senha: Aula01 .
Consultas com INNER JOIN
Selecionar detalhes de pedidos e informações de produtos (limite de 10
registros):
SELECT
[Link], [Link], [Link], [Link],
[Link], [Link], [Link]
FROM
purchaseorderdetail od
INNER JOIN
product p ON [Link] = [Link]
LIMIT 10;
Selecionar todas as subcategorias de produtos:
SELECT * FROM productsubcategory;
MySQL aula 04/jun 3
Selecionar detalhes de pedidos, informações de produtos e subcategorias:
SELECT
[Link], [Link], [Link], [Link],
[Link], [Link], [Link], [Link], [Link]
Price
FROM
purchaseorderdetail od
INNER JOIN
product p ON [Link] = [Link]
INNER JOIN
productsubcategory ps ON [Link] = p.P
roductSubcategoryID;
Filtrar detalhes de pedidos por data de entrega em 2004:
SELECT
[Link], [Link], [Link], [Link],
[Link], [Link], [Link], [Link], [Link]
Price
FROM
purchaseorderdetail od
INNER JOIN
product p ON [Link] = [Link]
INNER JOIN
productsubcategory ps ON [Link] = p.P
roductSubcategoryID
WHERE
[Link] BETWEEN '2004-01-01' AND '2004-12-31';
Criar e Usar uma View
Criar uma view para compras e produtos:
CREATE VIEW vw_compras_produto AS
SELECT
MySQL aula 04/jun 4
[Link], [Link], [Link], [Link],
[Link] AS product_name, [Link], [Link] A
S subcategory_name, [Link], [Link]
FROM
purchaseorderdetail od
INNER JOIN
product p ON [Link] = [Link]
INNER JOIN
productsubcategory ps ON [Link] = p.P
roductSubcategoryID;
Selecionar dados da view criada:
SELECT * FROM vw_compras_produto;
MySQL aula 04/jun 5
MySQL aula 11/jun
Criação de Tabela: tb_categoria
1. Criar a tabela tb_categoria :
CREATE TABLE tb_categoria (
codcat INT PRIMARY KEY AUTO_INCREMENT,
nome_cat VARCHAR(20),
dt_inclusao DATE DEFAULT CURRENT_TIMESTAMP
);
2. Mostrar todas as tabelas:
SHOW TABLES;
3. Excluir a tabela tb_categoria :
DROP TABLE tb_categoria;
Alterações na Tabela tb_produto
1. Adicionar a coluna codcat na tabela tb_produto :
ALTER TABLE tb_produto
ADD codcat INT;
2. Selecionar todos os registros da tabela tb_produto :
SELECT * FROM tb_produto;
3. Adicionar uma chave estrangeira na tabela tb_produto :
MySQL aula 11/jun 1
ALTER TABLE tb_produto
ADD CONSTRAINT fk_tb_produto
FOREIGN KEY (codcat) REFERENCES tb_categoria(codcat);
4. Excluir a chave estrangeira fk_tb_produto da tabela tb_produto :
ALTER TABLE tb_produto
DROP FOREIGN KEY fk_tb_produto;
ALTER TABLE tb_produto
DROP INDEX fk_tb_produto;
Inserções e Atualizações
1. Inserir registros na tabela tb_produto :
INSERT INTO tb_produto(codprod, nome_prod, cor_prod, tipo_
prod, qtd_estoque, dt_inclusao, codcat)
VALUES (10, 'cimento', 'cinza', 'A', 50, '2024-06-11', 1);
INSERT INTO tb_produto(codprod, nome_prod, cor_prod, tipo_
prod, qtd_estoque, dt_inclusao, codcat)
VALUES (12, 'tinta parede', 'azul', 'A', 30, '2024-06-11',
1);
2. Deletar um registro da tabela tb_produto :
DELETE FROM tb_produto WHERE codprod = 10;
3. Inserir registros na tabela tb_categoria :
INSERT INTO tb_categoria(nome_cat) VALUES ('PROMOCAO');
INSERT INTO tb_categoria(nome_cat) VALUES ('BALCAO');
INSERT INTO tb_categoria(nome_cat) VALUES ('SALDO');
MySQL aula 11/jun 2
4. Deletar um registro da tabela tb_categoria :
DELETE FROM tb_categoria WHERE nome_cat = 'SALDO';
5. Desativar atualizações seguras no MySQL:
SET SQL_SAFE_UPDATES = 0;
6. Deletar um registro específico da tabela tb_categoria :
DELETE FROM tb_categoria WHERE codcat = 1;
Correção de Comando UPDATE
1. Atualizar a tabela tb_produto com o nome de coluna correto:
UPDATE tb_produto SET codcat = 2 WHERE codprod IN (10, 1
2);
2. Selecionar todos os registros da tabela tb_produto :
SELECT * FROM tb_produto;
Alteração de Coluna
1. Alterar o nome de uma coluna na tabela tb_categoria :
ALTER TABLE tb_categoria
CHANGE COLUMN nome_cat nomecat VARCHAR(20) NULL DEFAULT NU
LL;
2. Selecionar todos os registros da tabela tb_categoria :
SELECT * FROM tb_categoria;
MySQL aula 11/jun 3
EXE
1-)criar uma tabela de fornecedores com alguns campos especificos
2-) inserir registros de fornecedores
3-)criar uma chave estrangeira na tabela de produtos que tenha ligação com a
tabela de fornecedores
MySQL aula 11/jun 4
MySQL aula 18/jun
Contagem de Registros
1. Contagem de Registros em Tabelas Específicas
SELECT COUNT(1) FROM salesorderdetail;
SELECT COUNT(1) FROM product;
SELECT COUNT(1) FROM purchaseorderdetail;
Estas consultas contam o número total de registros nas tabelas
salesorderdetail , product e purchaseorderdetail .
Agrupamento e Agregação
1. Contagem de Produtos por Cor
SELECT color, COUNT(1) FROM product GROUP BY color;
Conta o número de produtos agrupados por cor.
2. Contagem de Produtos por Classe
SELECT class, COUNT(1) FROM product GROUP BY class;
Conta o número de produtos agrupados por classe.
3. Contagem de Produtos por Classe com Nome Personalizado para Coluna
SELECT class, COUNT(1) AS qtde_registros FROM product GR
OUP BY class;
Conta o número de produtos agrupados por classe, renomeando a coluna
de contagem para qtde_registros .
4. Soma do Nível de Estoque Agrupado por Cor
MySQL aula 18/jun 1
SELECT color, SUM(safetystocklevel) AS soma_estoque FROM
product GROUP BY color;
Calcula a soma do nível de estoque de segurança agrupado por cor.
Junções e Seleções Detalhadas
1. Junção entre purchaseorderdetail e product
SELECT * FROM purchaseorderdetail po
INNER JOIN product p ON [Link] = [Link];
Seleciona todos os campos da tabela purchaseorderdetail e product onde os
IDs dos produtos coincidem.
2. Seleção de Todas as Subcategorias de Produto
SELECT * FROM productsubcategory;
Seleciona todos os registros da tabela productsubcategory .
3. Junção entre purchaseorderdetail , product e productsubcategory com Limite
SELECT * FROM purchaseorderdetail po
INNER JOIN product p ON [Link] = [Link]
INNER JOIN productsubcategory ps ON [Link]
yID = [Link]
LIMIT 10;
Seleciona os registros das tabelas purchaseorderdetail , product e
productsubcategoryonde os IDs correspondentes coincidem, limitando o
resultado a 10 registros.
Análises Financeiras e Temporais
1. Valor Total de Compras Agrupado por Subcategoria
SELECT [Link] AS subcategoria, SUM([Link]) AS val
or_total_compra
FROM purchaseorderdetail po
MySQL aula 18/jun 2
INNER JOIN product p ON [Link] = [Link]
INNER JOIN productsubcategory ps ON [Link]
yID = [Link]
GROUP BY [Link];
Calcula o valor total das compras agrupadas por subcategoria de produto.
2. Valor Total de Compras Agrupado por Subcategoria e Linha de Produto
SELECT [Link] AS subcategoria, [Link], SUM([Link]
netotal) AS valor_total_compra
FROM purchaseorderdetail po
INNER JOIN product p ON [Link] = [Link]
INNER JOIN productsubcategory ps ON [Link]
yID = [Link]
GROUP BY [Link], [Link];
Calcula o valor total das compras agrupadas por subcategoria de produto e
linha de produto.
3. Valor Total de Compras por Ano
SELECT YEAR([Link]) AS ano, SUM([Link]) AS val
or_total_compra
FROM purchaseorderdetail po
INNER JOIN product p ON [Link] = [Link]
INNER JOIN productsubcategory ps ON [Link]
yID = [Link]
GROUP BY YEAR([Link]);
Calcula o valor total das compras agrupadas por ano.
4. Valor Total de Vendas por Ano e Conta do Cliente
SELECT YEAR([Link]) AS ano, [Link], ROUND(SU
M([Link]), 2) AS valor_total_venda
FROM salesorderheader a
INNER JOIN salesorderdetail b ON [Link] = [Link]
sOrderID
MySQL aula 18/jun 3
INNER JOIN customer c ON [Link] = [Link]
GROUP BY YEAR([Link]), [Link];
Calcula o valor total das vendas agrupadas por ano e conta do cliente.
5. Valor Total de Compras por Ano e Mês
SELECT YEAR([Link]) AS ano, MONTH([Link]) AS me
s, SUM([Link]) AS valor_total_compra
FROM purchaseorderdetail po
INNER JOIN product p ON [Link] = [Link]
INNER JOIN productsubcategory ps ON [Link]
yID = [Link]
GROUP BY YEAR([Link]), MONTH([Link]);
Calcula o valor total das compras agrupadas por ano e mês.
6. Valor Total de Compras por Ano e Mês com Arredondamento
SELECT YEAR([Link]) AS ano, MONTH([Link]) AS me
s, ROUND(SUM([Link]), 2) AS valor_total_compra
FROM purchaseorderdetail po
INNER JOIN product p ON [Link] = [Link]
INNER JOIN productsubcategory ps ON [Link]
yID = [Link]
GROUP BY YEAR([Link]), MONTH([Link]);
Calcula o valor total das compras agrupadas por ano e mês, com os valores
arredondados para duas casas decimais.
7. Valor Total de Vendas no Ano de 2001
SELECT ROUND(SUM([Link]), 2) AS valor_total_venda
FROM salesorderheader a
INNER JOIN salesorderdetail b ON [Link] = [Link]
sOrderID
WHERE YEAR([Link]) = 2001;
Calcula o valor total das vendas no ano de 2001.
8. Valor Total de Vendas por Mês no Ano de 2002
MySQL aula 18/jun 4
SELECT MONTH([Link]) AS mes, ROUND(SUM([Link]),
2) AS valor_total_venda
FROM salesorderheader a
INNER JOIN salesorderdetail b ON [Link] = [Link]
sOrderID
WHERE YEAR([Link]) = 2002
GROUP BY MONTH([Link]);
Calcula o valor total das vendas agrupadas por mês no ano de 2002.
Observações
As consultas fazem uso de funções agregadas como SUM() , COUNT() ,
ROUND() e cláusulas GROUP BY para agrupar e sumarizar os dados.
As junções ( INNER JOIN ) são utilizadas para combinar dados de várias
tabelas relacionadas.
Certifique-se de que as tabelas salesorderdetail , product , purchaseorderdetail ,
productsubcategory , salesorderheader , customer existam e tenham os dados
corretos antes de executar estas consultas.
Ajuste as consultas conforme necessário para corresponder à estrutura e
aos nomes das suas tabelas e colunas.
MySQL aula 18/jun 5