Você está na página 1de 6

Consultas em SQL

1. Estrutura Bsica Consiste em trs clusulas: SELECT: Seleciona quais campos sero exibidos na consulta de dados. FROM: Determina quais tabelas sero utilizadas na consulta. WHERE: Define uma condio de seleo para ser atendida na consulta. Exemplo: SELECT Cliente_Nome, Cliente_Fone FROM Cadastro_Clientes WHERE Saldo>=1200,00 2. Operaes com Tuplas Duplicadas Para suprimir linhas repetidas (duplicadas) em um resultado de uma consulta, deve-se usar a palavra-chave DISTINCT depois do SELECT. Exemplo: SELECT DISTINCT Cliente_Nome, Data, Valor_Cheque FROM Cadastro_Emitentes_Cheque_Sem_Fundos WHERE Valor_Cheque>500,00 *OBS: Para ser listado todos os atributos da tabela usa-se SELECT *. 3. Operaes com conjuntos A linguagem SQL inclui operaes como: UNION: realiza a unio de dados de duas consultas SQL. Exemplo: Para achar todos os clientes com emprstimo, conta corrente ou ambos na agncia Itau-Centro, temse: SELECT Cliente_Nome FROM Deposito WHERE Agencia_Nome= Itau-Centro UNION SELECT Cliente_Nome FROM Emprestimo WHERE Agencia_Nome= Itau-Centro *OBS: Como padro a operao UNION elimina as tuplas duplicadas. Para reter duplicaes precisamos escrever UNION ALL. J o padro SELECT mantm os dados duplicados, que para evit-los deve-se usar SELECT DISTINCT. INTERSECT: realiza a interseo de dados de duas consultas SQL. Exemplo: Para achar todos os clientes que possuem emprstimo e uma conta na agncia Itau-Centro, tem-se: SELECT DISTINCT Cliente_Nome FROM Deposito WHERE Agencia_Nome= Itau-Centro INTERSECT SELECT DISTINCT Cliente_Nome

FROM Emprestimo WHERE Agencia_Nome= Itau-Centro MINUS: realiza a interseo de dados de duas consultas SQL. Exemplo: Para achar todos os clientes da agncia Itau-Centro que possuem uma conta, mas no possuem emprstimo, tem-se: SELECT DISTINCT Cliente_Nome FROM Deposito WHERE Agencia_Nome= Itau-Centro MINUS SELECT DISTINCT Cliente_Nome FROM Emprestimo WHERE Agencia_Nome= Itau-Centro 4. Predicados e Ligaes Quando duas ou mais restries forem requeridas na clusula WHERE, devemos usar os conectivos lgicos AND, OR ou NOT, no lugar dos smbolos matemticos , e . O operador de comparao BETWEEN tambm pode ser usado na clusula WHERE. Exemplo: SELECT Conta_Numero FROM Deposito WHERE Saldo BETWEEN 900 AND 1200 *OBS: Da mesma forma, podemos usar o operador de comparao NOT BETWEEN. A SQL inclui tambm operadores de substituio de cadeia: 1) (%) Por cento o caracter % substitui qualquer subcadeia. 2) ( _ ) Sublinhado o caracter _ substitui qualquer caracter. *OBS: Os caracteres maisculos e minsculos so tratados distintamente, ou seja, no so substituveis entre si. Exemplo: MAR% substitui qualquer cadeia comeando com mar: Marilia, Marcos, Martha, ... _ _ _ substitui qualquer cadeia de trs caracteres: Mau, Bom, Fui, ... Para usar os padres necessrio o operador LIKE. Exemplo: SELECT Cliente_Nome FROM Cliente WHERE rua LIKE %IST% Neste caso, todos os clientes que residem na Autonomistas seriam listados. 5. Membros de Conjuntos A SQL permite que as tuplas (linhas) de uma relao, possam ser verificadas se so membros de uma outra relao. O conectivo IN testa os membros do conjunto. O conectivo NOT IN testa a ausncia dos membros de um conjunto. Exemplo1: Encontre todos os clientes que possuem uma conta e um emprstimo na agencia Itau-Centro.

SELECT DISTINCT Cliente_Nome FROM Emprstimo WHERE Agencia _Nome = Itau-Centro AND Cliente_Nome IN (SELECT Cliente_Nome FROM Deposito WHERE Agencia_Nome = Itau-Centro) * O conectivo IN indica que o campo est na tabela indicada. Exemplo2: Encontre todos os clientes que possuem uma conta e no tem um emprstimo na agencia ItauCentro. SELECT DISTINCT Cliente_Nome FROM Deposito WHERE Agencia _Nome = Itau-Centro AND Cliente_Nome NOT IN (SELECT Cliente_Nome FROM Emprestimo WHERE Agencia_Nome = Itau-Centro) 6. Comparao com Conjuntos Quando deseja-se comparar contedo entre tabelas, no deve-se usar a expresso adotando o IN. As construes permitidas so: > SOME (maior que algum), < SOME, <= SOME, >= SOME, <> SOME, > ALL (maior que todos), < ALL, >= ALL, <=ALL e <> ALL. Exemplo1: SELECT Agencia_Nome FROM Agencia WHERE Saldo_Medio > SOME (SELECT Saldo_Medio FROM Agencia WHERE Agencia_Cidade = Osasco) Exemplo2: SELECT Agencia_Nome FROM Agencia WHERE Saldo_Medio > ALL (SELECT Saldo_Medio FROM Agencia WHERE Agencia_Cidade = Osasco) Tabela Agencia Saldo_Medio 800,00 300,00 100,00 Resultado Parcial Saldo_Medio 800,00 300,00

Codigo 001 002 005

Cidade Osasco Osasco SP

Resultado Agencia_Nome Osasco 7. Testando Tuplas Vazias

Na SQL pode-se testar se em uma subconsulta existe um tupla em seus resultados. A construo EXISTS retorna o valor TRUE se o argumento da subconsulta est NO VAZIO. Exemplo: SELECT Cliente_Nome FROM Clientes WHERE EXISTS (SELECT * FROM Deposito WHERE Deposito.Cliente_Nome=Cliente.Cliente_Nome AND Agencia_Nome = Itau-Centro) AND NOT EXISTS (SELECT * FROM Emprestimo WHERE Emprestimo.Cliente_Nome = Cliente.cliente_Nome AND Agencia_Nome = Itau-Centro) 8. Ordenando a Exibio de Tuplas A clusula ORDER BY apresenta o resultado de uma consulta em uma ordem determinada. Pode-se usar DESC para a ordem crescente ou ASC para ordem ascendente. Exemplo: SELECT * FROM Emprstimo ORDER BY Quantia DESC, Emprestimo_Numero ASC 9. Funes Agregadas A SQL oferece a habilidade para computar funes em grupos de tuplas usando a clusula GROUP BY. Algumas das funes que podem ser usadas com esta clusula so: 1) Mdia AVG 2) Mnimo MIN 3) Mximo MAX 4) Total SUM 5) Contador COUNT Exemplo1: SELECT Agencia_Nome, AVG(Saldo) FROM Deposito GROUP BY Agencia_Nome Exemplo2: SELECT Agencia_Nome, COUNT(DISTINCT Cliente_Nome) FROM Deposito GROUP BY Agencia_Nome *OBS: A funo AVG calcula a mdia para cada agrupamento. A clusula GROUP BY no organiza os agrupamentos.

Exerccio
Questes 1) Efetue o mapeamento inverso dos modelos relacionais normalizados abaixo (I, II, III, IV), informando as regras de mapeamento adotada no MER gerado.

2) Crie comandos SQL para as respectivas consultas abaixo (definido por grupo de TCC), considerando os esquemas relacionais fornecidos.

I) Bds Empresa Funcionarios(Matricula, Nome, Endereco, Cod_Cargo, Cod_Lotacao) Cargos(Codigo, Descricao, Salario) Lotacoes(Codigo, Descricao, Local) Apresente as seguintes consultas em SQL a) Encontrar a matrcula e o nome de todos os funcionrios lotados no Departamento de Informtica, com cargo de Analista de Sistemas. b) Encontrar o nome e o endereo de todos os funcionrios que possuem Silva em alguma parte do nome e que trabalhem no Andar Trreo da empresa. c) Encontrar o nome de todos os funcionarios que possuem salrio superior a R$2500,00. d) Encontrar a descrio dos cargos cujo salrio esteja abaixo da mdia de salrios da empresa. e) Encontrar o nome de todos os funcionrios que possuem salrio entre R$300,00 e R$5800,00.

II) Bds Fornecimento Produtos(Codigo, Descricao, Unidade, Valor_Venda, Quantidade) Fornecedores(Codigo, Razao_Social, Endereco, Telefone) Fornecido(CodProd, CodFornec, Valor_Compra) Apresente as seguintes consultas em SQL a) Encontrar a descrio e o valor da venda de todos os produtos fornecidos pelo fornecedor IBM. b) Encontrar o nome e o endereo de todos os fornecedores cujo prefixo do telefone seja 555 e que fornecem o produto Parafuso sextavado de 5mm.

III) Bds SeguroAuto Automoveis(Placa, Marca, Modelo, Ano, CodCor, CPFProprietario, Status) *O campo Status detalha: OK / Roubado Proprietarios(CPFProp, Nome, Endereco, Cidade) TabCores(Codigo, Descricao) Apresente as seguintes consultas em SQL a) Encontrar o nome e o endereo (com repeties) de todos os proprietrios cujo carro seja de cr branca, o ano de fabricao esteja entre 1970 e 1990 e que tenha sido roubado. b) Encontrar todos os proprietrios que possuam o veculo Gol de cr azul.

IV) Bds Aluguel DVDs(Codigo, Descricao, QuantCopias, CodGenero, Status) *O campo Status detalha: OK Disponvel / EP Empretado Generos(Codigo, Descricao) Usuarios(Codigo, Nome, Endereco, Telefone) EmpDVD(CodDVD, CodUsuario, DtEmprestimo, DtDevolucao) Apresente as seguintes consultas em SQL a) Listar o codigo e descrio de todos os DVDs que foram locados pelo usurio Jorge entre 20/03/2013 e 29/04/2013. b) Encontrar a descrio de todos os DVDs de Fico Cientfica locados por Ana Maria da Luz entre 5/08/2012 e 9/01/2013.