Запити, фільтри, використання
та функціональне призначення
Що таке фільтр
Довідка (Help) дає визначення поняттю “фільтр” так: “Набір умов, які застосовуються для добору підмножини записів чи для сортування записів. У Microsoft Access існують фільтри чотирьох типів: фільтр по виділеному фрагменту, звичайний фільтр, розширений фільтр і фільтр по вводу.” У свою чергу, умова відбору визначається як “набір обмежувальних умов, наприклад, = "Україна" (означаюче, що потрібно строкове значення "Україна") чи > 30000, використовуваних для висновку визначеного набору записів при створенні чи запиту фільтра.”
Насправді фільтр — це просто логічний вислів. Фільтрація таблиці — це добір тих рядків таблиці, для яких відповідне вираження істинне. Ю.Шафран визначає фільтр як логічне вираження. Потрібно тільки пояснити, як воно будується з “умов”. А для цього необхідно розібратися, що таке логічний вислів.
Арифметичні і логічні вираження
Help (довідка) визначає вираження так: “Будь-яка комбінація операторів, констант, значень текстових констант, функцій, імен полів, елементів керуваннячи властивостей, результатом якої є конкретне значення.”
Дане визначення є досить складним і не зовсім вірним. Що таке комбінація операторів, констант і т.д.?
Спробуємо знайти більш конструктивне визначення. Щоб не захаращувати виклад непринциповими деталями, ми обмежимося випадком, коли в таблиці всі атрибути — числові (тобто в клітках таблиці можуть стояти тільки числа).
Як арифметичні, так і логічні вираження будуються з деяких “цеглин” за допомогою визначеного набору операцій. У випадку арифметичних виражень “цеглинами” служать числа й атрибути (інших “цеглин” ми для простоти не розглядаємо), а з'єднують їхні звичайні арифметичні операції. Формально арифметичні вираження визначаються так.
1. Будь-яке число чи атрибут є арифметичним вираження.
2. Якщо A — арифметичне вираження, то (A) — теж арифметичне вираження.
3. Якщо А и В — арифметичні вираження, то вираження А+В, А–В, А*В, А/В и А**В теж є арифметичними.
4. Інших арифметичних виражень немає.
От приклади арифметичних виражень: 7, х, 2+2, 2*x+3, 2*(х+3).
Маючи формальне визначення, ми можемо пояснити, чому, скажемо, вираження 2*(х+3) є арифметичним, а вираження 7*+8 арифметичним не є. Дійсно, Для першого з цих виражень, відповідно до правила 1, вираження х і 3 є арифметичними. Звідси, за правилом 2, випливає, що вираження (х+3) теж є арифметичним. За правилом 1, вираження 2 — арифметичне. Виходить, за правилом 3, і вираження 2*(х+3) — арифметичне. Що стосується вираження 7*+8, воно не арифметичне хоча б уже тому, що символ + вимагає арифметичних виражень по обидва боки від себе, а вираження ліворуч від нього виглядає так: 7*. У свою чергу 7* не є арифметичним, оскільки символ * теж по обидва боки вимагає арифметичних виражень, а праворуч просто нічого немає.
Приведене визначення арифметичного вираження конструктивно саме в тому змісті, що дозволяє прямо по тексту без обчислень визначити, арифметичне вираження перед нами чи ні.
Якщо всім атрибутам, що входять в арифметичне вираження, додати числові значення, символи +, – , *, / і ** проінтерпретувати, відповідно, як операції додавання, вирахування, множення, розподіли і зведення в ступінь, і визначити природним образом (тобто як учать у школі) порядок виконання цих дій, то дане арифметичне вираження одержить чисельне значення. Скажемо, якщо значення х и у є, відповідно, 7 і 8, то значенням вираження х+2*у є 23.
Таким чином, визначення того, чи є дане вираження арифметичним, і обчислення значення вираження — це два різних питання.
Перейдемо до визначення логічних виражень. Ми будемо вважати, що “цеглини” логічних виражень мають вид хq Т, де х – атрибут, Т – арифметичне вираження, а q — один із символів порівняння: = (дорівнює), <> (не дорівнює), < (менше) чи > (більше). З'єднуються “цеглини” за допомогою логічних операцій AND, OR і NOT.
Як і для арифметичних виражень, ми хочемо дати формальне визначення. Спочатку визначимо найпростіші логічні вираження, чи атоми.
Визначення 1. Нехай х – атрибут, Т – арифметичне вираження. Тоді вираження х=Т, х<>Т, х<Т и х>Т називаються атомами.
Тепер можна формально визначити логічні вираження. Ми будемо позначати їх великими латинськими буквами.
Визначення 2.
1. Всякий атом є логічне вираження.
2. Істина і Неправда — логічні вираження.
3. Якщо X — логічне вираження, то вираження, те (X) — теж логічне вираження
4. Якщо Х и У — логічні вираження, то вираження Х AND Y, Х OR Y і NOT Х теж є логічними.
5. Інших логічних виражень немає.
От приклади логічних виражень: NOT х = 7, (х = 2+2) AND у > 2*(х+3).
Тепер переходимо до значень виражень. Значеннями логічних виражень є Істина і Неправда.
Спочатку визначимо значення атомів. Для цього всім атрибутам додамо числові значення й обчислимо значення арифметичного вираження, що входить в атом. Символи =, <>, < і > інтерпретуються як стандартним образом, як знаки порівняння чисел. Атом приймає значення Істина, якщо істинно відповідне порівняння, у противному випадку значення атома Неправда. Наприклад, якщо значення х и у є, відповідно, 7 і 8, то значенням атома х=х+2*у буде Неправда, тому що насправді 7 не дорівнює 23.
Для обчислення значення логічного вираження, що не є атомом, служать так називані таблиці істинності. Вони дозволяють обчислити значення логічного вираження, якщо відомі значення його підвисловлень. От таблиця істинності для операції AND.
Х | Y | Х AND Y |
Істина | Істина | Істина |
Істина | Неправда | Неправда |
Неправда | Істина | Неправда |
Неправда | Неправда | Неправда |
Она показывает, как, зная значения выражений Х и Y, вычислить значение выражения Х AND Y.
А вот таблицы истинности для OR и NOT:
Х | Y | Х OR Y |
Істина | Істина | Істина |
Істина | Неправда | Істина |
Неправда | Істина | Істина |
Неправда | Неправда | Неправда |
Х | NOT Х |
Істина | Неправда |
Неправда | Істина |
Але і цього ще недостатньо: потрібно, як і для арифметичних операцій визначити порядок виконання логічних операцій, інакше кажучи, визначити їхнє старшинство. Самої старший вважається операція NOT (тобто у вираженні без дужок вона виконується першої), потім йде операція AND, потім операція OR.
Тепер, знаючи значення атомів, ви можете за допомогою цих таблиць обчислити значення будь-якого вираження, побудувавши для нього свою таблицю істинності. Як приклад побудуємо таку таблицю для виражень NOT (Х OR Y) і NOT X OR Y
Х | Y | Х OR Y | NOT (Х OR Y) | NOT Х | NOT X OR Y |
Істина | Істина | Істина | Неправда | Неправда | Істина |
Істина | Неправда | Істина | Неправда | Неправда | Неправда |
Неправда | Істина | Істина | Неправда | Істина | Істина |
Неправда | Неправда | Неправда | Істина | Істина | Істина |
Мова алгебри логіки, що фактично описаний вище, виник як попытка формалізувати природну мову. Дійсно, у природних мовах ми теж зустрічаємося з подібними конструкціями, наприклад у російській мові. Там аналогами логічних виражень є оповідальні пропозиції, аналогами атомів – прості оповідальні пропозиції, а аналогами логічних операцій – слова И, ЧИ, НЕМАЄ й ін. Звичайно, аналогія тут далеко не повна, але усе-таки вона дозволяє зрозуміти основні ідеї алгебри логіки.
Справді, коли щира пропозиція “На вулиці ЧИ стемніло в мене утомилися ока”? Коли істинно хоча б одне з пропозицій “На вулиці стемніло” чи “у мене утомилися ока”. Таким чином, у даному ЧИ випадку діє аналогічно операції OR (правда, в інших ЧИ фразах може вживатися в іншому змісті). Точно так само союз И можна вважати аналогом операції AND. Наприклад, фраза “Заграла музика И в зал увійшла вона” щира якщо і тільки щирі обидві її складові частини: “заграла музика” і “у зал увійшла вона”. ЧИ НЕ НІ часто виступає аналогом операції NOT. Скажемо, пропозиція “я НЕ знаю цієї людини” істинно в тих випадках, коли помилкова фраза “я знаю цієї людини”.
Треба, звичайно, розуміти, що формальна логіка доставляє нам досить грубий зліпок природної мови. Приміром, з погляду формальної логіки вираження X AND Y і Y AND X рівносильні в тім змісті, що істинність одного з них завжди означає й істинність іншого (цю властивість називають комунікативністю операції AND). Однак чи рівносильні в людському сприйнятті фрази “заграла музика И в зал увійшла вона” і “у зал увійшла вона И заграла музика”? А для фрази “я знаю цієї людини” запереченням (у звичайній мові) буде не тільки фраза “я не знаю цієї людини”, але і фрази “я знаю не цієї людини” і “не я знаю цієї людини”.