Banco de Dados
O comando SELECT
SELECIONANDO DADOS
[email protected]
1
Tô ligado nas paradas!!!
Até aqui já aprendi...
• Criar e Usar Bancos de Dados
• Criar e Apagar Tabelas
• Inserir dados na tabela
• Selecionar todos dados da tabela
[email protected]
2
Problema Inicial
• Temos uma tabela de Contatos com os campos nome, telefone, cidade e e-mail.
• Tenho em torno de 3.000 contatos adicionados e desejo encontrar um telefone de um amigo
específico.
• O comando abaixo resolve?
SELECT * FROM Contatos
BANCO DE DADOS - [email protected]
3
Melhorando o SELECT
SELECT * FROM Contatos
WHERE nome = ‘Emanuel’;
• O WHERE diz ao seu SGBD que você quer procurar algo específico.
• O * está dizendo ao sistema para retornar os valores de TODAS as colunas da tabela.
[email protected]
4
Trabalhando com as Aspas
• Os tipos de dados VARCHAR, CHAR, BLOB, DATE e TIME precisam de aspas simples.
• Os tipos numéricos como DEC e INT não precisam.
• E se precisarmos inserir ou consultar um texto que contenha aspas simples?
• Ex: CIDADE – Grover´s Mill
SELECT * FROM Contatos
WHERE cidade = ‘Grover\´s Mill’;
SELECT * FROM Contatos
WHERE cidade = ‘Grover´´s Mill’;
BANCO DE DADOS - [email protected]
5
E se eu precisar de apenas algumas
colunas?
• É comum você precisar dos dados de apenas alguns campos específicos, em vez de todos
retornados pelos (*).
• Você pode selecionar apenas as colunas que você deseja visualizar:
SELECT nome, telefone FROM Contatos
WHERE cidade = ‘Campina Grande’;
• Esta é uma boa prática, pois tornam os resultados mais rápidos. Você perceberá isso, quando
estiver usando SQL junto das linguagens de programação.
BANCO DE DADOS - [email protected]
6
Resumo da ópera...
• Use aspas simples nas suas cláusulas WHERE quando for
selecionar os campos textos
• Não use aspas simples quando for selecionar os campos
numéricos
• Use o * no seu comando SELECT quando quiser selecionar
todas as colunas
• Se tiver inserido sua consulta e o sistema SQL não finalizar o
processo, procure se há falta de aspas simples.
• Quando puder, selecione colunas específicas na sua tabela ao
invés de usar SELECT *
BANCO DE DADOS - [email protected]
7
Combinando consultas
• E se minha lista tiver várias pessoas com nome de MARIA?
• Para refinar a consulta, podemos combinar comparações com a palavra-chave AND.
SELECT nome, telefone FROM Contatos
WHERE nome = ‘Maria’ AND cidade = ‘Recife’;
• Outros operadores de comparação:
=
<>
<
>
<=
>=
Igual
Diferente
Menor
Maior
Menor ou igual
Maior ou igual
SELECT nome FROM Produtos
WHERE preco > 10.50 AND quantidade >= 10;
BANCO DE DADOS - [email protected]
8
Dados de Texto com Operadores de
Comparação
• Operadores de comparação servem para campos textos?
• Sim. Os operadores de comparação avaliam tudo
alfabeticamente.
SELECT nome, telefone FROM Contatos
WHERE nome >= ‘A’ AND nome < ‘E’;
• Serão retornados todos os contatos em que o nome comece com
A, B, C ou D.
BANCO DE DADOS - [email protected]
9
Ser OU não SER?
SELECT nome, telefone
FROM Contatos
WHERE cidade =
‘Campina Grande’;
SELECT nome, telefone
FROM Contatos
WHERE cidade = ‘João
Pessoa’;
SELECT nome, telefone
FROM Contatos
WHERE cidade =
‘Campina Grande’ OR
cidade=‘João Pessoa’;
• Podemos combinar duas consultas usando a palavra-chave OR.
• Esta condição exibe registros quando quaisquer das condições
forem encontradas.
• Não confunda AND com OR.
BANCO DE DADOS - [email protected]
10
Combinando AND e OR
SELECT nome, telefone
FROM Contatos
WHERE nome =
‘Emanuel’
OR nome = ‘Elvis‘
AND cidade = ‘Campina
Grande’
SELECT nome, telefone
FROM Contatos
WHERE (nome =
‘Emanuel’
OR nome = ‘Elvis‘)
AND cidade = ‘Campina
Grande’
SELECT nome, telefone
FROM Contatos
WHERE nome =
‘Emanuel’
OR (nome = ‘Elvis‘
AND cidade = ‘Campina
Grande’)
• Você pode combinar comparações com vários “AND” e “OR”.
• Com o auxílio de parênteses, podemos isolar determinadas comparações e mudar o sentido das
consultas.
BANCO DE DADOS - [email protected]
11
Comparando com o desconhecido...
• Você pode comparar valores desconhecidos com a palava-chave IS NULL.
SELECT nome, telefone FROM Contatos
WHERE cidade = NULL;
SELECT nome, telefone FROM Contatos
WHERE cidade = ‘NULL’;
SELECT nome, telefone FROM Contatos
WHERE cidade IS NULL;
BANCO DE DADOS - [email protected]
12
A palavra chave LIKE
• Imagine que eu tivesse na minha tabela de Contatos várias pessoas com nome MARIA
complementado com diversos sobrenomes diferentes.
• Ex: Maria José, Maria do Socorro, Maria do Rosário, etc.
• Se eu simplesmente comparasse com o nome MARIA, nenhum registro com os nomes do
exemplo seriam retornados.
SELECT nome, telefone FROM Contatos
WHERE nome = ‘Maria’;
• Para conseguir selecionar todas estas MARIAS utilizaremos a palavra-chave LIKE com o
complemento dos caracteres coringas ‘%’ e ‘_’
• % substitui qualquer número de caracteres desconhecidos.
• _ substitui apenas um caractere desconhecido.
BANCO DE DADOS - [email protected]
13
Caracteres coringas...
SELECT nome, telefone FROM Contatos
WHERE nome LIKE ‘Maria%’;
• Retorna todos as pessoas que começam com o nome Maria.
SELECT nome, telefone FROM Contatos
WHERE nome LIKE ‘%Maria%’;
• Retorna todas as pessoas que tem Maria em alguma parte do nome.
SELECT nome, telefone FROM Contatos
WHERE nome LIKE ‘_ia’;
• Retorna todos as pessoas que tem três letras no nome, onde a segunda letra é
obrigatoriamente i e a terceira letra a.
SELECT nome, telefone FROM Contatos
WHERE nome LIKE ‘_ia%’;
• Retorna todos as pessoas que a segunda letra é obrigatoriamente i e a terceira letra
a.
BANCO DE DADOS - [email protected]
14
Aqui entre nós!!!
SELECT nome, preco FROM Produtos
WHERE quantidade >= 10 AND quantidade <= 20;
• Ao invés de usarmos comparações como a do exemplo acima para delimitar alcances, podemos
usar a palavra-chave BETWEEN.
• BETWEEN é equivalente a usar >= e <=, porém não precisa repetir as comparações.
SELECT nome, preco FROM Produtos
WHERE quantidade BETWEEN 10 AND 20;
BANCO DE DADOS - [email protected]
15
Assassinando a cláusula OR
• Imagine que você quer procurar os telefones de Maria, José,
Antônio e Socorro.
SELECT nome, telefone FROM Contatos
WHERE nome = ‘Maria’ OR nome = ‘José’ OR nome =
‘Antônio’ OR nome = ‘Socorro’;
• Para simplificar este tipo de seleção, usamos a palavra-chave IN.
SELECT nome, telefone FROM Contatos
WHERE nome IN (‘Maria’, ‘José’, ‘Antônio’,
‘Socorro’);
• Para fazer a seleção inversa e selecionar o telefone de todos,
menos dos quatro relatados, usamos a cláusula NOT IN.
SELECT nome, telefone FROM Contatos
WHERE nome NOT IN (‘Maria’, ‘José’, ‘Antônio’,
‘Socorro’);
BANCO DE DADOS - [email protected]
16
O último NOT
• O NOT também pode ser usado junto com BETWEEN e LIKE da mesma forma que fizemos com o
IN.
• Nesse caso, é importante lembrar que o NOT será logo após o WHERE.
SELECT nome, preco FROM Produtos
WHERE NOT quantidade BETWEEN 10 AND 20;
SELECT nome, telefone FROM Contatos
WHERE NOT nome LIKE ‘%Maria%’ AND NOT nome LIKE ‘%José%’;
BANCO DE DADOS - [email protected]
17
Dúvidas Finais???
[email protected]
18
BIBLIOGRAFIA
• ELMASRI, Ramez; A C Navathe, Shamkant B. Sistemas de Banco de Dados. Pearson, 2006.
• DATE, C. J. Introdução aos Sistemas de Banco de Dados, Campus, 2005.
• HEUSER, Carlos Alberto. Projeto de Banco de Dados. Editora Sagra-Luzzatto, 2004.
• BEIGHLEY, Lynn. Use a Cabeça! SQL. Alta Books, 2008.
[email protected]
19
Download

slide