Зміст
Покажчик 🔎︎

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

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

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

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

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

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

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

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

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

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

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

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

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

Клавіша | Функція
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"

#### Таблиця

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

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

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

#### Видиме

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

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

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

#### або

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

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

### Функції

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

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

Параметр | SQL | Результат
Без функції |  | Жодна функція не виконується.
Середнє | AVG | Обчислення середнього арифметичного значення поля.
Кількість | COUNT | Визначення кількості записів у таблиці. Порожні поля можуть враховуватися (а) або ні (б). a) COUNT(*): призначення зірочки в якості аргументу, означає, що слід брати до уваги всі записи таблиці. b) 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.

### Приклади

='Ms.' | повертає записи з вмістом поля "Ms."
<'2001-01-10' | повертає записи з датами до 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 'екрануємий-символ'}

Приклад: 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 напряму.