Escolar Documentos
Profissional Documentos
Cultura Documentos
Por Uianes
Obra livre
MYSQL
Por Uianes
1 O que é SQL?
SQL é a abreviação de Structured Query Language, ou, em
Português, Linguagem de Consulta Estruturada. É uma linguagem que
permite acessar e manipular uma base de dados. Embora o SQL seja
padronizado pela ANSI/ISO, existem diferentes versões. Em nosso
curso, utilizamos o MySQL. No entanto, programadores ao redor do
mundo podem optar por utilizar MariaDB, PostgreSQL, Oracle, entre
tantas outras opções.
Tecnologia open-source;
Gratuito;
Rápido;
Relacional.
Considerando que o foco deste ano é o desenvolvimento de
tecnologias web, iremos utilizar um servidor de Banco de Dados
que permita a integração com o servidor Apache utilizado na
disciplina de Programação II.
Abra o menu iniciar.
Apesar de utilizarmos, no Brasil, o nome "Banco de Dados", é mais
adequado o termo "Base de Dados". Para fins didáticos, vamos
considerar o conceito de "Banco de Dados" como um conjunto de
várias bases de dados, e a "Base de Dados" como o conjunto de
tabelas relacionadas entre si.
Portanto, iniciamos a construção do nosso banco de dados pela
criação da base de dados.
SHOW DATABASES;
Cuidado! Caso você tenha criado uma Base de Dados que precisa ser
excluída, você pode utilizar o comando:
USE nomeDaBaseDeDados;
Uma tabela em um "Banco de Dados" é composta por colunas e
linhas. Em termos de "Banco de Dados", chamamos as colunas de
ATRIBUTOS, enquanto as linhas podem ser chamadas de REGISTROS ou
TUPLAS, sendo o segundo nome o mais comum.
PRIMARY KEY(cliente_id)
);
6 Tipos de dados
Cada atributo deve possuir um tipo. Os tipos são textuais,
numéricos ou de data e hora.
A chave primária, chamada de Primary Key, é utilizada para
identificar cada tupla (registro) da tabela. A chave primária
sempre será um valor único e não pode ser nula. Toda tabela deve
ter somente uma chave primária.
PRIMARY KEY(nomeAtributo)
Exemplo:
PRIMARY KEY(cliente_id)
);
Exemplo:
Exemplo:
FOREIGN KEY(nomeAtributo)
REFERENCES nomeOutraTabela(nomeAtributo)
CONSTRAINT FK_NomeFK
FOREIGN KEY(nomeAtributo)
REFERENCES nomeOutraTabela(nomeAtributo)
Exemplo:
PRIMARY KEY(cliente_id)
);
PRIMARY KEY(venda_id),
);
REFERENCES nomeOutraTabela(nomeAtributo);
Ou:
FOREIGN KEY(nomeAtributo)
REFERENCES nomeOutraTabela(nomeAtributo);
Exemplo:
REFERENCES Cliente(cliente_id);
8 Auto incremento
O auto incremento é uma funcionalidade comum em bancos de dados
que permite que os valores de uma coluna numérica sejam gerados
automaticamente. Geralmente utilizamos essa função em chaves
primárias.
Exemplo:
PRIMARY KEY(cliente_id)
);
AUTO_INCREMENT=100;
9 Declaração de Nulos
Cada atributo pode receber valores nulos, por padrão. Um atributo
nunca deixa de receber um valor; quando um determinado registro
fica "em branco", automaticamente ele será preenchido com o valor
"NULL". A restrição NOT NULL torna uma coluna como obrigatória,
pois ela deverá ser preenchida, não aceitando mais um valor nulo.
Basta adicionar a seguinte restrição ao atributo:
NOT NULL
10 Valores únicos
Existem momentos em que é necessário que um valor, de determinada
coluna, nunca seja repetido, como uma chave primária, um número
de documento ou um endereço de e-mail, entre outras
possibilidades. A instrução PRIMARY KEY faz isso automaticamente
com a coluna em que é adicionada. Nas demais colunas, é possível
utilizar uma restrição de valor único, chamada de UNIQUE. Para
adicionar essa restrição utilizamos a seguinte sintaxe:
PRIMARY KEY(id),
UNIQUE(atributo)
);
PRIMARY KEY(id),
);
ADD UNIQUE(atributo1);
E para apagar:
Caso você tenha criado uma tabela e deseja apagá-la, basta
utilizar o seguinte comando:
SHOW DATABASES;
USE nomeDataBase;
SHOW TABLES;
INSERT INTO, traduzido como INSERIR DENTRO DE, é um dos comandos
básicos em SQL, utilizado para criar novos registros na tabela,
ou seja, gravar novos valores/tuplas/linhas.
Exemplo:
PRIMARY KEY(cliente_id),
UNIQUE(cliente_email)
);
VALUES ("uianes.biondo@iffarroupilha.edu.br");
cliente_nome VARCHAR(100),
PRIMARY KEY(id),
UNIQUE(cliente_email)
);
VALUES ("uianes.biondo@iffarroupilha.edu.br");
cliente_id→1
cliente_nome → NULL
cliente_email → uianes.biondo@iffarroupilha.edu.br
Outra observação!
VALUES ("uianes.biondo@iffarroupilha.edu.br");
Caso você tenha criado uma tabela e deseja apagar somente os
valores inseridos nela, sem apagar a própria tabela, basta
utilizar o seguinte comando:
TRUNCATE nomeTabela;
Em vários momentos anteriormente, foi utilizado um determinado
tipo de comando para alterar a estrutura dos exemplos. A
estrutura que permite modificar uma tabela é o ALTER TABLE. Essa
operação permite realizar 3 funções: adicionar algo na estrutura
da tabela, remover algo na estrutura da tabela ou modificar algo
na estrutura da tabela. Essas 3 funções envolvem as colunas da
tabela e/ou as restrições dela.
ALTER TABLE
Exemplo:
Exemplo:
Exemplo:
15 Restrições (CONSTRAINT)
As restrições definem certos limites para alguns
campos/colunas/atributos. Podemos utilizá-las junto com a
instrução CREATE TABLE ou com ALTER TABLE. Elas estabelecem
regras específicas para os dados da tabela. A sintaxe de uma
restrição é:
);
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT
CREATE INDEX
16 Verificações (CHECK)
Anteriormente, já foi demonstrada a utilização das restrições NOT
NULL, UNIQUE, PRIMARY KEY e FOREIGN KEY. A restrição CHECK
realiza uma verificação para determinados valores, ou seja, o
CHECK limita os valores que determinado atributo pode receber.
Sua sintaxe é a seguinte:
CHECK (condição)
<> Diferente de
PRIMARY KEY(aluno_id)
);
Exemplo:
E para apagar:
PRIMARY KEY(aluno_id)
);
PRIMARY KEY(aluno_id)
);
UPDATE é a instrução utilizada para atualizar ou modificar um
valor já registrado. Por exemplo, se você cadastrou um nome e
percebeu que ele foi digitado errado, é possível resolver o
problema utilizando o comando UPDATE. Sintaxe:
UPDATE nomeTabela
WHERE condição;
WHERE id_aluno = 1;
Comando:
UPDATE Alunos
WHERE id_aluno = 1;
Depois:
Depois:
UPDATE Alunos
Resultado:
WHERE condição;
WHERE id_aluno = 1;
Depois:
A instrução SELECT é usada para selecionar dados de um banco de
dados. O SGBD vai criar uma tabela de resultados. Sintaxe:
Exemplo:
SELECT nome_aluno
FROM Alunos;
Resultado:
FROM Alunos;
Resultado:
SELECT *
FROM nomeTabela;
Exemplo:
SELECT *
FROM Alunos;
Resultado:
Perceba que na lista de cidades dos alunos, há 3 pessoas da mesma
cidade. Caso você queira visualizar uma lista de valores não
repetidos, podemos utilizar o comando SELECT DISTINCT.
FROM Alunos;
Resultado:
FROM Alunos;
Resultado:
Podemos utilizar 5 tipos de operadores em SQL: Aritméticos, Bit-
a-Bit (Bitwise), Comparativos, Compostos e Lógicos.
Aritméticos:
+ Adição
- Subtração
* Multiplicação
/ Divisão
% Resto (Módulo)
Bit-a-Bit (Bitwise):
| Bitwise OR
^ Bitwise exclusive OR
Comparativos:
= Igualdade
<> Diferença
!= Diferença
+= Adiciona igualmente
-= Subtrai igualmente
*= Multiplica igualmente
/= Divide igualmente
%= Módulo igualmente
Lógicos:
BETWEEN →
Retorna "TRUE" se um valor da subconsulta estiver em
um determinado intervalo;
22 WHERE
A cláusula WHERE é usada para definir condições, utilizamos WHERE
junto com os comandos SELECT, UPDATE, DELETE, entre outros.
Sintaxe:
FROM nomeTabela
WHERE condição;
Exemplo:
SELECT nome_aluno
FROM Alunos
23 AND, OR e NOT
AND, OR e NOT podem ser utilizados em vários contextos,
principalmente com WHERE.
Sintaxe AND:
FROM nomeTabela
Sintaxe OR:
FROM nomeTabela
Sintaxe NOT:
FROM nomeTabela
Exemplo:
SELECT nome_aluno
FROM Alunos
SELECT nome_aluno
FROM Alunos
SELECT nome_aluno
FROM Alunos
id d l
24 ORDER BY
A instrução ORDER BY é usada para ordenar os resultados de uma
consulta SQL. Por padrão, o ORDER BY retornará os resultados em
ordem crescente (ascendente). No entanto, é possível inverter a
ordem e obter os resultados em ordem descendente. A sintaxe é a
seguinte:
FROM nomeTabela
Exemplo:
FROM Alunos
Resultado:
FROM Alunos
ORDER BY nome_aluno DESC;
FROM Alunos
Resultado:
Sintaxe:
FROM nomeTabela
WHERE condição
Como dito anteriormente, nunca um registro do banco de dados
permanecerá vazio (em branco). Quando for possível, o SGBD fará a
inserção do valor NULL automaticamente. Também é possível
realizar essa inserção manualmente através do comando INSERT
INTO.
IS NULL
IS NOT NULL
Exemplo:
FROM nomeTabela
LIMIT número;
Exemplo:
FROM Alunos
LIMIT 2;
FROM Alunos
LIMIT 2;
27 MIN e MAX
As funções MIN e MAX servem para retornar, respectivamente, o
menor e o maior valor de uma coluna. Considere a seguinte tabela
de exemplo:
FROM Produto;
FROM Produto;
As funções matemáticas COUNT, AVG e SUM podem ser utilizadas em
algumas situações. COUNT realiza uma contagem de determinada
condição. AVG retorna a média de uma coluna e SUM retorna a soma
dos valores. Tanto COUNT, AVG e SUM podem ser aplicados junto com
a cláusula WHERE, contanto que WHERE seja colocado na última
linha.
FROM Produto;
FROM Produto
FROM Produto;
FROM Produto;
SELECT COUNT(*)
FROM Produto
29 LIKE e Wildcards
O operador LIKE é utilizado em conjunto com a cláusula Wildcards.
Ambas instruções são utilizadas junto com o WHERE.
Sintaxe:
FROM nomeTabela
FROM Alunos
Tipos de padrões:
SELECT cidade_aluno
FROM Alunos
30 IN
O operador IN permite retornar valores de uma lista em um comando
WHERE. Sintaxe:
FROM nomeTabela
SELECT nome_aluno
FROM Alunos
SELECT nome_aluno
FROM Alunos
Caso você queira mostrar o nome dos alunos, mas somente aqueles
cuja cidade apareça na tabela "Cidades", podemos fazer isso
através de um IN.
SELECT nome_aluno
FROM Alunos
31 BETWEEN
O operador BETWEEN permite retornar valores de um intervalo
(numérico, textual ou data) em um comando WHERE. Sintaxe:
FROM nomeTabela
SELECT nome_produto
FROM Produto
SELECT nome_produto
FROM Produto
SELECT *
FROM Produto
WHERE preço_produto BETWEEN 1 AND 10 AND id_produito IN (1, 2,
3);
FROM nomeTabela
SELECT nome_produto
FROM Produto
32 ALIASES
Você percebeu que quando utilizamos COUNT, AVG ou SUM, o
resultado aparece como: COUNT(nome_atributo). Caso você queira
mudar o nome desse resultado, utilizamos Aliases.
FROM nomeTabela;
Exemplo:
FROM Alunos;
Resultado:
Exemplo:
FROM Alunos AS a;
Exemplo:
FROM Alunos;
Resultado:
33 JOINS
Uma cláusula JOIN faz uma ponte entre duas tabelas relacionadas
entre si através de uma PK (Primary Key) e uma FK (Foreign Key).
O JOIN realiza a união entre os valores de duas ou mais tabelas
diferentes, permitindo combinar informações relevantes de ambas
as tabelas em uma única consulta.
FROM nomeTabela1
Tipos de JOIN:
INNER JOIN
LEFT JOIN
RIGHT JOIN
CROSS JOIN
34 INNER JOIN
INNER JOIN → Retorna todos os registros em comum entre duas
tabelas.
Sintaxe:
FROM nomeTabela1
ON nomeTabela1.PK = nomeTabela2.FK;
Exemplo:
Tabela 01
Tabela 02
FROM Alunos AS a
ON a.id_aluno = m.id_aluno;
Resultado:
FROM ((tabela1 AS a
35 LEFT JOIN
LEFT JOIN →Retorna todos os registros da primeira tabela
(tabela da esquerda) e todos os registros em comum com a segunda
tabela (tabela da direita).
Sintaxe:
FROM nomeTabela1
ON nomeTabela1.PK = nomeTabela2.FK;
Cliente:
Responsável:
Transportadora:
Pedido:
FROM cliente AS c
ON c.cliente_id = p.cliente_id;
Resultado:
36 RIGHT JOIN
RIGHT JOIN →Retorna todos os registros da segunda tabela
(tabela da direita) e todos os registros em comum com a primeira
tabela (tabela da esquerda).
Sintaxe:
FROM nomeTabela1
ON nomeTabela1.FKTabela2 = nomeTabela2.PKTabela2;
Para demonstrar o ID do Pedido e o nome de todos os empregados,
podemos realizar um RIGHT JOIN, mas perceba que caso algum
empregado não tenha pedidos, ele também aparecerá na lista, pois
o RIGHT JOIN mostrará o nome de todos os empregados (tabela da
direita).
FROM pedido AS p
ON p.responsável_id = r.responsável_id;
Resultado:
37 CROSS JOIN
CROSS JOIN → Retorna todos os registros em das duas tabelas.
SELECT coluna1, coluna2, ...
FROM nomeTabela1
FROM cliente AS c
Resultado:
Perceba que nem todos os clientes realmente fizeram os pedidos
que aparecem no resultado. Isso ocorre porque o CROSS JOIN
retorna todos os registros, tendo relação ou não. Caso você
adicione a cláusula WHERE, o CROSS JOIN torna-se um INNER JOIN.
FROM cliente AS c
FROM cliente AS c
ON c.cliente_id = p.cliente_id;
Resultado:
38 SELF JOIN
SELF JOIN une os elementos de uma tabela com outros elementos da
própria tabela. Sintaxe:
WHERE condição;
Resultado:
39 UNION
A instrução UNION é usada para unir dados de duas ou mais
tabelas. O SGBD criará uma tabela de resultados com os valores
das tabelas combinadas. É importante que toda vez que um UNION
for utilizado, o mesmo número de colunas seja solicitado em ambas
as tabelas. Sintaxe:
SELECT coluna1
FROM nomeTabela1
UNION
SELECT coluna1
FROM nomeTabela2;
Exemplo:
Tabela "cidade" →
Tabela "cliente" →
UNION
Resultado:
UNION ALL
SELECT cidade_nome FROM cidade;
Resultado:
40 GROUP BY
A instrução GROUP BY é usada para agrupar os resultados de
funções de agregação, como COUNT(), MAX(), MIN(), SUM() e AVG().
Imagine que você queira exibir a contagem de alunos por cidade;
isso sempre foi possível, porém, envolveria utilizar a opção de
COUNT para cada cidade registrada. Com o GROUP BY, é possível
simplificar o processo. Sintaxe:
FROM nomeTabela
WHERE condição
GROUP BY nomeColuna
ORDER BY nomeColuna;
Exemplo:
FROM Alunos
GROUP BY cidade_aluno;
Resultado:
FROM Alunos
GROUP BY cidade_aluno
Resultado:
Observe as tabelas:
→ Alunos
→ Nota
Comando:
GROUP BY alunos.nome_aluno;
Resultado:
41 HAVING
A cláusula HAVING pois adicionada ao MySQL para condições que
envolvam funções numéricas, como COUNT(), MAX(), MIN(), SUM() e
AVG(). A cláusula WHERE não pode ser usada em conjunto com essas
funções. Sintaxe:
FROM nomeTabela
WHERE condição
GROUP BY nomeColuna
HAVING condição
ORDER BY nomeColuna;
FROM Alunos
GROUP BY cidade_aluno
42 EXISTS
O operador EXISTS é usado para verificar a existência de um dado
determinado dentro de uma subconsulta. Sintaxe:
FROM nomeTabela
WHERE EXISTS
nome_aluno
Alunos;
SELECT nome_aluno
FROM alunos
WHERE EXISTS
Resultado:
43 ANY e ALL
Os operadores ANY e ALL permitem que você faça uma comparação
entre um valor e uma lista de valores. Eles permitem verificar se
uma determinada condição é verdadeira para algum ou todos os
valores da lista, respectivamente.
O operador ANY: Realiza a comparação entre um valor e uma lista
de valores. Caso exista um registro na lista que seja igual ao
valor comparado, o operador ANY retornará TRUE.
FROM nomeTabela
FROM nomeTabela);
Exemplo:
→ Tabela "Produto":
→ Tabela "Pedido":
(SELECT produto_id
FROM pedido
Resultado:
FROM nomeTabela;
FROM nomeTabela
(SELECT coluna
FROM nomeTabela);
Exemplo:
44 INSERT SELECT
A instrução INSERT SELECT faz uma cópia de uma tabela em outra
tabela, desde que elas tenham o mesmo número de colunas. Sintaxe:
SELECT *
FROM nomeTabela1;
Exemplo:
→ Tabela "Produto"
→ Tabela "Produto2"
Comando:
SELECT *
FROM produto;
Resultado:
45 CASE
A instrução CASE é usada para selecionar uma instrução de um
conjunto de instruções. Sintaxe:
CASE
...
ELSE resultadoX
END;
Exemplo:
SELECT pedido.pedido_id, produto.produto_nome,
CASE
FROM pedido
ON pedido.produto_id = produto.produto_id;
Resultado:
46 NULL FUNCTIONS
As funções IFNULL() e COALESCE() são utilizadas em SQL para lidar
com valores nulos em consultas e expressões. Ambas têm o
propósito de retornar um valor alternativo caso a expressão ou
coluna especificada seja nula.
Exemplo:
Comando:
FROM produto;
Resultado:
Alternativa:
FROM produto;
47 COMMENTS
Comentários em MySQL são úteis para criarmos anotações no código.
O SGBD (Sistema Gerenciador de Banco de Dados) ignora os trechos
comentados e não executa aquelas instruções.
/* Isso é um comentário
de várias linhas*/
CREATE INDEX é uma instrução SQL utilizada para criar um índice
em uma tabela de um banco de dados. Um índice é uma estrutura de
dados que melhora a velocidade de busca e recuperação de
informações em uma tabela, funcionando de forma semelhante a um
índice em um livro, onde você pode localizar rapidamente uma
página específica com base nas palavras-chave.
Sintaxe:
CREATE INDEX nomeIndex
ON nomeTabela(coluna1, coluna2...);
Exemplo:
ON produto(produto_nome);
Para evitar que outro Index seja criado para uma mesma coluna, é
possível usar a cláusula UNIQUE.
Exemplo:
ON produto(produto_nome);
Exemplo:
49 VIEWS
Toda vez que você deseja realizar uma busca é necessário executar
um SELECT. Mas e se for necessário realizar a mesma busca várias
vezes? Para facilitar o desenvolvimento de atividades como essa,
existe o comando VIEW.
Sintaxe:
Exemplo:
SELECT nome_aluno
FROM alunos;
50 MySQL Functions
Lista de funções em MySQL.
→ Funções de texto:
ASCII: Retorna o código ASCII de um caractere específico.
→ Funções numéricas:
ABS: Retorna o valor absoluto de um número (sem sinal).
→ Funções avançadas:
BIN: Retorna a representação binária de um número.