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 Comando Ctrl+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

First, select all field names from the tables that you want to add to the query. You can do this either by drag-and-drop or by double-clicking a field name in the table window. With the drag-and-drop method, use the mouse to drag a field name from the table window into the lower area of the query design window. As you do this, you can decide which column in the query design window will receive the selected field. A field name can also be selected by double-clicking. It will then be added to the next free column in the query design window.

### 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

Enter the name of the data field that is referred to in the Query. All settings made in the filter option rows refer to this field. If you activate a cell here with a mouse click you'll see an arrow button, which enables you to select a field. The "Table name.*" option selects all data fields with the effect that the specified criteria will be applied to all table fields.

#### Nome alternativo

Specifies an alias. This alias will be listed in the query instead of the field name. This makes it possible to use user-defined column labels. For example, if the data field is named PtNo and, instead of that name, you would like to have PartNum appear in the query, enter PartNum as the alias.

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

The corresponding database table of the selected data field is listed here. If you activate this cell with a mouse click, an arrow will appear which enables you to select a different table for the current query.

#### 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(column): Passing a field name as an argument counts only the records in which the specified field contains a value. Records in which the field has a Null value (i.e. contains no textual or numeric value) will not be counted.
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".

Except for the Group function, the above functions are called Aggregate functions. These are functions that calculate data to create summaries from the results. Additional functions that are not listed in the list box might be also possible. These depend on the specific database engine in use and on the current functionality provided by the Base driver used to connect to that database engine.

To use other functions not listed in the list box, you must enter them manually under Field.

You can also assign aliases to function calls. If you do not want to display the query string in the column header, enter a desired substitute name under Alias.

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

SELECT FUNCTION() AS alias FROM tabela

Exemplo:

SELECT COUNT(*) AS count FROM "Item"

If you run such a function, you cannot insert any additional columns for the query other than as an argument in a "Group" function.

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. Double-click on the "Item_No" field from the "Item" table. Display the Function line using the context menu and select the Count function.

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

Retrieves only distinct values from the query. This applies to multiple records that might contain several repeating occurrences of data in the selected fields. If the Distinct Values command is active, you should only see one record in the query (DISTINCT). Otherwise, you will see all records corresponding to the query criteria (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 | ... the field contains no data. For Yes/No fields with three possible states, this command automatically queries the undetermined state (neither Yes nor No).
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 | ... the data field contains the indicated expression. The (*) placeholder indicates whether the expression x occurs at the beginning of (x*), at the end of (*x) or inside the field content (*x*). You can enter as a placeholder in SQL queries either the SQL % character or the familiar (*) file system placeholder in the LibreOffice interface. The (*) or (%) placeholder stands for any number of characters. The question mark (?) in the LibreOffice interface or the underscore (_) in SQL queries is used to represent exactly one character.
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... | ... the field name contains one of the specified expressions a, b, c,... Any number of expressions can be specified, and the result of the query is determined by a boolean OR operator. The expressions a, b, c... can be either numbers or characters
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*' | returns records with field contents such as "Sun".
BETWEEN 10 AND 20 | returns records with field content between the values 10 and 20. (The fields can be either text fields or number fields).
IN (1; 3; 5; 7) | returns records with the values 1, 3, 5, 7. If the field name contains an item number, for example, you can create a query that returns the item having the specified number.
NOT IN ('Smith') | returns records that do not contain "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

To query the content of a text field, you must put the expression between single quotes. The distinction between uppercase and lowercase letters depends on the database in use. LIKE, by definition, is case-sensitive (though some databases don't interpret this strictly).

### 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'

All date expressions (date literals) must be enclosed with single quotation marks. (Consult the reference for the particular database and connector you are using for more details.)

### 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 sub-formulá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.

In LibreOffice you do not need any knowledge of SQL for most queries, since you do not have to enter the SQL code. If you create a query in the query designer, LibreOffice automatically converts your instructions into the corresponding SQL syntax. If, with the help of the Switch Design View On/Off button, you change to the SQL view, you can see the SQL commands for a query that has already been created.

You can formulate your query directly in SQL code. Note, however, that the special syntax is dependent upon the database system that you use.

If you enter the SQL code manually, you can create SQL-specific queries that are not supported by the graphical interface in the Query designer. These queries must be executed in native SQL mode.

By clicking the Run SQL command directly icon in the SQL view, you can formulate a query that is not processed by LibreOffice and sent directly to the database engine.