Автор работы: Пользователь скрыл имя, 12 Января 2011 в 22:05, лабораторная работа
Мета: ознайомитися з особливостями використання структурованої мови запитів (SQL) при роботі з базами даних в середовищі Delphi.
Лабораторна робота №10
Тема: Використання мови SQL при роботі з базами даних в Delphi
Мета: ознайомитися з особливостями використання структурованої мови запитів (SQL) при роботі з базами даних в середовищі Delphi.
Теоретичні відомості
Реляційний метод доступу до даних ґрунтується на використанні SQL-запитів, що дозволяють створювати, видаляти та змінювати структуру таблиць, модифікувати набори даних, виконувати вибірку записів за складними критеріями з однієї або декількох таблиць, сортувати записи, здійснювати пошук записів.
Переваги цього методу в більшій мірі можна відчути при роботі з віддаленими БД, оскільки значно збільшується швидкодія у порівнянні з навігаційним методом доступу. Навіть при роботі з локальними БД реляційний метод доступу дозволяє вирішувати достатньо складні задачі простими способами.
В якості набору даних, який забезпечує можливість створення та використання SQL-запитів, найчастіше застосовується компонент Query, що знаходиться на закладці BDE палітри компонентів. В загальному випадку користувач не має можливості змінювати інформацію, що передається компонентом Query у візуальні елементи керування, такі як DBGrid. Для здійснення змін інформації, що зберігається в БД, формуються спеціальні запити.
Більшість властивостей компоненту Query аналогічні відповідним властивостям компонента Table.
Специфічні властивості компоненту Query:
Властивість | Тип | Призначення |
Active | Boolean | Визначає активність компонента Query. Якщо True, то компонент містить набір даних, який ґрунтується на виконанні SQL-запиту, що визначається властивістю SQL. Якщо False, то набір даних є порожнім |
Constrained | Boolean | Властивість, встановлена в True, вказує на те, що в змінюваному наборі даних на записи використовуються обмеження секції WHERE оператора SELECT |
DataSource | TDataSource | Містить посилання на джерело даних DataSource, що використовується для формування параметричного запиту |
Local | Boolean | Має значення True, якщо компонент Query працює з локальною або файл-серверною БД |
ParamCheck | Boolean | Якщо містить True, забезпечує автоматичне оновлення списку параметрів при зміненні запиту на етапі виконання програми |
Params[Index: Word] | TParams | Містить список параметрів, що передаються в SQL-запиту. Дана властивість має зміст лише при створенні параметричних запитів |
Prepared | Boolean | Має значення True, якщо запит підготований до виконання шляхом виклику методу Prepare |
RequestLive | Boolean | Якщо містить True, дозволяє змінювати записи набору даних і забезпечує автоматичне відображення цих змін. За замовчанням даній властивості привласнено значення False, тобто набір Query заборонено модифікувати. У випадку, коли за допомогою запиту набір даних формується на основі декількох таблиць, його не можна модифікувати незалежно від значення властивості RequestLive |
RowsAffected | Integer | Містить кількість запитів, які були змінені або видалені в результаті виконання запиту |
SQL | TStrings | Містить текст SQL-запиту. Текст статичного SQL-запиту можна вводити та змінювати за допомогою спеціального редактора |
State | TDataSetState | Аналогічно
відповідній властивості |
Text | PChar | Містить текст SQL-запиту, який дійсно був переданий BDE. Вихідний текст запиту може бути змінений програмним чином, тому вміст даної властивості може відрізнятися від вмісту властивості SQL |
UniDirectional | Boolean | Якщо містить True, показник поточного запису набору даних може переміщуватися лише вгору. Такі набори даних обробляються значно швидше і займає менше пам’яті |
Основні методи компоненту Query:
Метод | Призначення |
Open | Дозволяє відкрити набір даних. Цей метод використовується для виконання SQL-запиту, побудованого на основі оператору SELECT і здійснює вибірку записів з набору даних. Окрім виконання запиту, метод дає змогу переглянути вміст набору даних, отриманого в результаті |
ExecSQL | Використовується лише для виконання SQL-запиту. Цей метод не відкриває набір даних і застосовується при роботі із запитами, які здійснюють створення та знищення таблиць та індексів, змінення структури таблиць, а також додавання, видалення і редагування записів таблиць БД |
Close | Закриває набір даних. Цей метод необхідно викликати перед будь-яким зміненням набору даних, а також перед динамічним зміненням тексту SQL-запиту. |
Структурована мова запитів (SQL) призначена виключно для роботи з таблицями БД. Дана мова не містить засобів, що дозволяють реалізувати цикли, розгалуження, переходи, введення-виведення тощо. Тому звичайно мова SQL окремо не використовується, а включається до складу інших засобів.
Як вже було сказано, мова SQL містить засоби по створенню та видаленню таблиць, зміненню їх структури, роботі з індексами. Але найширше використовуються можливості мови SQL з організації вибірки даних за різними критеріями, сортування та пошуку даних, модифікації наборів даних (видалення, змінення записів). Саме на цих можливостях ми і зупинимося в даній лабораторній роботі.
Відбір даних з таблиць БД здійснюється за допомогою оператора SELECT. Результат такого відбору називається вибіркою.
Оператор SELECT – найбільш часто використовуваний та найбільш важливий оператор мови SQL. Він дозволяє отримувати вибірки з однієї або декількох таблиць БД та перетворювати результати к потрібному вигляду. За допомогою цього оператору можна реалізувати достатньо складні умови відбори даних. В загальному випадку цей оператор має наступний формат:
SELECT [DISTINCT] {*|поле 1[,поле 2 …]}
FROM таблиця 1[, таблиця 2…]
[WHERE умови відбору]
[GROUP BY список полів, що групуються]
[HAVING умови групування]
[ORDER BY список полів для сортування]
[UNION оператор_SELECT]
Опис оператора SELECT потребує обов’язкового зазначення списку полів, а також операнду FROM, після якого вказується список таблиць, що використовуються для відбору даних. В найпростішому випадку даний оператор може мати, наприклад, наступний вигляд
SELECT Tovar, Price
FROM Shop
В результаті виконання даного оператору буде сформований набір даних, що містить значення полів Tovar та Price з таблиці Shop.
Список полів вказується безпосередньо після ключового слова SELECT, при цьому імена полів відокремлюються один від одного комами. При зазначенні додаткового описувача DISTINCT після ключового слова SELECT забезпечується виключення з вибірки однакових записів, для яких співпадають значення всіх полів, вказаних в операторі SELECT.
Якщо в набір даних необхідно включити всі поля заданої таблиці (таблиць), то замість перерахування імен полів можна вказати символ «*». Припустимо, якщо таблиця Firm.db містить поля Tab_nom, FIO, Otdel, Dolgn і Salary. Тоді два наступні оператори абсолютно ідентичні:
SELECT Tab_nom, FIO, Otdel, Dolgn, Salary
FROM Firm
або
SELECT *
FROM Firm
При відображенні вмісту набору даних за результатами виконання SQL-запиту в компоненті DBGrid за умовчанням в якості заголовків стовпців будуть використовуватися відповідні імена полів. Але існує можливість перевизначення цих заголовків, для чого використовується описувач AS, який ставиться після імені поля, а за ним вказується заголовок, що буде відображатися:
SELECT Nom_stud AS Номер, FIO AS Прізвище, Grup AS Група
FROM students
Використання умов відбору даних
В секції WHERE оператора SELECT можна вказати необхідно умову відбору, що дозволить включати у вибірку не всі записи, а тільки ті, які відповідають заданій умові. При використанні даного оператору в набір даних будуть включатися тільки ті записи, які задовольняють встановленим умовам пошуку (відбору).
При порівнянні значення стовпця з константою умова пошуку має такий загальний опис:
WHERE ім’я_поля операція константа
В якості операції може виступати одна з операцій відношення: = (дорівнює), > (більше), < (менше), >=(більше або дорівнює), <= (менше або дорівнює), !> (не більше), !< (не менше), <> (не дорівнює), != (не дорівнює). Крім того, умова може бути складеною, для поєднання частин якої використовуються круглі дужки та логічні функції NOT, AND, OR. Наприклад:
SELECT Nom_r, Time_dep
FROM reys
WHERE Punkt_dep = ‘Берлін’ AND Punkt_arr = ‘Лондон’ AND
Time_dep >= 15:00
Результатом виконання наведеного запиту буде набір даних, в якій будуть включені два поля Nom_r та Time_dep, які показують, відповідно, номера рейсів та час відправлення літаків. При цьому існує ряд обмежень: будуть відібрані тільки ті записи, для яких пункт відправлення (Punkt_dep) – Берлін, пункт прибуття (Punkt_arr) – Лондон та час відправлення (Time_dep) – о 15:00 та пізніше.
Існує ще декілька операцій, які можуть використовуватися при формуванні умов пошуку:
Операція | Призначення |
BETWEEN | Використовується
для перевірки входження |
IN | Використовується
для перевірки входження |
LIKE | Дозволяє виконувати порівняння за заданою маскою. В масці можуть використовуватися наступні символи: «%» - для позначення довільного рядка будь-якої довжини, «_» - для позначення довільного одиничного символу. Якщо дані символи повинні використовуватися в шаблоні безпосередні як такі, без врахування їх спеціального значення, то операція доповнюється описувачем ESCAPE символ, який дозволяє задати символ, поява якого в шаблоні відміняє спеціальні функції наступного за ним символу |
IS NULL | Використовується для перевірки невизначеного значення поля |
Приклад:
SELECT FIO, Rist, Vaga,
FROM grup
WHERE (Vaga BETWEEN 45 AND 65) AND (Rist IN (160, 165, 170))
Результатом виконання цього запиту буде набір даних, що містить поля Прізвище (FIO), Зріст (Zrist) та Вага (Vaga). Набір даних формується на основі записів з таблиці grup, у яких значення поля Vaga знаходиться в діапазоні від 45 до 65, а значення поля Zrist точно дорівнює одному з трьох значень 160, 165, 170.
Додаткові функції мови SQL
В мові SQL існує ряд додаткових функцій, які можуть бути використані при складанні запитів. Серед них можна виділити наступні функції:
Функція | Призначення |
UPPER (рядок) | Перетворює всі символи рядка в символи верхнього регістру |
LOWER (рядок) | Перетворює всі символи рядка в символи нижнього регістру |
TRIM (рядок) | Видаляє символи пробілу на початку та в кінці рядка |
SUBSTRING рядок FROM n1 TO n2 | Виділяє з рядка символи, починаючи з позиції n1 до позиції n2 |
CAST (вираз AS тип_даних) | Перетворює вираз до заданого типу даних |
Рядок_1|| Рядок_2 | Здійснює конкатенацію (об’єднання) двох рядків |
EXTRACT (елемент FROM вираз) | Вибирає значення, яке відповідає вказаному елементу, з виразу що містить значення дати або часу. В якості параметру елемент можуть бути задані такі значення: YEAR, MONTH, DAY, HOUR, MINUTE або SECOND (рік, місяць, день, годин, хвилина і секунда відповідно) |
Відповідність між типами даних мови SQL та типами даних таблиць Paradox наведена в наступній таблиці:
SQL | Paradox |
CHARACTER (N) | Alpha |
VARCHAR (N) | Alpha |
NUMERIC (X, Y) | Number |
FLOAT (X, Y) | Number |
MONEY | Money |
SMALLINT | Short |
INTEGER | Long Integer |
DECIMAL (X, Y) | BCD |
DATE | Date |
TIME | Time |
TIMESTAMP | Timestamp |
BLOB (N, 1) | Memo |
BLOB (N, 2) | Binary |
BLOB (N, 3) | Formatted Memo |
BLOB (N, 4) | OLE |
BLOB (N, 5) | Graphic |
BOOLEAN | Logical |
AUTOINC | Autoincrement |
BYTES | Bytes(N) |
Информация о работе Використання мови SQL при роботі з базами даних в Delphi