Conteúdo
Índice 🔎︎

# Design de consulta

A vista Design de consulta permite-lhe criar e editar uma consulta de uma base de dados.

Para aceder a este comando...

Numa janela de ficheiros de base de dados, clique no ícone Consultas e escolha Editar - Editar.

A maioria das bases de dados utiliza consultas para filtrar ou ordenar as tabelas da base de dados e mostrar os registos no computador. As vistas oferecem a mesma funcionalidade que as consultas, mas ao nível do servidor. Se a base de dados estiver num servidor que suporte vistas, pode utilizar as vistas para filtrar os registos no servidor de modo a acelerar o tempo de exibição.

Ao selecionar o comando Criar vista no separador Tabelas de um documento de base de dados, irá visualizar a janela Design de vista que é semelhante à janela Design de consulta aqui descrita.

O esquema da janela Design de consulta é armazenado com uma consulta criada, não sendo possível armazenar o mesmo com uma vista criada.

## Vista de design

Para criar uma consulta, clique no ícone Consultas do documento de base de dados e, em seguida, clique em Criar consulta na vista de design.

O painel inferior da vista de design é o local em que o utilizador define a consulta. Para definir uma consulta, especifique os nomes dos campos da base dados a incluir e os critérios para os mostrar. Para reorganizar as colunas do painel inferior da vista de design, arraste um cabeçalho de coluna para uma nova localização ou selecione a coluna e prima ComandoCtrl+tecla de seta.

Os ícones da barra Design de consulta e a barra Design são mostrados na parte superior da janela vista de Design de consulta.

Se quiser testar uma consulta, clique duas vezes no nome da consulta no documento de base de dados. O resultado da consulta é mostrado numa tabela semelhante à da Vista de origens de dados. Nota: a tabela mostrada é temporária.

### Teclas na vista da design de consulta

Tecla | Função
F4 | Pré-visualizar
F5 | Executar consulta
F7 | Adicionar tabela ou consulta

## Procurar

A primeira vez que abrir um design de consulta, surgirá uma caixa de diálogo na qual deve selecionar a tabela ou consulta que será utilizada para a nova consulta.

Clique duas vezes nos campos para os adicionar à consulta. Arraste e largue para definir relações.

Ao desenhar uma consulta, não pode modificar as tabelas selecionadas.

### Remover tabelas

Para remover a tabela da vista de design, clique na margem superior da janela da tabela para mostrar o menu de contexto. Pode utilizar o comando Eliminar para remover a tabela da vista de design. Em alternativa, poderá premir a tecla Delete.

### Mover e modificar o tamanho de uma tabela

Pode redimensionar e dispor as tabelas da forma que pretender. Para mover tabelas, arraste a margem superior para a posição pretendida. Aumente ou reduza a dimensão na qual a tabela é apresentada posicionando o cursor do rato numa margem ou canto e arrastando a tabela até que esta tenha a dimensão pretendida.

## Relações entre tabelas

Se existirem relações de dados entre um nome de um campo de uma tabela e o nome de um campo de outra tabela, pode utilizar estas relações para a consulta.

Se, por exemplo, tiver uma folha de cálculo para artigos identificados por um número de artigo e uma folha de cálculo para clientes, na qual regista de todos os artigos encomendados por um cliente utilizando os números de artigo correspondentes, existe uma relação entre os dois campos de dados "número de artigo". Se pretender agora criar uma consulta que tenha como resultado todos os artigos que um cliente tenha encomendado, deverá obter os dados a partir de duas folhas de cálculo. Para tal, deverá comunicar ao LibreOffice qual a relação existente entre os dados nas duas folhas de cálculo.

Para executar este procedimento, clique num nome de campo numa tabela (por exemplo, o nome do campo "Artigo-Número" da tabela Cliente), continue a premir o botão do rato e, em seguida, arraste o nome de campo para o nome de campo da outra tabela ("Artigo-Número" da tabela Artigo). Assim que soltar o botão do rato, surge uma linha que estabelece uma ligação entre os dois campos nas duas janelas. A condição correspondente de que o conteúdo dos dois nomes dos campos sejam idênticos é introduzida na consulta SQL resultante.

A criação de uma consulta baseada em várias folhas só é possível se utilizar o LibreOffice como interface para uma base de dados relacional.

Não é possível aceder a tabelas de diferentes bases de dados numa consulta. As consultas que envolvam várias tabelas só podem ser criadas dentro de uma única base de dados.

### Especificar o tipo de relação

Se clicar duas vezes na linha que liga os dois campos ou se invocar o comando de menu Inserir - Nova relação, pode especificar o tipo de relação na caixa de diálogo Relações.

Em alternativa, prima a tecla Tab até que o vetor de união esteja selecionado e prima as teclas Shift+F10 para abrir o menu de contexto onde poderá escolher o comando Editar. Algumas bases de dados apenas permitem um subconjunto dos tipos de união possíveis.

### Eliminar relações

Para eliminar uma relação entre duas tabelas, clique na linha de ligação e prima a tecla Delete.

Em alternativa, elimine as entradas correspondentes nos Campos utilizados na caixa de diálogo Relações. Ou prima a tecla Tab até que o vetor de ligação seja destacado, prima as teclas Shift+F10 para abrir o menu de contexto e selecione o comando Eliminar.

## Definir uma consulta

Selecione as condições para definir a consulta. Cada coluna da tabela de design aceita um campo de dados para a consulta. As condições de uma linha são associadas por um E booleano.

### Especificar nome de campos

Em primeiro lugar, selecione todos os nomes de campos das tabelas que pretender adicionar à consulta. Pode fazê-lo pelo processo arrastar e largar, ou clicando duas vezes num nome de um campo na janela da tabela. Com o método arrastar e largar, utilize o rato para arrastar um nome de um campo a partir da janela da tabela até à área inferior do design de consulta. Enquanto faz isto, pode decidir a qual coluna pretende adicionar o campo. Selecione um nome de um campo clicando duas vezes sobre o mesmo. Este será adicionado à próxima coluna que esteja livre.

### Eliminar nomes dos campos

Para remover um nome de um campo da consulta, clique no cabeçalho de coluna do campo e escolha o comando Eliminar no menu de contexto.

### Guardar uma consulta

Utilize o ícone Guardar na barra Padrão para guardar a consulta. Verá uma caixa de diálogo a solicitar a introdução de um nome para a consulta. Se a base de dados suportar esquemas, também é possível introduzir um nome de esquema.

#### Esquema

Introduza o nome do esquema que é atribuído à vista de consulta ou de tabela.

#### Nome da consulta ou da vista de tabela

Introduza o nome da consulta ou da vista de tabela.

### Filtrar dados

Para filtrar dados na consulta, defina os critérios na parte inferior da janela de design da consulta. Estão disponíveis as seguintes opções:

#### Campo

Introduza o nome do campo de dados ao qual se refere na Consulta. Todas as definições estabelecidas nas linhas inferiores referem-se a este campo. Se ativar uma célula através de um clique do rato, irá visualizar um botão de seta que permite selecionar um campo. A opção "Table name.*" seleciona todos os campos de dados e os critérios são válidos para todos os campos das tabelas.

#### Nome alternativo

Especifica um nome alternativo. Este nome alternativo será listado numa consulta em vez do nome do campo. Este procedimento faz com que seja possível utilizar etiquetas de coluna definidas pelo utilizador. Por exemplo, se o campo de dados tiver o nome PtNo e, em vez desse nome, preferir que apareça PartNum na consulta, introduza PartNum como nome alternativo.

Numa instrução SQL, os nomes alternativos são definidos da seguinte forma:

SELECT column AS alias FROM table.

Por exemplo:

SELECT "PtNo" AS "PartNum" FROM "Parts"

#### Tabela

A tabela da base de dados correspondente do campo de dados selecionado é aqui listada. Se ativar a célula com um clique do rato, irá surgir uma seta que lhe permite selecionar outra tabela da consulta atual.

#### Ordenar

Ao clicar nesta célula, pode selecionar as opções de ordenação: ascendente, descendente e sem ordenação. Os campos de texto serão ordenados alfabeticamente e os campos numéricos serão ordenados numericamente. Na maior parte das bases de dados, os administradores podem definir as opções de ordenação.

#### Visível

Se assinalar a propriedade Visível para um campo de dados, esse campo ficará visível na consulta. Se utilizar apenas um campo de dados para formular uma condição, não é obrigatório que este seja mostrado.

#### Critério

Especifica os primeiros critérios pelos quais deve ser filtrado o conteúdo dos campos de dados.

#### ou

Aqui é possível introduzir um critério adicional para filtragem em cada linha. A ligação entre os critérios múltiplos numa coluna será estabelecida através de uma ligação OU.

Também pode utilizar o menu de contexto dos cabeçalhos de linha na área inferior do design de consulta para inserir um filtro baseado em funções:

### Funções

As funções disponíveis dependem da base de dados utilizada.

Se estiver a trabalhar com a base de dados HSQL incorporada, a caixa de lista na linha Funções disponibiliza-lhe as seguintes opções:

Opção | SQL | Efeito
Sem função |  | Não será executada qualquer função.
Média | AVG | Calcula a média aritmética de um campo.
Contar | COUNT | Determina o número de registos na tabela. Os campos vazios podem ser contados (a) ou excluídos (b). a) CONTAR(*): Passar um asterisco como o argumento, faz a contagem de todos os registos na tabela. b) COUNT(coluna): Ao passar um nome de campo como argumento, conta apenas os registos nos quais o campo especificado contém um valor. Os registos cujos campos tenham valor NULL (i.e. não contenham valores numéricos ou textuais) não são contados.
Máximo | MAX | Determina o valor mais alto de um registo para o campo.
Mínimo | MIN | Determina o valor mais baixo de um registo para o campo.
Soma | SUM | Calcula a soma dos valores dos registos para os campos associados.
Agrupar | GROUP BY | Agrupa os dados de consulta de acordo com o nome do campo selecionado. As funções são executadas de acordo com os grupos especificados. Em SQL, esta opção corresponde à expressão GROUP BY. Se for adicionado um critério, esta entrada surge em sub-cláusula SQL HAVING.

Também é possível introduzir chamadas de função diretamente na instrução SQL. A sintaxe é:

SELECT FUNCTION(coluna) FROM tabela.

Por exemplo, a chamada de função em SQL para calcular uma soma é:

SELEC SOMA("Preço") DE "Artigo".

Com exceção da função Agrupar, as funções acima são denominadas Funções agregadas. Estas funções calculam dados para criar resumos a partir dos resultados. Também podem estar disponíveis funções adicionais que não são apresentadas na caixa de lista. Estas dependem do sistema de base de dados específico em utilização e do estado atual do controlador do Base.

Para utilizar outras funções que não as apresentadas na caixa de lista, tem de as introduzir em Campo.

Também é possível atribuir nomes alternativos a chamadas de função. Se não pretender que a consulta seja visualizada no cabeçalho da coluna, introduza o nome pretendido em Nome alternativo.

A função correspondente numa instrução SQL é:

SELECT FUNCTION() AS alias FROM tabela

Exemplo:

SELECT COUNT(*) AS count FROM "Item"

Se executar esta função, não poderá inserir colunas adicionais para a consulta, mas apenas recebê-las como uma função de "Agrupar".

Exemplos

No exemplo que se segue, é executada uma consulta em duas tabelas: uma tabela "Item" com o campo "Item_No" e uma tabela "Suppliers" com o campo "Supplier_Name". Além disso, ambas as tabelas têm um nome de campo comum "Supplier_No."

Tem que executar os seguintes passos para criar uma consulta que contenha todos os fornecedores que entregam mais do que três artigos.

1. Inserir as tabelas "Item" e "Fornecedores" no design de consulta.

2. Ligue os campos "Supplier_No" das duas tabelas se ainda não existir uma relação deste tipo.

3. Clicar duas vezes no campo "Item_No" da tabela "Item". Para mostrar a linha Função, utilize o menu de contexto e selecione a função Contar.

4. Introduza >3 como um critério e desative o campo Visível.

5. Clique duas vezes no campo "Supplier_Name" da tabela "Suppliers" e escolha a função Agrupar.

6. Execute a consulta.

Se os campos "price" (para o preço individual de um artigo) e "Supplier_No" (para o fornecedor do artigo) existirem na tabela "Item", é possível obter o preço médio do artigo que um fornecedor entrega com a seguinte consulta:

1. Inserir a tabela "Item" no design de consulta.

2. Clique duas vezes nos campos "Price" e "Supplier_No".

3. Ative a linha Função e selecione a função Média do campo "Preço".

4. Também é possível introduzir "Média" na linha como nome alternativo (sem aspas).

5. Escolha Grupo para o campo "Supplier_No".

6. Execute a consulta.

Estão disponíveis os seguintes comandos e símbolos no menu de contexto:

### Funções

Mostra ou oculta uma linha para a seleção de funções.

### Nome da tabela

Mostra ou oculta a linha para o nome da tabela.

### Nome alternativo

Mostra ou oculta a linha para o nome alternativo.

### Valores distintos

Aplica apenas valores unívocos à consulta. Isto aplica-se a registos que contenham dados que surjam várias vezes nos campos selecionados. Se o comando Valores distintos estiver ativo, visualizará apenas um registo na consulta (DISTINCT). De outra forma, visualizará todos os registos que correspondam aos critérios da consulta (ALL).

Por exemplo, se o nome "Smith" ocorrer várias vezes na base de dados de endereços, é possível escolher o comando Valores distintos para especificar na consulta que o nome "Smith" irá ocorrer apenas uma vez.

Para uma consulta que envolva vários campos, a combinação de valores de todos os campos terá de ser única, para que o resultado possa ser formado a partir de um registo específico. Por exemplo, "Ferreira em Porto" ocorre uma vez no livro de endereços e "Ferreira em Lisboa" ocorre duas. Com o comando Valores distintos, a consulta utilizará os dois campos "apelido" e "cidade" e o resultado será "Ferreira em Porto" uma vez e "Ferreira em Lisboa" uma vez.

Em SQL, este comando corresponde ao predicado DISTINCT.

### Limite

Permite-lhe restringir o número máximo de registos devolvido por uma consulta.

Se adicionar um Limite irá obter, no máximo, o número de linhas que especificar. Se não utilizar um limite, serão devolvidos todos os registos que coincidam com o critério da consulta.

### Formular condições de filtro

Ao criar condições de filtro, tem vários operadores e comandos à sua disposição. Para além dos operadores relacionais, existem comandos específicos de SQL que efetuam a consulta ao conteúdo dos campos da base de dados. Se utilizar estes comandos na sintaxe do LibreOffice , o LibreOffice converte automaticamente as instruções para a sintaxe SQL correta através do analisador interno. Também pode introduzir o comando SQL diretamente e ignorar o analisador. As tabelas seguintes mostram um resumo dos operadores e comandos disponíveis:

Operador | Significado | A condição é satisfeita se...
= | é igual a | ... o conteúdo do campo é idêntico à expressão indicada. O operador = não será mostrado nos campos da consulta. Se tiver introduzido um valor sem qualquer operador, o operador = será assumido automaticamente.
<> | é diferente de | ... o conteúdo do campo não corresponde à expressão especificada.
> | maior que | ... o conteúdo do campo é maior do que a expressão especificada.
< | menor que | ... o conteúdo do campo é menor do que a expressão especificada.
>= | maior ou igual a | ... o conteúdo do campo é maior ou igual à expressão especificada.
<= | é menor ou igual a | ... o conteúdo do campo é menor ou igual à expressão especificada.

LibreOffice - comando | Comando SQL | Significado | A condição é satisfeita se...
IS EMPTY | IS NULL | vazio | ... O valor do campo está vazio. Para campos Sim/Não com três estados possíveis, este comando consulta automaticamente o estado indeterminado (nem Sim nem Não).
IS NOT EMPTY | IS NOT NULL | não está vazio | ... o campo não está vazio, i.e. contém dados.
LIKE marcador de posição (*) para qualquer número de caracteres marcador de posição (?) para exatamente um carácter | LIKE marcador de posição (%) para qualquer número de caracteres Marcador de posição (_) para exatamente um carácter | é um elemento de | ... o campo de dados contém a expressão indicada. O marcador de posição (*) indica se a expressão x ocorre no início de (x*), no fim de (*x) ou dentro do campo (*x*). É possível introduzir como marcador de posição em consultas SQL o carácter SQL %, ou o marcador de posição habitual do sistema de ficheiros (*) na interface do LibreOffice. O marcador de posição (*) ou (%) representa qualquer número de caracteres. O ponto de interrogação (?) na interface do LibreOffice ou o carácter de sublinhado (_) em consultas SQL é utilizado para representar de forma exata um carácter.
NOT LIKE | NOT LIKE | Não é um elemento de | ... o campo não contém dados com a expressão especificada.
BETWEEN x AND y | BETWEEN x AND y | está dentro do intervalo [x,y] | ... o campo contém um valor de dados que está entre os valores x e y.
NOT BETWEEN x AND y | NOT BETWEEN x AND y | Não está dentro do intervalo [x,y] | ... o campo contém um valor de dados que não está entre os valores x e y.
IN (a; b; c...) Tenha em atenção que o ponto e vírgula é utilizado como separador em todas a listas de valores! | IN (a, b, c...) | contém a, b, c... | ... o nome do campo contém uma das expressões especificadas a, b, c,... Pode ser especificado qualquer número de expressões, e o resultado da consulta é determinado por uma ligação OU. As expressões a, b, c... podem ser números ou caracteres
NOT IN (a; b; c...) | NOT IN (a, b, c...) | não contém a, b, c... | ... o campo não contém uma das expressões especificadas: a, b, c,...
= TRUE | = TRUE | tem o valor True | ... o nome do ficheiro tem o valor True.
= FALSE | = FALSE | tem o valor false | ... o valor do campo é FALSO.

### Exemplos

='Ms.' | devolve os nomes de campos com o conteúdo "Ms."
<'2001-01-10' | devolve as datas ocorridas antes de 10 de janeiro de 2001
LIKE 'g?ve' | devolve os registos cujo conteúdo do campo seja "give" e "gave".
LIKE 'S*' | devolve os campos de dados com conteúdo de campo como "Sun".
BETWEEN 10 AND 20 | devolve registos com conteúdo de campo com valores entre 10 e 20. (Os campos podem ser campos de texto ou campos numéricos).
IN (1; 3; 5; 7) | devolve registos com os valores 1, 3, 5, 7. Se o nome do campo contiver, por exemplo, um número de item, pode criar uma consulta que resulte no número especificado.
NOT IN ('Smith') | devolve registos que não contenham "Smith".

Like Escape Sequence: {escape 'escape-character'}

Exemplo: select * from Item where ItemName like 'The *%' {escape '*'}

O exemplo mostra todas as entradas em que o nome do item começa por 'The *'. Isto significa que também poderá procurar caracteres que de outra forma seriam interpretados como marcadores de posição, tais como *, ?, _, % ou o ponto final.

Junção externa Sequência de escape: {oj outer-join}

Exemplo: selecione Article.* from {oj item LEFT OUTER JOIN orders ON item.no=orders.ANR}

### Consultar campos de texto

Para consultar o conteúdo de um campo de texto, tem que colocar a expressão entre plicas. A distinção entre letras maiúsculas e minúsculas depende do tipo de base de dados utilizada. LIKE, por definição, é sensível a maiúsculas e minúsculas (apesar de algumas bases de dados não o considerarem de forma tão rigorosa).

### Consultar campos de data

Os campos de data são representados como #Date# para os identificar como tal. As datas, horas e constantes de data e hora (literais) utilizadas nas condições podem ser do tipo SQL Escape Syntax ou SQL2.

Elemento do tipo de data | Sintaxe SQL Escape #1 - pode estar obsoleta | Sintaxe SQL Escape #2 | Sintaxe SQL2
Data | {D'YYYY-MM-DD'} | {d 'YYYY-MM-DD'} | 'YYYY-MM-DD'
Hora | {D'HH:MM:SS'} | {t 'HH:MI:SS[.SS]'} | 'HH:MI:SS[.SS]'
DataHora | {D'YYYY-MM-DD HH:MM:SS'} | {ts 'YYYY-MM-DD HH:MI:SS[.SS]'} | 'YYYY-MM-DD HH:MI:SS[.SS]'

Exemplo: select {d '1999-12-31'} from world.years

Exemplo: select * from mytable where years='1999-12-31'

Todas as expressões de data (literais) devem ser envolvidas por plicas. (Consulte o manual de referência para uma base de dados ou conector particular, caso os esteja a utilizar)

### Campos Consultar Sim/Não

Para consultar campos Sim/Não, utilize a seguinte sintaxe para tabelas dBase:

Estado | Critério de consulta | Exemplo
Sim | para tabelas dBASE: não igual a qualquer valor indicado | =1 devolve todos os registos em que o campo Sim/Não tenha o estado "Sim" ou "Ativo" (selecionado a preto),
Não | . | =0 devolve todos os registos para os quais o campo Sim/Não tiver o estado "Não" ou "Desativar" (sem seleção).
Nulo | É NULO | IS NULL devolve todos os registos para os quais o campo Sim/Não não tenha o estado Sim nem Não (selecionado a cinzento).

A sintaxe depende do sistema de base de dados utilizado. Também deverá ter em consideração que os campos Sim/Não podem ser definidos de forma diferente (apenas 2 estados em vez de 3).

### Consultas de parâmetros

As consultas parametrizadas permite ao utilizador inserir valores durante a execução. Estes valores são utilizados nos critérios para selecionar os registos a serem mostrados. Cada valor tem um parâmetro associado e que é solicitado ao utilizador quando a consulta é executada.

Os nomes dos parâmetros são precedidos pelo carácter dois pontos ':', na vista SQL e na vista de design de uma consulta. Estes nomes podem ser utilizados sempre que um valor aparecer. Se o mesmo valor aparecer mais do que uma vez na consulta, será utilizado o mesmo nome de parâmetro.

No caso mais simples, em que o utilizador insere um valor para uma relação de igualdade, o nome do parâmetro precedido de dois pontos é inserido na linha Critério. No modo SQL, deve ser digitado como WHERE "Campo" = :Nome_do_parâmetro

Os nomes de parâmetros não podem conter os caracteres <space>`!"$%^*()+={}[]@'~#<>?/,. Para além disso, não podem ser iguais aos nomes de campos nem a palavras reservadas do SQL. No entanto, podem ter os mesmos nomes que os alias.

Uma construção útil para selecionar registos com base em partes do conteúdo de campos de texto é adicionar uma coluna oculta com LIKE '%/'||:Parte_do_campo || '%'" como critério. Esta ação permite selecionar registos com correspondência exata. Se desejar um teste que não diferencie maiúsculas de minúsculas, uma solução é usar LOWER (nome_do_campo) como campo e LIKE LOWER ( '%' || :Parte _do_campo || '%' ) como critério. Tenha em conta de que os espaços do critério são importantes. Se forem deixados de fora, o analisador SQL interpreta todo o critério como cadeia de correspondência. No modo SQL, deve sempre digitar como LOWER ( "nome_do_campo" ) LIKE LOWER ( '%' || :Parte_do_campo || '%' ).

Pode utilizar consultas com parâmetros como origem de dados para subformulários, de modo a permitir restringir os registos a mostrar.

### Entrada de parâmetros

A caixa de diálogo Entrada de parâmetros solicita ao utilizador a introdução dos valores dos parâmetros. Introduza um valor para cada parâmetro da consulta e confirme clicando em Aceitar ou premindo Enter.

Os valores introduzidos pelo utilizador podem consistir de quaisquer caracteres permitidos pelo SQL para o critério relevante; isto pode depender do sistema de base de dados subjacente.

O utilizador pode usar os caracteres genéricos de SQL "%" (expressão arbitrária) ou "_" (carácter único arbitrário) como parte do valor para obter registos com critérios mais complexos.

## Modo SQL

SQL significa "Structured Query Language" (Linguagem de Consulta Estruturada) e descreve as instruções para atualização e administração de bases de dados relacionais.

No LibreOffice, não é necessário ter conhecimentos de SQL para a maioria das consultas, uma vez que não é necessário introduzir o código SQL. Se criar uma consulta no design de consulta, o LibreOffice converte automaticamente as instruções para a sintaxe SQL correspondente. Se, com a ajuda do botão Ativar/desativar vista de design, alterar a vista SQL, poderá visualizar os comandos SQL para uma consulta que tenha sido anteriormente criada.

É possível formular a sua consulta diretamente no código SQL. Contudo, tenha em consideração que a sintaxe especial está dependente do sistema de base de dados que utilizar.

Se introduzir o código SQL manualmente, poderá criar consultas específicas de SQL que não sejam suportadas pela interface gráfica do Design de consulta. Estas consultas têm de ser executadas no modo SQL nativo.

Ao clicar no ícone Executar comandos SQL diretamente na vista SQL, poderá formular uma consulta que não seja processada pelo LibreOffice.