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