Query by Example

Query-by-Example (QBE) é uma linguagem de consulta e também um antigo SGDB que incluia essa linguagem. A linguagem QBE foi criada por Moshé M. Zloof da IBM na década de 70, em paralelo com a criação do SQL. Como diz seu nome (pergunta "por exemplos"), o usuário apenas descreverá as informações desejadas, dando exemplos do que deseja encontrar, mas não fornecerá um procedimento específico para obter essas informações. A QBE foi baseada na lógica relacional.

Características

[editar | editar código-fonte]

A QBE possui dois recursos característico:

  1. Possui uma sintexe bidimensional, ou seja, as consultas se parecem com tabelas. Uma consulta em linguagem unidimensional, como o SQL pode ser escrita em uma linha, porém, uma bidimensional exigirá duas dimensões (uma tabela)
  2. As consultas QBE são expressas "por exemplos". Em vez de fornecer um procedimento para obter a resposta, o usuário fornece um exemplo do que é desejado e o sistema generalizará esse exemplo para calcular a resposta.

Existem dois tipos de QBE: a versão original baseada em texto e uma versão gráfica, desenvolvida mais tarde e que foi aceita pelo Microsoft Access

Estrutura da linguagem

[editar | editar código-fonte]

Expressamos consultas na QBE por tabelas de estruturas . Em vez de encher a tela com todas as estruturas, o usuário seleciona as estruturas necessárias para uma determinada consulta e preenche as estruturas com linhas de exemplo.

Usaremos a seguinte tabela de informação para as consultas

Universidade
Aluno Materia Nota Situação
Alberto Calculo 10 Aprovado
Lucas Banco de Dados 4 Reprovado
Andréia Programação 7 Aprovado
Lucas Calculo 4.9 Reprovado
Mariana Física 7 Aprovado
Fernando Calculo 5 Aprovado
Professores
Professor Materia Administrada Nível de Graduação
Marcelo Banco de Dados Doutorado
Emília Calculo Pós-Graduação
Célia Matemática Mestrado
Emília Física Pós-Graduação

Consultas em uma relação

[editar | editar código-fonte]

Vamos começar realizando uma pesquisa de todos os estudantes que cursaram "Cálculo"

Aluno Materia Nota Situação
P. Calculo

Essa consulta diz ao sistema para procurar as tuplas que tem "Cálculo" como valor para Matéria e exibir apenas a coluna aluno. Como exemplo, poderíamos fazer a consulta de mostrar todos os alunos, retirando apenas a restrição, teríamos:

Aluno Materia Nota Situação
P.

A QBE permite consultas com comparações aritméticas em vez de comparações de igualdade. Por exemplo, na consulta: Encontre todas as matérias que os alunos tiraram nota maior que 5.

Aluno Materia Nota Situação
P. > 5

Podemos encontrar relações a partir de negação. Na consulta: Encontre todos os alunos que não cursaram Física, teremos:

Aluno Materia Nota Situação
P. not Física

A principal finalidade das variáveis da QBE é obrigar valores de certas tuplas a terem o mesmo valor de certos atributos. Vamos considerar a consulta: Encontre o Nome dos alunos com a mesma nota de Mariana.

Aluno Materia Nota Situação
P._X _Y
Mariana _Y

Nesta consulta, _X e _Y são variáveis (assim como todas que começarem com "_", contudo está não é uma restrição do programa, apenas uma notação nossa para organização). Ela retornará todas as relações que tenham _Y igual a nota de mariana, que neste caso é 7. Perceba que a segunda linha, é apenas para encontrar o valor dessa nota e atribuí-lo a _Y.

Consulta em várias relações

[editar | editar código-fonte]

A QBE permite que as consultas abranjam várias relações diferentes. As conexões entre as várias relações são obtidas por meio de variáveis que obrigam certas tuplas a terem o mesmo valor em certos atributos. Vamos então realizar a consulta: Encontrar todos os alunos que tiveram aula com o professor Marcelo:

Aluno Materia Nota Situação
P._X _Y
Professor Materia Administrada Nível de Graduação
Marcelo _Y

Caixa de Condição

[editar | editar código-fonte]

Às vezes, é inconveniente ou impossível expressar todas as restrições nas variáveis de domínio dentro das tabelas de estrutura. Por causa disso, a QBE inclui o recurso caixa de condição, que permite expressar restrições gerais sobre qualquer uma das variáveis do domínio.

Por exemplo, se quisermos encontrar todos os alunos com notas maiores que 4 e menores que 8, teremos:

Aluno Materia Nota Situação
P. _x
Condições
_x < 8
_x > 4

Vários Resultados

[editar | editar código-fonte]

Até agora, todas as relações que demostramos tem em comum apenas um único resultado, mas podemos expandir de forma a criar novas tabelas com todos os resultados que queremos mostrar. Se quisermos pesquisar: o nome do aluno, sua situação e o nome do professor, temos a seguinte busca:

Aluno Materia Nota Situação
_W _X _y
Professor Materia Administrada Nível de Graduação
_Z _X
Resultado Aluno Situação Professor
P. _W _Y _Z

Ligações externas

[editar | editar código-fonte]