Bases de Dados DML – Data Manipulation Language Parte 3 Sub-Consultas z São consultas contidas na cláusula WHERE ou HAVING de uma outra consulta SQL z Essencialmente consiste numa instrução SELECT contida noutra instrução SELECT... z O limite máximo de encadeamento é 255! z Regras a seguir: {Uma sub-consulta não pode ter cláusula ORDER BY {A ordem das colunas e o tipo de dados de cada coluna de uma sub-consulta contida numa cláusula WHERE deve ser a mesma da lista de selecção Exemplo – Sub-consultas Quais os alunos que se inscreveram primeiro à cadeira de Bases de Dados? Sub-consultas correlacionadas zSão sub-consultas que são executadas uma vez para cada registo da selecção principal! Qual a primeira cadeira que cada aluno concluiu? Exercício 1 zQuais os alunos que já se inscreveram a cadeiras do curso de matemática. Exercício 2 zQuais as primeiras cadeiras em que cada aluno se inscreveu? Exercício 3 zMostrar o nome e os créditos que o aluno já realizou. Mais Operadores SQL (SOME/ANY, ALL e EXISTS) z Podem ser utilizados em sub-consultas que devolvam mais do que uma linha de valores z Usam-se nas cláusulas WHERE ou HAVING em conjunção com os operadores =, <, >, <=, >= z SOME/ANY : Compara um valor com todos os valores devolvidos. Sucede quando a comparação com um deles se verifica ser verdadeira z ALL: Compara um valor com todos os valores devolvidos e sucede quando a comparação com todos os valores se verifica z EXISTS: Mais utilizado em consultas correlacionadas Exemplo Mostrar o nome, categoria e vencimento dos professores que tenham vencimento inferior a um dos professores do departamento de matemática... Exercício 4 zQuais os alunos (número e nome) que já se inscreveram mais vezes que qualquer aluno do curso de engenharia electrónica? Exercício 5 z Seleccionar as cadeiras (código, nome e departamento) que já tiveram mais inscrições que todas as cadeiras leccionadas pelo departamento de matemática. Vistas ou VIEW’s z São pseudo-tabelas ou tabelas virtuais que não ocupam espaço z Resultam do cruzamento da informação existente em outras tabelas ou VIEW’s z Normalmente só admitem operações de leitura e são criadas com o intuito de preencher necessidades de pesquisas frequentes acerca de um conteúdo específico z A sintaxe da sua criação toma a forma seguinte: CREATE VIEW nome_vista (lista_atributos) AS SELECT.... Características das VIEW’s z Não podem conter ORDER BY z Podem ser alteradas sem ter de fazer DROP, CREATE OR REPLACE... z É possível criar uma VIEW mesmo que a tabela não exista: CREATE FORCE z Podem fazer-se alterações nas tabelas através das VIEW’s usando comandos como o DELETE, UPDATE ou INSERT, mas não sem várias restrições... Exemplo – VIEW’s Criar uma VIEW para as idades dos alunos... Utilizar a VIEW para mostrar a listagem dos alunos e respectivas idades.... Exercício 6 zUsando a VIEW anterior, mostrar o nome, idade e o curso dos alunos. Exercício 7 zUsando a VIEW anterior, indique o aluno mais velho. Exercício 8 zCriar uma VIEW que mostre o número, nome e créditos de cada aluno. Consultar VIEW’s zPara ver qual o código do SELECT utilizado na construção de uma VIEW, consulta-se a tabela all_views do dicionário de dados SELECT owner, view_name, text FROM all_views WHERE owner LIKE <user_name> Exercício 9 zVisualizar os créditos que cada aluno tinha em 1 de Janeiro de 1989. Nota: não e possível utilizar a vista creditos_aluno, porque esta mostra os créditos actuais de cada aluno. Exercício 10 zRepetir a questão anterior as incluir os alunos que ainda não tivessem nenhum crédito. Referências e Links Úteis z An Introduction to Database Systems – C. J. Date – Addison Wesley z The Practical SQL Handbook – Judith S. Bowman et al – Addison Wesley z Sintaxe de todos os comandos SQL para Oracle z http://www.ss64.com/ora/ z Tutorial Resumido de comandos Oracle z http://www.engin.umich.edu/caen/technotes/oracletut.pdf z Mais comandos e funções Oracle z http://www.cit.uws.edu.au/docs/oracle/sqlref/ch2.htm