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.
A QBE possui dois recursos característico:
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
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
|
|
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.
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 |
À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 |
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 |