SQL hugomcp@di-ubi.pt, 2009 UNIVERSIDADE DA BEIRA INTERIOR Departamento de Informática Bases de Dados I LEI/2 1- Mediante o seguinte conjunto de relações: A R S T B C C D D E d 1 d 1 e 1 a 2 d 2 d 2 e 2 b 2 c 3 d 3 d 3 e 3 b 2 c 4 d 4 d 4 e 4 a 3 a 4 b 3 Mostre qual o estado de cada uma das relações (R, S e T), bem como das relações resultantes da execução dos seguintes blocos SQL (Nota: Para cada alínea, parta sempre do estado inicial definido acima) a) ; b) SELECT A ; c) SELECT A WHERE A= ; d), S; e),t; f) 1 de 5
FROM S,T; g), S WHERE R.C=S.C; h) SELECT A WHERE R.C IN ( i) SELECT A WHERE R.C IN( j) SELECT A WHERE R.C IN( j), S, T WHERE R.C=S.C AND S.D=T.D; k) ISTINCT A ; l) m) n) FROM T MINUS 2 de 5
o) SELECT B WHERE B NOT IN ( FROM S, T WHERE S.D=T.D SELECT A ); p) OUNT(*) ; q) SELECT A, COUNT(*) GROUP BY A; r) OUNT (DISTINCT A) ; s) UPDATE R SET A=a 5 ; t) UPDATE R SET A=a 5 WHERE B= ; u) UPDATE R SET C=(SELECT MAX(C) ; v) UPDATE R SET C=(SELECT MIN(C) FROM S WHERE D IN( FROM T) ) WHERE B NOT IN ( FROM T) w) DELETE ; x) DELETE, T; y) DELETE WHERE C = ; 3 de 5
2- O conjunto de relações abaixo ilustrado constitui parte do esquema de uma base de dados utilizada pelos serviços da Direcção Geral de Viação para registar as infracções dos automobilistas. Na tabela Pessoa estão registados todas as pessoas que possuem habilitação para conduzir algum tipo de veículos nas estradas de Portugal. Na relação Coima estão registadas todas as infracções cometidas por cada condutor. Pessoa CodigoPostal BI Nome Morada CodPostal CodPostal Cidade Ana Rua X 6200 6200 Covilhã 451 Pedro Rua Y 7000 7000 Aveiro 727 Vitoria Rua Z 2617 2617 Leiria Coima TipoCoima BI CodCoima 1 Data 7-5-2001 CodCoima 1 Descrição Álcool Multa 1000 451 2 3 1-9-2001 1-1-2000 2 3 Estacionamento Traço 20 250 1- Crie o respectivo modelo Entidade / Relacionamento, indicando a cardinalidade e obrigatoriedade de cada relação. 2- Efectue a passagem para o correspondente modelo físico. 3- Implemente blocos de SQL que permitam seleccionar a informação pretendida: a. Listar toda a informação relativa à entidade Pessoa. b. Listar o BI e Nome de todas as pessoas. c. Listar o BI e nome de todas as pessoas que possuam código postal igual a 6200. d. Listar todas as pessoas da cidade de Lisboa. e. Listar todos os tipos de coimas existentes, ordenado crescentemente pelo código de cada uma. f. Listagem com a morada completa de cada pessoa (Nome + Morada + CodPostal + Cidade) g. Listagem com a morada completa das pessoas do Porto. h. Listagem das pessoas que nunca foram altuadas. i. Total de pessoas que nunca foram altuadas. j. Listagem das pessoas que nunca levaram nenhuma multa de estacionamento. k. Total de multas recebidas pela pessoa com BI=45 4 de 5
l. Listagem das pessoas que nunca levaram nenhuma coima com valor superior a 500 euros. m. Valor total relativo a coimas pagos pelo cidadão com BI=45 n. Valor total relativo a coimas pagos pelas pessoas de Lisboa. o. Valor total relativo a multas pagos pelas pessoas de Lisboa no ano de 2003. p. Listagem com o valor de multas pago por cada pessoa. Deve estar ordenada pelo valor total. q. Listagem com as pessoas de Aveiro que levaram multas de Estacionamento pelo menos 5 vezes. r. Valor médio (por cidadão) relativo a coimas efectuadas durante o mês de Janeiro de 2004. s. Número Total de multas efectuadas durante o ano de 2003. t. Número total de multas de estacionamento efectuadas durante o 1º semestre de 2003. u. Ranking com o valor de multas facturado pela Direcção Geral de Viação durante o ano de 2003, segundo o tipo de multa. Esta listagem deve estar ordenada decrescentemente pelo valor total. v. Listagem de pessoas que tenham durante o ano de 2003 repetido o mesmo tipo de multas. A listagem deve estar ordenada alfabéticamente. 4- Crie um bloco SQL que permita inserir um novo cidadão com BI=54321, Nome= José Alberto, morada e código postal ainda desconhecida. 5- Actualize a informação inserida na questão anterior, possuindo valores para a morada (Avenida Da Liberdade) e código postal(1000). 6- Elimine o registo inserido e actualizado anteriormente. 5 de 5