Module
Contents
Index 🔎︎

# Конструктор запросов

Представление конструктора запросов позволяет создавать и редактировать запросы базы данных.

Доступ к этой команде

В окне файла базы данных щёлкните значок "Запросы" и выберите команды "Правка - Изменить"

Большинство баз данных использует запросы для фильтрации или сортировки таблиц для отображения записей на локальном компьютере. Представления выполняют то же самое, но на сервере. Если база данных расположена на сервере, который поддерживает представления, можно использовать их для фильтрации записей на сервере и уменьшения времени отображения.

Выбор команды Создать представление на вкладке Таблицы в документе базы данных приводит к открытию окна Конструктор представлений, похожего на описанное здесь окно Дизайнер запросов.

Расположение элементов в окне "Дизайнер запросов" сохраняется вместе с созданным запросом, но не может быть сохранено с созданным представлением.

## Конструктор

Чтобы создать запрос, щёлкните значок Запросы в документе базы данных, а затем щёлкните Создать запрос в конструкторе.

Нижняя панель Конструктора запросов позволяет вам задать необходимый запрос. Чтобы задать запрос, укажите включаемые в него имена полей баз данных и критерии отображения полей. Чтобы переставить столбцы в нижней панели Конструктора запросов, перетяните заголовок столбца в новое местоположение либо выберите столбец и нажмите COMMANDCTRL
+клавиша со стрелкой.

В верхней части окна конструктора отображаются значки панели Конструктор запросов и панели Конструктор.

Чтобы проверить запрос, дважды щёлкните его имя в документе базы данных. Результат запроса отобразится в таблице, аналогичной представлению источника данных. Примечание. Таблица отображается только временно.

### Клавиши в построителе запросов

Клавиши | Функция
F4 | Предварительный просмотр
F5 | Выполнить запрос
F7 | Добавить таблицу или запрос

## Обзор

When you open the query design for the first time, you see a dialog in which you must first select the table or query that will be the basis for your new query.

Дважды щёлкните поля, чтобы добавить их к запросу. Перетаскивание для определения связей.

При разработке запроса изменить выбранные таблицы невозможно.

### Удалить таблицы

Чтобы удалить таблицу из конструктора, щёлкните верхнюю границу окна таблицы для отображения контекстного меню. Для удаления таблицы из конструктора можно воспользоваться командой Удалить. Кроме того, можно нажать клавишу DELETE.

### Переместить таблицу и изменить размер таблицы

Расположение таблиц и их размер можно менять в соответствии с личными предпочтениями. Чтобы переместить таблицу, перетащите её верхнюю границу в нужное положение. Чтобы увеличить или уменьшить размер отображаемой таблицы, поместите указатель мыши на границу или угол таблицы и перетаскивайте её до достижения нужного размера.

## Связи таблиц

При существовании связей между именем поля в одной таблице и именем поля в другой таблице эти связи можно использовать в запросе.

Если, к примеру, имеется электронная таблица для статей под номерами и электронная таблица для клиентов, в которую записываются все статьи, заказанные клиентом с использованием соответствующих номеров статей, то существует связь между двумя полями данных "номер статьи". Теперь, чтобы создать запрос всех заказанных клиентом статей, необходимо получить данные из двух электронных таблиц. Для этого требуется указать в LibreOffice, какая связь существует между данными этих электронных таблиц.

Щёлкните имя поля в таблице (например, имя поля "Номер элемента" из таблицы клиентов), удерживая кнопку мыши, и перетащите имя поля на имя поля другой таблицы ("Номер элемента" из таблицы элементов). Если отпустить кнопку мыши, появляется линия, соединяющая эти два поля в двух окнах. Соответствующее условие (содержимое имён полей должно совпадать) вводится в итоговый запрос SQL.

Создание запроса на основе нескольких связанных листов возможно только при использовании LibreOffice в качестве интерфейса для реляционной базы данных.

Получить доступ к таблицам из других баз данных запроса невозможно. Запрос, задействующий несколько таблиц, может быть создан только в пределах одной базы данных.

### Указание типа ссылки

Чтобы задать тип ссылки в диалоговом окне Связи, дважды щёлкните линию, соединяющую два связанных поля, или вызовите команду меню Вставка - Создать связь.

В качестве альтернативы можно нажимать клавишу TAB, пока не будет выбрана строка, а затем нажать SHIFT+F10 и выбрать команду Правка. Некоторые базы данных поддерживают только подмножество возможных типов объединений.

### Удаление связей

Чтобы удалить связь между двумя таблицами, щёлкните соединительную линию и нажмите клавишу DELETE.

Также можно удалить соответствующие записи из списка Включённые поля в диалоговом окне Связи. Или выделите соединительный вектор с помощью клавиши TAB, вызовите контекстное меню, нажав клавиши SHIFT+F10, и выберите команду Удалить.

## Определить запрос

Выберите условия для определения запроса. Каждый столбец таблицы конструктора содержит поле данных для запроса. Условия в одной строке связаны с логическим И.

### Указать имя поля

Сначала выберите все имена полей из таблиц, которые требуется добавить к запросу. Для этого перетащите или дважды щёлкните имя поля в окне таблицы. При перетаскивании перетащите имя поля из окна таблицы в нижнюю область конструктора запросов. После этого можно определить столбцы для добавления в поле. Чтобы выбрать имя поля, дважды щёлкните его мышью. Оно будет добавлено в следующий пустой столбец.

### Удаление имён полей

Чтобы удалить имя поля из запроса, щёлкните заголовок столбца в поле и в контекстном меню столбца выберите команду Удалить.

### Сохранить запрос

Чтобы сохранить запрос, используйте значок Сохранить на стандартной панели. Отобразится диалоговое окно для ввода имени запроса. Если база данных поддерживает схемы, можно также указать схему.

#### Схема

Введите имя схемы, назначенной запросу или таблице.

#### Имя запроса или таблицы

Введите имя запроса или таблицы.

### Фильтрация данных

Чтобы выполнить фильтрацию данных для запроса, задайте нужные параметры в нижней области конструктора. Доступны следующие строки:

#### Поле

Введите имя поля данных, ссылка на которое содержится в запросе. Все параметры, заданные в нижних строках, зависят от этого поля. Если выделить ячейку кнопкой мыши, появится кнопка со стрелкой, позволяющая выбрать поле. Параметр "Имя таблицы.*" определяет все поля данных и условия, доступные для всех полей таблицы.

#### Псевдоним

Задание псевдонима. Этот псевдоним будет указан в запросе вместо имени поля. Это позволяет применять подписи столбцов, определенные пользователем. Например, если поле данных имеет имя PtNo, можно ввести псевдоним PartNum, который будет отображаться вместо имени.

В инструкциях SQL псевдонимы определяются следующим образом:

SELECT column AS alias FROM table.

Например:

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

#### Таблица

Здесь указана таблица базы данных, соответствующая выбранному полю данных. Если щёлкнуть эту ячейку, появится стрелка, позволяющая выбрать другую таблицу текущего запроса.

#### Сортировка

Выбор ячейки позволяет выбрать параметры сортировки: по возрастанию, по убыванию и без сортировки. Текстовые поля сортируются в алфавитном порядке, а числовые поля - в порядке числовых значений. Для большинства баз данных порядок сортировки может задаваться администраторами.

#### Видимый

Чтобы сделать поле видимым в запросе, пометьте его свойство Видимый. Если поле данных используется только для формулировки условия, показывать его не обязательно.

#### Условия

Задание условий фильтрации содержимого поля данных.

#### или

Здесь можно ввести дополнительное условия для фильтрации каждой строки. Несколько условий в одном столбце будут соединены с помощью оператора "ИЛИ".

Также можно использовать контекстное меню заголовков строк в нижней области конструктора, чтобы добавить дополнительную строку для функций.

### Функции

Доступность функций для запуска зависит от базы данных.

При работе с БД HSQL в поле со списком в строке Функция можно использовать следующие варианты:

Параметр | SQL | Результат
Без функции |  | Ни одна функция не выполняется.
Среднее | AVG | Вычисление среднего геометрического значения поля.
Считать | COUNT | Определение количества записей в таблице. Пустые поля могут учитываться (a) или нет (b). a) COUNT(*): Назначение звездочки в качестве аргумента, учитывающего все записи таблицы. b) COUNT(столбец): Назначение имени поля в качестве аргумента, учитывающего только те поля, в которых данное имя поля содержит значение. Нулевые значения (пустые поля) не учитываются.
Максимальное значение | МАКС | Определение наибольшего значения поля.
Минимальное значение | МИН | Определение наименьшего значения поля.
Сумма | СУММ | Вычисление суммы значений связанных полей.
Группировать | ГРУППИРОВАТЬ ПО | Группировка данных запроса согласно выбранному имени поля. Выполнение функций происходит в соответствии с указанными группами. В SQL этот параметр соответствует разделу GROUP BY. Если условие добавлено, его запись появляется в SQL HAVING.

Также можно вводить вызовы функций непосредственно в инструкцию SQL. Используется следующий синтаксис:

SELECT FUNCTION(column) FROM table.

Например, следующий вызов функции в SQL для расчета суммы:

SELECT SUM("Price") FROM "Article".

За исключение функции Группа, вышеуказанные функции имеют общее название "Агрегатные функции". Это функции, которые выполняют расчёт данных для создания сводных данных на основании полученных результатов. Могут быть также доступны дополнительные функции, не указанные в поле со списком. Это зависит от конкретной используемой системы базы данных и состояния драйвера Base.

Чтобы использовать другие функции, не указанные в поле со списком, их необходимо указать в Поле.

Вызовам функций можно назначать псевдонимы. Чтобы не отображать запрос в заголовке столбца, введите нужное имя в поле Псевдоним.

Соответствующая функция в инструкции SQL:

SELECT FUNCTION() AS alias FROM table

Пример:

SELECT COUNT(*) AS count FROM "Item"

При запуске этой функции дополнительные столбцы могут быть вставлены в запрос только с помощью получения этих столбцов как функции "Группировать".

Примеры

В следующем примере выполняется запуск запроса по двум таблицам: таблица "Элемент" с полем "Номер элемента" и таблица "Поставщики" с полем "Имя поставщика". Кроме того, в обеих таблицах есть общее поле "Номер поставщика".

Чтобы создать запрос, который содержит всех поставщиков, поставляющих более трёх элементов, необходимо выполнить следующие шаги.

1. Вставьте таблицы "Элемент" и "Поставщики" в конструктор запросов.

2. Свяжите поля "Номер поставщика" обеих таблиц, если такая связь отсутствует.

3. Дважды щёлкните поле "Номер элемента" таблицы "Элемент". С помощью контекстного меню перейдите к строке Функция и выберите функцию "Счёт".

4. Введите условие ">3" и отключите поле "Видимый".

5. Дважды щёлкните поле "Имя поставщика" в таблице "Поставщики" и выберите функцию "Группировать".

6. Запустите запрос.

Если таблица "Элемент" содержит поля "Стоимость" (для цены статьи) и "Номер поставщика", можно получить предоставляемую поставщиком среднюю стоимость элемента с помощью следующего запроса:

1. Вставьте таблицу "Элемент" в конструктор запросов.

2. Дважды щёлкните поля "Стоимость" и "Номер поставщика".

3. Активируйте строку Функция и выберите функцию "Среднее" в поле "Стоимость".

4. Также можно ввести "Среднее" в строке псевдонима (без кавычек).

5. Выберите группу для поля "Номер поставщика".

6. Запустите запрос.

Доступны следующие символы и команды контекстного меню:

### Функции

Отображение или скрытие строки для выбора функций.

### Имя таблицы

Отображение или скрытие строки имени таблицы.

### Псевдоним

Отображение или скрытие строки псевдонима.

### Отдельные значения

Применение к запросу только отдельных значений. Запрос применяется к записям, содержащим данные, которые появляются в выбранных полях несколько раз. Если команда Отдельные значения активна, в запросе будет отображаться только одна запись (DISTINCT). В противном случае будут отображаться все записи, удовлетворяющие условиям запроса (ALL).

Например, если в базе данных адресов несколько раз встречается фамилия "Smith", можно воспользоваться командой Отдельные значения и указать в запросе, чтобы эта фамилия встречалась только один раз.

Для запроса, включающего несколько полей, сочетание значений всех полей должно быть уникальным, чтобы можно было получить результат внутри определенной записи. Например, в адресной книге один раз встречается "Smith in Chicago" и два раза "Smith in London". При помощи команды Отдельные значения в запросе будут использоваться два поля - "фамилия" и "город", а результат запроса будет содержать по одному значению "Smith in Chicago" и "Smith in London".

В SQL эта команда соответствует предикату DISTINCT.

### Предел

Allows you to maximize the number of records with which query returns.

If there is added a Limit, you will get at most as many rows as the number you specify. Otherwise, you will see all records corresponding to the query criteria.

### Формулирование условий фильтрации

При формулировании условий фильтрации могут использоваться различные операторы и команды. Помимо реляционных операторов, существуют команды SQL, запрашивающие содержимое полей базы данных. При использовании этих команд в синтаксисе LibreOffice система автоматически преобразует их в соответствующий синтаксис SQL. Кроме того, можно непосредственно ввести команду SQL. В следующих таблицах представлен обзор операторов и команд:

Оператор | Значение | Условие удовлетворено, если...
= | равно | ... содержимое поля совпадает с указанным выражением. Оператор = не отображается в полях запроса. Если значение вводится без оператора, автоматически используется оператор =.
<> | не равно | ... содержимое поля не совпадает с указанным выражением.
> | больше чем | ... содержимое поля больше указанного выражения.
< | меньше чем | ... содержимое поля меньше указанного выражения.
>= | больше или равно | ... содержимое поля больше указанного выражения или совпадает с ним.
<= | меньше или равно | ... содержимое поля меньше указанного выражения или совпадает с ним.

команда LibreOffice | команда SQL | Значение | Условие удовлетворено, если...
IS EMPTY | IS NULL | Пусто | ... The value of the field is empty. For Yes/No fields with three states, this command automatically queries the undetermined state (neither Yes nor No).
IS NOT EMPTY | IS NOT NULL | не пусто | ... имя поля не пустое.
LIKE (для любого числа символов используется местозаполнитель *, для одного символа - местозаполнитель ?) | LIKE (для любого числа символов используется местозаполнитель %, для одного символа - местозаполнитель _) | является элементом | ... поле данных содержит указанное выражение. Местозаполнитель (*) означает, что выражение x встречается в начале (x*), в конце (*x) или внутри (*x*) содержимого поля. В качестве местозаполнителя в запросах SQL можно ввести символ SQL % или обычный местозаполнитель файловой системы (*) в интерфейсе LibreOffice. Местозаполнитель * или % используется для любого числа символов. Вопросительный знак (?) в интерфейсе LibreOffice или подчёркивание (_) в запросах SQL применяется для обозначения строго одного символа.
NOT LIKE | NOT LIKE | не является элементом | ... имя поля не содержит указанного выражения.
BETWEEN x AND y | BETWEEN x AND y | в интервале [x,y] | ... имя поля содержит значение, лежащее между значениями x и y.
NOT BETWEEN x AND y | NOT BETWEEN x AND y | не в интервале [x,y] | ... имя поля содержит значение, лежащее за пределами интервала между значениями x и y.
IN (a; b; c...) Обратите внимание, что точка с запятой используется в качестве разделителя во всех списках значений | IN (a, b, c...) | содержит a, b, c... | ... имя поля содержит одно из указанных выражений a, b, c,... Может быть указано любое число выражений; результат запроса определяется оператором "Или". Выражения a, b, c... могут быть числами или символами
NOT IN (a; b; c...) | NOT IN (a, b, c...) | не содержит a, b, c... | ... имя поля не содержит указанных выражений a, b, c,...
= TRUE | = TRUE | имеет значение TRUE | ... имя поля имеет значение TRUE.
= FALSE | = FALSE | имеет значение FALSE | ... имя поля имеет значение FALSE.

### Примеры

="Ms." | возвращает имена полей, содержащих "Ms."
<'2001-01-10' | returns dates that occurred before January 10, 2001
LIKE 'g?ve' | возвращает имена полей, содержащих "give", "gave" и т. п.
LIKE 'S*' | возвращает поля данных, содержащие, например, "Sun".
BETWEEN 10 AND 20 | возвращает имена полей, содержащих значения от 10 и 20. (Поля могут быть как текстовыми, так и числовыми.)
IN (1; 3; 5; 7) | возвращает имена полей со значениями 1, 3, 5, 7. Если имя поля содержит, к примеру, номер элемента, можно создать запрос, возвращающий элемент с указанным номером.
NOT IN ('Smith') | возвращает имена полей, не содержащих "Smith".

Управляющая последовательность like : {escape "escape-символ"}

Пример. select * from Item where ItemName like 'The *%' {escape '*'}

Будут получены все записи, имя которых начинается с "The *". Это означает, что возможно выполнять поиск символов, используемых как местозаполнители, например, *, ?, _, % или точка.

Управляющая последовательность Outer Join: {oj outer-join}

Пример. select Article.* from {oj item LEFT OUTER JOIN orders ON item.no=orders.ANR}

### Запрос текстовых полей

Чтобы запросить содержимое текстового поля, необходимо поместить выражение в одинарные кавычки. Различение прописных и строчных букв зависит от используемой базы данных. При использовании "LIKE" регистр учитывается по определению (в некоторых базах данных это соблюдается не так строго).

### Запрос полей даты

Date fields are represented as #Date# to clearly identify them as dates. Date, time and date/time constants (literals) used in conditions can be of either the SQL Escape Syntax type, or default SQL2 syntax.

Date Type Element | SQL Escape syntax #1 - may be obsolete | SQL Escape syntax #2 | SQL2 syntax
Дата | {Д'ГГГГ-ММ-ДД'} | {д 'ГГГГ-ММ-ДД'} | {Д'ГГГГ-ММ-ДД'}
Время | {Д'ЧЧ:ММ:СС'} | {t 'HH:MI:SS[.SS]'} | 'HH:MI:SS[.SS]'
Дата и время | {Д'ГГГГ-ММ-ДД ЧЧ:ММ:СС'} | {ts 'YYYY-MM-DD HH:MI:SS[.SS]'} | 'YYYY-MM-DD HH:MI:SS[.SS]'

Пример. select {d '1999-12-31'} from world.years

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

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

### Запрос полей "Да/Нет"

Для запроса полей "Да/Нет" в таблицах dBASE используется следующий синтаксис:

Состояние | Условие запроса | Пример
Да | для таблиц dBase: не равно ни одному заданному значению | =1 возвращает все записи, в которых поле "Да/Нет" находится в состоянии "Да" или "Нет" (выделено чёрным цветом),
Нет | . | =0 возвращает все записи, в которых поле "Да/Нет" находится в состоянии "Нет" или "Выкл" (не выделено).
Пусто | IS NULL | IS NULL возвращает все записи, в которых поле "Да/Нет" не находится ни в состоянии "Да", ни в состоянии "Нет" (выделено серым цветом).

Синтаксис зависит от используемой системы баз данных. Следует отметить, что поля "Да/Нет" могут быть определены по-разному (только 2 состояния вместо 3).

### Запросы параметров

Parameter queries allow the user to input values at run-time. These values are used within the criteria for selecting the records to be displayed. Each such value has a parameter name associated with it, which is used to prompt the user when the query is run.

Parameter names are preceded by a colon in both the Design and SQL views of a query. This can be used wherever a value can appear. If the same value is to appear more than once in the query, the same parameter name is used.

In the simplest case, where the user enters a value which is matched for equality, the parameter name with its preceding colon is simply entered in the Criterion row. In SQL mode this should be typed as WHERE "Field" = :Parameter_name

Parameter names may not contain any of the characters <space>`!"$%^*()+={}[]@'~#<>?/,. They may not be the same as field names or SQL reserved words. They may be the same as aliases.

A useful construction for selecting records based on parts of a text field's content is to add a hidden column with "LIKE '%' || :Part_of_field || '%'" as the criterion. This will select records with an exact match. If a case-insensitive test is wanted, one solution is to use LOWER (Field_Name) as the field and LIKE LOWER ( '%' || :Part_of_field || '%' ) as the criterion. Note that the spaces in the criterion are important; if they are left out the SQL parser interprets the entire criterion as a string to be matched. In SQL mode this should be typed as LOWER ( "Field_Name" ) LIKE LOWER ( '%' || :Part_of_field || '%' ).

Parameter queries may be used as the data source for subforms, to allow the user to restrict the displayed records.

### Ввод параметра

The Parameter Input dialog asks the user to enter the parameter values. Enter a value for each query parameter and confirm by clicking OK or typing Enter.

The values entered by the user may consist of any characters which are allowable for the SQL for the relevant criterion; this may depend on the underlying database system.

The user can use the SQL wild-card characters "%" (arbitrary string) or "_" (arbitrary single character) as part of the value to retrieve records with more complex criteria.

## Режим SQL

SQL расшифровывается как "Structured Query Language" (структурный язык запросов) и предоставляет инструкции по обновлению и администрированию реляционных баз данных.

Для большинства запросов в LibreOffice знание SQL не является необходимым, поскольку не нужно вводить код SQL. При создании запроса в конструкторе запросов LibreOffice автоматически преобразует введенные инструкции в соответствующий синтаксис SQL. Чтобы просмотреть команды SQL для запроса, созданного ранее, перейдите к представлению SQL с помощью кнопки Включение и выключение режима конструктора.

Можно сформулировать запрос непосредственно в коде SQL. Однако следует помнить, что особенности синтаксиса могут зависеть от используемой системы баз данных.

При вводе кода SQL вручную можно создавать запросы SQL, которые не поддерживаются графическим интерфейсом конструктора запросов. Эти запросы должны быть выполнимы в режиме Native SQL.

Чтобы сформулировать запрос, не обрабатываемый LibreOffice, щёлкните значок Выполнить команду SQL непосредственно.