.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 знайде одну і ту ж назву фірми в декількох записах, але у вихід