Mysql Completo
Mysql Completo
O SQL foi desenvolvido originalmente nos laboratórios da IBM no início dos anos 70 e teve sua
maior performance quando a Oracle entrou no mercado.
A linguagem SQL veio com o objetivo de padronizar a forma como os dados são consultados
em banco de dados relacionais.
Podemos dizer que existem algumas vantagens ao aprender a linguagem SEQUEL onde a
primeira é padronização e o aprendizado.
O profissional que sabe SQL, por exemplo, da Oracle, facilmente vai utilizar o SQL server da
Microsoft, já que existem poucas diferenças da sintaxe usada, principalmente no que se diz
respeito às funções.
A portabilidade também é outro fator super relevante já que fica fácil se migrar do Mysql para
o Oracle, SQL server, ou vice-versa. Claro que essa portabilidade fica mais fácil quando se é
programador e faz o seu código mais próximo do ANSI (órgão americano) que formou padrões
para consultas de banco de dados relacionais no início dos anos 80.
Como existe um padrão na linguagem apenas como algumas diferenças, empresas acabam
optando por qual banco de dados usar a partir de critérios como performance, hardware,
custos e etc.
Apesar da padronização ser uma vantagem ela também nos trás uma desvantagem que é a
falta de criatividade e por isso banco de dados do tipo NOSQL acabaram surgindo e
principalmente por causa do BIG DATA que acaba englobando um oceano de informações que
também como origens as mídias sociais. Detalhe que acabam fugindo do padrão ANSI.
DDL – parte da linguagem que permite a manipulação da estrutura do banco de dados, como
criar o próprio, tabelas, índices, apagar e alterar política de crescimento do índice.
DML – responsável por gerenciar o banco de dados, como incluir, alterar, excluir informações
que estão dentro das estruturas do banco, como por exemplo as tabelas, claro que também
fazer as consultas e exibi-las aos usuários.
DCL – parte dos controles que permite toda a administração do banco de dados como controle
de acesso, gerenciamento de usuários, como vai ser feito seu armazenamento em disco, onde
será armazenado e assim por diante.
Selecionando datas.
SELECT * FROM tbcliente WHERE DATA_NASCIMENTO > ‘1995-01-13’;
Ou acesse a IDE DO Mysql Workbench, clique em FILE, RUN SQL SCRIPT, escolha o arquivo,
SELECIONE O BANCO e em seguida o tipo de DEFAULT CHARACTER SET e inicie a carga dos
dados.
SELECT * FROM tabela_de_produtos WHERE NOT (SABOR = ‘Manga’ OR TAMANHO = ‘470 ml’);
a saída são todos os produtos que não possuem sabor manga ou que tenham então a medida
de 470 ml.
select CPF, COUNT (*) FROM notas_fiscais WHERE YEAR(DATA_VENDA) = 2016 GROUP BY
CPF HAVING COUNT (*) > 2000 ORDER BY COUNT (*) DESC; primeiro selecionamos o cpf e a
quantidade de vezes que ele aparece, isso o retorno da um erro, então agrupamos por cpf e
fica ok. Em seguida filtramos por ano e em seguida usamos um HAVING “filtro extra” para
selecionar apenas os que tinham mais de 2 mil compras e os colocamos em ordem do maior
para o menor.
SELECT EMBALAGEM,
CASE
WHEN PRECO_DE_LISTA >= 12 THEN 'PRODUTO CARO'
WHEN PRECO_DE_LISTA >=7 AND PRECO_DE_LISTA < 12 THEN 'PRODUTO EM CONTA'
ELSE 'PRODUTO BARATO'
END AS STATUS_PRECO, AVG(PRECO_DE_LISTA) AS PRECO_MEDIO
FROM tabela_de_produtos WHERE SABOR = 'Manga' GROUP BY EMBALAGEM,
CASE
WHEN PRECO_DE_LISTA >= 12 THEN 'PRODUTO CARO'
WHEN PRECO_DE_LISTA >=7 AND PRECO_DE_LISTA < 12 THEN 'PRODUTO EM CONTA'
ELSE 'PRODUTO BARATO'
END;
Resultado = Garrafa, produto barato, 5.17 | Garrafa, produto em conta, 7.7 | Lata... etc. TUDO
sobre sabor MANGA!
LEFT JOIN.
SELECT DISTINCT A.CPF, A. NOME, B.CPF FROM tabela_de_clientes A LEFT JOIN
notas_fiscais B ON A.CPF = B.CPF WHERE B.CPF IS NULL;
RIGHT JOIN.
SELECT DISTINCT A.CPF, A. NOME, B.CPF FROM notas_fiscais A LEFT JOIN
tabela_de_clientes B ON A.CPF = B.CPF WHERE B.CPF IS NULL; somente inverti as ordens das
tabelas para um exemplo prático.
CURSO 3 MYSQL
Criando um banco de dados.
CREATE DATABASE IF NOT EXIST vendas_sucos DEFAULT CHARACTER SET UTF-8;
Inserindo valores na tabela atual com dados de uma outra tabela de um outro banco de
dados, onde os dados já transferidos que já estão contidos na tabela não sejam perdidos.
INSERT INTO produtos
SELECT CODIGO_DO_PRODUTO AS CODIGO, NOME_DO_PRODUTO AS DESCRITOR, SABOR,
TAMANHO, EMBALAGEM,
PRECO_DE_LISTA AS PRECO_LISTA FROM sucos_vendas.tabela_de_produtos
WHERE CODIGO_DO_PRODUTO NOT IN (SELECT CODIGO FROM vendas_sucos.produtos);
Alterando valores de um registro específico.
UPDATE produtos SET EMBALAGEM = 'PET', TAMANHO = '1 litro', DESCRITOR = 'Sabor da
Montanha - 1 Litro - Uva' WHERE CODIGO = '1000889';
Alterando valores de uma coluna específica com uso de dados em lote de uma outra tabela
de um outro banco de dados.
UPDATE vendedores A INNER JOIN sucos_vendas.tabela_de_vendedores B
ON A.MATRICULA = substring(B.MATRICULA, 3, 3)
SET A.FERIAS = B.DE_FERIAS;
Alterando valores de uma coluna baseado em dados de lote de uma outra tabela de outro
banco de dados onde os campos específicos são os bairros.
UPDATE clientes A INNER JOIN vendedores B ON A.BAIRRO = B.BAIRRO
SET VOLUME_COMPRA = VOLUME_COMPRA * 1.30;
NOTA IMPORTANTE: Na criação de duas tabelas onde uma é nota fiscal e uma outra onde se
tem o detalhes tais como o código do produto, seu preço e quantidade vendida, é importante
informar que apenas a primeira tabela tem uma PK e depois informar em uma query a
seguinte informação: onde itens_notas faz referente ao FK da tabela notas! IMPORTANTE!
DELIMITER //
CREATE TRIGGER tg_calcula_faturamento_insert AFTER INSERT ON itens_notas
FOR EACH ROW BEGIN
DELETE FROM tab_faturamento;
INSERT INTO tab_faturamento
SELECT A.DATA_VENDA, SUM(B.QUANTIDADE * B.PRECO) AS TOTAL_VENDA FROM
notas A INNER JOIN itens_notas B ON A.NUMERO = B.NUMERO GROUP BY A.DATA_VENDA;
END //
Exemplo:
CREATE TRIGGER tg_calcula_faturamento_update AFTER UPDATE ON itens_notas
CREATE TRIGGER tg_calcula_faturamento_delete AFTER DELETE ON itens_notas
CURSO 4 MYSQL
Trabalhando com Procedures – Exemplo 1.
USE `sucos_vendas`;
DROP procedure IF EXISTS `oi_mundo_2`;
DELIMITER $$
USE `sucos_vendas`$$
CREATE PROCEDURE `oi_mundo_2`()
BEGIN
SELECT 'Oi Mundo! Estou aqui pela segunda vez!' AS MENSAGEM;
END$$
Exemplo 2.
USE `sucos_vendas`$$
CREATE PROCEDURE `data_local` ()
BEGIN
declare ts datetime default localtimestamp();
select ts;
END$$
call data_local;
Exemplo 3.
USE sucos_vendas;
DROP procedure IF EXISTS `Exerc01`;
DELIMITER $$
USE `sucos_vendas`$$
CREATE PROCEDURE `Exerc01`()
BEGIN
DECLARE Cliente VARCHAR(10);
DECLARE Idade INT;
DECLARE DataNascimento DATE;
DECLARE Custo FLOAT;
SELECT Cliente;
SELECT Idade;
SELECT DataNascimento;
SELECT Custo;
END $$
call Exerc01;
NOTA: as condições IF podem ser alteradas para CASE, segue o exemplo aplicado:
CASE
WHEN NUMNOTAS > 70 THEN SET msgdevolve = ‘Muita Nota’;
ELSE
Msgdevolve = ‘Pouca Nota’;
END CASE;
Exemplo 05 Usando IF THEN ELSEIF.
END
Call looping_while(1, 10); sua saída será 10 registros contendo em cada um número, 1, 2...10.
call acha_sabor_produto('1000889');
APLICANDO O INDEX.
TIRANDO O INDEX.
NORMALIZAÇÃO
DOS DADOS
CRIADO UMA TABELA JÁ COM O ÍNDICE.
APAGANDO UM INDEX.
A primeira forma normal diz que todos os atríbutos devem ter apenas um único
correspondente, ou seja, não existem grupos repetidos ou campos que possuam mais de um
único valor.
Código | Telefone
1001 | 3362155412
1001 | 2363214141
A segunda forma normal diz que devemos localizar os valores que dependem parcialmente da
chave primária, segue o exemplo:
Podemos dizer que se não tivermos o código de locação podemos identificar o titulo do filme
pelo código do filme? SIM, então é uma dependência PARCIAL.
Podemos dizer que se não tivermos o código do filme, mas termos o código da locação
podemos identificar o titulo do filme? SIM, então também é uma dependência PARCIAL.
Podemos dizer que conseguimos identificar a data da devolução apenas com o código do
filme? NÃO! Conseguimos identificar a data de devolução pelo código da locação? SIM, ou
seja, temos aqui uma dependência TOTAL.
Conseguimos identificar o cliente pelo código do filme? NÃO! Conseguimos identificar o cliente
pelo código da locação? SIM, ou seja, uma outra dependência TOTAL.
Cd_filme | titulo_filme
201 | The Matrix
302 | O Grito
A terceira forma normal diz que se encontrarmos um atributo não chave dependente de outro
atributo da mesma natureza, ou seja, também não chave devemos jogá-los em outra tabela,
isso se toda a tabela já se encontrar na primeira e segunda forma normal.
Podemos dizer que nome da fábrica é totalmente dependente do código da fábrica que não é
uma chave-primária (PLACA NESSA TABELA) então:
Tabela fabricantes:
Cod_fabr | nome_fabr
ENTIDADE
ATRIBUTOS
RELACIONAMENTOS
Modelos de dados, esquemas e instâncias.
MODELOS DE ALTO NÍVEL: oferece informações mais próxima do mundo real, focando nos
usuários finais.
MODELOS DE BAIXO NÍVEL: focados para especialista de banco de dados, chamado de DBA.
O esquema do BD refere-se a sua descrição e que normalmente não muda e sim somente o
seu conteúdo e isso sim com uma certa frequência.
PROJETO CONCEITUAL: um esquema de descreve de forma clara baseado nos requisitos dos
usuários os tipos de entidades, atributos e relacionamentos e restrições que vão ser
implementadas ao BD. PARTE DE APROVAÇÃO por parte dos clientes, projetistas ou usários.
ENTIDADE: representa uma coisa ou um objeto do mundo real com uma existência
independente.
ATRIBUTO: são características de uma entidade e podem ser físicas como endereço e idade ou
ainda conceituais como o nome e cargo.