Aluno: Lucas Antunes Tambara
Matrícula: 2710246
E-mail: ltambara@inf.ufsm.br
Disciplina: Fundamentos de Bancos de Dados (ELC119)
Semestre: 2/2008
.:: Consultas com sub-consultas em SQL ::.
Enunciados:
link.
Resolução:
-Encontrar nomes de cervejas que nenhuma pessoa bebe.
SELECT cerveja.nome FROM cerveja WHERE NOT EXISTS (SELECT bebe.cerveja FROM bebe WHERE cerveja.nome = bebe.cerveja);
-Encontrar pessoas que bebem cerveja mas não freqüentam bares.
SELECT bebe.pessoa FROM bebe WHERE NOT EXISTS (SELECT frequenta.pessoa FROM frequenta WHERE bebe.pessoa = frequenta.pessoa);
-Encontrar cervejas vendidas abaixo do preço médio.
SELECT v1.cerveja FROM vende AS v1 , (SELECT AVG(preco) AS media FROM vende) AS v2 WHERE v1.preco < v2.media
-Obter, para cada bar, o total de pessoas (clientes) que o freqüentam.
SELECT bar, COUNT(pessoa) FROM frequenta GROUP BY bar;
-Encontrar bares que vendem pelo menos uma cerveja que 'Fulano' bebe.
SELECT vende.bar FROM (bebe JOIN vende ON bebe.cerveja = vende.cerveja) WHERE bebe.pessoa='Fulano';
-Encontrar as cervejas vendidas pelo mais baixo preço.
SELECT v1.cerveja FROM vende AS v1, (SELECT MIN(preco) AS minimo FROM vende) AS v2 WHERE v1.preco = v2.minimo;
-Encontrar nomes de fabricantes de cada cerveja que 'Fulano' bebe.
SELECT cerveja.fabricante FROM cerveja WHERE EXISTS (SELECT cerveja FROM bebe WHERE pessoa='Fulano' AND cerveja.nome = bebe.cerveja);
-Encontrar cervejas que são o único produto de seu fabricante.
SELECT c1.nome FROM cerveja AS c1, (SELECT fabricante, COUNT(fabricante) AS quantidade FROM cerveja GROUP BY fabricante) AS c2 WHERE c2.quantidade=1 AND c2.fabricante=c1.fabricante;
-Encontrar bares que sao frequentados por Fulano OU que vendem cerveja a menos de R$ 2,00.
(SELECT bar FROM frequenta WHERE pessoa = 'Fulano') UNION (SELECT bar FROM vende WHERE preco<2.00);
-Encontrar pessoas e cervejas tal que: a pessoa bebe a cerveja E a pessoa freqüenta um bar que vende a cerveja.
(SELECT * FROM bebe) INTERSECT (SELECT frequenta.pessoa, vende.cerveja FROM frequenta JOIN vende ON frequenta.bar = vende.bar);
-Encontrar cervejas do fabricante 'Ambev' que NÃO são vendidas no bar 'Bar BQ'.
(SELECT nome AS cerveja FROM cerveja) EXCEPT (SELECT cerveja FROM vende WHERE bar='Bar BQ');
-Por que a consulta abaixo provoca um erro? Como corrigi-lo?
SELECT pessoa FROM frequenta WHERE bar IN (SELECT * FROM vende);
-É preciso especificar uma coluna compatível com 'bar' na segunda seleção. Não se pode comparar uma coluna com uma tabela.
SELECT pessoa FROM frequenta WHERE bar IN (SELECT bar FROM vende);
-O que há de errado com a consulta abaixo?
(SELECT * FROM cerveja WHERE fabricante = 'Ambev') EXCEPT (SELECT * FROM vende WHERE bar='Bar BQ');
-As tabelas não são compatíveis.
Versão correta:
(SELECT nome AS cerveja FROM cerveja WHERE fabricante = 'Ambev') EXCEPT (SELECT cerveja FROM vende WHERE bar='Bar BQ');