Você está na página 1de 10

DCC060 BANCO DE DADOS

PROF. TARCSIO DE SOUZA LIMA

Exerccios Revisionais de SQL


Considere o banco de dados da empresa de transporte areo mostrado abaixo, em que as chaves primrias esto sublinhadas. Construa as seguintes consultas em SQL para este banco de dados relacional. Piloto (codigo_piloto, nome_piloto, salario, gratificacao, companhia, pais) Voo (codigo_voo, aeroporto_origem, aeroporto_destino, hora) Escala (codigo_voo, data_voo, codigo_piloto, aviao) Aeroporto (codigo_aeroporto, nome_aeroporto, cidade, pais)

Escreva expresses em SQL para exibir ou modificar dados no esquema acima.

Bsico (Select, Order By, Like)


1) Os dados de todos os pilotos de companhias brasileiras. 2) Nome de todos os pilotos da Gol. 3) Nome de todos os pilotos, junto com seu salrio e gratificao. 4) Nome de todos os pilotos, junto com o total de seus vencimentos, para todos os pilotos que voam h
pelo menos 5 anos.

5) Nome da cidade e pas de destino do voo JJ230.

SELECT a.cidade, a.pais from aeroporto as a inner join voo as v on a.codigo_aeroporto = CAST(v.aeroporto_destino as INT) where v.codigo_voo = 1;

6) A companhia dos vos escalados para 21/05/2011.

SELECT p.companhia from piloto as p inner join escala as e

on CAST(e.codigo_piloto as INT) = p.codigo_piloto where CAST(e.data_voo as DATE) = DATE('20/08/2010')

7) Cdigo de todos os vos, nome dos pilotos escalados para os mesmos, e respectivos tipo de avio
e companhia.

SELECT e.codigo_voo, p.nome_piloto, e.aviao, p.companhia from piloto as p inner join escala as e on CAST(e.codigo_piloto as INT) = p.codigo_piloto

8) Cdigo de todos os vos e hora de sada, junto com o nome dos pilotos escalados para os mesmos,
e respectivos tipo de avio e companhia, para todos os vos de companhias estrangeiras.

SELECT v.codigo_voo, v.hora, p.nome_piloto, e.aviao, p.companhia from voo as v inner join escala as e on v.codigo_voo = CAST(e.codigo_voo as INT) inner join piloto as p on p.codigo_piloto = CAST(e.codigo_piloto as INT) where UPPER(p.pais) != 'BRAZIL';

9) Cdigo de todos os vos para a Alemanha ou Itlia, com as respectivas data e hora de sada.

SELECT v.codigo_voo, v.hora, e.data_voo from voo as v inner join aeroporto as a on a.codigo_aeroporto = CAST(v.aeroporto_destino as INT) inner join escala as e on v.codigo_voo = CAST(e.codigo_voo as INT) where UPPER(a.pais) = 'BRAZIL' OR UPPER(a.pais) = 'ITALY'

10) A companhia dos pilotos que voam para a Italia.

SELECT p.companhia from piloto as p inner join escala as e on CAST(e.codigo_piloto as INT)= p.codigo_piloto inner join voo as v

on v.codigo_voo = CAST(e.codigo_voo as INT) inner join aeroporto as a on a.codigo_aeroporto = CAST(v.aeroporto_destino as INT) where UPPER(a.pais) = 'ITALY'

11) Destino (nome do aeroporto, cidade e pas) de todos os vos da TAM.

SELECT a.nome_aeroporto, a.cidade, a.pais from piloto as p inner join escala as e on p.codigo_piloto = CAST(e.codigo_piloto as INT) inner join voo as v on CAST(e.codigo_voo as INT) = v.codigo_voo inner join aeroporto as a on a.codigo_aeroporto = CAST(v.aeroporto_destino as INT) where UPPER(p.companhia) = 'TAM'

12) Nome dos aeroportos de origem e de destino de todos os vos marcados para o dia 02/11.

SELECT a.nome_aeroporto as origem, a1.nome_aeroporto as destino from aeroporto as a,aeroporto as a1, escala as e inner join voo as v on v.codigo_voo = CAST(e.codigo_voo as INT) where cast(e.data_voo AS date) = DATE('02/11/2011') and cast(v.aeroporto_origem AS int) = a.codigo_aeroporto and CAST(v.aeroporto_destino AS INT) = a1.codigo_aeroporto;

13) Os aeroportos de destino (nome, cidade) para todos os vos da Gol em Boeing 737.

SELECT a.nome_aeroporto, a.cidade from piloto as p, aeroporto as a, voo as v, escala as e where UPPER(p.companhia) = 'GOL' and e.aviao = 'Boeing 737' and CAST(e.codigo_voo as INT) = v.codigo_voo and CAST(v.aeroporto_destino as INT) = a.codigo_aeroporto

14) Cdigo e horario dos vos internos de todos os pases.


SELECT v.codigo_voo, v.hora, a.pais from voo as v, aeroporto as a, aeroporto as a1 where CAST(v.aeroporto_origem as INT) = a.codigo_aeroporto and CAST(v.aeroporto_destino as INT) = a1.codigo_aeroporto and a.pais = a1.pais

15) Cdigo de todos os vos internacionais da TAM. Dica: Todas as companhias s podem operar a
partir de seu prprio pas, ou retornar a este.

SELECT DISTINCT v.codigo_voo, v.hora, a.pais as origem, a1.pais as destino from voo as v, aeroporto as a, aeroporto as a1, piloto as p where CAST(v.aeroporto_origem as INT) = a.codigo_aeroporto and CAST(v.aeroporto_destino as INT) = a1.codigo_aeroporto and a.pais != a1.pais and p.companhia = 'GOL' order by(origem);

16) Nome de todos os aeroportos onde a Ocean Air opera.

SELECT a.nome_aeroporto, p.companhia from aeroporto as a, voo as v, escala as e, piloto as p where p.codigo_piloto = CAST(e.codigo_piloto as INT) and v.codigo_voo = CAST(e.codigo_voo as INT) and (CAST(v.aeroporto_origem as INT)= a.codigo_aeroporto or CAST(v.aeroporto_destino as INT) = a.codigo_aeroporto) and p.companhia = 'Ocean Air'

17) Cdigo de todos os vos internacionais que as companhias fazem a partir de aeroportos em seus
prprios pases.

SELECT v.codigo_voo, a.pais as origem, p.pais as pais_cia from aeroporto as a1,voo as v inner join escala as e on CAST(e.codigo_voo as INT) = v.codigo_voo inner join piloto as p

on p.codigo_piloto = CAST(e.codigo_piloto as INT) inner join aeroporto as a on CAST(v.aeroporto_origem as INT) = a.codigo_aeroporto where p.pais = a.pais and (CAST(aeroporto_destino as INT)= a1.codigo_aeroporto and p.pais != a1.pais)

18) Nome dos pilotos que voam de MD11 para o seu prprio pas.

SELECT p.nome_piloto, p.pais, a.pais as destino, v.codigo_voo from piloto as p inner join escala as e on CAST(e.codigo_piloto as INT)= p.codigo_piloto inner join voo as v on v.codigo_voo = CAST(e.codigo_voo as INT) inner join aeroporto as a on (CAST(v.aeroporto_destino as INT) = a.codigo_aeroporto and p.pais = a.pais) where e.aviao = 'MD11'

19) Encontre os nomes dos pilotos que comeam com A. 20) Encontre os nomes de todos os pilotos cujo nome no comece pela letra A. 21) Encontre os nomes dos pilotos que sejam parentes da famlia silva, ou seja, contenham Silva no
nome.

22) Encontre os nomes dos pilotos que terminam O. 23) Encontre os nomes dos pilotos que tenham no nome uma segunda letra A. 24) Encontre os nomes dos pilotos que no tem Jnior no nome. 25) Encontre os nomes dos aeroportos que tenham 'POR' ou 'ALE' no nome. 26) Encontre os nomes dos aeroportos que tenha a penltima letra do nome R.

SELECT p.codigo_voo from voo as p where UPPER(p.nome_aeroporto) like '%R_' order by p.nome_aeroporto;

27) Cdigo de todos os vos que iniciam por RG ou JJ, junto com a respectiva companhia. 28) Uma listagem dos nomes dos pilotos ordenados pelo salrio.

29) Uma listagem dos nomes dos pilotos escalados em vos para o Brasil ordenados pelo nome. 30) Uma listagem dos nomes dos aeroportos ordenados pela cidade. 31) Uma listagem da localizao (pais, cidade) dos aeroportos, ordenados por pais e cidade.

Funes Agregadas (Max, Min, Count, Sum, Distinct, Group By, Having)
1) O salrio do piloto mais bem pago da Gol. 2) O menor, maior, e mdia dos salrios dos pilotos de companhias brasileiras. 3) O total da folha de pagamento da Gol. 4) O nmero de escalas previstas para o vo JJ230. 5) O nmero de pessoas envolvidas em escalas do vo JJ230. 6) O nmero de aeroportos no Brasil. 7) O nmero de pases e de cidades diferentes para as quais se destinam os vos partindo de GRU. 8) O nmero de aeroportos diferentes de onde os pilotos da Gol partem. 9) O nmero de vos dirios que a TAM oferece para So Paulo. 10) O nmero de aeroportos diferentes que os pilotos da Varig usam (para chegada ou partida). 11) Para cada companhia, o menor, maior salrio, bem como a mdia. 12) Para cada cidade do Brasil, o nmero de aeroportos que possui. 13) Para cada piloto, o nmero de escalas programadas para o dia 01/06/2011. 14) Para cada dia e hora, o nmero de vos que partem pela manh. 15) Para cada pas, o nmero de aeroportos e de pases distintos para onde os vos de suas
companhias se dirigem.

16) Para cada faixa de salrio de cada companhia brasileira, o nmero de pilotos recebendo este
salrio, o total dos salrios pagos na faixa, e o nmero de escalas vinculadas a estes pilotos.

17) Para cada piloto de companhia estrangeira, o nmero de vos que ele faz de ou para o Brasil. 18) Para cada pais, o nmero de companhias que fazem vos estrangeiros. 19) Para cada pais encontre o nmero de pilotos que ganham mais de R$18.000,00. 20) Para cada companhia encontre a quantidade de aeroportos de onde saem os vos e quantidade de
aeroportos de onde partem os seus vos.

21) As companhias que pagam como salrio mais alto a seus pilotos menos que R$12.000,00. 22) As companhias brasileiras que pagam como salrio mais alto a seus pilotos menos que
R$12.000,00.

23) As companhias estrangeiras que possuem pelo menos 2 pilotos. 24) As companhias que possuem pelo menos 2 pilotos escalados em vos para o Canad. 25) Para cada pas estrangeiro que possui pelo menos 2 companhias areas distintas, o salrio do
piloto mais bem pago e do mais mal pago, a mdia salarial do pas, a folha de pagamento, e o nmero total de pilotos

26) O nmero de escalas previstas em MD11 para cada piloto da Varig que possui pelo menos 2
escalas neste tipo de avio.

27) O cdigo de vo para cada vo previsto com destino a So Paulo que envolve dois (e somente 2)
tipos de aeronaves.

28) Os pilotos que trabalham s em uma companhia. 29) As companhias que s usam um tipo de avio. 30) Os vos cujas escalas so todas em avies diferentes.

Subconsultas (In, Exist)


1) As companhias que voam de MD11. 2) As companhias que no voam de MD11. 3) As companhias que s voam de MD11. 4) Nome dos pilotos que voam de MD11 ou de Boeing 737. 5) Nome dos pilotos que voam de MD11 e de Boeing 737. 6) Nome dos pilotos que voam de MD11 e no voam de Boeing 737. 7) Nome das companhia que empregam pelo menos dois pilotos. 8) O nome dos pilotos que trabalham para companhias que empregam pelo menos trs pilotos. 9) Para toda companhia que voa com avies MD11, o cdigo dos vos que so escalados neste tipo de avio. 10) Para toda companhia que voa com avies MD11, o cdigo de todos os vos que ela oferece 11) A mdia salarial dos pilotos. 12) Nome dos pilotos que ganham menos que a mdia salarial. 13) A(s) companhia(s) que paga(m) o maior salrio. 14) O nmero total das escalas e nome dos pilotos, para cada piloto da Varig que voa de MD11. 15) As companhias que oferecem mais vos para o Canad. 16) Para cada piloto da Varig que voa de MD11, o nome do piloto e o nmero total das escalas programadas neste tipo de avio. 17) Para cada piloto da Varig que voa de MD11, o nome do piloto e o nmero total das escalas programadas para este piloto, independentemente do avio. 18) Nome dos pilotos que voam a partir de aeroportos no Brasil ou na Alemanha. 19) Nome dos pilotos que voam a partir de aeroportos no Brasil e na Alemanha. 20) Nome dos pilotos que voam a partir de aeroportos no Brasil e no voam a partir de aeroportos na Alemanha. 21) Nome dos pilotos que fizeram pelo menos duas escalas de MD11, e o total de diferentes vos (cdigo) fizeram nestes avies.

22) Nome dos pilotos que fizeram pelo menos duas escalas de MD11, e o total de diferentes vos (cdigo) para So Paulo que eles fizeram (em qualquer tipo de avio).

Insert, Delete, Update


1) Inserir um piloto de cdigo 99 e nome Joo da Silva. 2) Inserir um piloto com os seguintes dados cdigo = 100, nome = Jos da Silva, salrio = 18.000,00, gratificao = 1.000,00 , companhia = Gol e pais = Brasil. 3) Inserir um aeroporto com os seguintes dados cdigo = GIG, nome = Tom Jobim, Cidade = Rio de Janeiro e pais = Brasil. 4) Aumente o salrio dos pilotos em 10% para aqueles que ganham at R$18.000,00. 5) Aumente o salrio e a gratificao dos pilotos em 20% para aqueles que ganham menos que R$12.000,00. 6) Aumente o salrio e a gratificao dos pilotos em 15.5% para aqueles que ganham menos que R$15.000,00 e sejam brasileiros. 7) Aumente o salrio dos pilotos em 22% para aqueles que esto escalados a mais de 2 vos. 8) Aumente a gratificao dos pilotos em 17% para aqueles que esto escalados em vos para a Colmbia. 9) Reduza o salrio dos pilotos que no esto escalados em nenhum vo. 10) Exclua os pilotos que no esto escalados em nenhum vo. 11) Exclua as escalas para a Colmbia pois os vos foram cancelados. 12) Exclua os vos para a Colmbia pois as linha areas foram canceladas.

View
Escreva vises em SQL para armazenar as seguintes consultas dos dados no esquema acima.

1) Os dados de todos os pilotos de companhias brasileiras. 2) O nome de todos os pilotos da Gol. 3) O nome de todos os pilotos escalados. 4) Os cdigos dos vos que partem do Brasil. 5) Os pilotos que voam para o seu pas de origem. 6) Nome de todos os pilotos, junto com seu salrio e gratificao. 7) O cdigo dos vos com seu respectivo nome dos pilotos e do nome dos seus aeroportos de origem e destino. 8) O cdigo de todos os vos, nome dos pilotos escalados para os mesmos, e respectivos tipos de avio e companhia. 9) A companhia dos pilotos que voam para a Itlia. 10) O nome de todos os aeroportos onde a TAM opera.

11) O maior, o menor e quantidade de pilotos. 12) O maior, o menor e quantidade de pilotos por companhia. 13) O maior, o menor e mdia dos salrios dos pilotos de companhias brasileiras. 14) O total da folha de pagamento por companhias 15) O total de pilotos por pas. 16) O nmero de aeroportos por cidade brasileira.

Triggers

1. Crie uma trigger para preencher o contedo de uma coluna caso ele seja deixado em branco durante uma operao de insert. Nesse exerccio caso seja deixado em banco o campo data de cadastro durante a incluso, a trigger automaticamente preenche com a data do sistema.
PILOTO

codigo_piloto Nome_piloto Salario Gratificacao Companhia Pais Data_Cadastro Usuario_Update

Int Varchar(100) Numeric(9,2) Numeric(9,2) Varchar(30) Varchar(15) Date Varchar(30)

Chave Primria

Verifique se o campo Data_Cadastro Nulo (is null). Utilize o if(condio)then {comando} end if;

2. Vamos estabelecer um valor mximo para o campo salrio. Nenhum piloto poder ganhar mais do que 10.000 dlares americanos. Alm de ativar a trigger na incluso, evitando que um novo funcionrio tenha um salrio superior ao limite, as rotinas de atualizao (update)

devem ser verificadas para evitar que os pilotos existentes sejam alterados para valores no-permitidos.

3. Vamos criar uma trigger que no permita atualizao da tabela de pilotos entre os dias 10 e 20 do ms.

4. Neste exerccio todo registro inserido na tabela de piloto ser inserido tambm na tabela piloto resumido. Inclua uma trigger para realizar esta tarefa.
PILOTO_RESUMIDO

Codigo_Piloto Int Nome_Piloto Varchar(100)

Obrigatrio

Chave Primria

5. Para que a tabela de piloto resumido fique sempre com a mesma quantidade de registros uma outra trigger deve ser criada para excluir registros.

6. Para que a tabela de piloto resumido fique atualizada em relao a tabela de piloto uma outra trigger deve ser criada para excluir registros.

7. Implemente uma trigger que faa a replicao da tabela piloto para piloto resumido.

8. Implemente uma trigger que armazena o nome do usurio que realizou a ltima atualizao na tabela piloto.