Оператори SQL найчастіше призначені для порівняння значеннь полів реляційної бази даних і використовуються під час відбору записів, а також для створення міжтабличних зв’язків.
Загалом, SQL складається із груп операторів, які:
· визначають структуру бази даних;
· зберігають і управляють даними у межах структури бази даних;
· контролюють доступ до даних.
Зазначимо, що у Access оператори SQL часто називають інструкціями SQL.
Синтаксис SQL
В основі кожного SQL –оператора лежить синтаксис. Синтаксис вказує як можна створити потрібний оператор і являє собою своєрідний “план” (або “шаблон”) побудови оператора. При створення операторів рекомендується притримуватись синтаксису операторів.
Синтаксис для кожного оператора свій і за допомогою ключових слів вказує:
· власну структуру;
· обов’язкові елементи;
· додаткові опції, які можна застосувати для уточнення даного оператора.
Одні оператори мають невелику кількість елементів, синтаксис інших може займати не одну сторінку. Потрібно зауважити, що є елементи, які присутні в усіх операторах. У різних продуктах РСУБД елементи синтаксиса можуть виглядати по-різному, але у більшості випадків використані символи співпадають.
В контексті синтаксису оператора, як правило, присутні умовні символи (умовні позначення), див. Табл. 3.1.
Таблиця 3.1.
Умовні позначення, що прийняті в синтаксисіSQL - операторів
Умовне позначення | Значення |
| (вертикальна риска) | Опції, з яких можна обирати (одну або більше), відділяються вертикальною рискою. |
[ ] *(квадратні дужки) | Вказують, що елемент, заключений в квадратних дужках, є необов’язковим. |
< > (кутові дужки) | Вказують, що на місці текста, заключеного в кутових дужках, потрібно вказати конкретне значення |
{ } (фігурні дужки) | Вказують, що синтаксис, заключений в фігурних дужках, має сприйматись як єдине ціле, тобто потрібно використати усі елементи, окрім тих, що розділяються вертикальною рискою. |
… (три крапки) | Попередня конструкція може повторитись необхідне число разів. |
:= (дві двокрапки та знак рівності) | Аналог присвоєння. |
Наприклад, у Access інструкция CREATE TABLE використовується для опису нової таблиці, її полів та індексів. Якщо для поля вказано обмеження NOT NULL, то це поле повинно мати допустимі дані при додаванні нових записів.
Синтаксис:
CREATE TABLE таблиця (поле_1 тип [(размер)]
[NOT NULL] [индекс_1] [, поле_2 тип [(размер)]
[NOT NULL] [индекс_2] [,...]] [, CONSTRAINT составнойИндекс [,...]])
Нижче перераховані аргументи інструкції CREATE TABLE:,див. Табл.3.2.
Таблиця 3.2.
Аргументи інструкції CREATE TABLE
Аргумент (елемент) | Значення |
таблиця | Ім’я таблиці, що створюється. |
поле_1, поле_2 | Імена одного або кількох полів, що створюються у в новій таблиці. Таблиця повинна мати хоча б одне поле. |
тип | Тип даних поля у новій таблиці. |
размер | Размір поля в символах (лише для текстових та двійкових полів). |
индекс_1, индекс_2 | Елемент CONSTRAINT, який призначено для створення простого індекса. |
составнойИндекс | Елемент CONSTRAINT, який призначено для створення складного індекса |
Ключові слова.
Ключові слова- це зарезервовані слова, які єчастиною словника SQL. Ключові слова визначають дію оператора та спосіб виконання оператора. Як правило, ключові слова представлені великими літерами (для зручності читння). Насправді, SQL є мовою нечуттєвою до регістрів, символів табуляції, розриву рядків, зайвих пробілів. Але для зручності читання оператори розбивають на кілька рядків.
Усі ключові слова можна поділити на наступні категорії:
· команди - дієслова, що визначають дії, які необхідно виконати, наприклад -select, create table;
· умови - обмежують діапазон значень елементів, що входять до запиту, наприклад –where. За ключовими словами даної категорії вказують умови вибору. Останні часто називають “ предикати ”;
· модифікатори -змінюють виконання команди, наприклад order by.
· статистичні (агрегатні) функції - повертають одне результативне значення, що обчислюється для певного набору даних;
· інші ключові слова. змінюють дії команди чи управляють вказівником поточного запису, за допомогою якого вибираються чи будуються окремі рядки запиту.
Як приклад використання ключових слів, наведемо синтаксис інструкції SELECT. За допомогою такої інструкції ядро бази даних (Microsoft Jet) повертає дані з бази даних у вигляді записів.
Синтаксис інструкції SELECT:
SELECT [предикат] { * | таблиця.* | [таблиця.]поле_1
[AS псевдоним_2] [, [таблиця2.]поле_2 [AS псевдоним_2] [,...]]}
FROM выражение [,...] [IN внешняяБазаДаних]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
[WITH OWNERACCESS OPTION]
Аргументи інструкціїї SELECT
Елемент | Опис |
предикат | Предикати використовуються для обмеження числа записів, які повертаються. Можуть приймати одне із наступних значень умов вибору: ALL, DISTINCT, DISTINCTROW або TOP. Якщо предикат не вказано, то по замовчуванню використовується предикат ALL (із таблиці відбираються усі записи). |
* | Вказує, що потрібно відібрати усі поля заданої таблиці (або таблиць). |
таблица | Ім’я таблиці, з якої потрібно вибирати записи. |
поле_1, поле_2 | Імена полів, з яких мають бути відібрані дані. Якщо включити кілька полів, вони будуть вибиратись у вказаному порядку. |
псевдвоним_1, псевдвоним_2 | Імена, які стануть заголовками стовпчиків замість початкових імен стовпчиків у таблиці. |
выражение | Імена однієї або кількох таблиць, які мають дані, що відбираються. |
внешняяБазаДаних | Ім’я бази даних, яка вміщує таблиці. Ім’я бази даних вказується за допомогою аргумента, у випадках, коли таблиці, з яких відбираються дані не знаходяться у поточній базі даних. |
Інструкціїї SELECT можуть мати різноманітну структуру при практичній реалізації і не змінюють дані у базі даних.
Мінімальний синтаксис інструкціїї SELECT:
SELECT поля FROM Таблица.
Для першого знайомства та ілюстрації принципів використання інструкціїї SELECT наведемо кілька варіантів її застосування.
Якщо більше ніж одна із Таблиць, включених в речення FROM, мають у своєму складі поля з однаковими іменами, перед ім’ям такого поля слід ввести ім’я таблиці і оператор “.” (крапка). Припустимо, що поле "Відділ" є в Таблицях "Співробітники" і "Очільники". Наступна інструкція SQL відбере поле "Відділ" з таблиці "Співробітники" і поле "Очільник" з таблиці "Очільники":
SELECT Співробітники.Відділ, Очільники.Очільник
FROM Співробітники INNER JOIN Очільники
WHERE Співробітники.Відділ = Очільники.Відділ;
Якщо необхідно задати інше ім’я поля, або виразу, який створює розрахункове поле,то використовується зарезервоване слово AS.
У наступному прикладі заголовок "Народження" стає новим ім’ям
SELECT [Дата народження]
AS Народження FROM Співробітники;
При роботі із статистичними функціями також використовують речення AS для того, щоб задати нове ім’я для результуючого значення:
SELECT COUNT(КодСпівробітника)
AS Чисельність FROM Співробітники;
3.3. Створення SQL-інструкцій (на стадії ознайомлення)
При розробці SQL-операторів визначають два послідовні етапи:
1. підготовчий етап;
2. етап безпосереднього вводу та виконання.
Зазначимо, що набувши певного досвіду, можна легко визначати дії на кожному із етапів. Але на стадії ознайомлення з можливостями операторів, рекомендується детально розглядати кожен із етапів, щоб уникнути спрощеного уявлення відносно структури SQL-операторів.
На першому етапі необхідно:
· досконально розібратися в умовах задачі;
· уточнити модель даних та структуру бази даних - перевірити імена Таблиць та полів, типи та розміри полів, інші властивості полів, з якими має працювати SQL-оператор;
· віднайти синтаксис необхідного оператораSQL, наприклад, за допомогою довідникової системи;
· проаналізувати синтаксис (відповідно до задачі) та визначитись з наступним:
a) чи є серед необв’язкових елементів синтаксиса такі, які повинні бути присутніми для вирішення потрібної задачі;
b) які елементи синтаксису можуть бути відсутніми;
c) які елементи синтаксису мають бути присутніми обов’язково;
d) які опції потрібно обрати із опцій, відділених вертикальними рисками;
e) уточнити конкретні значення, які мають бути введені замість тексту в кутових дужках;
f) уточнити, що буде записуватись замість трикрапки;
g) перевірити відповідність імен полів та таблиць у операторі та у структурі бази даних;
h) при потребі підготувати та уточнити предикати (логічні умови вибору);
i) записати SQL- оператор.
На другому етапі вводять оператор засобами, прийнятими у реляційній базі даних.Звичайно, можна орієнтуватись на готові зразки, які найбільш підходять до вирішуваної задачі, але раніше вказаний спосіб логічно більш виважений.
Групи SQL – інструкцій
Як було відзначено раніше, SQL-оператори призначені для виконання операцій реляційної алгебри. Взагалі, мова SQL- це множинно – орієнтована мова, що має статус стандартної мови запитів реляційних БД, але не має:
· засобів управління потоками;
· засобів організації інтерфейсу.
Стандарт мови запитів до реляційних баз даних не є дуже жорстким і дозволяє розробникам використовувати різні діалекти мови і навіть розширювати її. Це означає, що різні реляційні системи управління базами данних можуть мати певні особливості синтаксису операторів.
Усі команди мови SQL можна розділити на такі групи, див. Табл. 3.3.
Таблиця 3.3.
Групи SQL за функціональним призначенням
№ п/п | SQL-оператор | Призначення | Примітка | |||||
DDL- Мова визначення даних (Data Definition Language) | ||||||||
1.1 1.2. 1.3. | 1. Робота зі структурою бази даних | |||||||
CREATE DATEBASE DROP DATEBASE | Створення БД Вилучення БД | |||||||
2. Робота зі структурою Таблиць | ||||||||
CREATE TABLE ALTER TABLE RENAME TABLE DROP TABLE | Cтворення структури таблиці Зміна структури таблиці Перейменування Вилучення | Не підходять для Таблиць, у яких вже зберігаються дані. | ||||||
3. Робота з індексами | ||||||||
CREATE INDEX DROP INDEX | Створення індексу Вилучення індексу | |||||||
2. DML- Мова маніпулювання даними -Data Manipulation Language (Дії відносяться до даних, які зберігаються у базі даних.) | ||||||||
2.1. | Запити до однієї чи кількох Таблиць | |||||||
SELECT | Вибір даних | У запитах завжди використовується SELECT. Інструкція може бути як дуже простим, так і дуже складним у різних випадкаї | ||||||
2.2. | Вставити дані у таблицю | |||||||
INSERT REPLACE LOAD DATA INFILE | Відносяться до Таблиць у яких зберігаються дані. | |||||||
2.3. | Оновлення існуючих даних у Таблицях | |||||||
INSERT REPLACE | ||||||||
2.4. | Вилучення даних із таблиці | |||||||
DELETE FROM | ||||||||
3. DCL- Мова управління доступом до даних -Data Control Language | ||||||||
3.1. | Дозволяють задати права користувача на певні об’єкти бази даних | |||||||
GRANT | Надає привілеї доступа користувачам | Доступ дозволяється лише до певних Таблиць і лише певним привілегійованим користувачам. | ||||||
REVOKE | Відміняє привілеї доступа користувачів | |||||||
3.2. | Управління транзакціями (з метою підтримки цілосності даних) | |||||||
COMMIT SAVEPOINT ROLLBACK | Фіксація у базі даних усіх змін, виконаних поточною транзакцією. Встановлення точки початку транзакції Скасування змін, зроблених з момента початку транзакції | Транзакція —логічно закінчена одиниця роботи, що складається з однієї або кількох елементарних операцій оброблення даних. Дії по транзакції або виконуються повністю, або повністю скасовуються. Транзакція починається з моменту, встановленого інструкцією SАVEPOINT і може бути виконана по команді COMMIT або скасована по ROLLBACK | ||||||