Мова SQL (Structured Query Language) є інструментом, призначеним для вибірки й обробки інформації, що міститься в комп'ютерній реляційній базі даних. Теоритичним підѓрунтям мови були реляційна алгебра (РА) та реляційне числення (РЧ). Офіційний стандарт мови SQL був опублікований Американським національним інститутом стандартів (American National Standards Institute - ANSI) і Міжнародною організацією по стандартизації (International Standards Organization - ISO) в 1986 році, розширений в 1989 році, а потім - в 1992 році. Протягом останніх десяти років багато інших міжнародних, урядових і промислових груп внесили свій внесок у стандартизацію різних складових SQL, таких як інтерфейси програмування й об‘єктно-орієнтовані розширення. З часом багато з подібних ініціатив стали складовою частиною стандарту ANSI/ISO. Тому назва мови «мова структурованих запитів» не зовсім відповідає дійсності. По-перше, сьогодні SQL являє собою щось більше, ніж просто інструмент створення запитів, хоча саме для цього він і був спочатку розроблений. Незважаючи на те що вибірка даних як і раніше залишається однією з найбільш важливих функцій SQL. Зараз ця мова використовується для реалізації майже всіх функціональних можливостей, які СКБД надає користувачеві. До них відносяться:
· Організація даних. SQL надає користувачеві можливість змінювати структуру подання даних, а також встановлювати стосунки між елементами бази даних.
· Вибірка даних. SQL надає користувачеві або додатку можливість витягати з бази даних інформацію, що утримується в ній, і користуватися нею.
· Обробка даних. SQL надає користувачеві або додатку можливість змінювати базу даних, тобто додавати в неї нові дані, а також видаляти або обновляти вже наявні в ній дані.
· Керування доступом. За допомогою SQL можна обмежити можливості користувача по вибірці й зміні даних і захистити їх від несанкціонованого доступу
· Спільне використання даних. SQL координує спільне використання даних користувачами, що працюють паралельно, щоб вони не заважали один одному.
· Цілісність даних. SQL дозволяє забезпечити цілісність бази даних, захищаючи її від руйнування через неузгоджені зміни або відмову системи.
SQL - це не повноцінна комп'ютерна мова типу COBOL, С, C++ або Java. У ньому немає інструкції if для перевірки умов, немає інструкції goto для організації переходів і немає інструкцій DO або FOR для створення циклів SQL є підмовою баз даних, у який входить біля сорока інструкцій, призначених для керування базами дані інструкції SQL вбудовуються в базову мову, наприклад Pascal або С, і дають можливість одержувати доступ до баз даних. Крім того, з такої мови, як С, C++ або Java інструкції SQL можна посилати СКБД у явному виді, використовуючи інтерфейс викликів функцій.
Нарешті, SQL - це слабко структурована мова, особливо в порівнянні з такими високоструктурованими мовами, як С, Pascal або Java Інструкції SQL нагадують англійські речення й містять "порожні слова", що не впливають на зміст інструкції, але полегшують її читання. В SQL майже немає нелогічностей і до того ж є ряд спеціальних правил, що запобігають створенню інструкцій, які виглядають як абсолютно правильні, але не мають змісту.
Незважаючи на не зовсім точну назву, SQL на сьогоднішній день є єдиною стандартною мовою для роботи з реляційними базами даних.
Сам по собі SQL ні є системою керування базами даних, ні окремим програмним продуктом. SQL - це невід'ємна частина СКБД, інструмент, за допомогою якого здійснюється зв'язок користувача з нею. На рис. 5.1 зображена структурна схема типової СКБД, компоненти якої з'єднуються в єдине ціле за допомогою SQL.
Рис. 5.1. Компоненти типової СКБД
Оскільки стандарт SQL-92 має рекомендований характер (іншим він і не може бути), кожний із розробників СКБД в силу різних причин розробляли свої версії SQL, тобто кожна СКБД має свій діалект мови SQL. Так, СКБД Access має свою реалізацію SQL – Jet SQL. Він має деякі відмінності від SQL2. У даних матеріалах розглядається основна частина команд цього діалекту мови SQL. В СКБД Access вона реалізована як інтерпретатор, тобто виконується кожний оператор мови, ознакою закінчення якого є символ крапка з комою “;”. Усі оператори (команди) Jet SQL можна поділити на:
· оператори визначення даних або керуючі оператори (визначення і вилучення таблиць, полів, індексів) та модифікації даних (зміна структур таблиць, додавання, вилучення та модифікація полів й індексів). Цю групу операторів називають ще керуючими операторами;
· запити на селекцію (вибирання) даних;
· оператори керування даними.
До останніх відносяться оператори встановлення прав, привілеїв, фрагментації даних по серверах, розповсюдження оновлень, формування та управління транзакціями, тощо, але вони притаманні архітектурам „клієнт/сервер” і тому реалізовані в серверних СКБД. Тут розглядаються перші дві групи операторів.
Програма мовою SQL являє собою просту лінійну послідовність операторів мови SQL. Мова SQL у своєму «чистому» вигляді не має операторів керування порядком виконання запитів до БД (циклів, розгалужень, переходів).
Оператори мови SQL будуються із застосуванням:
· зарезервованих ключових слів;
· ідентифікаторів (імен) таблиць і стовпців таблиць;
· логічних, арифметичних і строкових виразів, використовуємих для формування критеріїв пошуку інформації в БД і для обчислення значень осередків результуючих таблиць;
· ідентифікаторів (імен) операцій і функцій, використовуємих у виразах.
Всі ключові слова, імена функцій й, як правило, імена таблиць і стовпців представляються 7-ми бітними символами ASCII (інакше кажучи - латинськими літерами).
У мові SQL не робиться відмінність між прописними (великими) і рядковими (маленькими) літерами, тобто, наприклад, рядок «SELECT», «Select», «select» являють собою те саме ключове слово.
Для конструювання імен таблиць й їхніх стовпців припустимо використовувати букви, цифри й знак «_» (підкреслення), але першим символом імені обов'язково повинна бути буква.
Заборонено використання ключових слів й імен функцій такі як ідентифікатори таблиць й імен стовпців. Повний список ключових слів й імен функцій (а він досить великий) можна знайти в документації на конкретну СКБД.
Оператор починається із ключового слова-дієслова (наприклад, «CREATE» - створити, «UPDATE» - обновити, «SELECT» - вибрати й т.п.) і закінчується знаком «;» (крапка з комою). Оператор записується у вільному форматі й може займати кілька рядків.
Припустимими роздільниками лексичних одиниць в операторі є:
· один або кілька пробілів,
· один або кілька символів табуляції,
· один або кілька символів «новий рядок».
На жаль, розроблювачі реальних СКБД неакуратно звертаються з вимогами стандартів мови SQL у частині коментарів. Тому коментарі при використанні в різних СКБД у текстах «програм» мовою SQL можуть позначатися такими способами:
· від подвійного мінуса («- -») до кінця рядка;
· від символу «#» до кінця рядка;
· між послідовностями «/*» й «*/» (стиль коментарів мови С).
5.2. Керуючі оператори мови Jet SQL
Як наводилося, усі оператори мови Jet SQL можна поділити на три категорії, з яких тут розглядаються дві, на які вони поділяються в залежності від того, чи здійснюють вони якись дії з фізично розташованими у зовнішній пам’яті таблицями БД, що приводять до змін їх структури або вмісту, чи вони здійснюють тільки пошук інформації в физичних та/або віртуальних таблицях, створюючі віртуальні таблиці, які можна:
· вивести на дисплей;
· використовувати для створення форм на дисплеї або звітів для друку;
· експортувати до інших програмних систем, що працюють з таблицями.
Першу групу операторів відносять до операторів дії (оператори Action), до яких відносяться:
CREATE TABLE – створити таблицю (визначити структуру таблиці).
CREATE INDEX – створити індекс, в т.ч. складений.
INSERT – вставити (додати) дані (рядок або рядки як бепосереднє у форматі команди, так й із іншої таблиці/запиту).
UPDATE - оновити дані (поля) в таблиці.
DELETE – видалити рядки із таблиці.
ALTER TABLE - змінити структуру таблиці (додати поле – ADD, видалити – DROP).
DROP TABLE - видалити таблицю(і).
DROP INDEX - видалити індекс.
SELECT ... INTO ... – створити таблицю під час запиту.
До другої групи відносяться оператори: вибірки (SELECT), об’єднання (UNION), створення віртуальної перехресної таблиці (TRANSFORM):
SELECT – вибірка або селекція даних з однієї або кількох физичних та/або віртуальних таблиць;
TRANSFORM – створення віртуальних перехресних таблиць.
У даному розділі буде розглянуто тільки оператори (інструкції) першої групи. Інші оператори, у тому числі оператор першої групи „SELECT... INTO ...” будуть розглянуті в наступних розділах.
<FieldType> – тип поля : Byte, Smallint (ціле число), Integer(довге ціле число), Long, Currency, Single (або Real), Double (або Float), Text, Date, Bit (або Logical для логічного типу), Memo, OLEobject;
NOT NULL – вказується якщо поле обов’язкове.
Приклад 1: CREATE TABLE DYSCYPL1 (KodDyscTEXT (5) PRIMARY KEY, NazvDyscTEXT (80) NOT NULL);
У режимі конструктора структуру цієї таблиці показано на рис. 5.2.
Рис. 5.2. Структура таблиці DYSCYPL1
Приклад 2: CREATE TABLE DSCPL2 (KdDscTEXT (5) PRIMARY KEY, NzvDscTEXT (80) NOT NULL);
Таблиці DYSCYPL1і DSCPL2хоч і мають різні назви атрибутів, але вони сумісні за своєю структурою, чим ми скористаємося у п. 5.2.9.
Приклад 3: CREATE TABLE VYKLADACH1 (KodVykl SMALLINT PRIMARY KEY, PrizvVykl TEXT (25), KodPost TEXT (2), NomKafBYTE);
У режимі конструктора структуру цієї таблиці показано на рис. 5.3.