Upload
elaine-cecilia-gatto
View
134
Download
1
Embed Size (px)
Citation preview
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto1
SQL – SELECT BANCO DE DADOS
Prof.ª M.ª Elaine Cecília Gatto
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto2
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.
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto3
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
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto4
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)
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto5
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.
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto6
SELECT• SINTAXE
SELECT campo1, campo2, campo3, ... , campoN FROM tabela1, tabela2, ..., tabelaNWHERE condiçãoGROUP BY ....HAVING ....ORDER BY ....
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto7
SELECIONANDO TODOS OS REGISTROS
• SINTAXE
SELECT codigo, localidade FROM codigopostal;
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto8
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
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto9
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
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto10
PROJEÇÃO• PROJEÇÃO: Obter apenas algumas
das colunas da tabela
• Especificar as colunas que deseja na clausula select
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto11
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
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto12
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
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto13
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
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto14
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
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto15
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
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto16
OPERADORES RELACIONAISOperador 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
Exemplo:
SELECT * FROM pessoa WHERE idade = 35
SELECT id, nome, salario FROM pessoa WHERE id >= 18
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto17
OPERADORES RELACIONAIS
• Exemplo: selecionar a descrição de todas as mensagens cujo ID seja diferente de 20
SELECT mensagem FROM mensagem WHERE id <> 20
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto18
OPERADORES LÓGICOSOPERADOR 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
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto19
OPERADORES LÓGICOSSELECT 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)
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto20
BETWEEN• Permite especificar intervalos de
valores
• SINTAXE:
SELECT .... FROM .... WHERE valor [NOT] BETWEEN valor1 AND valor2
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto21
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
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto22
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
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto23
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)
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto24
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)
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto25
IN• Condições equivalentes
• Valor = 1 OR valor =2 OR valor 3
• Valor IN (1, 2, 3)
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto26
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’)
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto27
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)
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto28
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
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto29
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!
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto30
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!
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto31
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
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto32
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!
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto33
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
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto34
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
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto35
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
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto36
LIKE• Exemplo: selecionar os códigos
postais associados a LISBOA
• SELECT * FROM codigopostal WHERE localidade = ‘LISBOA’
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto37
LIKE• CARACTERES CORINGAS: usados
para comparar partes de stringsWildcard Significado
% Qualquer conjunto de zero ou mais caracteres
_ Um caractere qualquer
* Qualquer conjunto de zero ou mais caracteres
? Um caractere qualquer
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto38
LIKE• EXEMPLO: selecionar todas as
mensagens começadas com T
SELECT * FROM mensagem WHERE mensagem LIKE ‘T%’
SELECT * FROM mensagem WHERE mensagem LIKE ‘T*’
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto39
LIKE• EXEMPLO: selecionar todas as
mensagens acabadas com ‘as’
SELECT * FROM mensagem WHERE mensagem LIKE ‘%as’
SELECT * FROM mensagem WHERE mensagem LIKE ‘*as’
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto40
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*’
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto41
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%’
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto42
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*’
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto43
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%’)
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto44
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*’
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto45
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 ‘%’
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto46
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
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto47
LIKEWildcard 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 stringNo entanto, o último caractere não pode ser numérico
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto48
Precedência de operadores
Parenteses
Multiplicação e divisão
Adição e subtração
NOT
AND
OR
01/05/2023Prof.ª M
.ª Elaine Cecília Gatto49
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