Модуль
Зміст
Покажчик 🔎︎

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

Подання конструктора запитів дозволяє вам створювати й редагувати запити бази даних.

Щоб скористатися цією командою…

У вікні файлу бази даних натисніть значок Запити і виберіть команди Зміни - Редагування

Більшість баз даних використовує запити для фільтрування або сортування таблиць для відображення записів на локальному комп'ютері. Представлення виконують те саме, але на сервері. Якщо база даних розташована на сервері, що підтримує представлення, то можна використовувати їх для фільтрації записів на сервері і зменшення часу відображення.

Обравши команду Створити представлення на вкладці Таблиці документа бази даних, ви побачите вікно Конструктор представлень, схоже на описане тут вікно Конструктор запитів.

Розташування елементів у вікні Конструктор запитів зберігається разом зі створеним запитом, але не може бути збережене зі створеним представленням.

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

Щоб створити запит, клацніть піктограму Запити в документі бази даних, а потім виберіть Створити запит у режимі дизайну.

Нижня панель конструктора дозволяє вам визначити запит. Для цього, треба вказати назви полів бази даних які будуть використані в ньому, та критерії для виводу полів. Щоб змінити послідовність розміщення стовпців у нижній панелі конструктора, перетягніть заголовок стовпця у потрібне місце розташування, або оберіть стовпець та натисніть CommandCtrl
+ клавіша зі стрілкою.

У верхній частині вікна конструктора показані значки панелі Конструктор запитів та панелі Дизайн.

Щоб перевірити запит, двічі клацніть його ім'я у документі бази даних. Результат запиту відобразиться в таблиці, аналогічної представленню джерела даних. Примітка: таблиця відображається тільки тимчасово.

### Клавіші в конструкторі запитів

Клавіша | Функція
F4 | Попередній перегляд
F5 | Виконати запит
F7 | Додати таблицю чи запит

## Огляд

Коли ви вперше відкриєте конструктор запитів, ви побачите діалогове вікно, в якому ви повинні спочатку обрати таблицю або запит, який стане основою для вашого нового запиту.

Двічі клацніть поля, щоб додати їх до запиту. Перетягніть одне поле та відпустіть його на інше для визначення зв'язків між ними.

При розробці запиту змінити вибрані таблиці неможливо.

### Вилучити таблиці

Щоб видалити таблицю з конструктора, клацніть верхню межу вікна таблиці для відображення контекстного меню. Для видалення таблиці з конструктора можна скористатися командою Видалити. Крім того, можна натиснути клавішу DELETE.

### Перемістити таблицю і змінити розмір таблиці

Ви можете змінити розмір та розташувати таблиці відповідно до ваших уподобань. Для переміщення таблиці, перетягніть верхню межу в потрібне положення. Щоб збільшити або зменшити розмір зображення таблиці, наведіть вказівник миші на межу або кут таблиці та перетягніть її до досягнення потрібного розміру.

## Зв'язки таблиць

Якщо між полем в одній таблиці та полем в іншій таблиці існують зв'язки, ви можете використати ці зв'язки для вашого запиту.

Якщо, наприклад, у вас є таблиця для статей ідентифікованих за номером статті та таблиця для клієнтів, у яку ви записуєте всі статті, замовлені клієнтом з використанням відповідних номерів статей, то існує зв'язок між двома полями даних "номер статті". Тепер, щоб створити запит усіх замовлених клієнтом статей, вам необхідно отримати дані з двох таблиць. Для цього потрібно вказати LibreOffice, який зв'язок існує між даними цих таблиць.

Щоб зробити це, клацніть ім'я поля в таблиці (наприклад, ім'я поля "Номер елемента" таблиці клієнтів), утримуйте кнопку миші натиснутою та перетягніть назву поля на назву поля іншої таблиці ("Номер елемента" таблиці елементів). Коли ви відпустите кнопку миші, з'явиться лінія, що з'єднає ці два поля в двох вікнах. Відповідна умова (вміст імен полів має збігатися) вводиться в підсумковий запит SQL.

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

Ви не можете отримати доступ до таблиць з різних баз даних в запиті. Запити, пов'язані з декількома таблицями можуть бути створені лише в межах однієї бази даних.

### Вказівка типу посилання

Двічі клацніть лінію, що сполучає два пов'язаних поля, або виберіть команду меню Вставка - Створити зв'язок, щоб вказати тип посилання в діалоговому вікні Властивості зв'язку.

У якості альтернативи можна натискати клавішу TAB, доки не буде обрано потрібну лінію, потім натиснути Shift+F10 для розкриття контекстного меню, та обрати команду Змінити. Деякі бази даних підтримують тільки частину можливих типів з'єднання.

### Видалення зв'язків

Щоб видалити зв'язок між двома таблицями, клацніть сполучну лінію і натисніть клавішу DELETE.

Також можна видалити відповідні записи зі списку Включені поля у діалоговому вікні Зв'язки. Або виділіть з'єднувальний вектор за допомогою клавіші TAB, викличте контекстне меню, натиснувши клавіші SHIFT+F10 та виберіть команду Видалити.

## Визначення запиту

Виберіть умови для визначення запиту. Кожен стовпець таблиці конструктора містить поле даних для запиту. Умови в одному рядку пов'язані за допомогою Логічного ТА.

### Вказати назву поля

Спочатку оберіть всі назви полів таблиць, які потрібно додати до запиту. Ви можете зробити це за допомогою перетягування або подвійного клацання назви поля у вікні таблиці. Для перетягування мишкою пересуньте назву поля з вікна таблиці в нижню область конструктора запитів. Після цього ви можете визначити, у який саме стовпчик варто додати це поле. Виберіть ім'я поля подвійним клацанням. Його буде додано до наступного порожнього стовпця.

### Вилучення назв полів

Щоб видалити назву поля із запиту, клацніть заголовок стовпця поля та виберіть команду Видалити у контекстному меню стовпця.

### Зберегти запит

Для збереження запиту, використайте піктограму Зберегти на Стандартній панелі. Ви побачите діалогове вікно, у якому мусите ввести назву для запиту. Якщо база даних підтримує схеми, можете також вказати схему.

#### Схема

Введіть ім'я схеми, призначеної для запиту або представлення.

#### Назва запиту або назва представлення

Введіть назву запиту або представлення.

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

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

#### Поле

Введіть ім'я поля даних, посилання на яке міститься у запиті. Усі параметри, задані в нижніх рядках, залежать від цього поля. Якщо виділити комірку кнопкою миші, з'явиться кнопка зі стрілкою, що дозволяє вибрати поле. Параметр "Ім'я таблиці.*" визначає всі поля даних і умови, доступні для всіх полів таблиці.

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

Визначає псевдонім. Цей псевдонім буде вказано в запиті замість імені поля. Це дає можливість використовувати назви стовпців визначені користувачем. Наприклад, якщо поле даних має назву PtNo, а ви хотіли б замість цієї назви у результаті виконання запиту побачити назву PartNum, введіть PartNum у якості псевдоніму.

В інструкціях SQL псевдоніми визначаються наступним чином:

SELECT стовпець AS псевдонім FROM таблиця.

Приклад:

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

#### Таблиця

Тут зазначена таблиця бази даних, відповідна обраному полю. Якщо клацнути клітинку, то з'явиться стрілка, що дозволить вам обрати іншу таблицю поточного запиту.

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

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

#### Видиме

Щоб зробити поле видимим у запиті, позначте його властивість Видиме. Якщо поле даних використовується тільки для формулювання умови, то показувати його не обов'язково.

#### Критерій

Визначення умов, за якими має бути відфільтрований вміст поля даних.

#### або

Тут ви можете ввести по одній додатковій умові фільтрації у кожний рядок. Декілька умов у одному стовпці будуть об'єднані за допомогою оператора OR.

Також можна використати контекстне меню заголовків рядків в нижній частині конструктора, щоб додати додатковий рядок для функцій:

### Функції

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

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

Параметр | SQL | Результат
Без функції |  | Жодна функція не виконується.
Середнє | AVG | Обчислення середнього арифметичного значення поля.
Кількість | COUNT | Визначення кількості записів у таблиці. Порожні поля можуть враховуватися (а) або ні (б). a) COUNT(*): Призначення зірочки в якості аргументу, що враховує всі записи таблиці. б) COUNT(стовпець): Призначення імені поля в якості аргументу, що враховує тільки ті поля, у яких дане ім'я поля містить значення. Значення NULL (порожні поля) не враховуються.
Максимум | MAX | Визначення найбільшого значення поля.
Мінімум | MIN | Визначення найменшого значення поля.
Сума | SUM | Обчислення суми значень пов'язаних полів.
Групувати | GROUP BY | Виконується групування даних запиту згідно зі значенням обраного поля. Виконання функцій відбувається відповідно до отриманих груп. У SQL цей параметр відповідає пропозиції GROUP BY. Якщо до групування додано умову, то її запис у SQL з'являється у пропозиції HAVING.

Також можна вводити виклики функцій безпосередньо в інструкцію SQL. Використовується наступний синтаксис:

SELECT FUNCTION(стовпець) FROM таблиця.

Наприклад, наступний виклик функції в SQL для розрахунку суми:

SELECT SUM("Ціна") FROM "Артикул".

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

Щоб використовувати інші функції, не зазначені в полі зі списком, їх необхідно вказати в Поле.

Полям з викликами функцій можна призначати псевдоніми. Щоб приховати назву функції у заголовку стовпця, введіть потрібне ім'я в поле Псевдонім.

Відповідна функція в інструкції SQL:

SELECT FUNCTION() AS псевдонім FROM таблиця

Приклад:

SELECT COUNT(*) AS кількість FROM "Елемент"

При використанні цієї функції, додаткові стовпці можуть бути додані до запиту виключно при використанні їх із функцією "Групувати".

Приклади

У наступному прикладі виконується запуск запиту з двох таблиць: таблиця "Елемент" з полем "Номер елементу" і таблиця "Постачальники" з полем "Ім'я постачальника". Крім того, в обох таблицях є загальне поле "Номер постачальника".

Щоб створити запит, який містить всіх постачальників, що надають більше трьох елементів, необхідно виконати наступні кроки.

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

2. Зв'яжіть поля "Номер постачальника" обох таблиць, якщо такий зв'язок відсутній.

3. Двічі клацніть поле "Номер елемента" в таблиці "Елемент". За допомогою контекстного меню увімкніть відображення рядка Функція та виберіть функцію "Кількість".

4. Введіть умову >3 та зніміть прапорець поля Видиме.

5. Двічі клацніть поле "Ім'я постачальника" в таблиці "Постачальники" та оберіть функцію Групувати.

6. Запустіть запит.

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

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

2. Двічі клацніть поля "Вартість" і "Номер постачальника".

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

4. Також можна ввести "Середнє" в рядку псевдоніма (без лапок).

5. Оберіть функцію Групувати для поля "Номер постачальника".

6. Запустіть запит.

Доступні наступні елементи контекстного меню, оператори та команди:

### Функції

Показує або приховує рядок для вибору функцій.

### Назва таблиці

Показує або приховує рядок для назви таблиці.

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

Показує або приховує рядок для псевдоніма.

### Різні значення

Застосовує до запиту тільки різні значення. Запит застосовується до записів, що містять дані, які з'являються в обраних полях кілька разів. Якщо команда Різні значення активна, то в запиті буде відображатися тільки один запис (DISTINCT). В іншому випадку будуть відображатися всі записи, що задовольняють умови запиту (ALL).

Наприклад, якщо в базі даних адрес кілька разів зустрічається прізвище "Сміт", ви можете обрати команду Різні значення щоб визначити, що прізвище "Сміт" в запиті має зустрічатися тільки один раз.

Для запиту, що включає кілька полів, комбінація значень з усіх полів повинна бути унікальною, щоб результат міг бути сформований зі специфічного запису. Наприклад, в адресній книзі один раз зустрічається "Сміт в Чикаго" і два рази "Сміт в Лондоні". За допомогою команди Різні значення у запиті будуть використовуватися два поля "прізвище" та "місто", а результат запиту буде містити по одному значенню "Сміт в Чикаго" та "Сміт в Лондоні".

У SQL ця команда відповідає предикату DISTINCT.

### Обмеження

Забезпечує зменшення кількості записів, котрі повертає запит.

Якщо додається Обмеження, ви отримаєте щонайбільше стільки рядків, скільки вказали. У іншому випадку, ви отримаєте всі записи, які задовольняють критеріям запиту.

### Формулювання умов фільтрації

При формулюванні умов фільтрації можуть використовуватися різні оператори та команди. Крім реляційних операторів, існують команди SQL, котрі запитують вміст полів бази даних. При використанні цих команд в синтаксисі LibreOffice система LibreOffice автоматично перетворює їх у відповідний синтаксис SQL. Крім того, можна безпосередньо ввести команду SQL. У наступних таблицях представлено огляд операторів та команд:

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

команда LibreOffice | Команда SQL | Значення | Умова задоволена, якщо...
IS EMPTY | IS NULL | порожньо | ... значення поля порожнє. Для полів "Так/Ні" з трьома станами ця команда автоматично запитує стан "не визначено" (ні "Так", ні "Ні").
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.

### Приклади

='Пані' | повертає записи з вмістом поля "Пані"
<'2001-01-10' | повертає записи з датами до 10 Січня, 2001
LIKE 'дав?ти' | повертає записи із вмістом поля на кшталт "давати" та "давити".
LIKE 'С*' | повертає записи із вмістом поля, наприклад, "Сонце".
BETWEEN 10 AND 20 | повертає записи, які містять значення поля від 10 до 20. (Поля можуть бути як текстовими, так і числовими).
IN (1; 3; 5; 7) | повертає записи зі значеннями полів 1, 3, 5, 7. Якщо значення поля містить, наприклад, номер елемента, можна створити запит, що повертає елемент зі вказаним номером.
NOT IN ('Сміт') | повертає записи, значення поля котрих, не містять "Сміт".

Like Екранована Послідовність: {escape 'екрануємий-символ'}

Приклад: SELECT * FROM Елемент WHERE НазваЕлементу LIKE 'The *%' {ESCAPE '*'}

Будуть отримані всі записи, де назва елементу починається із 'The *'. Це означає, що ви також можете шукати символи, що в іншому випадку використовуються як заповнювачі, наприклад, *, ?, _, % або період.

Outer Join Екранована Послідовність: {oj зовнішнє-об'єднання}

Приклад: SELECT Article.* FROM {oj item LEFT OUTER JOIN orders ON item.no=orders.ANR}

### Запит текстових полів

Щоб запросити вміст текстового поля, необхідно взяти вираз в одинарні лапки. Розрізнення великих та малих літер залежить від використовуваної бази даних. При використанні LIKE регістр враховується за визначенням (в деяких базах даних це дотримується не так суворо).

### Запит полів дати

Поля Дати представлені у вигляді #Дата#, щоб чітко ідентифікувати їх як дати. Константи дати, часу та дати/часу (літерали) можуть використовуватися в запитах або у вигляді SQL Екранованого Синтаксису, або SQL2 синтаксису за замовчуванням.

Елемент Типу Дата | SQL Екранований #1 - міг застаріти | SQL Екранований синтаксис #2 | SQL2 синтаксис
Дата | {D'YYYY-MM-DD'} | {d 'YYYY-MM-DD'} | 'YYYY-MM-DD'
Час | {D'HH:MM:SS'} | {t 'HH:MI:SS[.SS]'} | 'HH:MI:SS[.SS]'
Дата та Час | {D'YYYY-MM-DD HH:MM:SS'} | {ts 'YYYY-MM-DD HH:MI:SS[.SS]'} | 'YYYY-MM-DD HH:MI:SS[.SS]'

Приклад: SELECT {d '1999-12-31'} FROM world.years

Приклад: SELECT * FROM mytable WHERE years='1999-12-31'

Усі вирази дати (літерали) повинні бути укладені в одинарні лапки. (Більш детальну інформацію шукайте в документації до конкретної бази даних та конектору які використовуєте.)

### Запит логічних полів

Для запиту логічних полів у таблицях dBASE використовується наступний синтаксис:

Стан | Критерій запиту | Приклад
Так | для dBase таблиць: не дорівнює жодному заданому значенню | = 1 повертає всі записи, де Логічне поле має статус "Так" або "Увімкнено" (виділено чорним кольором),
Ні | . | =0 повертає всі записи, у яких Логічне поле має статус "Ні" або "Вимкнено" (прапорець знято).
Порожньо | IS NULL | IS NULL повертає всі записи, для яких Логічне поле не має жодного зі станів Так або Ні (виділено сірим).

Синтаксис залежить від використовуваної системи баз даних. Слід також зазначити, що Логічні поля можуть бути визначені по-різному (тільки 2 стану замість 3).

### Запити з параметрами

Запити з параметрами дозволяють користувачеві вводити значення під час виконання програми. Ці значення використовуються у критеріях вибору записів для відображення. Кожне таке значення має назву параметра, пов'язаного з ним, який використовується, щоб запитувати користувача під час запуску запиту.

Іменам параметрів передує двокрапка в представленнях як Конструктора запитів, так і SQL кода. Це можна використовувати всюди, де може з'явитися значення. Якщо одне й те ж значення має з'являтися кілька разів в запиті, використовується одне й те ж ім'я параметра.

У найпростішому випадку, коли користувач вводить значення, яке порівнюється зі значенням поля, ім'я параметра з його попередньою двокрапкою просто вводиться в рядку Критерію. В SQL коді це виглядає так WHERE "Поле" = :Назва_параметру

Імена параметрів не можуть містити будь-які з символів <пробіл>`!"$%^*()+={}[]@'~#<>?/,. Вони не можуть бути такими ж, як назви полів або SQL зарезервованих слів. Проте можуть бути такими ж, як псевдоніми.

Корисною конструкцією для вибірки записів на основі частин вмісту текстового поля є додавання прихованого стовпця з "LIKE '%' || :Частина_вмісту_поля || '%'" у якості критерію. Це дозволяє вибирати записи з точною відповідністю. Якщо потрібно виконати нечутливий до регістру пошук, одним з рішень є використання LOWER (Назва_Поля) у якості поля та LIKE LOWER ( '%' || :Частина_вмісту_поля || '%' ) у якості критерію. Зверніть увагу, що пробіли в критерії важливі; якщо вони опущені, SQL-аналізатор інтерпретує весь критерій як рядок, що має збігатися. У SQL коді це повинно бути набрано як LOWER ( "Назва_Поля" ) LIKE LOWER ( '%' || :Частина_вмісту_поля || '%' ).

Запити з параметрами можуть бути використані у якості джерела даних для субформ, щоб дозволити користувачеві обмежити записи що виводитимуться.

### Введення параметрів

Діалогове вікно Ввід параметру просить користувача ввести значення параметрів. Введіть значення для кожного параметру запиту та підтвердьте натиснувши кнопку Гаразд або Enter.

Значення, введені користувачем, можуть складатися з будь-яких символів, які допустимі в SQL для відповідного критерію; це може залежати від використовуваної бази даних.

Користувач може використовувати спеціальні символи SQL "%" (довільний рядок) або "_" (один довільний символ) у якості частини значення для отримання записів із більш складними критеріями.

## Режим SQL

SQL розшифровується як "Structured Query Language" або Мова Структурованих Запитів, та надає інструкції для оновлення та адміністрування реляційних баз даних.

Для переважного числа запитів у LibreOffice знання SQL не вимагається, бо не потрібно вводити код SQL. При створенні запиту за допомогою конструктора запитів LibreOffice автоматично перетворює ваші інструкції у відповідний синтаксис SQL. Щоб переглянути SQL-команди попередньо створеного запиту, перейдіть до вигляду SQL за допомогою кнопки Увімкнення та вимкнення режиму конструктора.

Можна сформулювати запит безпосередньо в коді SQL. Однак, слід пам'ятати, що особливості синтаксису можуть залежати від використовуваної системи баз даних.

Якщо ви вводите SQL код вручну, ви можете створити SQL специфічні запити, що не підтримуються графічним інтерфейсом Конструктора запитів. Ці запити повинні бути виконані в режимі SQL коду.

Щоб сформулювати запит, не оброблюваний через LibreOffice, клацніть піктограму Виконати команду SQL напряму.