EMPREGADO (numemp, nome, numsec, cargo, chefe,
salário, comissão)
SEÇÃO (numsec, nome, cidade)
1) Mostre o nome e a cidade da seção 70
RESPOSTA:
SELECT Nome, Cidade FROM seção WHERE
NumSec=70;
EMPREGADO (numemp, nome, numsec, cargo, chefe,
salário, comissão)
SEÇÃO (numsec, nome, cidade)
2) Selecione o cargo, salário e comissão dos
empregados cuja comissão excedeu o salário.
RESPOSTA
SELECT Nome, Cargo, Salário, Comissão FROM
Empregado WHERE Comissão>Salário;
EMPREGADO (numemp, nome, numsec, cargo, chefe,
salário, comissão)
SEÇÃO (numsec, nome, cidade)
3) Mostre os nomes de todas as seções que ficam
em Campinas.
RESPOSTA:
SELECT Nome FROM Seção WHERE
Cidade=’Campinas’;
EMPREGADO (numemp, nome, numsec, cargo, chefe,
salário, comissão)
SEÇÃO (numsec, nome, cidade)
4) Selecione todos os cargos (sem repetição).
RESPOSTA:
SELECT DISTINCT Cargo FROM Empregado;
EMPREGADO (numemp, nome, numsec, cargo, chefe,
salário, comissão)
SEÇÃO (numsec, nome, cidade)
5) Mostre o nome, cargo e número de seção dos
empregados que trabalham nas seções 20, 30 e
40.
RESPOSTA:
SELECT Nome, Cargo, Numsec FROM Empregado
WHERE Numsec IN (20, 30, 40);
EMPREGADO (numemp, nome, numsec, cargo, chefe,
salário, comissão)
SEÇÃO (numsec, nome, cidade)
6) Calcule e mostre quanto é que a companhia gasta
com engenheiros e programadores em cada ano.
RESPOSTA:
SELECT SUM(Salário+Comissão)*12 FROM Empregado
WHERE Cargo IN (‘Engenheiro’, ‘Programador’);
EMPREGADO (numemp, nome, numsec, cargo, chefe,
salário, comissão)
SEÇÃO (numsec, nome, cidade)
7) Mostre o número, nome e cargo de todos os
empregados, ordenando por nome de empregado.
RESPOSTA:
SELECT NumEmp, Nome, Cargo FROM Empregado
ORDER BY Nome;
EMPREGADO (numemp, nome, numsec, cargo, chefe,
salário, comissão)
SEÇÃO (numsec, nome, cidade)
8) Para cada seção, mostre o número de seção, total
de empregados e total dos salários (Salário mais
Comissão).
RESPOSTA:
SELECT Numsec, COUNT(*), SUM(Salário+Comissão)
FROM Empregado GROUP BY Numsec;
EMPREGADO (numemp, nome, numsec, cargo, chefe,
salário, comissão)
SEÇÃO (numsec, nome, cidade)
9) Mostre o número da seção, cargo, número de
empregados e salário médio para cada cargo, por
seção, para as seções 10, 20 e 30.
RESPOSTA:
SELECT Numsec, Cargo, COUNT(*), AVG(Salário)
FROM Empregado WHERE Numsec IN (10, 20, 30)
GROUP BY Numsec, Cargo;
EMPREGADO (numemp, nome, numsec, cargo, chefe,
salário, comissão)
SEÇÃO (numsec, nome, cidade)
10) Para cada seção, mostre quanto se paga por ano a
vendedores. Mostre também o número da seção e o
total de vendedores.
RESPOSTA:
SELECT Numsec, COUNT(*),
SUM(Salário+Comissão)*12 FROM Empregado
WHERE Cargo=’Vendedor’ GROUP BY Numsec;
EMPREGADO (numemp, nome, numsec, cargo, chefe,
salário, comissão)
SEÇÃO (numsec, nome, cidade)
11) Mostre qual o salário médio de todos os
cargos, exceto o de presidente.
RESPOSTA:
SELECT Cargo, AVG(Salário) FROM Empregado
WHERE Cargo!=’Presidente’ GROUP BY Cargo;
EMPREGADO (numemp, nome, numsec, cargo, chefe,
salário, comissão)
SEÇÃO (numsec, nome, cidade)
12) Mostre o nome e o cargo do empregado que
ganha o maior salário total.
RESPOSTA:
SELECT Nome, Cargo FROM Empregado WHERE
Salário+Comissão=(SELECT
MAX(Salário+Comissão) FROM Empregado);
EMPREGADO (numemp, nome, numsec, cargo, chefe,
salário, comissão)
SEÇÃO (numsec, nome, cidade)
13) Liste o nome, cargo e salário dos empregados que têm o
mesmo salário e cargo dos empregados da Seção 10
(excluindo os próprios empregados da Seção 10).
RESPOSTA:
SELECT X.Nome, X.Cargo, X.Salário FROM Empregado X,
Empregado Y WHERE X.Numsec!=10 AND
X.Salário=Y.Salário
AND X.Cargo=Y.Cargo
AND Y.Numsec=10;
EMPREGADO (numemp, nome, numsec, cargo, chefe,
salário, comissão)
SEÇÃO (numsec, nome, cidade)
14) Mostre o número da seção, nome, cargo e salário total
do empregado com o segundo maior salário total.
RESPOSTA:
SELECT Numsec, Nome, Cargo, Salário+Comissão FROM
Empregado WHERE Salário+Comissão=(SELECT
MAX(Salário+Comissão) FROM Empregado WHERE
NumEmp NOT IN (SELECT NumEmp FROM Empregado
WHERE Salário+Comissão=(SELECT MAX(Salário+Comissão)
FROM Empregado)));
EMPREGADO (numemp, nome, numsec, cargo, chefe,
salário, comissão)
SEÇÃO (numsec, nome, cidade)
15) Mostre o número da seção, nome, cargo, salário total e
comissão, dos vendedores da seção 20 que ganham o maior
salário total, dentre todos os vendedores desta seção 20. Ordene
o resultado por salário e por ordem decrescente.
RESPOSTA:
SELECT Numsec, Nome, Cargo, Salário+Comissão, Comissão
FROM Empregado WHERE Cargo=’Vendedor’ AND
(Salário+Comissão=(SELECT MAX(Salário+Comissão) FROM
Empregado WHERE Cargo=’Vendedor’ AND Numsec =20)) AND
(Numsec =20) ORDER BY Salário DESC;
EMPREGADO (numemp, nome, numsec, cargo, chefe,
salário, comissão)
SEÇÃO (numsec, nome, cidade)
16) Mostre o número da seção e salário médio das
seções que têm um salário médio superior a
200000
RESPOSTA:
SELECT Numsec, AVG(Salário) FROM Empregado
GROUP BY Numsec HAVING AVG(Salário)>200000;
EMPREGADO (numemp, nome, numsec, cargo, chefe,
salário, comissão)
SEÇÃO (numsec, nome, cidade)
17) Selecione o número da seção e número de
vendedores, para cada seção que tenha mais do que 2
vendedores.
RESPOSTA:
SELECT Numsec, COUNT(*) FROM Empregado WHERE
Cargo=’Vendedor’ GROUP BY Numsec HAVING
COUNT(*)>2;
EMPREGADO (numemp, nome, numsec, cargo, chefe,
salário, comissão)
SEÇÃO (numsec, nome, cidade)
18) Liste o número da seção e salário médio para as
seções com maior salário médio.
RESPOSTA:
SELECT Numsec, AVG(Salário) FROM Empregado
GROUP BY Numsec HAVING AVG(Salário) = (SELECT
MAX(AvgSal) FROM (SELECT AVG(Salário) AS AvgSal
FROM Empregado GROUP BY Numsec));
EMPREGADO (numemp, nome, numsec, cargo, chefe,
salário, comissão)
SEÇÃO (numsec, nome, cidade)
19) Mostre o nome, o cargo e salário dos empregados
das seções com maior salário médio.
RESPOSTA:
SELECT Nome, Cargo, Salário FROM Empregado
Where numsec IN (SELECT Numsec FROM Empregado
GROUP BY Numsec HAVING AVG(Salário) = (SELECT
MAX(AvgSal) FROM (SELECT AVG(Salário) AS AvgSal
FROM Empregado GROUP BY Numsec)));
EMPREGADO (numemp, nome, numsec, cargo, chefe,
salário, comissão)
SEÇÃO (numsec, nome, cidade)
20) Mostre o nome, o cargo e salário dos empregados das
seções que ficam em Campinas
SELECT Nome, Cargo, Salário FROM Empregado WHERE Numsec
IN (SELECT Numsec FROM Seção WHERE Cidade = ‘Campinas’);
OUTRA IMPLEMENTAÇÃO
SELECT Empregado.Nome, Cargo, Salário FROM Empregado,
Seção
WHERE Seção.Numsec = Empregado.Numsec AND Cidade =
‘Campinas’;
EMPREGADO (numemp, nome, numsec, cargo, chefe,
salário, comissão)
SEÇÃO (numsec, nome, cidade)
21) Mostre o nome das Seções com mais que 1
funcionário
RESPOSTA:
SELECT Seção.Nome FROM Empregado, Seção
WHERE Seção.Numsec = Empregado.Numsec GROUP
BY Seção.Nome
HAVING Count(*) > 1;
EMPREGADO (numemp, nome, numsec, cargo, chefe,
salário, comissão)
SEÇÃO (numsec, nome, cidade)
22) Mostre o nome da Seção que tem o maior número de
funcionários
RESPOSTA:
SELECT Seção.Nome FROM Empregado, Seção
WHERE Seção.Numsec = Empregado.Numsec GROUP BY
Seção.Nome
HAVING Count(*) = (SELECT Max(MaisFunc) FROM (SELECT
Count(*) AS MaisFunc FROM Empregado GROUP BY
Numsec));
Operação entre conjuntos
UNION, INTERSECT e MINUS
UNION  União entre Conjuntos
INTERSECT  Intersecçãoentre Conjuntos
MINUS  Diferença entre Conjuntos
EMPREGADO (numemp, nome, numsec, cargo, chefe, salário, comissão)
SEÇÃO (numsec, nome, cidade)
Vamos supor duas consultas isoladas, mas que devolvem dados extraídos
de um mesmo domínio, no caso, NUMEMP
a) Quais os números dos empregados que trabalham em alguma seção da
cidade de Campinas?
SELECT numemp FROM empregado, seção WHERE
empregado.numsec = seção.numsec AND cidade = ‘Campinas’
b) Quais os números dos empregados que têm cargo de gerente?
SELECT numemp FROM empregado WHERE
Cargo = ‘Gerente’
EMPREGADO (numemp, nome, numsec, cargo, chefe, salário,
comissão)
SEÇÃO (numsec, nome, cidade)
Quais os números dos empregados que trabalham em alguma
seção da cidade de Campinas ou têm cargo de gerente?
(SELECT numemp FROM empregado, seção WHERE
empregado.numsec = seção.numsec AND cidade = ‘Campinas’)
UNION
(SELECT numemp FROM empregado WHERE
Cargo = ‘Gerente’)
EMPREGADO (numemp, nome, numsec, cargo, chefe, salário,
comissão)
SEÇÃO (numsec, nome, cidade)
Quais os números dos empregados que trabalham em alguma
seção da cidade de Campinas e têm cargo de gerente?
(SELECT numemp FROM empregado, seção WHERE
empregado.numsec = seção.numsec AND cidade = ‘Campinas’)
INTERSECT
(SELECT numemp FROM empregado WHERE
Cargo = ‘Gerente’)
EMPREGADO (numemp, nome, numsec, cargo, chefe, salário,
comissão)
SEÇÃO (numsec, nome, cidade)
Quais os números dos empregados que trabalham em alguma
seção da cidade de Campinas mas não têm cargo de gerente?
(SELECT numemp FROM empregado, seção WHERE
empregado.numsec = seção.numsec AND cidade = ‘Campinas’)
MINUS
(SELECT numemp FROM empregado WHERE
Cargo = ‘Gerente’)
Download

EMPREGADO (numemp, nome, numsec, cargo, chefe, salário