Académique Documents
Professionnel Documents
Culture Documents
4
Modificação da estrutura de uma tabela
DROP <campo>
o Remove determinado campo
MODIFY <campo><tipo>
o Modifica o tipo de determinado campo
5
Alter Table - ADD
Inserir na tabela teste o campo nascimento que conterá a data de nascimento dos
cadastrados.
6
Alter Table - ADD
7
Alter Table - MODIFY
O campo email foi criado com limite de 30 caracteres. Observe isso com
o comando describe teste;
8
Alter Table - CHANGE
Trocar no nome da coluna email por e_mail .
mysql>ALTER TABLE teste CHANGE email e_mail CHAR(30);
9
Alter Table - DROP
10
Alter Table – ADD PRIMARY KEY
11
Alter Table - DROP PRIMARY KEY
12
Renomeando a tabela
13
DROP TABLE
14
Observações:
o Campos texto (CHAR, VARCHAR, BLOB, TEXT, etc.) têm de ficar entre
apóstrofos
o Em campos do tipo número, não se usam apóstrofos.
o A entrada NULL em um campo do tipo AUTO-INCREMENTO, permite que o
MySQL providencie o conteúdo deste campo de forma automática. No
caso do primeiro campo, o valor será 1, no segundo 2, no terceiro 3 e
assim consecutivamente.
15
Atividade
16
Manipulando a base de dados
Inserindo registros
• Para se adicionar dados a uma tabela, usamos o comando INSERT,
que diz por si só sua função, como o exemplo que segue:
17
Inserção de registros
Exemplo:
o Exemplo:
mysql>SELECT * FROM empregado;
o Resultado:
Lista todos os campos(*) de todos os registros da tabela empregado.
19
Pesquisando registros
o Exemplo:
mysql>SELECT codigo, nome FROM empregado;
o Resultado:
Lista os campos codigo e nome de todos registros da tabela
empregado.
20
Pesquisando registros
o Ação:
mysql>SELECT * FROM empregado WHERE (nome = “Paula
Silva”);
o Resultado:
Lista todos os registros da tabela empregado que possuírem ‘Paula
Silva’ no campo nome.
21
Alterando registros
o Ação:
o Resultado: mysql>UPDATE empregado SET nome =
'Paulo Silva' WHERE nome = 'Paula Silva';
22
Apagando registros
o Ação:
mysql>DELETE FROM empregado WHERE (setor = “5”);
o Resultado:
Apaga da tabela empregado todos os registros que têm o
conteúdo ‘5’ no campo setor.
23
Operadores Aritméticos:
+ Adição
- Subtração
* Multiplicação
/ Divisão
24
Operadores Relacionais:
25
Operadores lógicos:
AND (&&)
o O operador lógico AND, ou E, deve ser usado em uma pesquisa que se deseja
entrar dois valores.
o O AND, verifica ambas as clausulas da comparação, e só retorna algum valor
se as duas tiverem uma resposta verdadeira.
o Observe o exemplo:
mysql>SELECT * FROM empregado WHERE (setor = “1”)
AND (cargo = “Projetista);
NOT (!)
o O operador lógico NOT, ou NÃO, realiza uma pesquisa, excluindo valores
determinados do resultado.
o Observe o exemplo:
mysql>SELECT * FROM empregado WHERE (cargo !=
“Programador”);
Esta pesquisa listará todos os registros da base de dados teste, NÃO (NOT) mostrando
aqueles que possuem ‘Programador’ como conteúdo do campo cargo.
28
ORDERNAÇÃO
ORDER BY
o ORDER BY, ou ORDENAR POR, simplesmente lista os registros,
colocando-os em ordem de acordo com o campo solicitado.
o Exemplo:
SELECT * FROM empregado ORDER BY cargo DESC, nome ASC;
30
Listagem de registros
32
Modificação da estrutura de uma tabela
33
Praticando
34
Exercícios com Operadores
35
Exercícios - Operadores Lógicos
1. Listar programadores do setor 2.
2. Listar empregados que sejam supervisor ou supervisora.
3. Listar empregados que não sejam gerentes.
36
Operadores auxiliares
o BETWEEN
o Definição de intervalos de valores para a cláusula WHERE.
<expressão> [Not] BETWEEN <mínimo> AND <máximo>
o IN
o Algumas vezes não é possível definir um intervalo sequencial de
valores.
<expressão> [NOT] IN <valor1,valor2,...,valorN>37
Exercícios
38
Verificação de caracteres
39
Exercícios
40
Se vazio
Exemplo:
SELECT * FROM empregado WHERE nome IS NULL
41
Funções Agregadas
43
Múltiplas Tabelas
Para exemplificar esse tipo de operação vamos criar duas tabelas com
um campo comum
44
Tabela cliente
45
Tabela conta
46
Relacionamento de tabelas
47
Relacionamento de tabelas
51
Informações Agrupadas
52
Informações Agrupadas
Exemplo:
SELECT codcli, avg(valor)
FROM conta
GROUP BY codcli;
Observe que quando usamos GROUP BY a função AVG() retorna a média calculada
para cada componente do grupo especificado, no caso "codcli".
Informações Agrupadas
Podemos também testar o valor retornado por avg():
Por exemplo: Exibir os clientes que possuem a média dos valores das
contas maior que 2000
SELECT codcli, AVG(valor)
FROM conta
GROUP BY codcli
HAVING AVG(valor)>2000;
Note que a cláusula having usada aqui tem o mesmo significado que where nas
consultas normais.
OBS: a cláusula “WHERE” não pode ser usada para restringir grupos que deverão
ser exibidos. Acompanhando o GROUP BY utilizamos a cláusula “HAVING”.
Rollup
Exemplo:
SELECT codcli, SUM (valor)
FROM conta
GROUP BY codcli WITH ROLLUP;
Rollup
SELECT codcli, SUM(valor)
FROM conta
GROUP BY codcli;
SELECT codcli,SUM(valor)
FROM conta
GROUP BY codcli
WITH ROLLUP;
Rollup
60
Exercícios
Elas podem ser muito úteis quando for necessário selecionar linha a partir de uma
tabela com uma condição que dependa de dados da própria tabela.
Subquery
SELECT codcli
FROM conta
WHERE valor=(SELECT MIN(valor) FROM conta);
Outro exemplo
SELECT ra
FROM alunos
WHERE NOTA=(SELECT MAX(nota) FROM alunos);
Utilizando JOINS
Retorna apenas as linhas das tabelas que sejam comuns entre si, ou seja, as linhas
em ambas as tabelas que possuam o campo de relacionamento com o mesmo
valor.
Irá listar todas as linhas da primeira tabela relacionada no JOIN, logo após a
cláusula FROM.
Neste caso também , quando a linha listada não possuir equivalência na tabela
destino , as colunas da tabela destino aparecerão com valores nulos
Exemplos
Pedido
com os campos:
nr - INTEIRO – CHAVE
nr Cliente valor
cliente – INTEIRO
valor – FLOAT(5,2) 1 2 100.50
2 2 120.00
Lance os seguintes registros: 3 1 20.00
4 3 60.00
5 3 110.00
INNER JOIN
Produtos Promocao
codigo codprod
nome desconto
77
Exercício
78
Aliases para Tabelas
o Quando usamos Join, o nome da tabela é citado para diferenciar a qual campo
se está fazendo referência. Quando a consulta é complexa e envolve várias
tabelas, referenciar o nome da tabela pode aumentar muito o tamanho da
consulta e em algumas ferramentas como Delphi, há um limite de 255
caracteres para a consulta.
o Para criar uma alias para uma tabela, basta acrescentar um identificador à
frente do nome da tabela. A partir de então, basta utilizar este alias para se
referenciar a tabela.
SELECT nome, nr, valor FROM pedido p INNER JOIN cli c ON (p.cliente=c.codigo);
79
Exercícios
82
Exercícios
1. Exibir quantos carros tem cada proprietário que possui carros, ou seja, quem
não possui nenhum carro não deve ser exibido.
83
Voltando agora a trabalhar com as tabelas já feitas
anteriormente:
Cli Pedido
84
Execute o comando:
Exercícios:
1. Exibir o total dos pedidos por cliente:
85
Verifique a tabela Empregados criada anteriormente, como
mostra a figura abaixo:
1. Faça uma consulta para verificar a média de salários de cada setor, porém
apresente resposta apenas para setores com mais de 2 empregados.
2. Faça uma consulta para verificar a média de salários de cada setor, porém
apresente resposta apenas para setores com média maior que R$1600,00.
OBS: a cláusula “WHERE” não pode ser usada para restringir grupos que deverão
ser exibidos. Acompanhando o GROUP BY utilizamos a cláusula “HAVING”.
87
Exercícios com Subquery
88
Para o exercício de cliente e conta :
4. Exiba a cidade dos cliente que possuem conta acima do valor médio
das contas
Exercícios
Criar três tabelas no banco de dados: funcionarios, pagamentos e descontos.
90
o CREATE TABLE funcionarios(
codigo_funcionario INT,
nome VARCHAR(50) )
o CREATE TABLE pagamentos(
codigo_pagto INT,
codigo_funcionario INT,
valor DECIMAL(10,2) )
o CREATE TABLE descontos(
codigo_desconto INT,
codigo_funcionario INT,
valor DECIMAL(10,2) )
91
Inserindo dados...
Funcionarios
1 Luis
2 Marina
3 Letícia
4 Gustavo
5 Mateus
92
Inserindo dados...
Pagamentos
1 100
1 200
3 300
5 400
5 500
93
Inserindo dados...
Descontos
1 50
2 20
5 30
94
Exemplo de Inner Join
95
Apesar de termos cinco funcionários na tabela, ele mostrou apenas três, o motivo
é que apenas estes três tem pagamentos. Veja que o INNER JOIN fez uma junção
entre funcionarios e pagamentos e desconsiderou os funcionários sem
pagamentos.
96
Inner join com três tabelas
SELECT f.nome, p.valor as pagamento, d.valor AS desconto
FROM funcionarios f
INNER JOIN pagamentos p ON f.codigo_ funcionario = p.codigo_ funcionario
INNER JOIN descontos d ON f.codigo_funcionario = d.codigo_ funcionario
97
Neste caso apenas dois funcionários foram
mostrados já que incluímos na consulta os
descontos, ou seja, a leitura que esta consulta
fez é: mostrar funcionários que tem pagamentos
e descontos.
98
Exemplo de Left join
SELECT f.nome, p.valor AS pagamento
FROM funcionarios f
LEFT JOIN pagamentos p ON f.codigo_ funcionario= p.codigo_ funcionario;
99
Os funcionários 3 e 5 não tem pagamentos, mas
ainda assim eles apareceram na consulta, já que a
função LEFT JOIN considera apenas a coluna da
esquerda e retorna NULL (nulo) quando a coluna da
direita não tiver um valor correspondente.
100
Incluindo o desconto...
SELECT f.nome, p.valor as pagamento, d.valor AS desconto
FROM funcionarios f
LEFT JOIN pagamentos p ON f.codigo_ funcionario= p.codigo_ funcionario
LEFT JOIN descontos d ON f.codigo_ funcionario= d.codigo_ funcionario
101
O que fizemos foi uma espécie de LEFT JOIN em cascata.
Útil quando queremos partir de uma base (funcionarios) e
listar todas as correspondências ou não das tabelas
(pagamentos e descontos) a ela relacionadas
102
Criando Tabelas
103
Carregando dados em tabela vazia
o Se você está começando com uma tabela vazia, um caminho fácil para
preencher é criar um arquivo de texto contendo uma linha para cada um de
seus produtos, então carregue os conteúdo do arquivo dentro da tabela com
uma declaração única.
1 '' 2
2 'aaa' 1.5
105
Carregando dados em tabela vazia
Para carregar o arquivo de texto “fornecimento.txt" dentro da tabela de produtos
use este comando:
106
Exercícios
1. Exiba produto, fornecedor e preço de quem tem o produto mais caro
da loja.
107
Fazendo perguntas ao MySQL
SELECT VERSION();
SELECT CURRENT_DATE;
SELECT USER();
108
Extras
Podemos usar MySQL como calculadora. Digite na linha de comando:
SELECT 2+2;
SELECT PI();
SELECT COS(PI());
SELECT COS(PI()/2);
SELECT COS(PI())/2;
109
Extras
SELECT ROUND(PI(),10);
SELECT SQRT(9);
SELECT ABS(-2);
SELECT MOD(5,2);
SELECT CHAR_LENGTH('Paulo');
111
Funções String
SELECT SUBSTRING(‘Unicamp',5);
-> ‘amp'
SELECT SUBSTRING(‘Unicamp',5,2);
-> ‘am'
112
Funções String
SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
-> 'www.mysql'
SELECT UCASE(‘Paulo');
-> ‘PAULO’
SELECT Upper(‘Paulo');
-> ‘PAULO’
SELECT LCASE('MYSQL');
-> 'mysql‘
SELECT Lower('MYSQL');
-> 'mysql'
114
Exercícios
1. Exiba o nome de todos os empregados que tem o mesmo cargo que a
Silvia Soares ( obs. Não importa o sexo do funcionário)
115
Funções Data
SELECT DAYOFWEEK (‘2007-09-15’);
-> 7
SELECT WEEKDAY(‘2007-09-15’);
-> 5 OBS:(0 = Segunda, 1 = Terça, ... 6 = Domingo)
117
Indexação de Tabelas
o Índices permitem encontrar registros com um valor específico de um
campo mais rapido.
118
Indexação de Tabelas
o A indexação precisa ser usada com cuidado pois causa lentidão, principalmente
nas operações de atualização de dados (update).
o Chave primária não devem ser indexados pois o fato de ser chave primária já
cria indiretamente uma indexação.
119
Indexação de Tabelas
o Quando consultas são realizadas com grande frequência sobre um campo que
não é definido como chave primária.
o Exemplo: Pode-se consultar cliente pelo código ou pelo CNPJ. 120
Indexação de Tabelas
121
Indexação de Tabelas
122
Chave Estrangeira
o A restrição de chave estrangeira especifica que o valor da coluna (ou
grupo de colunas) deve corresponder a algum valor que existe em
uma linha de outra tabela.
123
Exemplo
124
Exemplo
CREATE TABLE notas (
ra INT NOT NULL,
curso_id INT NOT NULL,
date DATE NOT NULL,
nota DOUBLE NOT NULL,
PRIMARY KEY(ra, curso_id, date),
INDEX i2 (curso_id),
FOREIGN KEY (ra) REFERENCES aluno(ra) ON DELETE CASCADE,
FOREIGN KEY (curso_id) REFERENCES cursos(id) ON DELETE RESTRICT
) ENGINE=InnoDB;
125
Integridade
o A tabela Notas define duas restrições de chave estrangeira, fazendo
referência à tabela aluno e à tabela cursos.
126
Integridade
O InnoDB implementa as seguintes restrições de integridade:
• SET NULL e SET DEFAULT (atribuem os valores DEFAULT ou NULL para as chaves
estrangeiras cujos registros relacionados foram excluídos)
Integridade
o No exemplo é possível que um curso possua várias avaliações em datas
distintas. Neste caso, foram criadas as tabelas como tipo InnoDB (TYPE=InnoDB),
para que as regras de integridade sejam respeitadas.
o No caso da tabela de cursos, não será possível remover um curso que possua
notas cadastradas para ele.
128
Integridade
Além da restrição ON DELETE, o InnoDB permite também o ON UPDATE, que aplica
as restrições no caso de atualizações dos campos relacionados entre as tabelas.
129
Integridade
o É importante ressaltar que o FOREIGN KEY não cria automaticamente um índice
na(s) coluna(s) referenciada(s). É necessário criar explicitamente um índice nas
colunas que serão chaves estrangeiras.
o Caso não seja criado o índice nas chaves estrangeiras, o MySQL exibirá o erro
"ERROR 1005: Can't create table 'notas.frm' (errno:
150)“. Significa que há uma definição incorreta das chaves estrangeiras.
130