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’)