Você está na página 1de 60

Pai MySQL CURSO 2.

AULA 1 CRIANDO UM BANDO DE DADOS

PARA CRIAR UM NOVO BANCO DE DADOS

CREATE DATABASE [IF NOT EXISTS] NOME_bd;

O elemento IF NOT EXISTS opcional. Ele previne o erro

de tentar criar um bando de dados que j existe no servidor.

No possvel ter dois bancos de dados com o mesmo nome.

Exemplo:

CREATE DATABASE db_Biblioteca;

VERIFICAR O BANCO DE DADOS:

Podemos verificar os bancos de dados existentes com o comando

SHOW DATABASES;

COMANDO USE:

O comando USE instruiu o SGBDR a utilizar o banco de dados especificado para rodar os
comandos.

SINTAXE:

USE nome_banco_de_dados;
Para visualizar o banco de dados selecionado no momento:

SELECT DATABASE();

EXCLUIR BANCO DE DADOS:

Podemos excluir um banco de dados existente com o comando:

DROP DATABASE [IF EXISTS] nome_BD;

[IF EXISTS] Opcional, caso tente excluir um banco de dados

que no existe.

AULA 2 CONSTRAINTS (RESTRIES) PRIMARY KEY, FK, DEFAULT, ETC


SQL CONSTRAINTS(RESTRIES)

- Restries so regras aplicadas nas colunas de uma Tabela

- So usadas para limitar os tipos de dados que so inseridos.

- Podem ser especificadas no momento da criao da tabela

(CREATE) ou aps a tabela ter sido criada.(ALTER).

SQL CONSTRAINTS(RESTRIES)

NOT NULL

- A constraint NOT NULL impe a uma coluna a NO aceitar valores NULL.

- A constraint NOT NULL obriga um campo a sempre possuir um valor.

- Deste modo, no possvel inserir um registro(Ou atualizar) sem entrar com um valor neste
campo.
UNIQUE

- A restrio UNIQUE identifica de forma nica de cada registro em uma tabela de um banco
de dados.

- As constraints UNIQUE e PRIMARY KEY garantem a unicidade em uma coluna ou conjunto de


colunas.

- Uma constraint PRIMARY KEY automaticamente possui uma restrio UNIQUE definida.

- Voc pode ter vrias constraints UNIQUE em uma tabela, mas apenas uma chave Primria
por tabela.

PRIMARY KEY

- A PRIMARY KEY identificar de forma nica cada registro em uma tabela de banco de dados.

- Chaves Primrias devem conter valores nicos.

- Uma coluna de chave primria no pode conter valores NOT NULL

- Cada tabela deve ter uma chave primaria e apenas uma chave primria.

FOREIGN KEY

Uma FOREIGN KEY (Chave estrangeira) em uma tabela um campo que aponta para uma
chave primria em outra tabela.

CONSTRAINT fk_ID_Autor FOREIGN KEY(ID_Autor)

REFERENCES tbl_autores(ID_Autor)

DEFAULT

- A restrio DEFAULT usada para inserir um valor padro em uma coluna.

- O valor padro ser adicionado a todos os novos registros, caso nenhum outro valor seja
especificado.
AULA 2 CRIAO DE TABELAS CREATE TABLES
Para criar tabelas, usamos o comando CREATE TABLES;

CREATE TABLE [IF NOT EXISTS] nome_tabela(

Coluna tipo_dados constraints

CRIAR TABELAS:

Primeiro certifique-se de que est utilizando o banco de dados correto para isso use o
comando:

USE db_Biblioteca; = Banco utilizado no momento.

CRIANDO TABELAS:

[IF NOT EXISTS] UMA CLUSULA OPCIONAL PARA EVITAR CRIAR TABELAS COM O MESMO
NOME EM UM BANCO DE DADOS, A UTILIAZO OPCIONAL.

SINTAXE:

CREATE TABLE IF NOT EXISTS tbl_Livro;

CRIANDO UMA TABELA COMPLETA:

CREATE TABLE [IF NOT EXISTS] tbl_Livro(

ID_Livro SMALLINT AUTO_INCREMENT PRIMARY KEY,

Nome_Livro VARCHAR(50) NOT NULL,

ISBN VARCHAR(30) NOT NULL,

ID_Autor SMALLINT NOT NULL,

Data_Pub DATE NOT NULL,

Preco_Livro DECIMAL NOT NULL

);

SHOW TABLES; = Mostra as tabelas do banco de dados.


CRIANDO OUTRAS TABELAS:

CREATE TABLE tbl_autores(

ID_Autor SMALLINT PRIMARY KEY,

Nome_Autor VARCHAR(50),

Sobrenome_Autor VARCHAR(60)

);

CREATE TABLE tbl_editoras(

ID_Editora SMALLINT PRIMARY KEY AUTO_INCREMENT,

Nome_Editora VARCHAR(50)NOT NULL

);

AULA 3 AUTO INCREMENTO DE VALORES EM COLUNAS


AUTO_INCREMENT

- O auto incremento permite que um nmero nico seja gerado quando um novo registro
inserido em uma tabela.

- Em MySQL trata-se da palavra chave AUTO_INCREMENT, cujo valor inicial padro 1, e se


incrementa em 1.

- Para que o valor da coluna se inicie em 100, por exemplo use:

AUTO_INCREMENT = 100;

- Ao inserir valores na tabela, no necessrio especificar o valor para a coluna de auto-


incremento.

- S permitido usar uma coluna de auto incremento por tabela, geralmente do tipo inteiro.

- Necessita tambm da constraint NOT NULL(Configurado automaticamente)


INCREMENTO EXEMPLO:

CREATE TABLE tbl_teste_incremento(

Codigo SMALLINT PRIMARY KEY AUTO_INCREMENT,

Nome VARCHAR(20) NOT NULL

)AUTO _INCREMENT =15;

INSERINDO REGISTROS NA TABELA DO BANCO DE DADOS:

INSERT INTO tbl_teste_incremento (Nome) VALUES (Ana);

INSERT INTO tbl_teste_incremento (Nome) VALUES (Maria);

INSERT INTO tbl_teste_incremento (Nome) VALUES (Julia);

INSERT INTO tbl_teste_incremento (Nome) VALUES (Joana);

SELECIONANDO A TABELA:

SELECT * FROM tbl_teste_incremento; // vai mostrar o contedo da tabela//

SHOW TABLES; // Vai mostrar as tabelas do banco de dados selecionado:

VERIFICAR O VALOR ATUAL DO AUTO INCREMENTO:

Podemos verificar o valor de incremento mais atual armazenado em uma tabela no banco de
dados com o comando a seguir:

SELECT MAX(nome_da_coluna_com_auto_increment)

FROM tbl_tabela;

EXEMPLO:

SELECT MAX(ID_Livro)

FROM tbl_Livro;

ALTERAR O PRXIMO VALOR NO CAMPO DE AUTO-INCREMENTO:

Para alterar o valor de incremento do prximo registro a ser armazenado em uma tabela, use o
comando a seguir:
ALTER TABLE tabela AUTO_INCREMENT =valor;

Ex: Usar o valor 90 a partir do prximo registro:

ALTER TABLE tbl_teste_incremento

AUTO_INCREMENT =90;

AULA 4 ALTERAR TABELAS ALTER TABLE E VISUALIZAR


RELACIONAMENTOS
- possvel alterar a estrutura de uma tabela aps ter sido criada, acrescentando ou excluindo
atributos(COLUNAS)

- Usamos o comando ALTER TABLE

EXCLUINDO COLUNAS DE UMA TABELA:

ALTER TABLE DROP:

EXEMPLO:

ALTER TABLE tabela

DROP COLUMN coluna;

EXEMPLO PRTICO:

ALTER TABLE tbl_Livro

DROP COLUMN ID_autor;

PODE-SE EXCLUIR UMA CHAVE PRIMARIA TAMBM:

ALTER TABLE tbl_Livro

DROP PRIMARY KEY; //Nesse caso no precisa especificar o campo da chave primaria dessa
tabela//
ADICIONAR COLUNAS:

ALTER TABLE ADD DICIONANDO COLUNAS EM UMA DETERMINADA TABELA:

Exemplo:

ALTER TABLE tbl_Livro

ADD ID_Autor SMALLINT NULL; //adicionando a coluna(tupla/coluna) na tabela livro que do


tipo SMALLINT um valor do tipo de dado inteiro.

RELACIONAMENTO:

EXEMPLO:

ALTER TABLE tbl_Livro //alterando dados da tbl_Livro

ADD CONSTRAINT fk_ID_Autor //adicionando restrio e nomeando essa restrio

FOREIGN KEY(ID_Autor) //chave estrangeira coluna (ID_Autor)

REFERENCES tbl_autores(ID_autor); //referencia a tbl_autores e coluna(ID_autor)

ALTER TABLE ADD PK chave primria.

ALTER TABLE Clientes //Nome da tabela

ADD PRIMARY KEY(ID_Cliente)//adicionando a chave primria ao campo (ID_Cliente)

OBERVAO:

A coluna ID_Cliente deve existir antes de ser transformada em chave primria.

A coluna ID_Cliente receber a Constraint (Restrio)Primary Key, e passar a ser chave


primria da tabela.
AULA 5 INSERIR DADOS EM TABELAS
INSERIR DADOS

INSERIR DADOS EM UMA TABELA:

INSERT INTO tabela(coluna1,coluna2, coluna3,...)VALUES(valor1,valor2,valor3...);

Exemplo:

USE db_Biblioteca;

INSERT INTO tbl_autores(ID_Autor, Nome_Autor,


SobreNome_Autor)VALUES(1,'Daniel','Barret');

INSERT INTO tbl_autores(ID_Autor, Nome_Autor,


SobreNome_Autor)VALUES(2,'Gerald','CARTER');

INSERT INTO tbl_autores(ID_Autor, Nome_Autor,


SobreNome_Autor)VALUES(3,'Mark','Sobell');

INSERT INTO tbl_autores(ID_Autor, Nome_Autor,


SobreNome_Autor)VALUES(4,'William','Stanek');

INSERT INTO tbl_autores(ID_Autor, Nome_Autor,


SobreNome_Autor)VALUES(5,'Richard','Blum');

INSERT INTO tbl_editoras(Nome_Editora)VALUES('Prentice Hall');

INSERT INTO tbl_editoras(Nome_Editora)VALUES('O Reilly');

INSERT INTO tbl_editoras(Nome_editora)VALUES('Microsoft Press');

INSERT INTO tbl_editoras(Nome_editora)VALUES('Wiley');

SELECT*FROM tbl_autores;

AULA 6 CONSULTAS SIMPLES EM TABELAS

SELETEC coluna FROM tabela;

EXEMPLO:

Retorna todos os nomes dos autores da coluna Nome_Autor da tbl_autores.

SELECT Nome_Autor FROM tbl_Autores;


Retorna todas as colunas da tabela de autores por conta do*.

SELECT* FROM tbl_Autores;

Retorna todos os nomes dos livros da coluna Nome_Livro, da tbl_Livro.

SELECT Nome_Livro FROM tbl_Livro;

ESPECIFICANDO COLUNAS:

SELECT coluna1, coluna2, coluna3 FROM tabela;

EXEMPLO:

SELECT Nome_Livro, ID_Autor FROM tbl_Livro;

SELECT Nome_Livro, ISBN FROM tbl_Livro;

SELECT Nome_Livro, ISBN, Data_Pub, Preco_Livro FROM tbl_Livro;

AULA 7 ORDER BY CONSULTAS COM ORDENAO


A palavra-chave ORDER BY usada para ordenar o conjunto resultado de registros.

ASC Ordem ascendente

DESC Ordem descendente(inversa)

SELECT*FROM tbl_Livro

ORDER BY Nome_Livro ASC;

ASC = CRESCENTE

DESC = DECRESCENTE

SELECT*FROM tbl_Livro

ORDER BY Nome_Livro DESC;


SELECT colunas FROM tabela

ORDER BY coluna_a_ordenar;

Exemplo:

(Ordem crescente)

SELECT Nome_Livro, ID_Editora FROM tbl_Livro ORDER BY ID_Editora ASC;(ASC um


elemento opcional, pois por padro a consulta com ASC j automatica)

(Ordem decrescente)

SELECT Nome_Livro, Preco_Livro FROM tbl_Livro ORDER BY Preco_Livro DESC;

AULA 8 WHERE FILTRAR RESULTADOS DE CONSULTAS


Clusula WHERE

Permite filtrar registros em uma consulta.

SINTAXE

SELECT colunas FROM tabela WHERE coluna valor;

EXEMPLO:

SELECT Nome_Livro, Data_Pub FROM tbl_Livro WHERE ID_Autor =1;

SELECT ID_Autor, Nome_Autor, FROM tbl_autores WHERE Sobrenome_Autor =Stanek;

AULA 9 AND OR e NOT FILTRAR RESULTADOS DE CONSULTAS


- Usados para filtrar registros baseados em mais de uma condio.

- O operador AND mostra um registro se ambas as condies forem verdadeiras

- O operador OR mostra um registro se pelo menos uma das condies for verdadeira.

- O operador NOT a negao de uma expresso.

EXEMPLO OPERADORES AND E OR

SELECT*FROM tbl_Livro WHERE ID_Livro > 2 AND ID_Autor < 3;

SELECT*FROM tbl_Livro WHERE ID_Livro > 3 AND NOT ID_Autor > 3;

SELETC*FROM tbl_Livro WHERE ID_Livro > 2 AND NOT ID_Autor > 3;

AULA 10 DELET E TRUNCATE TABLE EXCLUIR REGISTROS DE UMA


TABELA
O COMANDO DELETE REMOVE AS LINHAS UMA COLUNA

SINTAXE:

DELETE FROM tabela WHERE COLUNA = valor;

EXEMPLO:

DELETE FROM tbl_autores WHERE ID_Autor =2;

OBSERVAO:

Sempre use a clusula WHERE para evitar a perda de dados da tabela !

TRUNCATE TABLE

- Remove todas as linhas de uma tabela sem registrar as excluses de linhas individuais.

Mais eficiente do que a clusula DELETE. Para excluso de registros em massa.

-TRUNCATE TABLE como a instruo DELETE sem usar a clusula WHERE.

- Entretanto utiliza menos recursos de sistema e log de transaes.


EXEMPLO:

Excluir todos os registros da tabela tbl_teste_incremento;

SINTAXE:

TRUNCATE TABLE tabela;

ZERAR TABELA tbl_teste_incremento;

TRUNCATE TABLE tbl_teste_incremento;

AULA 11 ALIAS COM AS NOMES ALTERNATIVOS PARA COLUNAS E


TABELAS
SQL ALIAS

Pode-se dar um nome diferente a uma coluna ou tabela em consulta.

SELECT colunas AS alias_coluna

FROM tabela AS alias_tabela;

SELECT Nome_Livro AS Livro FROM Livro;

EXEMPLO:

SELECT Nome_Livro AS Livros FROM tbl_Livro;

PODEMOS CRIAR OS ALIAS PARA CADA COLUNA SEPARANDO POR VRGULAS:

SELECT Nome_Livro AS Livros, Preco_Livro AS Preo

FROM tbl_Livro;

AULA 12 FUNES DE AGREGAO (MAX, MIN, AVG COUNT, SUM)


Funes de agregao so funes SQL que permitem executar uma operao aritmtica Nos
valores de uma coluna em todos os registros de uma tabela.

Retornam um valor nico baseado em um conjunto de valores.

SINTAXE:
funo(ALL | DISCTINCT expresso)

FUNES DE AGREGAO

MIN = Valor Mnimo

MAX = Valor Mximo

AVG = Mdia Aritmtica

SUM = Total (Soma)

COUNT = Contar quantidade de itens.

EXEMPLO:

Fazendo a contagem de todos os registros da tabela

SELECT COUNT(*)FROM tbl_autores;

Fazendo a contagem de registros distintos da tabela

SELECT COUNT(DISTINCT ID_autor)FROM tbl_Livro;

Retorna o preo mais alto da coluna Preco_Livro;

SELECT MAX(Preco_Livro) FROM tbl_Livro;

Retorna o preo mais baixo da coluna Preco_Livro;

SELECT MIN(Preco_Livro)FROM Preco_Livro;

Retorna a mdia da coluna Preco_Livros da tabela tbl_Livro;

SELECT AVG(Preco_Livro)FROM tbl_Livro;

Retorna o total gasto para comprar todos os livros da tabela tbl_Livro

SELECT SUM(Preco_Livro)FROM tbl_Livro;

AULA 13 RENOMEAR TABELAS COM RENAME TABLE

ATUALIZAR REGISROS

Use o comando RENAME TABLE:

EXEMPLO:
RENAME TABLE Cliente TO Meus_Clientes;

Clientes: Nome Atual

Meus_Clientes: Novo Nome

AULA 14 UPDATE MODIFICAR REGISTROS


UPDATE tabela

SET coluna = novo_valor_armazenado

WHERE coluna = valor_filtro;

OBSERVAO:

Caso no seja usada a clusula WHERE para filtrar os registros, todos os dados da coluna sero
alterados.

ATUALIAZR REGISTROS EXEMPLOS:

UPDATE tbl_Livro // nome da tabela

SET Nome_Livro =SSH, o Shell Seguro//nome da coluna e novo valor

WHERE ID_Livro =2;// o valor que ser filtrado

Nome_Livro = Nome da coluna

Apenas linhas cujo ID_Livro for igual a 101 tero o valor alterado

EXEMPLO 2 ALTERANDO REGISTRO DA COLUNA DE SOBRENOME DA TABELA TBL_AUTORES

UPDATE tbl_autores

SET Sobrenome_Autor = 'Carter'

WHERE ID_Autor =2;

SELECT*FROM tbl_autores;
AULA 15 SELEO DE INTERVALOS EM CONSULTAS

SELECT colunas FROM tabela_Livro

WHERE DATA_Pub BETWEEN 20040517 AND 20110517;

SELECT*FROM tbl_Livro

WHERE Data_Pub BETWEEN 20040517 AND

20110517;

SELECT Nome_Livro AS Livro, Preco_Livro AS Preo

FROM tbl_Livro

WHERE Preco_Livro BETWEEN 40.00 AND 60.00;

AULA 16 LIKE E NOT LIKE PADRO DE CARACTERES EM CONSULTAS


LIKE E NOT LIKE

Determina se uma cadeia de caracteres especfica corresponde a um padro especificado. UM


padro pode incluir caracteres normais e curingas.

NOT LIKE inverte a comparao verificando se a cadeia de caracteres NO corresponde ao


padro especificado.

LIKE PADRES ESPECFICOS

(Metacaracteres)

%-- Qualquer cadeia de 0 ou mais caracteres

- -- Sublinhado: Qualquer caractere nico.

USANDO O LIKE

Retornando o valor apenas para livros que comeam com a letra F

SELECT*FROM Livro

WHERE Nome_Livro LIKE F%;


Retornando o valor apenas para livros que no comeam com S

SELECT*FROM Livro

WHERE Nome_Livro NOT LIKE S%;

Retornando o valor apenas para livros que possuem a segunda letra como I

SELECT Nome_Livro

FROM Livro

WHERE Nome_Livro LIKE _i%;

AULA 16 REGEXP EXPRESSES IRRREGULARES EM CONSULTAS

O MySQL suporta um tipo de operao de busca de padres baseada em expresses regulares


com o operador REGEXP

[...] -- Qualquer carter nico no intervalo ou conjunto especificado([a-h];[aeiou])

[^...]Qualquer carter nico que no esteja n o intervalo ou conjunto especificado

([^a-h];[^aeiou])

^ -- Incio da string

$ -- Fim da string

A |a|c Alterao (a ou b ou c)

Retorna os livros que comeam com (F S)

SELECT Nome_Livro FROM Livro

WHERE Nome_Livro REGEXP '^[FS]';

Retorna todos os livros, negando (F S)

SELECT Nome_Livro FROM Livro

WHERE Nome_Livro REGEXP '^[^FS]';


Retorna os livros entre N e G colocando o cifro ele trs o livro

SELECT Nome_Livro FROM Livro

WHERE Nome_Livro REGEXP '[ng]$';

Retorna os livros que comeam com F ou S ou M I

SELECT Nome_Livro FROM Livro

WHERE Nome_Livro REGEXP '^[FS][Mi';

AULA 17 EXPRESSES IRREGULARES


EXPRESSES IRREGULARES:

METACARACTERES:

Metacaracteres caracteres que possuem significados especiais.

Transformam caracteres literais (comuns) em expresses de busca.

SO OS SEGUINTES:

\.*+-{}[]^|():!=

Os metacaracteres podem ter mais de um significado dependendo do contexto de uso.

Observao : ASPAS NO SO METACARATERES

Caractere nico:

O ponto . representa qualquer caractere nico .


Caractere de escape:

Trata-se de um metacaractere \ que indica a mudana no significado de outro caractere.

Transformando um metacaractere um caractere comum.

CLASSSES DE CARACTERES E CONJUNTOS

Listas de caracteres escritas dentro de colchetes [], servem para corresponder apenas um dos
caracteres listados.

- Permite selecionar um dos caracteres dentro dos colchetes, no importa a ordem


Exemplo: [AF] Tudo o que tiver dentro de um texto que possui as letras AF sero procuradas

Palavras com essas duas letras individualmente. Ou de [A-Z] de A at Z pois o trao tambm
um metacaractere, localizando tudo o que de A at Z maisculo [A Za z] e assim por diante.

Expresses POSIX:

[[:alpha:]] Qualquer caractere alfabticos = alfanumricos.

Equivale a a zA-Z

Ou [[:upper:]] A-Z

[[:lower:]] a - z

[[:digit:]] 0 - 9

[[:alnum:]] 0 -9 zA Z

[[:space:]] espaos

m[ae]u vai encontrar essas letras para formar palavras em um texto

exemplo: meu mal

m[^ae]u vai colocar letras que no comecei nem com A e nem com E

[^aeiou] vai encontrar tudo em um texto que no seja igual a AEIOU.

Podemos utilizar metacaracteres dentro dos colchetes

[.] OU [\.]

NCORAS DE INCIO E FIM DE LINHA:

Metacaracteres ncoras

-Usados para representar caracteres no incio ou no final de uma linha.

Incio de linha ^

Final de linha: $

^abc = Incio da linha

abc $ = Final da linha

^[NH] linhas que comecem com NH no incio da linha

LOCALIZAR LINHAS VAZIAS

^$ Qualquer coisa que comece e finalize com uma linha vazia

REPETIO DE CARACTERES ZERO, UMA OU MAIS VEZES:


Metacaractere Significado

* Item precendente 0 ou mais vezes

\+ Item precendente uma ou mais vezes

\? Item precendente 0 ou 1 vez


EXEMPLOS:

Laranjas* Precendente que possua uma letra S 0 ou mais vezes do caractere anterior no
nosso caso a letra S

Laranjas+ Precendente uma ou mais vezes a letra S

Laranjas? Precendente que possua 0 ou uma vez a letra S

METACARACTERE \w

\w= um caractere qualquer que faa parte de uma palavra.

EXEMPLOS:

Procurar um endereo de e-mail:

\w localiza tudo menos os espaos e caracteres especiais

Contato.pablo7@gmail.com

S ir localizar os nomes e a letra 7

Porm para que ele localize as palavras inteiras:

\w+ ele ir localizar todo o endereo demais o arroba

\w+@\w+\.\w+\.\w+ localizando o e-mail completo

Ou \w+@\w+\.com\.br

REPETIO QUANTIFICADA DE CARACTERES:

Chaves so utilizadas para repeties quantificadas.

{x} Item anterior corresponde exatamente x vezes

{x,} Item anterior correspondente ao menos x vezes

{x,y} Item corresponde entre x e y vezes

EXEMPLO:
R{2} A letra R ser repetida duas vezes em um texto , encontrando o caractere que possui
essas duas letras RR

[0 -9]{4}[0-9]{4} localiza os nmeros de um texto com repetio de 4 vezes.

Para um CPF por exemplo 333.777.888-73

EXEMPLO:

\d{3}\.\d{3}\.\d{3}-\d{2} FORMATO DO CPF

Sequncia de 3,5 caracteres com \w

\w{3,5} IR LOCALIZAR PALAVRAS COM ESSA SEQUNCIAS NMERICAS

Sequncias com espao:

\w{3}\s

METACARACTERE \S

Simboliza um espao em branco.

EXEMPLO:

Espao, caracteres de 3 a 5 e espao no final

\s\w{3,5}\s

AGRUPAMENTO DDE CARACTERES:

METACARACTERE: ()

Permitem agrupar partes de uma expresso:

Aplicar operadores de repetio a um grupo

NO PODE-SE USAR ESSES OPERADORES DENTRO DE CONJUNTOS DE CARACATERES, POIS


TEM SIGNIFICADOS LITERAIS.

EXEMPLO:

(in)? dependentes Localizando a palavra independentes a interrogao indica

zero ou uma ocorrncia da palavra inteira o resto est em parnteses.


ALTERNAO

Permite corresponder uma ou outra expresso

METACARACTERE: ||

EXEMPLO:

casa(do|da) vai encontrar no texto as duas palavras casado e casada sendo os caracteres

do ou da

AULA 18 VALORES PADRO EM COLUNAS


USANDO VALOR PADRO

CRIAR UM PADRO

ALTER TABLEA nome_tabela

MODIFY COLUMN nome_coluna tipo_dados

DEFAULT valor_padrao;

APLICANDO PADRES:

EXEMPLO:

ALTER TABLE tbl_autores

MODIFY COLUMN Sobrenome_Autor VARCHAR(60)

DEFAULT da Silva;

INSERIR REGISTRO PARA TESTE:

INSERT INTO tbl_autores(ID_Autor, Nome_Autor)

VALUES(6,Joo);

No foi especificado o sobrenome do autor; ser assumido o padro criado.

VERIFICANDO O RESULTADO

SELECT*FROM tbl_autores;
EXEMPLOS:

ALTER TABLE tbl_autores

MODIFY COLUMN Sobrenome_Autor VARCHAR(60)

DEFAULT 'da Silva';

/*DE FORMA ESPECIFICADA*/

DEFAULT

INSERT INTO tbl_autores(ID_Autor, Nome_Autor)

VALUES (8, 'Pablo');

/*DE FORMA ESPECIFICADA*/

INSERT INTO tbl_autores(ID_Autor, Nome_Autor,Sobrenome_Autor)

VALUES (9, 'Igor', 'Ribeiro');

INSERT INTO tbl_autores(ID_Autor, Nome_Autor)

VALUES (10, 'Cleonice');

SELECT*FROM tbl_autores;

/*DESAPLICANDO PADRES MODICANDO

ALTER TABLE tbl_autores

MODIFY COLUMN Sobrenome_Autor VARCHAR(60)

Usar sempre SEM O DEFAULT

*/

ALTER TABLE tbl_autores


MODIFY COLUMN Sobrenome_Autor VARCHAR(60);

AULA 19 BACKUP E RESTAURAO DO BANCO DE DADOS mysqldump


BACKUP DO BANCO DE DADOS LINUX:

USANDO O COMANDO mysqldump no terminal:

mysqldump - p root -p db_Biblioteca < /home/pablo/db_Biblioteca.sql

Voc pode abrir o arquivo resultante com algum editor de textos no terminal para ver se
contedo.

RESTAURAR BANCO DE DADOS:

Crie um banco de dados novo no servidor, de nome teste_restore;

Use o seguinte comando(no terminal):

mysql -u root -p teste-restore < /home/Pablo/dB_Biblioteca.sql

VISUALIZANDO O BACKUP RETAURADO:

Feche o MySQL Worbench, abra-o novamente, ao abrir o banco de dados criado, o backup
estar nele.

AULA 20 GROUP BY AGRUPAMENTO DE REGISTROS


GROUP BY

Usamos a clusula GROUP BY para agrupar registros em subgrupos baseados em colunas ou


valores retornados por uma expresso.

SINTAXE BSICA:

SELECT colunas, funo_agregao()

FROM tabela

GROUP BY colunas

CRIAR UM NOVO BANDO DE DADOS PARA TESTE GROUP BY

CRIAR TABELA PARA TESTE DE GROUP BY

CREATE DATABASE Teste;


CREATE TABLE Vendas(

ID SMALLINT PRIMARY KEY,

Nome_Vendedor VARCHAR(20),

Quantidade INT,

Produto VARCHAR(20),

Cidade VARCHAR(20)

);

INSERINDO DADOS NA TABELA:

INSERT INTO Vendas(ID, Nome_Vendedor, Quantidade, Produto, Cidade)

VALUE(10,Jorge,1400,Mouse,So Paulo);

INSERT INTO Vendas(ID, Nome_Vendedor, Quantidade, Produto, Cidade)

VALUE(12,Tatiana,1220,Teclado,So Paulo);

INSERT INTO Vendas(ID, Nome_Vendedor, Quantidade, Produto, Cidade)

VALUE(14,Ana,1700,Teclado,Rio de Janeiro);

INSERT INTO Vendas(ID, Nome_Vendedor, Quantidade, Produto, Cidade)

VALUE(15,Rita,2120,WebCam,Recife);

INSERT INTO Vendas(ID, Nome_Vendedor, Quantidade, Produto, Cidade)

VALUE(18,Marco,980,Mouse,So Paulo);

INSERT INTO Vendas(ID, Nome_Vendedor, Quantidade, Produto, Cidade)

VALUE(19,Carla,1120,WebCam,Recife);

INSERT INTO Vendas(ID, Nome_Vendedor, Quantidade, Produto, Cidade)

VALUE(22,Roberto,3145,Mouse,So Paulo);
--CONSULTA usando agregao para obter total de vendas de Mouse:

SELECT SUM(Quantidade)AS TotalMouses

FROM Vendas

WHERE Produto = 'Mouse';

--CONSULTA totalizando as vendas de todas os produtos por cidade:

SELECT Cidade, SUM(Quantidade)AS Total

FROM Vendas

GROUP BY Cidade;

AULA 21 HAVING FILTRANDO OS RESULTADOS DO AGRUPAMENTO


HAVING

Clusula usada para especificar condies de filtragem em grupos de registros ou agregaes.


frequentemente usada com a clusula GROUP BY para filtrar as colunas agrupadas

SINTAXE:

SELECT colunas, funo_agregao()

FROM tabela

WHERE filtro

GROUP BY colunas

HAVING filtro_agrupamento;

HAVING EXEMPLO 01

--CONSULTA retornando total de vendas das cidades com menos de 2500 produtos vendidos:
SELECT Cidade, SUM(Quantidade) AS Total

FROM Vendas

GROUP BY Cidade

HAVING SUM(Quantidade)<2500;

OU

UTILIZANDO O AS

SELECT Cidade, SUM(Quantidade) AS Total

FROM Vendas

GROUP BY Cidade

HAVING SUM(Total)<2500;

--CONSULTA retornando total de vendas do produto Teclado das cidades com menos de 1500
teclados vendidos:

SELECT Cidade, SUM(Quantidade)AS TotalTeclados

FROM Vendas

WHERE Produto ='Teclado'

GROUP BY Cidade

HAVING SUM(Quantidade) < 1500;

AULA 22 VIEWS - CRIANDO TABELAS VIRTUAIS


- Uma exibio(Viso) uma tabela virtual baseada no conjunto de resultados de uma consulta
SQL.

- Contem linhas e colunas como uma tabela real, e pode receber comandos como declaraes
JOIN, WHERE e funes como uma tabela normal.

- Mostra sempre resultados de dados atualizados, pois o motor do banco de dados recria os
dados toda vez que um usurio consulta a viso View.

CREATE VIEW [Nome_Exibio]

AS SELECT colunas

FROM tabela
WHERE condies;

EXEMPLO:

CREATE VIEW vw_LivroAutores

AS SELECT Livro.Nome_Livro AS Livros,

tbl_autores.Nome_Autor AS Autor

FROM tbl_Livro

INNER JOIN tbl_autores

ON Livro.ID_Autor = tbl_autores.ID_Autor;

ALTERAO DAS VIEWES:

COMANDO ALTER VIEWE e os comandos da view.

ALTER VIEW vw_LivroAutores

AS SELECT tbl_Livro.Nome_Livro AS Livros,

tbl_autores.Nome_Autor AS Autor,

Preco_Livro AS Valor

FROM tbl_Livro

INNER JOIN tbl_autores

ON tbl_Livro.ID_Autor = tbl_autores.ID_Autor;

SELECT Livro, Autor

FROM vw_LivroAutores

ORDER BY Autor;
SELECT*

FROM vw_LivroaAutore

ORDER BY Valor;

/*EXCLUINDO A VIEW*/

DROP VIEW vw_LivroAutore;

AULA 23 INNER JOIN CONSULTAR DADOS EM DUAS OU MAIS TABELAS


JOINS

A clusula JOIN usada para combinar dados provenientes de duas ou mais tabelas, baseado
em um relacionamento entre colunas destas tabelas.

JOINS CATEGORIAS

INNER JOIN: Retorna linhas quando houver pelo menos uma correspondncia em ambas as
tabelas.

OUTER JOIN: Retorna linhas mesmo quando no houver pelo menos uma correspondncia em
uma das tabelas(ou ambas). OU OUTER JOIN divide-se em LEFT JOIN, RIGHT JOIN e FULL JOIN.

INNER JOIN

SELECT colunas

FROM tabela1

INNER JOIN tabela2

ON tabela1.coluna=tabela2.coluna;

EXEMPLO:

SELECT*FROM tbl_Livro

INNER JOIN tbl_autores

ON tbl_Livro.ID_Autor = tbl_autores.ID_Autor;

OUTROS EXEMPLOS:

SELECT tbl_Livro.Nome_Livro, tbl_Livro.ISBN,


tbl_autores.Nome_Autor

FROM tbl_Livro

INNER JOIN tbl_autores

ON tbl_Livro.ID_Autor = tbl_autores.ID_Autor;

/*USANDO ALIAS E CLUSULA WHERE E LIKE*/

SELECT L.Nome_Livro AS Livros, E.Nome_Editora

AS Editoras

FROM tbl_Livro AS L

INNER JOIN tbl_Editoras AS E

ON L.ID_Editora = E.ID_Editora

WHERE E.Nome_Editora LIKE 'M%';

INNER JOIN TRS TABELAS

SELECT L.Nome_Livro AS Livro, A.Nome_Autor

AS Autor, E.Nome_Editora AS Editora

FROM tbl_Livro AS L

INNER JOIN tbl_autores AS A

ON L.ID_Editora = A.ID_Autor

INNER JOIN tbl_Editoras AS E

ON L.ID_editora = E.ID_Editora;

AULA 24 LEFT E RIGHT JOIN CONSULTAR DADOS EM DUAS OU MAIS


TABELAS
OUTER JOIN
LEFT JOIN: Retorna todas as linhas da tabela esquerda, mesmo se no houver nenhuma
correspondncia na tabela direita.

RIGHT JOIN: Retorna todas as linhas da tabela direita, mesmo se no houver nenhuma
correspondncia na tabela esquerda.

FULL JOIN: Retorna linhas quando houver uma correspondncia em qualquer uma das
tabelas. uma combinao de LEFT E RIGHT JOINS.

LEFT JOIN

SELECT coluna

FROM tabela_esq

LEFT (OUTER) JOIN tabela_dir

ON tabela_esq.coluna=tabela_dir.coluna;

EXEMPLO:

SELECT*FROM tbl_autores

LEFT JOIN tbl_Livro

ON tbl_Livro.ID_Autor =tbl_autores.ID_Autor;

LEFET JOIN EXCLUINDO CORRESPONDNCIAS COM LEFT JOIN E RIGHT JOIN

LEFT JOIN

SELECT coluna

FROM tbl_esq

LEFT(OUTER) JOIN tabela_dir

ON tabela_esq.coluna = tabela_dir.coluna

WHERE tabela_dir.coluna IS NULL;

EXEMPLO:

SELECT*FROM tbl_Autores

LEFT JOIN tbl_Livro

ON tbl_Livro.ID_Autor = tbl_Autores.ID_Autor

WHERE tbl_Livro.ID_Autor IS NULL;


RIGHT JOIN

SELECT*FROM tbl_Livro

RIGHT JOIN tbl_Editoras

ON tbl_Livro.ID_Editora = tbl_Editoas.ID_Editora

WHERE tbl_Livro.ID_Editora IS NULL;

AULA 25 CONCATENAO DE STRINGS COM CONCAT, IFNULL E


COALESCE

possvel concatenar strings usando-se a funo CONCAT

SINTAXE:

CONCAT(String | nome_Coluna, <String | nome_Coluna)

EXEMPLO:

SELECT CONCAT(Nome_Autor, ' ', Sobrenome_autor)

AS 'Nome Completo' FROM tbl_Autores;

CONCATENANDO UMA STRING SOLTA COM UM CAMPO DA TABELA

SELECT CONCAT('Eu gosto do Livro ',Nome_Livro)

FROM tbl_Livro

WHERE ID_Autor =2;


CRIANDO UM NOVO BANCO DE DADOS, UMA TABELA, INSERINDO REGISTROS NESSA
TABELA CRIADA PARA QUE ASSIM POSSAMOS TRABALHAR COM VALORES NULOS;

CREATE DATABASE testenulo;

CREATE TABLE Teste_Nulos(

ID SMALLINT PRIMARY KEY AUTO_INCREMENT,

Item VARCHAR(20),

Quantidade SMALLINT NULL);

INSERT INTO Teste_Nulos(ID, Item, Quantidade) VALUES

(1, 'Pendrive', 5);

INSERT INTO Teste_Nulos(ID, Item, Quantidade) VALUES

(2, 'Monitor', 7);

INSERT INTO Teste_Nulos(ID, Item, Quantidade) VALUES

(3, 'Teclado', NULL);

Note que no ltimo registro, a ltima coluna que a (Quantidade) o valor est descrito como
NULL ou seja o valor desse coluna tem como resultado o registro NULO. Nulo diferente de
zero, apenas um valor nulo.

CONCATENANDO uma String com um valor nulo.

SELECT CONCAT('A quantidade adquirida ',' ' , Quantidade) AS QUANTIDADE

FROM Teste_nulos

WHERE Item = 'Teclado';

Porm o valor retornado ser nulo, como tratar o valor nulo neste caso ento?

TRATANDO CONCATENAES NULAS:

Funo IFNULL. Essa funo tem como objetivo substituir o valor nulo, analisa uma nica
informao, sendo ela nula, a substituio realizada.

SELECT CONCAT('A quantidade adquirida ',' ' , IFNULL(Quantidade, 0))


FROM Teste_nulos

WHERE Item = 'Teclado';

Caso voc tenha diversos valores nulos para efetuar essa concatenao a utilizao de outra
funo deve ser usada, pois como descrito acima a funo IFNULL tem o objetivo de substituir
apenas uma nica informao com o valor nulo, a funo para estabelecer um ponto de
equilbrio na concatenao entre diversas informaes nulas a funo COALESCE. Faz a
anlise de valores nulos e retorna a substituio pelo valor.

SINTAXE:

SELECT CONCAT('A quantidade adquirida ',' ', COALESCE(NULL, Quantidade, NULL, 0)) AS
QUANTIDADE

FROM Teste_Nulos

WHERE Item = 'Teclado';

Nesse caso colocamos dois valores como NULL no inicio e fim do comando acima

(NULL, Quantidade, NULL, 0)) Porm a funo COALESCE vai ignorar os dois valores nulos e
buscar o zero que o valor substitutivo.

TRATANDO VALORES NULOS

EXEMPLOS:

IR RETORNAR O NOME PABLO CONCATENANDO COM O ESPAO DAS ASPAS SIMPLES E O


SOBRENOME, ALM DO NOME DA COLUNA SER SEGUIDA POR UM ALIAS DE NOME (MEU
NOME)

SELECT CONCAT('Pablo' ,' Ribeiro Moreira') AS 'Meu Nome';

IR RETORNAR O NOME DO AUTOR CONCATENANDO COM O ESPAO DAS ASPAS SIMPLES E


O SOBRENOME DO AUTOR, ALM DO NOME DA COLUNA SER SEGUIDA POR UM ALIAS DE
NOME(NOME COMPLETO)

SELECT CONCAT(Nome_Autor, ' ', Sobrenome_autor)AS 'Nome Completo'

FROM tbl_Autores;

IR CONCATENAR A STRING (Eu gosto do livro) SEGUIDA DA COLUNA Nome_Livro, ALM DO


NOME DA COLUNA SER NOMEADA PELO ALIAS COMO (LIVROS) E TRAZER O LIVRO NA QUAL
O FILTRO DO ID PASSADO PELO COMANDO WHERE 2
SELECT CONCAT('Eu gosto do Livro', Nome_Livro) AS 'Livros'

FROM tbl_Livro

WHERE ID_Autor = 2;

IR CONCATENAR A STRING(A quantidade adquirida ) SEGUINDA DA COLUNA


(QUANTIDADE), ALM DO NOME DA COLUNA SER NOEMADA PELO ALIAS COMO
(QUANIDADE) TRAZENDO O ITEM E SEU VALOR NULO NO QUAL UMA STRING TECLADO
ATRAVS DO COMANDO DE FILTRO WHERE.

SELECT CONCAT('A quantidade adquirida ',' ' , Quantidade) AS QUANTIDADE

FROM Teste_nulos

WHERE Item = 'Teclado';

AULA 26 FUNES MATEMTICAS E OPERADORES ARITMTICOS

possvel realizar operaes matemticas simples nos valores de uma coluna e retornar
resultados em uma coluna calculada.

+ SOMA

- SUBTRAO

/DIVISO

*MULTIPLICAO

% OU MOD DIVISO INTEIRA

EXEMPLOS:

MULTIPLICAO COMUM SEM COLUNAS

SELECT 3*9;

MULTIPLICAO POR 5, Preo de 5 nidades

SELECT Nome_Livro, Preco_Livro * 5 AS 'Preo de 5 Unidades'

FROM tbl_Livro;

DIVISO POR 2, Preo com 50% de desconto


SELECT Nome_Livro, Preco_Livro /2 AS 'Preo com 50% de desconto'

FROM tbl_Livro;

DIZIMA PERIODICA

SELECT 10/3;

RESTO DA DIVISO DE 10 POR 3

SELECT 10 MOD 3;

FUNES MATEMTICAS:

possvel utilizar funes matemticas nos valores de uma coluna e retornar resultados em
uma coluna calculada.

Abaixo vemos algumas funes matemticas mais comuns:

CEILING() Arredonda para cima

FLOOR() Arredonda para baixo

PI() Retorna o valor de Pi

POW(x,y) Retorna x elevado a y

SQRT() Raiz quadrada de um argumento

SIN() Retorna o seno de um nmero dado em radiano

HEX() Retorna a representao hexadecimal de um valor

EXEMPLOS:

SELECT Nome_Livro, CEILING(Preco_Livro*5) AS 'Preo arredondado'

FROM tbl_Livro;

SELECT PI();

SELECT POW(2,4);

SELECT SQRT(81);

SELECT SIN(PI());
SELECT HEX(1200);

AULA 27 ROTINAS ARMAZENADAS FUNES (CREATE FUNCTION)


FUNES E PROCEDIMENTOS

So dois tipos de rotinas armazenadas, parte d especificao SQL. So um pouco similares, mas
com aplicaes diferentes. So invocadas de formas diferentes tambm (CALL x declarao).

Uma funo usada para gerar um valor que pode ser usada em uma expresso.

O valor geralmente baseado em um ou mis parmetros fornecidos funo.

executada como parte de uma expresso.

SINTAXE:

CREATE FUNCTION nome_funo(parmetros)

RETURNS tipo_dados

Cdigo_da_funo;

INVOCANDO UMA FUNO:

SELECT nome_funo(parmetros);

EXEMPLOS:

CRIANDO FUNO

CREATE FUNCTION fn_teste(a DECIMAL(10,2),b INT)

RETURNS INT

RETURN a*b;

INOVOCANDO A FUNO:

SELECT fn_teste(2.5,4) AS Resultado;

RETORNANDO A FUNO CRIADA ATRAVS DE UM SELECT E RESPECTIVAS COLUNAS

SELECT Nome_Livro, fn_teste(Preco_Livro, 6) AS 'Preo do livro'

FROM tbl_Livro

WHERE ID_Livro =2;

EXCLUNDO UMA FUNO:


DROP FUNCTION fn_teste;

AULA 28 PROCEDIMENTOS ARMAZENADOS (STORED PROCEDURES)


BSICO
PROCEDIMENTOS ARMAZENADOS

Stored Procedures

Um procedimento armazenado uma sub-rotina disponvel para aplicaes que acessam


sistemas de bancos de dados relacionais. Podem ser usadas para validao de declaraes SQL
complexas e outras situaes. Desde a verso 5.0 o MySQL suporta a execuo de Stored
Procedures.

SINTAXE:

Criao do procedimento:

CREATE PROCEDURE nome_Procedimento(parmetros)

Declaraes;

Invocando o procedimento:

CALL nome_procedimenrto(parmetros);

EXEMPLO:

CRIANDO A PROCEDURE

CREATE PROCEDURE verPreco(varLivro SMALLINT)

SELECT CONCAT('O Preo ', Preco_Livro) AS PREO

FROM tbl_Livro

WHERE ID_Livro = varLivro;

CONSLTAR A PROCEDURE CRIADA ASSIM COMO UM SELECT FAZ AS DEMAIS CONSULTAS


CALL verPreo(3);

DELETAR A PROCEDURE.

DROP PROCEDURE verPreco;

AULA 29 BLOCOS BEGIN END EM FUNES E PROCEDIMENTOS


BLOCOS BEGIN...END;

So Continers usados para delimitar blocos de comandos a serem executados pela funo
ou stored procedure.

Cada declarao aninhada possui um delimitador(;).

Um bloco BEGIN pode ser aninhado dentro de outros blocos.

EXEMPLO:

DELIMITER $$

CREATE FUNCTION aumenta_preco (preco DECIMAL(10,2),taxa DECIMAL(10,2)) RETURNS


DECIMAL(10,2)

BEGIN

RETURN preco + preco *taxa /100;

END$$

DELIMITER;

INVOCANDO A FUNO

SELECT umenta_preco(50.00, 10.00) AS Resultado;

EXEMPLOS COM PROCEDIMENTOS:

DELIMITER //

CREATE PROCEDURE verPreco(varLivro SMALLINT)


BEGIN

SELECT CONCAT('O preo ', Preco_Livro) AS PREO

FROM tbl_Livro

WHERE ID_Livro = varLivro;

SELECT 'Procedimento executado com sucesso!';

END//

DELIMITER ;

INVOCANDO A PROCEDURE

CALL verPreco(3);

AULA 30 PARMETROS IN, OUT, INOUT EM PROCEDIMENTOS


ARMAZENADOS
Podemos usar parmetros para passar argumentos para o procedimento armazenado e obter
a partir dele

Em MySQL existem trs tipos de parmetros:

IN

OUT

INOUT

PARMETRO IN

o modo padro. Quando voc define um parmetro IN em um SP, o programa chamador tem
de passar um argumento ao procedimento armazenado.

Essa passagem de parmetros do tipo da passagem por valor, portanto o valor do parmetro
fora do procedimento armazenado permanece inalterado. So semelhantes aos parmetros de
funes.

PARMETRO OUT

O valor de um parmetro OUT pode ser alterado dentro do procedimento armazenado e seu
novo valor passado de volta ao programa chamador.
O procedimento armazenado no pode acessar o valor inicial do parmetro OUT quando ele
iniciado, e a varivel passada limpa.

Procedimentos OUT so similares aos procedimentos INOUT, com uma diferena significativa:
No parmetro OUT, o valor passado como parmetro, ajustado para NULL no incio da
execuo do procesimento.

PARMETRO INOUT

Trata-se de uma combinao dos parmetros IN e OUT. Isso significa que o programa
chamado deve passar o argumento e o procedimento armazenado pode modificar o
parmetro INOUT e repassar o novo valor de volta ao programa chamador. Portanto, uma
referncia varivel externa passada ao procedimento.

SINTAXE DE UM PARMETRO

MODO nome_parmetro tipo_parmetro(tamanho_parmetro)

O modo pode ser IN, OUT, ou INOUT, dependendo do propsito do procedimento


armazenado.

EXEMPLO 1 IN:

DELIMITER //

CREATE PROCEDURE editora_Livro(IN editora VARCHAR(50))

BEGIN

SELECT L.Nome_Livro, E.Nome_editora

FROM tbl_Livro AS L

INNER JOIN tbl_Editoras AS E

ON L.ID_Editora = E.ID_Editora

WHERE E.Nome_Editora = editora;

END//

DELIMITER ; DELIMITADO O BLOCO

INVOCANDO O PROCEDIMENTO

CALL editora_Livro('Wiley');

chamamos o procedimento pelo nome no caso (editora_Livro) e passamos como parmetro o


nome o valor do parmetro/argumento (IN editora) de acordo com o seu tipo no caso de ser
VARCHAFR(50) ser passado um valor de texto, ou seja o nome de alguma editira (Wiley)
Tambm podemos criar uma varivel e atribuir o valor do argumento para ela atravs do
comando SET, variveis so criadas sempre com um @ na frente do nome, como no nosso
exemplo a baixo @minhaeditora), atribuindo o valor wiley para dentro dessa varivel. Como
no exemplo abaixo:

SET @minhaeditora = 'wiley';

Logo aps isso podemos chamar o procedimento com o commando CALL o nome do
procedimento e entre os parnteses o nome da editora podemos passar como parmetro, pois
seu valor j estar contido nela, que no caso o nome wiley, na qual passamos acima com o
comando SET.

CALL editora_Livro (@minhaeditora);

CONCLUSO:

Podemos fazer das duas formas, ou chamando a procedure com co comando CALL o nome da
procedure seguida do valor dela como parmetro, ou criar uma varival com o comando SET e
logo aps quando o procedimento for chamado pelo comando CALL informar o nome do
procedimento e passar essa varivel contendo o valor como argumento, o valor do argumento
editora substitudo pelo valor miley ou pela varivel que armazena este valor se for o caso,
com os dois mtodos de realizar a operao poder ser feito.

SOLUO 1

CALL editora_livro(wiley);

SOLUO 2

SET @minhaeditora = wiley;

CALL editora_livro(@minhaeditora);
EXEMPLO 2 IN:

DELIMITER //

CREATE PROCEDURE aumenta_preco(IN codigo INT, taxa DECIMAL(10,2))

BEGIN

UPDATE tbl_livro

SET Preco_Livro = tbl_Livro.Preco_Livro + tbl_Livro.Preco_Livro*

WHERE ID_Livro = codigo;

END//

DELIMITER ;

/*Testando: Vamos aumentar o preo do livro de ID 4 em 20%

Primeiro verificamos o preo atual: */

SELECT*FROM tbl_Livro WHERE ID_Livro =4;/*Ver preo atual*/

SET@livro=4;/*Criando varivel com o valor 4*/

SET@aumento =20; /*Criando varivel para aumento da taxa de 20% do livro*/

CALL aumenta_preco(@livro, @aumento);/*Verificando o aumento aplicado*/

/*Verificando o resultado do procedimento armazenado*/

SELECT*FROM tbl_Livro WHERE ID_Livro =4;


EXEMPLO 3 OUT

DELIMITER//

CREATE PROCEDURE teste_out(IN id INT, OUT livro VARCHAR(50))

BEGIN

SELECT Nome_Livro

INTO livro /*Resgata o nome do livro e joga dentro da varivel livro*/

FROM tbl_Livro

WHERE ID_Livro = id;

END//

DELIMITER ;

CALL teste_out(3,@livro)

SELECT @livro;

A varivel livro resgata o nome do livro e com o valor resgatado coloca este nome dentro da
varivel livro, o id entra no cdigo e a consulta descobre qual o nome do livro pertencente
este determinado id, colocando o nome do livro na varivel livro e essa um parmetro de
sada, que retornada para fora do procedimento, a varivel entra com o valor nulo, mas sai
com o valor retornando como procedimento(Passagem por referencia). O valor da varivel
livro acaba sendo alterado

INVOCANDO O PROCEDIMENTO

passado como parmetro o nmero 3 que no caso o ID do livro, sendo assim o nome do
livro descoberto atravs deste mesmo ID gravando o nome na varivel @livro, (OBS: Na hora
de passar esta varivel para o procedimento ser invocando usa-se o @). Agora esta varivel
est na memria contendo o nome do livro de ID 3.

CALL teste_out(3,@livro)

Vericando o resultado com o SELECT:

SELECT @livro;
EXEMPLO 4 INOUT:

DELIMITER //

CREATE PORCEDURE aumento(INOUT valor DECIMAL(10.2), taxa DECIMAL(10.2))

BEGIN

SET valor = valor + valor*taxa/100;

END//

DELIMITER ;

SET @valorinicial = 20.00;

SELECT @valorinicial;

CALL aumento(@valorinicial, 15.00)

SELECT @valorinicial;

CONCLUSO:

/*Testando: Criamos a varivel valorinicial, e a usamos

para passar o parmetro VALOR. Vamos aumentar o valor em 15%*/

SET @valorinicial = 20.00;

SELECT @valorinicial;

CALL aumento(@valorinicial, 15.00)

/*Verificamos agora se a varivel externa "@valorinicial"foi alterada*/

SELECT @valorinicial;

AULA 31 VARIVEIS LOCAIS E ESCOLO COMANDO DECLARE


Escopo das variveis

O escopo de uma varivel diz respeito aos locais onde a varivel existe ou seja, onde ela
pode ser acessada.

Nveis de escopo:
Global(acessveis de qualquer local)

Sesso (variveis e de sistema)

Parmetros(nvel de rotinas, criadas quando a rotina chamada, e destrudas quando a rotina


termina)

Local (limitadas ao bloco BEGIN onde foram declaradas).

Declarao De variveis locais

Podemos criar variveis locais em um procedimento ou funo usando uma declarao


DECLARE dentro de um bloco BEGIN. A varivel pode ser criada e inicializada com um valor se
desejado.

Ficam disponveis apenas dentro do bloco onde foram criadas, e em blocos que existam dentro
do bloco onde a varivel foi criada.

Aps o bloco ter sido executado e encerrado, a varivel desalocada da memria.

SINTAXE DE DECLARAO DE VARIVEIS LOCAIS

SINTAXE:

DECLARE nome_var1 tipo, nome_var2 tipo

[DEFAULT valor_padro]

A instruo DECLARE deve vir antes de qualquer outra instruo no bloco BEGIN. Podemos
declarar diversas variveis numa mesma instruo DECLARE, desde que sejam todas do mesmo
tipo de dados e valor-padro. Como atribuir valores s variveis: Podemos usar a instruo SET
ou ainda SELECT..INTO

EXEMPLO:

DELIMITER //

CREATE FUNCUTION calcula_desconto(livro INT, desconto DECIMAL (10,2)) RETURNS


DECIMAL(10,1)

BEGIN

DECLARE preo DECIMAL(10,2);

SELECT Preco_Livro FROM tbl_Livro

WHERE ID_Livro = livro INTO preo;

RETURN preco - desconto;

END //

DELIMITER ;
/*1 vamos verificar o valor atual do livro atravs de seu ID*/

/*2 vamos consultar agora o id do livro atravs da nossa funo*/

/*3Consultando o valor posterior do livro aps a chamada da funo*/

SELECT *FROM tbl_Livro WHERE ID_Livro =4;

SELECT calcula_desconto(4, 10.00);

SELECT *FROM tbl_Livro WHERE ID_Livro =4;

AULA 32 BLOCOS CONDICIONAIS IF THEN ELSE E CASE


H dois tipos bsicos de blocos condicionais:

1 IF..ELSE IF..ELSE..END IF;

2CASE..WHEN..THEN..ELSE..END CASE;

SINTAXE DE UM BLOCO IF:

IF condio THEN lista_de_declaraes

[ELSEIF condio THEN lista_de_declaraes]

...

[ELSE lista_de_declaraes]

END IF;

SINTAXE DE UM BLOCO CASE

CASE valor_Referncia

WHEN valor_comparado THEN

lista_de_declaraes

WHEN valor_comparado THEN

Lista_de_declaraes

...

ELSE lista_de_declaraes

END CASE;
EXEMPLO COM BLOCO IF

DELIMITER //

CREATE FUNCTION calc_imposto(salario DEC(8,2)) RETURNS DEC(8,2)

BEGIN

DECLARE valor_imposto DEC(8,2);

IF salario < 1000.00 THEN

SET valor_imposto = 0.00;

ELSEIF salario < 2000.00 THEN

SET valor_imposto = salario* 0.15;

ELSEIF salario < 3000.00 THEN

SET valor_imposto = salario * 0.22;

ELSE

SET valor_imposto = salario*0.27;

END IF;

RETURN valor_imposto;

END//

DELIMITER ;

/*

Vamos testar passando valores de salrios com parmetros, usaremos

valores com 850, 1200 e 6000 para testar:

*/

EXEMPLO COM BLOCO WHEN

SELECT calc_imposto(6000.00);

DELIMITER //

CREATE FUNCTION calc_imposto_case(salario DEC(8,2))RETURNS DEC(8,2)


BEGIN

DECLARE valor_imposto DEC(8,2);

CASE

WHEN salario < 1000.00 THEN

SET valor_imposto = 0.00;

WHEN salario < 2000.00 THEN

SET valor_imposto = salario * 0.15;

WHEN salario < 3000.00 THEN

SET valor_imposto = salario * 0.22;

ELSE

SET valor_imposto = salario * 0.27;

END CASE;

RETURN valor_imposto;

END//

DELIMITER ;

/*

Vamos testar passando valores de salrios com parmetros, usaremos

valores com 850, 1200 e 6000 para testar:

*/

SELECT calc_imposto_case(4600.00);

AULA 33 COMANDOS SHOW, DESCRIBE E mysqlshow


Esses comandos utilizados para acessar os metadados em um sistema, dados sobre dados,
informaes sobre objetos de um sistema, basicamente informaes do banco de
dados,tabelas desses bancos de dados e suas respectivas colunas.
TERMINAL DO LINUX:

Logando no Mysql pelo terminal do Linux:

Mysql u root p

Digite a senha do seu mysql

Help show = Mostra a listagem de todos os comandos SHOW.

COMANDO SHOW:

SHOW DATABASES = Mostra os bancos de dados

SHOW TABLES = Mostra todas as tabelas de um determinado banco de dados selecionado

SHOW CREATE TABLE tbl_Livro = Trs o cdigo inteiro na qual foi responsvel pela criao da
estrutura da tabela tbl_Livro.

SHOW CREATE PROCEDURE ver_preco = Trs o cdigo inteiro na qual foi responsvel pela
criao da estrutura da procedure ver_preco.

SHOW CREATE FUNCTION calcula_desconto = Trs o cdigo inteiro na qual foi responsvel
pela criao da estrutura da funo calcula_desconto.

SHOW COLUMNS FROM tbl_Editora; =Trs todas as colunas da tabela tbl_Editoras e suas
demais informaes, null, smallint, varchar e etc.

Ou

SHOW FULL COLUMNS FROM tbl_Editoras = Serve para trazer informaes das colunas de
uma determinada tabela de uma forma mais completa.

FILTRAGEM

SHOW COLUMNS FROM tbl_Livro; LIKE I%; = Trazendo colunas que comeam apenas com a
letra I

FILTRAGEM ATRAVS DOS TIPOS DE DADOS:

SHOW COLUMNS FROM tbl_Livro WHERE type LIKE VARCHAR%; = Trs qualquer VARCHAR
independente do cumprimeto.

VISUALIZAR OS PRIVILIOS DE ACESSO AO BANCO DE DADOS DE UM USURIO ESPECIFICO

SHOW GRANTS FOR SHOW CREATE TABLE root@localhost;

COMANDOS DESCRIBES:

Funciona como um atalho para a consulta de colunas, exemplo: SHOW COLUMNS FROM ao
invs de escrever este comando todo usamos apenas o comando DESCRIBES.
SINTAXE:

DESCRIBE tbl_Livro; = Trs as informaes e tipos de dados de uma tabela com suas
respectivas colunas.

OU DESC tbl_Livro;

COMANDO mysqlshow:

Man mysqlshow =Mostra o manual do comando no Linux.

O comando mysqlshow permite ao administrador de banco de dados obter informaes sobre


um banco de dados, suas tabelas e colunas.

mysql u usurio p[banco de dados[tabela[coluna]]]

mysql u = nome do usurio p para pedir a senha, o nome do banco de dados, o nome da
tabela e o nome da coluna. Porm essas so informaes opcionais depende do que voc
precisa procurar.

mysql u usurio p db_Biblioteca

password:

E o terminal do Linux vai mostrar as tabelas as tabelas deste banco de dados

MOSTRANDO COLUNAS PERTENCENTES AS TABELAS:

mysql u usurio p db_Biblioteca tbl_Autores % = Acrescente este smbolo de porcentagem


para que o Linux interprete o comando de execuo do mysql como um while the card, e a
tabela na qual deseja consultar como uma tabela, ele funciona como um caractere coringa.
Isso fora o Shell do Linux a forar essa execuo. Consultas de tabelas usasse essa
porcentagem.

VISUALIZAR TABELAS CONTANDO COLUNAS E LINHAS:

Mysqlshow vv u p dB_Biblioteca t*=Trs todas as informaes sobre as tabelas que


comeam com a letra T no Baco de dados dB_Biblioteca (VV= Significa o nmero de colunas
e o nmero de linhas, sendo o primeiro V colunas e o segundo V linhas).

VERIRICAR INFORMAES APENAS DE UMA NICA COLUNA EM ESPECIFICO, DENTRO DE


UMA DETERMINADA TABELA DE UM BANCO DE DADOS.

Mysqlshow u root p dB_Biblioteca tbl_Autores ID_Autor

ESSES COMANDOS SO RESPONSVEIS POR ESCREVER A ESTRUTURA DE UM BANCO DE


DADOS.
AULA 34 ESTRUTURA DE REPETIO COMANDOS LOOP
BLOCOS ITERATIVOS

Um bloco iterativo um bloco de cdigos que executado repetidamente por um comando


especial, at que um condio de parado o interrompa. Um bloco iterativo pode ser aninhado
com outros blocos iterativos.

O MySQL possui trs tipos bsicos de blocos iterativos:

- LOOP

- REPET

- WHILE

[<rtulo>:] LOOP

Declaraes

END LOOP [<rtulo>]:

Em nosso exemplo abaixo temos uma varivel passada como parmetro que se chama limite,
essa varivel ser a varivel de entrada na qual o usurio ir entrar com o valor da estrutura de
repetio.

Logo aps isso declaramos uma varivel contador e outra varivel chamada de soma. Ento
vai iniciar nosso Loop criamos um rotulo para ele de loop_teste, onde logo abaixo ser
efetuada a funo deste lao, atribuindo o incremento do valor um para a nossa varivel
contador nossa varivel soma por sua vez recebe o valor da varivel contador na qual j possui
o incremento de +1 e soma com 1. No final da expresso uma estrutura de deciso com o IF
criada para dizer ao programa que a varivel contador precisa ser menor ou igual ao valor de
entrada do usurio, ou seja a varivel de entrada limite, logo aps finalizamos nossa estrutura
de lao condicional, ou seja o LOOP que a estrutura mais interna da operao, fazemos a
sada desse bloco com o comando LEAVE e seu rtulo loop_teste , ento finalizamos o nosso
bloco condicional de deciso tambm junto com ele. Depois s chamar a procedure com o
comando CALL e o nome da procedure = nome do procedimento armazenado. Porm ao
testar o procedimento com o valor 0 no final apresentado 1 como resultado, o que resulta
em um erro.

EXEMPLO:

DELIMITER //

CREATE PROCEDURE acumulador (limite INT)

BEGIN

DECLARE contador INT DEFAULT 0;


DECLARE soma INT DEFAULT 0;

loop_teste: LOOP

SET contador = contador +1;

SET soma = soma + contador;

IF contador >= limite THEN

LEAVE loop_teste;

END IF;

END LOOP loop_teste;

SELECT soma;

END//

DELIMITER ;

/*TESTANDO*/

CALL acumulador(0);

AULA 35 ESTRUTURAS DE REPETIO COMANDO REPEAT

[<rtulo>:] REPEAT

Declaraes

UNITIL condies

END REPEAT [<rtulo>];

EXEMPLO:

DELIMITER //

CREATE PROCEDURE acumula_repita(limite TINYINT UNSIGNED)

BEGIN

DECLARE contador TINYINT UNSIGNED DEFAULT 0;

DECLARE soma INT DEFAULT 0;

REPEAT
SET contador = contador+1;

SET soma = soma + contador;

UNTIL contador >= limite

END REPEAT;

SELECT soma;

END//

DELIMITER ;

/*TESTANDO A ESTRUTURA REPITA*/

CALL acumula_repita(10);

CALL acumula_repita(0);/*Este resulta em valor errado

pois o contador incrementado antes do teste condicional */

FORMA CERTA DE VALIDAR O VALOR ZERO:

Neste segundo caso fazemos a validao do zero pela estrutura de deciso primeiro, ou seja
assim o erro ser reportado se o valor for menor que 1, no caso zero.

OBS: TINYINT UNSIGNED serve apenas para valores positivos

DELIMITER //

CREATE PROCEDURE acumula_repita(limite TINYINT UNSIGNED)

main:BEGIN

DECLARE contador TINYINT UNSIGNED DEFAULT 0;

DECLARE soma INT DEFAULT 0;

IF limite < 1 THEN

SELECT 'O valor deve ser maior que zero.' AS ERRO;

LEAVE main;

END IF;

REPEAT

SET contador = contador +1;

SET soma = soma + contador;


UNTIL contador >= limite

END REPEAT;

SELECT soma;

END//

DELIMITER ;

/*TESTANDO A ESTRUTURA DE REPETIAO*/

CALL acumula_repita(10);

CALL acumula_repita(0);/*Agora o erro reportado*/

AULA 36 ESTRUTURASA DE REPETIO COMANDO WHILE


WHILE

[<rtulo>:] WHILE condio DO

Declaraes

END WHILE [<rtulo>];

O comando WHILE DO faz com que o valor seja executado uma nica vez independente de ser
verdadeiro ou falso ele ir sair do loop em sua condio. O teste ser executado antes das
condies, assim o valor ser menor que limite ou no, ou seja se o valor for declarado como
limite o retorno zero e retorna falso.

EXEMPLO:

DELIMITER //

CREATE PROCEDURE acumula_while(limite TINYINT UNSIGNED)

BEGIN

DECLARE contador TINYINT UNSIGNED DEFAULT 0;

DECLARE soma INT DEFAULT 0;


WHILE contador < limite DO

SET contador = contador +1;

SET soma = soma + contador;

END WHILE;

SELECT soma;

END//

DELIMITER ;

/*TESTANDO*/

CALL acumula_while(10);

CALL acumula_while(0);

AULA 37 ESTRUTURADOS DE REPETIO DECLARAO ITERATE


Declarao ITERATE

ITERATE significa dentro de uma estrutura de repetio inicie o loop novamente

A declarao ITERATE aparece apenas dentro de estruturas LOOP, REPEATE e WHILE.

EXEMPLO:

Declaramos a procedure com o nome de acumula_iterate definimos tambm um nome para a


varivel de entrada do procedimento como limite, ento declaramos as duas variveis
iniciando as mesmas com 0, contador e soma. Logo aps isso criamos um rtulo para o LOOP
chamda de teste, na sequncia configuramos a varivel contador para receber um incremento
e a varivel soma para receber a varivel contador mais e o seu incremento. Na lgica abaixo
vemos uma condio, caso a o valor de entrada seja maior ao especificado na lgica na qual
deve ser menor que o limite, o loop finalizar, porm caso seja menor o valor ser iterado por
conta do comando ITERATE, se for o contrario o loop ser finalizado pelo comando ITERATE e
o rtulo teste, com base no nosso LOOP. Usamos o comando LEAVE para no nos depararmos
com um LOOP infinito na condio e finalizar o loop, no final damos um select na varivel
soma que armazena os valores de incremento e finalizamos o bloco. Por fim chamamos nosso
procedimento para testar.
DELIMITER //

CREATE PROCEDURE acumula_iterate(limite TINYINT UNSIGNED)

BEGIN

DECLARE contador TINYINT UNSIGNED DEFAULT 0;

DECLARE soma INT UNSIGNED DEFAULT 0;

teste: LOOP

SET contador = contador +1;

SET soma = soma + contador;

IF contador < limite THEN

ITERATE teste;

END IF;

LEAVE teste;

END LOOP teste;

SELECT soma

END//

DELIMITER ;

/*TESTANDO*/

CALL acumula_iterate(10);
EXEMPLO 2:

Criando uma procedure de nome pares e criando um rtulo para o bloco BEGIN, que identifica
todo o corpo do procedimento, declaramos a varivel contador inicializada com o valor padro
0, e tambm declaramos um loop WHILE com um rtulo meuloop, informando que o contador
deve ser menor que limite que a varivel de parmetro passada na procedure como uma
varivel de entrada, em seguida configuramos a varivel contador para ser incrementada, logo
aps criamos uma estrutura de teste condicional que pega a funo aritmtica MOD, sendo o
resto da diviso, em cima da varivel contador dividindo o valor de contador por 2, ou seja
Pegue o contedo da varivel contador, divida por 2 e me traga o resto da diviso.
Resultados possvel 0 e 1, valor lgico, sendo 0 igual a falso e 1 igual a verdadeiro. isso que o
nosso IF ir fazer. Os comandos so executados fora do bloco, caso seja diferente de par, ou
seja impar, ento o comando ITERATE executado e o loop finalizado END IF,caaso seja um
nmero par o procedimento vai fazer toda a operao acima e fazer uma concatenao com a
string um nmero par e armazenar este valor na varivel contador, assim o loop while
finalizado. Logo Aps isso s chamar o procedimento para testar.

DELIMITER //

CREATE PROCEDURE pares(limite TINYINT UNSIGNED)

main: BEGIN

DECLARE contador TINYINT DEFAULT 0;

meuloop: WHILE contador < limite DO

SET contador = contador +1;

IF MOD(contador, 2)THEN

ITERATE meuloop;

END IF;

SELECT CONCAT(contador , ' um nmero par') AS valor;

END WHILE;

END//

DELIMITER ;

CALL pares(20);
AULA 38 TRIGGERS DEFINIO, SINTAXE E CRIAO
Triggers

GATILHO

Associada a uma tabela.

Procedimento invocado quando um coma do DML executado.

Usos do Trigger:

- Verificao de integridade dos dados

- Validao dos dados

- Rastreamento e registro de logs de atividades nas tabelas.

- Arquivamento de registros excludos

- Um Trigger associado a uma tabela

- Armazenado no BD como um arquivo separado.

- No so chamados diretamente, so invocados automaticamente

SINTAXE DOS TRIGGERS:

CREATE TRIGGER nome timing operao

ON tabela

FOR EACH ROW

Declaraes

Timing = BEFORE | AFTER

Operao = INSERT | UPDATE | DELETE

EXEMPLO:

PRIMEIRO CRIAREMOS UMA TABELA PARA PODER SIMULAR O USO DE UMA TRIGGER

CREATE TABLE Produto(

ID_Produto INT NOT NULL AUTO_INCREMENT,

Nome_Produto VARCHAR(45) NULL,

Preco_Normal DECIMAL(10,2) NULL,


Preco_Desconto DECIMAL(10,2) NULL,

PRIMARY KEY(ID_Produto));

CRIANDO A TRIGGER

CREATE TRIGGER Tr_Desconto BEFORE INSERT

ON Produto

FOR EACH ROW

SET NEW.Preco_Desconto = (NEW.Preco_Normal * 0.99);

INSETINDO DADOS NA TABELA.

PERCEBA QUE OS CAMPOS, PQ?

Nome_Produto e Preco_Desconto No fazem parte da insero de dados na tabela, pois o


Nome_Produto uma coluna de AUTO_INCREMENTO, e por isso no precisa ser inserido e a
coluna Preco_Desconto quem responsvel por realizar a entrada dos valores com desconto
na tabela o usurio.

INSERT INTO Produto(Nome_Produto, Preco_Normal)

VALUES ('DVD', 1.00),('Pendrive', 18.00);

SELECT*FROM Produto;

Nomeamos o nome da Trigger de Tr_Desconto, logo em seguida utilizamos

o calculo do preo com desconto antes com o comando BEFORE, quando o usurio

fazer um insert o Trigger disparado na tabela Produto

SET = ou seja configure preo com desconto multiplicado por 0,99,

o comando NEW significa que tanto preco_Desconto quanto Preco_Normal,

a Trigger pega um novo preo normal que est sendo inserido multiplicado por 0,99 criando
um novo valor

para o Preco_Desconto para que posteriormente seja gravado na coluna de preco_Desconto,

como os valores no esto inseridos no por este motivado utilizamos o NEW