Banco de Dados I 2007 Módulo III: Linguagens de Consulta (Aula 9) Clodis Boscarioli Agenda: QBE (Query-by-Example) Histórico e Características; Notações; Exemplos da linguagem; Ferramentas que suportam QBE. QBE - Breve Histórico O sistema de BD QBE foi desenvolvido pela IBM, no Centro de Pesquisa T.J. Watson, no início da década de 70; A versão experimental da linguagem de manipulação de dados Query-by-Example foi descrita formalmente (publicada) por Moshe Zloof [1977]; A versão comercial foi descrita em IBM [1978] e usada mais tarde na Query Management Facility (QMF); QBE - Características Tem por base o cálculo relacional de domínio. Possui sintaxe bidimensional: as consultas parecem tabelas. Consultas são expressas “por exemplo”. Em vez de determinar um procedimento para obtenção da resposta desejada, o usuário dá um exemplo do que é desejado. O sistema generaliza o exemplo para o processamento da resposta da consulta. QBE - Características Utiliza tabelas esqueletos. O usuário seleciona os esqueletos necessários e preenche-os com linhas de exemplo. Linha de exemplo consiste em constantes e elementos de exemplos, que são domínios de variáveis. Variáveis de domínio são precedidas por um caracter sublinhado (underscore _). Elimina duplicatas automaticamente. Exemplo de Tabela Esqueleto agencia nome_agencia cidade_agencia fundos conta saldo nome_agencia Numero_conta Consultas em uma Única Relação Encontrar todos os números de empréstimos da agência Perryridge. emprestimo nome_agencia nr_emprestimo Perryridge P._x ou: emprestimo nome_agencia nr_emprestimo Perryridge total total P. { < x > | ∃ b, a (<b, x, a> ∈ emprestimo ^ b = “Perryridge”)} Consultas em uma Única Relação Para mostrar uma relação completa pode-se criar uma linha única colocando P. em todos os campos, ou usar notação reduzida P.ALL. Exemplo: Encontre todos os números de empréstimos na agência Perryridge, cujo total seja maior que 700 reais. emprestimo nome_agencia nr_emprestimo Perryridge P.ALL. total > 700 Exemplo 1: Uso do Operador ¬ Encontre os nomes de todas as agências que não estão localizadas no Brooklyn: agencia nome_agencia cidade_agencia P. total ¬ Brooklyn ¬ equivale a not. Pode também ser lido como “não existe de fato”. Exemplo 2: Uso do Operador AND Encontre os números de empréstimos de todos os empréstimos feitos por Jones e Smith, conjuntamente: devedor nome_cliente “Jones” “Smith” numero_emprestimo P._x _x Exemplo 3: Uso do Operador OR Encontre os números de empréstimos de todos os empréstimos feitos por Jones, por Smith, ou por ambos. devedor nome_cliente “Jones” “Smith” numero_emprestimo P._x P._y Consultas em Diversas Relações A QBE permite consultas em diversas relações (análogas ao produto cartesiano ou à junção natural na álgebra relacional). As conexões entre as várias relações são realizadas por meio de variáveis que fazem com que certas tuplas tenham os mesmos valores de certos atributos. Consultas em Diversas Relações Exemplo: Encontrar todos os nomes de todos os clientes que possuam um empréstimo na agência Perryridge. emprestimo nome_agencia nr_emprestimo Perryridge devedor nome_cliente P._y total _x numero_emprestimo _x Caixa de Condição Quando não for conveniente ou for impossível expressar todas as restrições de domínio, dentro do esqueleto das tabelas pode-se recorrer ao recurso de caixa de condição, que permite a expressão de restrições gerais sobre qualquer domínio de variável. Caixa de Condição Permite: ¬ = (lê-se diferente de) & (equivale ao operador lógico and) | (equivale ao operador lógico or) >, <, ≥ , ≤ e = expressões aritméticas Caixa de Condição - Exemplos Encontre todos os números de conta com saldo entre 1.300 e 1.500 reais. conta nome_agencia Numero_conta P. condições _x ≥ 1300 _x ≤ 1500 saldo _x Caixa de Condição - Exemplos Encontre todas as agências que tenham fundos maiores que os das agências localizadas no “Brooklyn”. agencia nome_agencia cidade_agencia P._x Brooklyn condições _y > _z fundos _y _z Caixa de Condição - Exemplos Encontre todos os números de conta com saldos entre 1.300 e 2.000 reais, exceto os que contenham exatamente 1.500 reais. conta nome_agencia Numero_conta saldo P. condições _x = ( ≥ 1300 and ≤ 2000 and ¬ 1500) _x Relação Resultante Quando o resultado de uma consulta englobar atributos de diversos esquemas de relações, é necessário um mecanismo para apresentar o resultado desejado em uma única tabela. Para tal, declara-se uma relação resultado que inclui todos os atributos de resultado. O resultado é impresso por meio do comando P., utilizado somente na tabela esqueleto Resultado. Relação Resultante - Exemplo Encontrar o nome_cliente, numero_conta e saldo para todas as contas da agência Perryridge. Em álgebra ter-se-ía: 1. Junção de depositante e conta. 2. Projeção de nome_cliente, numero_conta e saldo. Em QBE: 1. Criação de uma tabela esqueleto com os atributos desejados. 2. A escrita da consulta. O Resultado da consulta é: conta nome_agencia Numero_conta Perryridge devedor nome_cliente _y P. _z numero_conta _x resultado _y nome_cliente numero_conta _x saldo _y saldo _z Ordenar Apresentação das Tuplas AO. (ordem ascendente) DO. (ordem descendente) conta nome_agencia Numero_conta Perryridge P.AO(1). saldo P.DO(2). P.AO(1). Especifica que o número da conta deverá ser intercalado primeiro; P.DO(2). indica que os saldos deverão, então, ser intercalados em ordem descrescente. Operações Agregadas QBE possui os operadores agregados AVG, MAX, MIN, SUM, CNT. É preciso acrescentar no final desses operadores a palavra ALL. para a criação de um conjunto sobre o qual será aplicado o operador de agregação. O operador ALL. assegura que as repetições não serão eliminadas. Para eliminar todas as repetições usa-se UNQ. Ex.: P.CNT.UNQ.ALL. Modificações no Banco de Dados D. (Remoção) I. (Inserção) U. (Atualização) Estes operadores devem ser colocados no nome da relação envolvida. Modificações no Banco de Dados Exemplo de Inserção: Inserir um saldo de 700 reais na conta A-9732 na agência de Perryridge. conta I. nome_agencia Numero_conta Perryridge A-9732 saldo 700 Modificações no Banco de Dados Exemplos de Remoção: Remova o valor de cidade_agência das agências de nome “Perryridge” agência nome_agencia cidade_agência Perryridge fundos D. Remova o cliente Smith. cliente nome_cliente rua_cliente D. Smith cidade Modificações no Banco de Dados Exemplo de Atualização: Atualizar para 10000 dólares o valor de fundos da agência Perryridge. agência nome_agencia cidade_agência Perryridge fundos U. 10000 Ferramentas Comerciais e QBE Várias são as ferramentas que incorporam recursos de QBE, como Microsoft Access, Oracle, IBM DB2 e outros aplicativos para banco de dados (exemplos a seguir); Consultas visuais a banco de dados é uma tendência; Preocupação com o usuário final, aspectos de interface e minimização de esforços em SQL. Visual Open DB É um aplicativo genérico para análise de dados, permitindo consultas de várias fontes de dados. A idéia é que seja utilizado por usuários finais na análise de dados e pelos desenvolvedores em consultas a tabelas e visões de um banco de dados. Navicat É uma ferramenta de administração de bancos de dados MySQL e PostgreSQL que pode converter XML, CSV, MS Excel e MS Access e outros formatos de dados populares para bancos de dados; Outros recursos incluem importar/exportar, suporte a Unicode, agendamento de tarefas, sincronização de dados, transferências, construção de consultas e relatórios. Navicat Microsoft Access Direct Oracle Access - Query By Example Mode Referências Bibliográficas Sistemas de Banco de Dados. (Cap. 5) Abraham Silberchatz, Henry F. Korth e S. Sudarshan. 3ª Edição. Makron Books, 1999. Sistemas de Banco de Dados. (Apêndice D) Ramez Elsmari, 4ª Edição. Shamkant B. Navathe. Pearson Addison Wesley, 2005. Sites e manuais de ferramentas.