Здопомогою мови sql можна створювати запити до реляційних баз даних (таких як Access), актуалізувати їх І управляти ними
Вид материала | Документы |
СодержаниеЗапити дії Потенційні покупці Select all Дата замовлення Insert into Потенційні покупці Список полів |
- План уроку: Порівняльна характеристика типів баз даних. Особливості реляційних баз, 83.01kb.
- Могилянська Академія " Реферат з курсу, 44.73kb.
- Інтерфейс системи керування базами даних access. Створення бази даних. Таблиці. Запити, 156.05kb.
- Роботу з об'єктами, до яких відносяться таблиці бази даних, запити, а також об'єкти, 623.25kb.
- Називається комплекс програмних та мовних засобів, які використовуються для створення, 149.17kb.
- Методичні рекомендації до вивчення теми 4 Державний стандарт освіти «Бази даних. Системи, 1008.1kb.
- Конспект уроку в 11 класі Тема: «Поняття баз даних. Моделі баз даних. Робота з файлами., 35.75kb.
- Программа курса: Модуль Краткий обзор sql server Что такое сервер sql server Интегрирование, 35.73kb.
- Дайте визначення баз даних та скбд. Класифікація та функції скбд. Моделі баз даних, 128.53kb.
- Лекция №1: Стандарты языка sql, 1420.56kb.
.SQL-запити
З допомогою мови SQL можна створювати запити до реляційних баз даних (таких як Access), актуалізувати їх і управляти ними. Коли користувач проектує QBE-запит у вікні QBE-запиту, Access конструює на задньому плані відповідний SQL-запит. Для відображення на екрані або редагування SQL-запиту потрібно вибрати команду SQL з менюView (Вигляд) при активному вікні проектування запиту. Якщо в SQL-запиті проводяться зміни, QBE-запит автоматично актуалізується у вікні запиту.
SQL-запити можуть служити не тільки для вилучення інформації із баз інформації, яка буде аналізуватися користувачем. З їх допомогою можна получати відомості для форми і звіту, заповнювати поля списків і комбінованих списків в формах.
Перед тим як перейти до техніки поведінки з SQL, доцільно дати розяснення основних SQL-інструкцій (SQL-statement). Вони задають те, що потрібно зробити із вхідним набором даних (таблицею або запитом деяких баз даних) для генерації вихідного набору. Аргументи (параметри) цих інструкцій (clause) конкретизують виконуючу дію, тобто задають імена полів, імена таблиць, умови, відношення і т.п. Результати актуалізації запитів даних, тобто, витягнену з бази інформацію (вихідний набір), можна обробити з допомогою спеціальних аналізуючих функцій (aggregate functions).така оюробка позволяє получити, наприклад, максимальне і мінімальне значення, суми, середнє значення даних, отриманих з бази SQL-запитом.
У цій главі будуть розглянуті приклади, які допоможуть Вам розібратися в базових поняттях мови SQL-запитів. Розглянемо наступні приклади, що іллюструють основні SQL-об’єкти:
- SQL-інструкції. Необхідно створити запит, що дозволяє вияснити: Хто із клієнтів на протязі останніх шести місяців не розміщував замовлень?
- Аналізуючи функції. Необхідно створити запит, що позволяє вияснити: Скільки клієнтів в останні півроку не розміщали своїх замовлень?
- Запити дії. Необхідно створити запит, що позволяє вияснити: Визначити всіх клієнтів, що не робили замовлень останні шість місяців, і знищити їх із таблиці.
SQL-інструкції
Набір SQL-інструкцій невеликий, принаймі, якщо порівняти з набором інструкцій процедурних мов програмування загального призначення. Основну більшість SQL-запитів становить інструкція SELECT, важливі параметри якої наведені в наступному списку:
SELECT Список_полів
FROM Імена_таблиць
WHERE Критерії_пошуку
IN Ім’я бази даних
ALL-, DISTINCT-, DISTINCTROW-предикати
Таблиця1 INNER JOIN Таблиця2
GROUP BY Список полів
HAVING Критерії_пошуку
ORDER BY Список_полів
Інструкція SELECT
Розглянемо простий приклад оформлення SQL-запиту.
Примітка _______________________________________________________________
Для більшої наглядності інструкції в прикладах стоять в окремих стрічках. Однак Access при оформленні SQL-запиту вимагає, щоб всі складові його інструкції були записані в одній стрічці. Якщо ж послідовність інструкцій в SQL-вікні повністю не поміщається в одній стрічці, то для переходу на наступну стрічку слід нажати не [Enter], а комбінацію [Ctrl+Enter].
_____________________________________________________________________
Приклад ________________________________________________________________
SELECT Клієнти.Фірма
FROM Клієнти, [Потенційні покупці]
WHERE Клієнти. Фірма = [Потенційні покупці]. Фірма;
Увага __________________________________________________________________
SQL-запит завжди закінчується крапкою з комою.
_____________________________________________________________________
При обробці даного запиту аналізуються відомості, взяті із таблиці Потенційні покупці і Клієнти.
Наведений запит складається із інструкції SELECT що доповнюється параметрами FROM і WHERE. Інструкція SELECT визначає, які поля належить обробити (будуть вилучені і представлені в якості результату запиту). В даному прикладі це поле Фірма таблиці Клієнти. З допомогою параметра FROM задається, які таблиці містять дане поле (імена таблиць розділяються одна від другої комами). В нашому прикладі це таблиці Потенційні покупці і Клієнти. З допомогою параметра WHERE задаються умови, якими повинні задовільнятися записи, що вилучаються. У прикладі, що розглядається це записи полів Клієнти.Фірма і [Потенційні покупці].Фірма.
Інструкція SELECT в загальному випадку визначає поля, які будуть входити в результат виконання запиту. При виконанні запиту із таблиць, заданих параметром FROM, витягуються записи, що задовольняють умови WHERE. Із відібраних записів виділяються тільки ті поля, які перераховані в інструкції SELECT. При роботі з інструкцією SELECT слід брати до уваги наступні примітки:
- Зазвичай SELECT являється першою командою SQL-запиту.
- Якщо задається більше одного поля, імена полів слід розділяти комами. Список полів слід вводити в тій послідовності, в якій вони повинні бути оброблені і відображені в результаті запиту.
- Якщо використовується ім’я поля, що містить пробіл або розділювач, то його потрібно взяти у квадратні дужки.
- Якщо обробляється декілька таблиць, то щоб запобігти двозначності (при наявності полів з однаковою назвою в різних таблицях) в списку полів рекомендується давати повну специфікацію поля, тобто Ім.’я_таблиці.Ім.’я поля. Саме так зроблено в нашому прикладі.
Параметр FROM
Параметр FROM задає таблиці або запити, які містять поля, наведені в інструкції SELECT, тобто задає список таблиць і запитів, що обробляються.
- FROM задається як параметр для інструкції SELECT і все йде слідом за нею.
- В списку таблиці завжди спочатку слід вказувати меншу або менші таблиці.
Використовуючи символ зірочки (*) в якості заміни імені поля в інструкції SELECT, з таблиці можна вибрати всі поля. Для прикладу вибираємо всі поля з таблиці Клієнти.
SELECT Клієнти. *
FROM Клієнти;
Параметр WHERE
Параметр WHERE не є обов’язковим, але якщо він є в інструкції, то повинен йти слід за параметром FROM. Якщо WHERE не є заданим, при виконанні SQL-запиту будуть вибрані всі записи.
З допомогою WHERE-параметра користувач може визначити, які записи з таблиці, наведених в списку FROM, появляться в результаті запиту. Access вибирає записи, що задовільняють умови, визначені з допомогою параметра WHERE. Ці умови ідентичні критеріям, які можуть бути введені в QBE-області проекту.
Параметр IN
При роботі з базами даних іншого (не Access) формату приходиться використовувати параметр IN.
Приклад __________________________________________________________
SELECT Клієнти.Фірма
FROM Клієнти, [Потенційні покупці]
IN “C:\DBASE\INFO\CLIENTS” “dBASE IV;”
WHERE Клієнти. Фірма = [Потенційні покупці]. Фірма;
Цей SQL-запит аналогічний наведеному в попередньому прикладі, але тут дані про клієнтів зібрані не в Access-базі, а находяться в таблицях Клієнти і Потенційні покупці в базі формату dBASE IV, що зберігається в файлі C:\DBASE\INFO\CLIENTS.
Параметр IN слід застосовувати для запиту даних, збережених в базі даних іншого формату, з яким Access може працювати (наприклад dBASE або Paradox), або для запиту даних, що знаходяться в неактивній в даний час базі даних Access. При використанні параметра IN слід мати на увазі, що:
- Користувач все може звертатися тільки до одної зовнішньої бази даних (під зовнішньою мається на увазі будь-яка інша, окрім активної, бази даних).
- При заданні типу бази даних, створеної не з допомогою Access, до його позначення слід додати крапку з комою (;), а ім’я взяти в лапки або апострофи, наприклад ’dBASE;’ або “dBASE;”.
Параметр ALL
Параметр WHERE визначає критерій відбору записів із вхідного набору. Але в таблиці можуть бути присутні дублікати. Наприклад, помилково в таблицю клієнтів двічі був введений запис про одного і того ж клієнта. По замовчуванню у вихідному наборі, що генерується при виконанні SQL-запиту, будуть присутні всі дублікати. Управляти включенням дублікатів у вихідний набір можна з допомогою спеціальних параметрів – предикатів. По замовчуванню команді SELECT відповідає предикат ALL. Його можна навіть явно не вказувати. Він задає включання у вихідний набір всіх дублікатів, відібраних по критерію WHERE. Предикат ALL включається в команду SELECT відразу за ключовим словом SELECT (перед іменами полів, що вибираються).
Приклад ________________________________________________________________
SELECT ALL *
FROM клієнт;
Виконуючи такий запис, Access вибирає з таблиці клієнтів всі записи повністю (зі всіма полями). Навіть, якщо в таблицях є одинакові записи, вони будуть присутні у вихідному наборі в тій же кількості, що і в оброляємій таблиці.
Для боротьби з дублікатами записів в SELECT команді, замість предикату ALL, можна вказати інші предикати: DISTINCT чи DISTINCT-ROW, який не являється обов’язковим. Якщо не введений ні один з цих предикатів, приймається предикат ALL, і Access вибирає всі записи, які задовольняють WHERE-умовам в SQL-інструкції.
Предикат DISTINCT
Приклад ________________________________________________________________
SELECT DISTINCT Клієнти. Фірма
FROM Клієнти, [Потенційні покупці]
WHERE Клієнти. Фірма=[Потенційні покупці]. Фірма;
Якщо, виконувати цей SQL-запит, Access знайде одну і ту ж назву фірми в декількох записах, але у вихідний набір ця назва буде включена тільки один раз.
Предикат DESTINCT слід застосовувати у тих випадках коли необхідно вилучити записи, які містять дані, що дублюються у вибраних полях. При використанні цього предикату значення для кожного із наведених в інструкції SELECT полів повинні бути унікальними, щоб запис в якому вони містяться міг ввійти у вихідний набір.
Примітка _______________________________________________________________
Результат пошуку в якому застосовується предикат DISTINCT не може бути актуалізованим. Дія команди з цим предикатом аналогічна її дії при встановленому значенні Yes опції Unique Values (унікальні значення) в діалоговому вікні Query Properties (Властивості запиту).
_______________________________________________________________________
Предикат DISTINCTROW
Інколи необхідно виключити дублікати не тільки з вибраного, але і зі всіх решта полів запису.
Приклад ________________________________________________________________
SELECT DISTINCTROW Фірма
FROM Клієнти, Замовлення,
Клієнти INNER JOIN Замовлення
ON Клієнти. [Номер Клієнта] = Замовлення. [Номер Клієнта]
GROUP BY Фірма;
Таблиці Клієнти і Замовлення зв’язуються між собою з допомогою поля Номер Клієнта. Так, наприклад клієнт являється унікальним, таблиця клієнтів не містить дублікатів полів Номер Клієнта (на відміну від таблиці Замовлення, в якій для декількох клієнтів приведено декілька замовлень).
У вихідний набір запиту буде виведено згрупований по назвам список всіх фірм, які подали, що найменше одне замовлення.
Предикат DISTINCTROW слід застосовувати, коли потрібно відкинути записи, що дублюють одне одного, не тільки у вибраних полях. Якщо предикат DISTINCTROW не буде заданий, наведений вище запит згенерує по декілька стрічок для кожної фірми, що розмістила більше одного замовлення.
- Предикат DISTINCTROW ефективний тільки тоді, коли поля вибираються не з одної а зі всіх таблиць, що використовуються в запиті.
- Предикат DISTINCTROW ігнорується, якщо запит включає в себе тільки одну таблицю.
Операція INNER JOIN
З допомогою операції INNER JOIN користувач може створити спеціальне об’єднання таблиць. Об’єднання виконується по умові рівності. Це найбільш часто вживаний спосіб об’єднання, при якому умовою об’єднання є рівність вміти мого полів, які наведені після ключового слова ON в записах таблиць, вказаних в операції INNER JOIN. Записи із двох таблиць об’єднуються як тільки у вказаних полях будуть знайдені значення, що співпадають.
Операція INNER JOIN не є обов’язковою частиною інструкції SELECT. Якщо ж вона все таки застосовується, то її слід оформляти як частину параметра FROM. В загальному вигляді операція INNER JOIN виглядає наступним чином:
Таблиця1 INNER JOIN Таблиця2
ON Таблиця1. Поле А = Таблиця2. Поле Б
В даному випадку об’єднаються (зв’яжуться) таблиці Таблиця1 і Таблиця2. у вихідний набір (при відсутності інших умов) будуть включені записи таблиць Таблиця1 і Таблиця2, для яких виконується умова рівності вмістимого: Поле А = Таблиця2. Поле Б. В умові об’єднання можуть брати участь два числових поля любих (в тому числі і різних типів). Для інших типів полів необхідно дотримуватися наступного правила: поля повинні відноситися до одного і того ж типу даних і містити один і той самий вид даних, але вони можуть мати різні імена.
Параметр GROUP BY
При використанні параметра GROUP BY всі записи, які містять у заданому полі (або полях, якщо їх було б декілька) ідентичні значення, об’єднуються в один окремий елемент вихідного набору. Для наведеного вище прикладу це означає, що дублюючі імена фірми будуть присутні у вихідному наборі тільки один раз. Використовуючи параметр GROUP BY, слід мати на увазі, що:
- Параметр GROUP BY являє собою уточнюючий (необов’язковий) параметр при використанні параметра FROM і WHERE.
- якщо вводиться ім’я поля, що містить пробіл або розділював, то його (ім’я) слід задавати у квадратних дужках.
Параметр HAVING
Приклад ________________________________________________________________
SELECT [Потенційні покупці]. *
FROM [Потенційні покупці]
GROUP BY Фірма
HAVING Фірма Like “*Ltd;”
Access згруповує дані всіх потенційних покупців по назвах фірм, зводить записи, що повторюються, разом і відображає у вихідному наборі тільки ті фірми, які в своїй назві містять слово Ltd.
Після об’єднання записів з допомогою параметра GROUP BY і застосування параметра HAVING відображаються записи, що задовольняють заданим в параметрі HAVING умовам. Це додаткова можливість “фільтрування” вихідного набору. Використовуючи параметр HAVING слід мат на увазі наступне:
- HAVING – необов’язковий параметр, якщо ж він заданий, то повинен йти слідом за параметром GROUP BY.
- параметр HAVING виконує ті ж функції, що і параметр WHERE, але вже в рамках вихідного набору. WHERE визначає, які записи повинні бути вибрані. HAVING встановлює, які записи, згруповані GROUP BY, повинні відображатися на екрані.
Параметр ORDER BY
Приклад ________________________________________________________________
SELECT Фірма
FROM Клієнт
ORDER BY Фірма DESC;
Назви фірм клієнтів будуть посортовані у алфавітному порядку в спадаючій послідовності.
Параметр ORDER BY сортує дані вихідного набору в заданій послідовності. Сортування може виконуватися по декількох полях, у тому випадку вони перераховуються за ключовим словом ORDER BY через кому. Спосіб сортування задається ключовим словом, яке вказується в рамках параметра ORDER BY слід за назвою поля, по якому сортуються дані. Сортування може виконуватися для кожного з полів, наведених у списку параметра ORDER BY. Використовуючи параметр ORDER BY слід мати на увазі:
- Параметр ORDER BY не є обов’язковим параметром, якщо він не заданий, дані появляються не посортовані, тобто в тому порядку, в якому вони витягнуті з вихідного набору.
- по замовчуванню реалізується сортування по зростанню (А-Я, 0-9). Явно вона задається словом ASC.
- для виконання сортування у зворотній послідовності (Я-А, 9-0) необхідно після імені поля, по якому виконується сортування, написати ключове слово DESC.
- Параметр ORDER BY зазвичай являється останнім параметром SQL-інструкції.
Агрегатні функції
З допомогою агрегатних функцій в рамках SQL-запиту можна отримати ряд узагальнюючих статистичних відомостей про безліч відібраних значень вихідного набору.
Примітка _______________________________________________________________
Ці функції можуть використовуватися у виразах, які використовуються у запитах і в полях форм або звітів, що вираховуються. В макросах або модулях використовують доменні агрегатні функції (domain aggregate function).
_______________________________________________________________________
Користувачу доступні наступні агрегатні функції:
- Count – визначає чисельність;
- First/Last – визначає перше і останнє значення;
- Min/Max – визначає мінімум, максимум;
- Avg – визначає середнє значення;
- StDev/StDevP – визначає стандартне відхилення;
- Var/VarP – визначає дисперсію.
Розглянемо кожну із функцій більш детально.
Функція Count
Дана функція повертає кількість записів, маркованих (відібраних) в запиті, формулярі чи звіті.
Синтаксис ______________________________________________________________
Count (Вираз)
_______________________________________________________________________
З допомогою функції Count можна перерахувати кількість записів у вихідному наборі SQL-запиту.
Приклад ________________________________________________________________
SELECT Count (*) FROM Замовлення;
З допомогою цієї функції в таблиці замовлень будуть перераховані записи, тобто користувач отримає інформацію про те, скільки замовлень було отримано до даного моменту.
Приклад _______________________________________________________________
SELECT Count ([Населений пункт]) FROM Замовлення;
WHERE [Населений пункт] = “Львів”;
По таблиці Замовлення буде визначено кількість всіх замовлень, які були зроблені зі Львова.
Функції First/Last
З допомогою функцій First і Last можна отримати інформацію про перший або останній запис вихідного набору даних. Ці функції можуть застосовуватися у виразі в рамках запиту, а також у полі формуляра або звіту, що вираховується. Синтаксис функцій First і Last:
First (Вираз)
Last (Вираз)
Приклад _______________________________________________________________
SELECT First ([Дата замовлення]) FROM Замовлення
WHERE [Населений пункт] = “Львів”;
SELECT Last ([Дата замовлення]) FROM Замовлення
WHERE [Населений пункт] = “Львів”;
З допомогою даних функцій визначається перший і останній записи (по даті замовлення із поля Дата замовлення) для замовлень, що надійшли зі Львова і зберігаються у таблиці Замовлення.
Функції Min/Max
Ці агрегатні функції визначають найменше і найбільше значення з великої кількості значень в деякому полі у запиті, формі або звіті. Синтаксис Min і Max функцій:
Min (Вираз)
Max (Вираз)
Приклад ________________________________________________________________
SELECT Min ([Загальна ціна]) FROM Замовлення
WHERE [Населений пункт] = “Львів”;
_______________________________________________________________________
SELECT Max ([Загальна ціна]) FROM Замовлення
WHERE [Населений пункт] = “Львів”;
Ці функції визначають саму низьку і саму високу продажу ціну для заказів, зроблених із Львова.
Функція Avg
Функція дозволяє вирахувати середнє значення декількох значень, що зберігаються у вказаному полі відібраного запитом (формою або звітом) записів. Середнє значення, розраховане з допомогою функції Avg, є середнім арифметичним.
Синтаксис ______________________________________________________________
Avg (Вираз)
Приклад ________________________________________________________________
SELECT Avg ([Загальна ціна]) FROM Замовлення WHERE [Загальна ціна] > 2000;
З допомогою даної функції виконується обрахування середньої продажної ціни для замовлень, вартість яких становить більше 2000.
Функції StDev/StDevP
Дані функції дозволяють вивести оцінку стандартного відхилення для популяції (StDevP) або вибірки із популяції (StDev), що складається з множини значень визначеного поля запиту, форми, звіту. Множина складається по відібраним записам.
Синтаксис ______________________________________________________________
StDev (Вираз)
StDevP (Вираз)
Приклад ________________________________________________________________
SELECT StDev ([Загальна ціна]) FROM Замовлення
WHERE [Населений пункт] = “Львів”;
SELECT StDevP ([Загальна ціна]) FROM Замовлення
WHERE [Населений пункт] = “Львів”;
З допомогою цих функцій виконується оцінка стандартного відключення продажних цін для замовлень, що надійшли зі Львова.
Функція Sum
З допомогою функції Sum можна вирахувати суму множини значень, що містяться у визначеному полі записів, відібраних запитом, формою або звітом. Дана функція складає значення поля.
Синтаксис ______________________________________________________________
Sum (Вираз)
Приклад ________________________________________________________________
SELECT Sum ([Заводська ціна]+[Транспортні витрати])
FROM Замовлення WHERE [Населений пункт] = “Львів”;
Функція Sum вираховує загальну суму цін по всіх замовленнях, що надійшли зі Львова. Для кожного замовлення ціна визначається як сума заводської ціни і транспортних витрат.
Функція Vr/VarP
З допомогою даної пари функцій виводиться оцінка дисперсії для популяції (VarP) або вибірки з популяції (Var), що складається із множини значень визначеного поля запиту, формуляру або звіту. Множина складається по зворотнім записам.
Синтаксис ______________________________________________________________
Var (Вираз)
VarP (Вираз)
Приклад ________________________________________________________________
SELECT Var ([Транспортні витрати])
FROM Замовлення WHERE [Населений пункт] = “Львів”;
SELECT VarP ([Транспортні витрати])
FROM Замовлення WHERE [Населений пункт] = “Львів”;
Ці функції дають оцінку дисперсії витрат на перевезення для всіх замовлень, зроблених зі Львова.
Запити дії
З допомогою так званих запитів дії користувач може добавити, знищити або актуалізувати записи і зберегти вихідний набір (Dynaset) запиту у вигляді нової таблиці. Виконанням макрокоманди RunSQL (запуск запиту SQL) ці процеси можна виконати прямо з макросу, не використовуючи спеціально спроектовані і окремо збережені запити.
Існує чотири різновиди запиту дії, кожному з яких поставлена у відповідність визначена SQL-інструкція. Цю відповідність визначено в наступній таблиці:
Запит дії | SQL-інструкція |
Append query (Запит доповнення) | INSERT INTO |
Delete query (Запит знищення) | DELETE |
Make-table query (Запит створення таблиці) | SELECT…INTO |
Update query (Запит актуалізації) | UPDATE |
Розглянемо конкретні приклади застосування запитів дії.
Запит доповнення
Розглянемо наступний приклад. Є дві таблиці: дані про потенційних клієнтів зберігаються в таблиці А, а дані про клієнтів – в таблиці В. По вказівці шефа фірми цілий ряд потенційних клієнтів (мешканців міста Львова) був переведений в розряд клієнтів. Необхідно відповідним чином скоректувати базу даних, перенести необхідні відомості з таблиці Потенційні покупці в таблицю Клієнти. Для цього з таблиці Потенційні покупці з допомогою звичайної SELECT-команди (SQL-запиту) вибираються необхідні записи і потім добавляються в таблицю Клієнти. Після виконання SQL-запиту, що відбирає дані з таблиці Потенційні покупці, формується вихідний набір даних. Його можна вставити в таблицю Клієнти з допомогою команди меню. Для цього слід перейти в режим проектування запиту і (маючи у вікні проектування запит, що вибирає дані з таблиці Потенційні покупці) вибрати з меню Query (Запит) командe Append (Додавання). Відкриється діалогове вікно визначення запиту доповнення.
Рис1. Вікно визначення запиту доповнення
Із списку, що розвертається в полі Ім’я таблиці (Имя таблицы) виберіть команду Клієнти (до неї повинні бути добавлені записи). Після натискання кнопки OK у вікні проектування запиту появиться стрічка Append To. У цій стрічці слід вказати, в які поля таблиці Клієнти повинен потрапити вміст полів записів, що добавляються. Число полів в записах, що добавляються і в таблиці, в яку проводиться добавлення, повинно співпадати. Так, запит доповнення готовий. Щоб він почав виконуватися слід натиснути кнопку виконання (на ній зображений знак оклику(!)) на панелі інструментів, а потім – кнопку OK у діалоговому вікні, що відкриється.
Цей же запит доповнення, який ми сформували раніше у вікні проектування запиту, будучи записаним на мові SQL з використанням інструкції INSERT INTO має наступний вигляд:
INSERT INTO Клієнти
SELECT [Населений пункт] = “Львів”
FROM [Потенційні покупці];
З допомогою такого SQL-запиту із таблиці Потенційні покупці будуть вибрані дані про всіх клієнтів, які проживають у Львові і інформація про них буде занесена до таблиці Клієнти.
Примітка _______________________________________________________________
Якщо таблиця до якої добавляються записи, містить первинний ключ, то записи, що добавляються повинні мати таке ж поле або аналогічне з даними того ж типу.
_______________________________________________________________________
Запит актуалізації
З допомогою запиту актуалізації відбувається обновлення групи записів.
Розглянемо наступну ситуацію. Нехай у результаті останнього підвищення цін на енергоносії виникла необхідність підняти на 10 процентів ціни на ковбасу (ха-ха!). Замість того, щоб вносити зміни в кожен запис таблиці каталогу товарів, що зберігає інформацію про деякі сорти ковбаси (“Дохторську”),можна виконати цю операцію (операцію актуалізації) в рамках запиту. Включити операцію актуалізації в запиті можна, вибравши команду Update (Обновлення) з меню Query (запит) в час проектування QBE-запита. В проект запиту добавиться стрічка Update To (Обновлення), в якій потрібно вказати для обновленого поля (в нашому випадку для поля Ціна) новий вираз –(Ціна *1,1). І так, запит оновлення готовий. Щоб він почав виконуватись, потрібно натиснути кнопку виконання в піктографічному меню, а потім – кнопку OK у діалоговому вікні, що відкрилося .
Запит актуалізації на мові SQL виглядає так:
UPDATE [каталог товарів]
SET Ціна =Ціна 81,1
WHERE Артикул = Ковбаса;
З допомогою даного запиту вказаного в таблиці. Каталог товарів ціни на вмі сорти ковбаси будуть збільшені на десять процентів.
Примітка_______________________________________________________________
Якщо необхідно змінити вміст текстових полів, то простіше це зробити з допомогою команди Edit/Replace (Правка/Змінити). Результату буде досягнуто швидше, ніж при створенні відповідного запиту обновлення, і процес заміни буде контролюватися користувачем (будуть виводитися запитом підтвердження).
Запит знищення
З допомогою запиту знищення реалізовується знищення групи записів. Так, наприклад, проглядаючи табличку клієнтів, співробітник фірми виявляє, що деякі клієнти за останні півроку зовсім не робили замовлення, тому їх дані можна знищити з таблиці.
Примітка _______________________________________________________________
Якщо записи знищуються з допомогою запиту знищення, то повернути їх назад неможливо. Тому перед виконанням запиту переконавшись в тому, що вибрані тільки ці дані які потрібно знищити. Хорошим захистом від необачного знищення записів являється наявність резервної копії бази даних. Якщо помилково Ви знищите записи, які не підлягають знищенню, їх можна буде відновити її із резервної копії.
_______________________________________________________________________
Як і любий інший запит, запит знищення можна спроектувати у вікні проектування запиту або у вигляді послідовності SQL-команд у вікні SQL.
Проектування запиту знищення у вікні проектування відрізняється від проектування звичайного запиту тим, що після завершення завдання критеріїв відбору слід активізувати команду Delete (Знищення) з меню Query (Запит). У проекті запиту додасться стрічка Delete (Знищення). У тих ячейках цієї стрічки, які відповідають полям запиту, появиться ключове слово Where. Тут слід задати критерії, які повинні відповідати записам, що знищуються.
У стовпчик поля Дата замовлення введіть наступну умову:
<15.06.95
В результаті будуть відібрані ті клієнти, останні замовлення яких були отримані фірмою перед 15-м червням 1995 року. Запис знищення готовий. Щоб він почав виконуватися, слід натиснути кнопку виконання в піктографічному меню, а потім – кнопку OK в діалоговому вікні, що відкриється.
На мові SQL запити знищення створюються з допомогою інструкції DELETE. Застосування DELETE особливо ефективне коли необхідно знищити велике число записів або коли записи, які належить знищити знаходяться у багатьох таблицях. В нашому прикладі запит знищення формується на мові SQL наступним чином:
DELETED FROM Клієнти
WHERE [Дата замовлення]<15.06.95;
З допомогою даного запиту з таблиці клієнтів будуть знищені записи всіх клієнтів, останнє замовлення яких надійшло на фірму до 15-го червня 1995 року.
Примітка _______________________________________________________________
Якщо в таблиці необхідно знищити всі записи, то знищення таблиці, як цілого об’єкту буде виконано швидше ніж запит знищення. Проте при знищенні таблиці її структура буде знищена. При використанні функції DELETED знищуються тільки дані; структура таблиці і всі її властивості, такі як атрибути полів і індекси зберігаються.
_______________________________________________________________________
Запит створення таблиці
З допомогою запиту створення таблиці користувач може створити таблицю по результатам запиту, тобто оформити у вигляді вихідного набору даних запиту.
Розглянемо приклад. Припустимо маємо таблицю запитів, в якій зберігаються всі замовлення за два останні роки. Продовження замовлень продовжується, таблиця збільшується, швидкість її обробки падає. В той же час старі записи (річної давності) не мають практичної цінності, вони скоріше являють собою предмет архівного інтересу. Їх можна виключити з таблиці, і система стане працювати швидше. Проте зовсім знищувати їх непотрібно, вони можуть стати у пригоді в майбутньому, наприклад для аналізу відносин з окремими клієнтами. Мова йде про те, що замовлення до 1993 року включно потрібно вилучити із таблиці замовлень і перенести в нову таблицю Архіви замовлень, яку потрібно створити. Для рішення поставленої задачі прийдеться створити запит, що дозволяє відібрати дані для нової таблиці. Критерієм відбору буде:
[Дата замовлення] < 01.01.1994
Тепер потрібно з меню Query (Запит) вибрати команду Make Table (Створення таблиці). Відкриється діалогове вікно запиту створення таблиці.
Рис2. Запит створення таблиці.
У цьому вікні в полі Ім’я таблиці (Имя таблицы) слід задати ім’я таблиці, що створюється і натиснути кнопку OK. Запит створення таблиці готовий. Щоб він почав виконуватися, слід натиснути кнопку виконання на панелі інструментів, а потім – кнопку OK у діалоговому вікні що відкрилося.
Такий самий запис можна сформувати безпосередньо на SQL-мові з допомогою інструкції SELECT…INTO. Ця SQL-інструкція має наступну структуру:
SELECT Список полів INTO Нова таблиця
Аргумент Список полів представляє собою список полів, які повинні бути скопійовані у нову таблицю. Якщо Список полів містить більше одного поля, імена полів розділяються комами. Аргумент Нова таблиця представляє собою ім’я нової таблиці, яка буде створена у результаті запиту (вона буде зберігати вихідний набір).
Запит створення таблиці в прикладі, що розглядається виглядає так:
SELECT Замовлення. *
INTO [Архів замовлень]
FROM Замовлення
WHERE [Дата замовлення] < 01.01.1994;
З допомогою даного запиту із записів таблиці Замовлення буде створена нова таблиця з іменем Архів замовлень з тою ж структурою, як і в таблиці Замовлення (тобто включає всі поля). У неї будуть переміщені ті замовлення, які були зроблені до 1-го січня 1994 року.
Оформлення SQL-запитів
Перетворення QBE-запиту в SQL-інструкцію
Запити спроектовані у QBE-області Access автоматично перетворює у SQL-запит. До тих пір доки користувач працює з даними, створеними Access, йому непотрібно напряму звертатися до SQL-інструкції (за винятком, коли користувач перейшов в Access із інших систем). SQL представляє інтерес тільки в тому випадку, якщо із Access користувач робить запит до SQL-баз даних.
Якщо у користувача, слабо ознайомленого з SQL, виникає потреба створити свій власний SQL-запит, то йому слід спочатку спроектувати QBE-запит, а потім перетворити його в SQL-запит:
- У вікні проектування QBE-запиту спроектуйте QBE-запит, який належить перетворенню в SQL-запит.
- З меню View (вигляд) виберіть команду SQL. На екрані появиться діалогове вікно SQL.
Примітка _______________________________________________________________
SQL-запит користувач може відредагувати у діалоговому вікні SQL View. Внесені зміни після закриття вікна автоматично актуалізуються і в QBE-проекті.
Ввід SQL-виразу
Можна і безпосередньо вводити у SQL-вікно команди, що складають SQL-запит. Процедура створення SQL-запиту починається із створення QBE-запиту. Після відкриття вікна проектування QBE-запиту слід зразу ж активізувати команду SQL з менюView (Вигляд). Access відобразить на екрані пусте вікно SQL.
У полі SQL View введіть SQL-інструкції, що складають SQL-запит. При вводі тексту у цьому полі по мірі необхідності надто довгі стрічки розриваються і переносяться на наступну стрічку. Для підвищення наглядності інструкцій кожну командну стрічку SQL можна розпочинати з нової стрічки, використовуючи комбінацію клавіш [Ctrl+Enter]/.
Для збереження набраної у SQL-вікні послідовності інструкцій слід натиснути кнопку OK. Якщо у введеному SQL-запит немає помилок, Access після кліку на кнопці OK в SQL-вікні автоматично сформує еквівалентний QBE-запит, заповнюючи поля QBE-області проектування. Тепер запит можна виконати, викликавши меню Query (Запит) команду Run (Виконати) або активізувати піктограму із зображенням знаку оклику на панелі інструментів.