asyan.org
добавить свой файл
  1 2 3

Що таке запит

У звичайній мові термін “запит” вживається в різних змістах. По-перше, ця вимога офіційного роз'яснення по якій-небудь справі (запит депутата міністру); по-друге, призначення надмірної ціни за що-небудь; по-третє, потреби, інтереси (ну і запити в цих нових росіян). Ми привели роз'яснення терміна “запит” по словнику С.І.Ожогова. Нас цей термін цікавить, можна сказати, у “канцелярському” змісті — як вираження інформаційної потреби користувача на деякій мові.

На перший погляд може показатися, що потреба (те, що людині потрібно) і вираження цієї потреби на деякій мові — це те саме. Насправді це не так. Якщо людина чи знає почуває, що йому потрібно, то це ще не означає, що він може виразити свою потребу відповідною мовою. Уявіть собі, що ви спілкуєтеся з дитиною, що не вміє розмовляти, чи з іноземцем, що не знає вашої мови. Він лементом (дитина) чи жестом (іноземець) показує, що йому щось потрібно від вас. Але зрозуміти, що саме йому потрібно, ви не можете. А він же знає, що йому потрібно! Ви починаєте, пропонувати йому різні предмети, а він або відкидає, або приймає їх.

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

Усім відомо, що спілкування з машиною відбувається на деякій формальній мові. Спеціальні мови, на яких користувачі виражають свої інформаційні потреби, називаються мовами запитів. Отже, ми будемо розуміти запит як інформаційну потребу користувача. Вираження цієї потреби на деякій формальній мові ми будемо називати формулою чи запиту вираженням запиту.

Довідка (Help) визначає запит так: “Вимога на добір даних, що зберігаються в таблицях, чи вимога на виконання визначених дій з даними. Запит дозволяє створити загальний набір записів з даних, що знаходяться в різних таблицях, і використовувати цей набір як джерело даних для чи форми звіту. У Microsoft Access користувач має можливість створювати і виконувати запити наступних типів:

· Запити на вибірку (включаючи запити з параметрами і підсумкові запити)

· Запити на зміну

· Перехресні запити

· Специфічні запити SQL.

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

Так що ж таке запит (і, зокрема, запит-вибірка): “спеціальна структура”, “вимога на добір даних”, “питання про даний”, “таблиця”, чи що-небудь інше?

Щоб відповісти на це питання, потрібно знову згадати, що в реляційних системах усі дані представляються у виді таблиць. Ці таблиці поділяються на базисні (тобто вихідні дані) і похідні, що обчислюються на основі базисних. Базисні відносини — це вихідні дані. А похідні — це або відповідь, або проміжні результати. Суть роботи СУБД полягає в тім, що вона, перетворити наявні відносини, будує по них нові відносини. Зрештою, обчислюється підсумкове відношення, що ми будемо називати відповіддю на запит.

Обмеження цілісності - це правила (можна сказати, аксіоми), що із усіх станів виділяють “розумні”. Наприклад, якщо в деякій базисній таблиці є атрибути “дата_народження” і “дата_смерті”, те природно ввести таке обмеження цілісності: дата_народження  дата_смерті.

Визначимо стан БД як набір базисних відносин. (Більш точно було б визначити стан як алгебраїчну систему, але це ускладнило б формалізацію.) У класі всіх станів виділяється підклас припустимих станів. Це ті стани, що задовольняють обмеженням цілісності. Тоді запит можна трактувати як функцію Z, що зіставляє кожному припустимому стану ST деяке відношення Z(ST), що ми і називаємо відповіддю на запит. При цьому сам запит записується вираженням на відповідному формальній мові, що, як було вище сказане, називається мовою запитів. Це вираження ми будемо називати формулою запиту.

Пояснимо сказане на прикладі. Нехай мається два базисних відношення:

Розмови

номер

дата

місто

тривалість

11-22-33

01.01.00

Москва

7

11-22-33

01.02.00

Париж

9

22-33-44

01.01.00

Женева

20

22-33-44

02.01.00

Цюрих

17

і

Телефони

номер

власник

Адрес

11-22-33

Іванов

Ленина 17

22-33-44

Петров

Вайнера 4

Нас цікавить, з якими містами і коли розмовляв Петров. Для того, щоб вирахувати відповідь на цей запит, потрібно з’єднати таблиці Розмови і Телефони і вибрати з них всі рядки, які відповідають умовам власник = “Петров”, і забрати зайві колонки. В результаті отримаємо наступну таблицю:

^ Відповідь на запит

дата

місто

01.01.00

Женева

02.01.00

Цюрих


Зрозуміло, що якби базисні таблиці Розмови і Телефони мали інше наповнення, то і відповідь була б іншою. У цьому змісті ми і говоримо, що запит є функція, що співставляє відповідь кожному припустимому стану.

Отже, ми звели поняття запиту до поняття функції. Навіщо це зроблено? Адже можна було б вважати запит невизначуваним поняттям, пославшись на те, що в будь-якій теорії є вихідні, невизначувані поняття. Наша відповідь такий. По-перше, украй бажано, щоб число невизначуваних понять було зведено до мінімуму, причому невизначувані поняття повинні носити досить загальний, інтегративний характер, що дозволяє використовувати його в описі значного класу інших понять. І якщо їсти можливість звести одні понять до інших, те це потрібно зробити в явному виді. По-друге, наш підхід дозволяє формалізувати зв'язок таких понять, як запит, відповідь на запит і формула запиту.
^ Мова запитів

Запит і формулу запиту часто плутають. Ми теж будемо дозволяти собі іноді замість вираження “формула запиту” говорити просто “запит”, якщо з контексту ясно, про що мова йде. Але все-таки потрібно ясно розуміти, що запит і формула запиту – це речі різні..

У допитливого читача неодмінно повинний виникнути питання: от ми увесь час говоримо про вираження запиту на якійсь мові, а що це за мову? Справа в тім, що якщо я по-російському скажу, що мені, наприклад, потрібні всі розмови Петрова, то Access навряд чи зрозуміє мене. Так, на жаль, Access не завжди розуміє “людські” мови. Хоча... От, англійці й американці (теж говорять по-англійському) придумали спеціальну мову, досить схожий на англійський. Називається він SQL (від Structured Query Language — структурована мова запитів). На ньому запит про разговоры Петрова буде виглядати приблизно так:

^ SELECT розмови.дата, розмови.місто FROM розмови INNER JOIN телефони ON розмови.номер = телефони.номер WHERE ((телефони.власник)="Петров");

Для тих, хто не вивчав англійський, повідомимо, що слово SELECT означає ВИБРАТИ, FROM — З,^ INNER JOIN – ВНУТРІШНЄ З'ЄДНАННЯ, ON — у даному випадку ПО, WHERE — де.

Одержавши такий запит, машина розуміє, що їй потрібно з'єднати відносини розмови і телефони за умовою розмови.номер = телефони.номер, вибрати з таблиці, що вийшла, ті рядки, де значення атрибута телефони.власник є “Петров”, а потім видалити всі стовпці, крім стовпців розмови.дата і розмови.місто.

Загальний вид найпростішого варіанта запиту мовою SQL такий:

^ SELECT атрибут, атрибут, … , атрибут FROM ім'я таблиці [ТИП З'ЄДНАННЯ ім'я таблиці, що приєднується, ON ім'я атрибута першої таблиці, що з'єднується, = ім'я атрибута другої таблиці, що з'єднується, [ім'я наступного атрибута першої таблиці, що з'єднується, = ім'я наступного атрибута другої таблиці, що з'єднується…,ім'я наступного атрибута першої таблиці, що з'єднується, = ім'я наступного атрибута другої таблиці, що з'єднується,]] WHERE (Фільтр);

Взагалі ж, мову SQL легко було б українізувати.

Відзначимо одну особливість. Хоча ми переводимо SELECT як ВИБРАТИ (і, власне кажучи, іншої альтернативи немає), що наводить на думку, що ця деяка дія над таблицями, насправді все це вираження можна розглядати як позначення результату цієї дії. Тому було б природніше почати формулювання запиту словом ВИБІРКА.

Який же звідси випливає висновок? Дуже простій: раз запит на вибірку це одночасно і результат, тобто знову таблиця, те можна після FROM замість імені таблиці писати знову запит. А можна з'єднати кілька таблиць, оскільки з'єднання пари таблиць – це знову таблиця.

От приклад. Нехай у нас мається три таблиці: в одній зазначене, код предмета і його найменування, у другий – код предмета і код учителя, що даний предмет веде, у третьої код учителя, його Прізвище, Ім'я і По батькові. Запит на те, як кличуть учителя, що викладає алгебру може виглядати так:

SELECT Учителя. Ім'я, Учителя. По батькові, Учителя. Прізвище

FROM (Предмети INNER JOIN [Предмет-Вчитель] ON Предмети.Код = [Предмет-Вчитель].[код предмета]) INNER JOIN [Учителя] ON [Предмет-Вчитель].[код учителя] = Учителя.Код

WHERE (((Предмети. Найменування)="алгебра"));

Потрібно відзначити, що в Access запити можна задавати різними способами і зовсім не обов'язково формулювати їх на SQL. Наприклад, ви можете задавати їх на бланку QBE.


<< предыдущая страница