1. SQL – SELECT
BANCO DE DADOS
Prof.ª M.ª Elaine Cecília Gatto
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 1
2. Introdução
• SQL:
• Linguagem do tipo declarativa
• Permite ao usuário expressar aquilo que
pretende sem ter que entrar em grandes
detalhes sobre a localização física dos
componentes, etc.
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 2
3. Introdução
• Os usuários apenas indicam aquilo que
pretendem sem dizer exatamente de que
forma o computador terá que operar para
obter os resultados solicitados.
• Linguagens declarativas são mais flexíveis:
referenciam os seus elementos através de um
nome compreensível e não através de uma
posição física em disco ou memória
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 3
4. Introdução
• SQL é composta por:
• DML: data manipulation language ou linguagem
de manipulação de dados (select, insert, etc.)
• DDL: data definition language ou linguagem de
definição de dados (create, alter, drop, etc)
• DCL: data control language ou linguagem de
controle de dados (grant, revoke, etc)
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 4
5. Introdução
• SQL é orientada para o processamento de
conjuntos (set-based language)
• COBOL é orientada a processamento de
arquivos
• SELECT: comando usado para realizar uma
consulta ao banco de dados relacional.
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 5
6. SELECT
• SINTAXE
SELECT campo1, campo2, campo3, ... , campoN
FROM tabela1, tabela2, ..., tabelaN
WHERE condição
GROUP BY ....
HAVING ....
ORDER BY ....
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 6
7. SELECIONANDO TODOS OS REGISTROS
• SINTAXE
SELECT codigo, localidade FROM codigopostal;
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 7
8. SELECIONANDO TODAS AS COLUNAS
• SINTAXE
SELECT * FROM codigopostal;
SELECT * FROM pessoa;
• A ordem em que as colunas são apresentadas é a
ordem em que elas foram colocadas na
CLAUSULA SELECT
• Se usar o * é a ordem em que foram criadas
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 8
9. SELECIONANDO TODAS AS COLUNAS
• Se quisermos alterar a ordem de apresentação
das colunas na saída da consulta (resultado),
então basta colocar os nomes dos campos
conforme se deseja
• SELECT nome, id, idade, codigopostal, telefone,
salario FROM pessoa
• Pode-se ainda selecionar mais de uma vez a
mesma coluna
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 9
10. PROJEÇÃO
• PROJEÇÃO: Obter apenas algumas das colunas
da tabela
• Especificar as colunas que deseja na clausula
select
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 10
11. PROJEÇÃO
• EXEMPLO: escrever o comando SQL que
permite obter informação sobre a
IDENTIFICAÇÃO, o NOME e o CÓDIGO POSTAL
de todas as pessoas existentes no banco de
dados.
SELECT id, nome, codigopostal FROM pessoa
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 11
12. RESTRIÇÃO: where
• Permite restringir o número de linhas a serem
apresentadas
• Apenas serão apresentadas algumas das
linhas que contem a informação desejada
• Uma condição é um caso particular de uma
expressão que devolve sempre um resultado
do tipo lógico booleano
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 12
13. RESTRIÇÃO: where
• EXEMPLO: selecionar todos os indivíduos da
tabela PESSOA
Select * from pessoa
Select * from pessoa where true
Select * from pessoa where 1
Select * from pessoa where 1 = 1
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 13
14. RESTRIÇÃO: where
• EXEMPLO: fazer uma consulta à tabela
PESSOA, da qual não resulte qualquer linha
• Para obter um resultado VAZIO, é necessário
especificar uma condição que seja falsa para
todos os registros
Select * from pessoa false
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 14
15. RESTRIÇÃO: where
• Os SGBD não aceitam TRUE/FALSE, apenas o
ACCESS da Microsoft aceita!
• Select * from pessoa where id <> id
• Select * from pessoa where 1 <> 1
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 15
16. OPERADORES RELACIONAIS
Operador Descrição Exemplo Resultado
= Igual a 7 = 5 FALSE
> Maior que 7 > 5 TRUE
< Menor que 7 < 5 FALSE
>= Maior ou igual a 7 >= 5 TRUE
<= Menor ou igual a 7 <= 5 FALSE
<> Ou != Diferente 7 != 5 FALSE
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 16
Exemplo:
SELECT * FROM pessoa WHERE idade = 35
SELECT id, nome, salario FROM pessoa WHERE id >= 18
17. OPERADORES RELACIONAIS
• Exemplo: selecionar a descrição de todas as
mensagens cujo ID seja diferente de 20
SELECT mensagem FROM mensagem
WHERE id <> 20
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 17
18. OPERADORES LÓGICOS
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 18
OPERADOR EXEMPLO
AND CONDIÇÃO 1 AND CONDIÇÃO 2
OR CONDIÇÃO 1 OR CONDIÇÃO 2
NOT NOT CONDIÇÃO
EXEMPLO: selecionar o ID, o NOME, a Idade e o SALARIO de todas as
pessoas com idade entre 30 e 40 anos
Select id, idade, salario FROM pessoa WHERE idade >= 30 AND idade <=
40
EXEMPLO: selecionar o id, o nome, a idade e o salário de todas as pessoas
que não fazem parte da seleção anterior
SELECT id, nome, idade, salario FROM pessoa WHERE idade < 30 OR
idade > 40
19. OPERADORES LÓGICOS
SELECT id, nome, idade, salario FROM pessoa
WHERE NOT (idade >= 30 AND idade <= 40)
Select id, nome, idade, salario FROM pessoa
WHERE NOT idade >= 30 AND idade <= 40
SELECT id, nome, idade, salario FROM pessoa
WHERE (NOT (idade >= 30)) AND (idade <= 40)
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 19
20. BETWEEN
• Permite especificar intervalos de valores
• SINTAXE:
SELECT .... FROM .... WHERE valor
[NOT] BETWEEN valor1 AND valor2
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 20
21. BETWEEN
• As seguintes condições são equivalentes
• valor >= valor1 AND valor <= valor2
• (valor >= valor1) AND (valor <= valor2)
• valor Between valor1 AND valor2
• valor NOT BETWEEN valor1 AND valor2
• NOT (valor >= valor1 AND valor <= valor2)
• NOT (valor BETWEEN valor1 AND valor2)
• NOT (valor >= valor1) OR NOT (valor <= valor2)
• valor < valor1 OR valor > valor2
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 21
22. BETWEEN
• EXEMPLO: selecionar o ID, o nome, a idade e o
salário de todas as pessoas com idade entre
30 e 40 anos
SELECT id, nome, idade, salario FROM pessoa
WHERE idade >= 30 AND idade <= 40
SELECT id, nome, idade, salario FROM pessoa
WHERE idade BETWEEN 30 and 40
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 22
23. BETWEEN
• exemplo: selecionar o id, o nome, a idade e o salário de todas as
pessoas que não fazem parte da seleção anterior
Select id, nome, idade, salario FROM pessoa WHERE idade < 30 OR
idade > 40
SELECT id, nome, idade, salario FROM pessoa WHERE NOT (idade >=
30 AND idade <= 40)
SELECT id, nome, idade, salario FROM pessoa WHERE idade NOT
BETWEEN 30 AND 40
SELECT ide, nome, idade, salario FROM pessoa WHERE NOT (idade
BETWEEN 30 AND 40)
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 23
24. IN
• Permite verificar se algo faz ou não parte de
um conjunto de valores especificado entre
parênteses
• SINTAXE:
SELECT ... FROM ... WHERE valor [NOT] IN
(valor1, valor2, ..., valor)
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 24
25. IN
• Condições equivalentes
• Valor = 1 OR valor =2 OR valor 3
• Valor IN (1, 2, 3)
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 25
26. IN
• EXEMPLO: selecionar a lista completa, com
todos os campos, de códigos postais de Lisboa
e tomar
SELECT * FROM postal WHERE localidade =
‘LISBOA’ OR localidade = ‘TOMAR’
SELECT * FROM postal WHERE localidade IN
(‘LISBOA’, ‘TOMAR’)
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 26
27. IN
• EXEMPLO: selecionar os códigos postais que não
pertencem a LISBOA nem a TOMAR
SELECT codigopostal, localidade FROM postal WHERE
localidade <> ‘LISBOA’ AND localidade = ‘TOMAR’
SELECT codigpostal, localidade FROM POSTAL WHERE
localidade NOT IN (‘LISBOA’, ‘TOMAR’)
SELECT localidade, códigopostal FROM postal WHERE
codigopostal NOT IN (1000, 1100, 1200, 1500, 2300)
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 27
28. IS: tratamento de valores nulos
• NULL:
• Valor especial que pode ser atribuído a qualquer
tipo de dados
• Quando presente em um campo indica ausência
de valor
• Permite indicar se existe ou não algum valor já
disponível para um determinado campo
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 28
29. IS: tratamento de valores nulos
• EXEMPLO:
• O valor ZERO não pode ser atribuído a uma
nota de aluno logo no inicio do semestre. Se
isso ocorrer, significa que o aluno tirou ZERO
naquela prova ou trabalho, o que não é
verdade!
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 29
30. IS: tratamento de valores nulos
• EXEMPLO:
• O valor ZERO não pode ser atribuído a uma
nota de aluno logo no inicio do semestre. Se
isso ocorrer, significa que o aluno tirou ZERO
naquela prova ou trabalho, o que não é
verdade!
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 30
31. IS: tratamento de valores nulos
• IS é o operador utilizado para realizar as
comparações com valores NULL
• SINTAXE
• SELECT ... FROM ... WHERE campo IS [NOT]
NULL
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 31
32. IS: tratamento de valores nulos
• Exemplo: selecionar os nomes e telefones de
todas as pessoas
• SELECT nome, telefone FROM pessoa
• Alguns SGBDs apresentam o NULL no
resultado, outros não!
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 32
33. IS: tratamento de valores nulos
• EXEMPLO: selecionar o nome das pessoas SEM
telefone
SELECT nome FROM pessoa WHERE telefone IS NULL
• EXEMPLO: selecionar os nomes e os telefones das
pessoas COM telefone
SELECT nome, telefone FROM pessoa WHERE telefone IS
NOT NULL
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 33
34. IS: tratamento de valores nulos
• NULL não é zero e não é uma string vazia
• Uma comparação com NULL tem que ser feita
usando IS
• Se fizer isso, será devolvido para você FALSE
como resposta
• NULL é um indicador de inexistência de valor
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 34
35. LIKE
• LIKE é usado para comparar STRINGS
• Permite resolver alguns problemas naturais que
existem quando se pretende comparar strings
• Permite comparar partes da string
• A comparação de STRING com os operadores
relacionais utiliza sempre, na comparação, a
totalidade da string
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 35
36. LIKE
• Exemplo: selecionar os códigos postais
associados a LISBOA
• SELECT * FROM codigopostal WHERE
localidade = ‘LISBOA’
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 36
37. LIKE
• CARACTERES CORINGAS: usados para
comparar partes de strings
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 37
Wildcard Significado
% Qualquer conjunto de zero ou mais caracteres
_ Um caractere qualquer
* Qualquer conjunto de zero ou mais caracteres
? Um caractere qualquer
38. LIKE
• EXEMPLO: selecionar todas as mensagens
começadas com T
SELECT * FROM mensagem WHERE mensagem
LIKE ‘T%’
SELECT * FROM mensagem WHERE mensagem
LIKE ‘T*’
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 38
39. LIKE
• EXEMPLO: selecionar todas as mensagens
acabadas com ‘as’
SELECT * FROM mensagem WHERE mensagem
LIKE ‘%as’
SELECT * FROM mensagem WHERE mensagem
LIKE ‘*as’
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 39
40. LIKE
• EXEMPLO: selecionar todas as mensagens que
contenham a palavra ‘vendas’ em qualquer
parte da designação
SELECT * FROM mensagem WHERE mensagem
LIKE ‘%vendas%’
SELECT * FROM mensagem WHERE mensagem
LIKE ‘*vendas*’
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 40
41. LIKE
• EXEMPLO: selecionar todas as mensagens que
contenham a string ‘te’
SELECT * FROM mensagem WHERE mensagem
LIKE ‘*te*’
SELECT * FROM mensagem WHERE mensagem
LIKE ‘%te%’
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 41
42. LIKE
• EXEMPLO: selecionar todos os nomes que
contenham a string ‘DA’
SELECT * nome FROM pessoa WHERE nome LIKE
‘%da%’
SELECT * nome FROM pessoa WHERE nome LIKE
‘*da*’
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 42
43. LIKE
• EXEMPLO: selecionar todos os NOMES que NÃO
contenham a string ‘da’
SELECT nome FROM pessoa WHERE nome NOT LIKE
‘%da%’
SELECT nome FROM pessoa WHERE NOT (nome LIKE
‘*da*’)
SELECT nome FROM pessoa WHERE NOT (nome LIKE
‘%da%’)
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 43
44. LIKE
• EXEMPLO: selecionar todos os nomes cujo
segundo caracteres é um ‘a’
SELECT nome FROM pessoa WHERE nome LIKE
‘_a%’
SELECT nome FROM pessoa WHERE nome LIKE
‘?a*’
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 44
45. LIKE
• Quando precisar pesquisar os próprios
caracteres coringas, usar a sintaxe abaixo
• String [NOT] LIKE ‘padrão_de_pesquisa’
ESCAPE ‘caractere’
• Exemplo: selecionar todas as mensagens que
contenham o caractere ‘%’
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 45
46. LIKE
• SELECT mensagem FROM mensagem WHERE
mensagem LIKE ‘%@%%’ ESCAPE ‘@’
• SELECT mensagem FROM mensagem WHERE
mensagem LIKE ‘%=%%’ ESCAPE ‘=’
• % - qualquer conjunto de caracteres à esquerda
• @% - seguido do caractere %
• % seguido de qualquer conjunto de caracteres à
direita
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 46
47. LIKE
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 47
Wildcard DESCRIÇÃO
‘[abc]%’ Qualquer string começada obrigatoriamente por a, b ou c
‘[!abc]%’ Qualquer string não começada por a, b ou c
‘[0-9]%[abc]’ String começada por um digito e terminada pelo caractere a, b ou c
‘[a-zA-Z]_’ String formada unicamente por dois caracteres.
O primeiro é um caractere alfabético minúsculo ou maiúsculo.
O segundo é um caractere qualquer
‘[!0-9]%’ O primeiro caractere não pode ser digito
‘Al[m-r]%’ String começada por Al.
O terceiro caractere terá de estar entre os caracteres ‘m’ e ‘r’
Depois pode aparecer qualquer string
‘Al[m-r]%[!0-9]’ String começada por Al.
O terceiro caractere terá de estar entre os caracteres ‘m’ e ‘r’
Depois pode aparecer qualquer string
No entanto, o último caractere não pode ser numérico
49. Precedência de operadores
• EXEMPLOS:
• SELECT * FROM pessoa WHERE idade <= 27 OR
idade >= 30 AND telefone IS NULL
• SELECT * FROM pessoa WHERE idade <= 27 OR
(idade >= 30 AND telefone IS NULL)
• SELECT * FROM pessoa WHERE (idade <= 27 OR
idade >= 30) AND telefone IS NULL
21/09/2018 Prof.ª M.ª Elaine Cecília Gatto 49