Мова SQL оперує термінами, що трохи відрізняються від термінів реляційної теорії, наприклад, замість "відношення" використавуються "таблиці", замість "кортежів" - "рядки", замість "атрибутів" - "колонки" або "стовпці".
Стандарт мови SQL, хоча й заснований на реляційній теорії, але у багатьох місцях відходить він неї. Наприклад, відношення у реляційній моделі даних не допускає наявності однакових кортежів, а таблиці у термінології SQL можуть мати однакові рядки. Є й інші відмінності.
Мова SQL є реляційно повною. Це означає, що будь-який оператор реляційної алгебри може бути виражений відповідними оператором SQL.
Будь-який діалект SQL підтримують три загальних типи даних: строковий, числовий й тип для подання дати й часу. Завдання типу даних визначає значення й довжину даних, а також формат їхнього подання при візуалізації.
Для всіх типів даних визначено так зване нуль-значення, що вказує на відсутність даних у колонку зазначеного типу, тобто та обставина, що значення даних у сучасний момент часу невідомо.
Дані строкового типу являють собою послідовність рядків символів. Строкові дані можуть бути задані як з визначеною довжиною (ключові слова char або varchar (довжина рядка)), так і без вказівки довжини (ключове слово long varchar) для подання рядків довільної довжини. Тип даних varchar2 визначає рядок символів змінної довжини, що має максимальний розмір size. На відміну від строкового типу з визначеною довжиною, з рядками long varchar не допускаються операції порівняння, і вони не можуть бути використані у виразах і як аргументи більшості убудованих функцій. Рядки останнього типу можуть застосовуватися для збереження бітових образів. Стандарт SQL-92 не має типу long varchar й varchar.
Зверніть увагу на тип даних varchar2. Він, так само як і тип даних char, призначений для подання алфавітно-цифрових даних. Але він має формат змінної довжини. Останнє означає, що довжина колонки такого типу дорівнює числу символів у ній, у той час як колонка типу char використовує весь виділений для неї простір.
Існує два типи числових даних. Цілі й речовинні значення (наприклад, сальдо банківського рахунку або ставка відсотка). Вони є об'єктом математичної обробки. Строкові числові дані, у яких єдино припустимими символами є цифри (наприклад, номери банківських рахунків).
Числові типи даних призначені для подання цілих чисел, чисел з десятковою крапкою й чисел із плаваючою крапкою. Будь-яке подання чисел задається своєю точністю й масштабом. Точність визначає припустиме поданням кількість значущих цифр числа, а масштаб - кількість значущих цифр після десяткової крапки.
Для подання цілих чисел використовуються типи interger (точність 10 значущих цифр) і smallint (точність 5 значущих цифр).
Для подання чисел з фіксованою десятковою крапкою використовуються типи number (точність, масштаб) (для чисел з точністю до 15 значущих цифр) і decimal (точність, масштаб) (для чисел заданої точності до 15 значущих цифр). Якщо вказати для колонки тип number без завдання масштабу, максимальне число значущих цифр для Oracle буде 105. Замість завдання точності й масштабу може бути зазначений символ *. Це буде еквівалентно завданню простого типу number. Розходження між цими типами даних полягає в тому, що для типу number немає необхідності стежити за точністю при виконанні операцій.
Для подання чисел із плаваючою крапкою в SQL передбачені такі типи даних: Double Precision - для чисел з точністю від 22 до 53 значущих цифр;
Float (точність) - для подання чисел з точністю від 1 до 21 значущої цифри;
Real - для чисел із точністю за замовчуванням (залежить від конкретної реалізації).
Тип даних для подання дати й часу відсутній у стандарті SQL. Звичайно в конкретних діалектах SQL використовуються три типи для подання таких даних:
datestamp (timestamp) - для подання дати й часу; date - для подання дати; time - для подання часу.
Константи, вираження, системні змінні.
Константи звичайно визначають єдине значення й, відповідно до типу даних, що представляють, можуть бути строковими, числовими й представляти дату/час. Строкові константи повинні бути укладені в одинарні лапки.
У SQL існує ряд визначених системних змінних, які можна використовувати у виразах замість імен колонок і констант. До них відносять такі:
NULL - для подання невизначених значень;
ROWID - (в SQLBase) внутрішній системний номер рядка в таблиці; USER - ім'я користувача, активного в цей момент; SYSDATETIME - системний поточний час і дата; SYSDATE - системна поточна дата;
SYSTIME - системний поточний час;
SYSTIMEZONE - часовий пояс, установлений у системі.
Виразом у SQL є ітем або комбінація ітемів з припустимими для них операціями, що дає єдине значення. У якості ітемів можуть виступати імена колонок, константи, пов'язанні змінні, результати обчислень функцій, системні змінні й інші вирази. При цьому, якщо один з ітемів має нуль-значення, то результат виразу також має нуль-значення.
Основу мови SQL становлять оператори, умовно розбиті на кілька груп за виконуваними функціями.
Можна виділити такі групи операторів (перераховані не всі оператори SQL):
Оператори DDL (Data Definition Language) - оператори визначення об'єктів БД:
· CREATE SCHEMA - створити схему БД;
· DROP SHEMA - видалити схему БД;
· CREATE TABLE - створити таблицю;
· ALTER TABLE - змінити таблицю;
· DROP TABLE - видалити таблицю;
· CREATE DOMAIN - створити домен;
· ALTER DOMAIN - змінити домен;
· DROP DOMAIN - видалити домен;
· CREATE COLLATION - створити послідовність;
· DROP COLLATION - видалити послідовність;
· CREATE VIEW - створити подання; · DROP VIEW - видалити подання.
Оператори DML (Data Manipulation Language) - оператори маніпулювання даними: · SELECT - відібрати рядок із таблиць;
· INSERT - додати рядок у таблицю;
· UPDATE - змінити рядок у таблиці;
· DELETE - видалити рядок у таблиці; · COMMIT - зафіксувати внесені зміни;
· ROLLBACK - відкотити внесені зміни.
Оператори захисту й керування даними:
· CREATE ASSERTION - створити обмеження;
· DROP ASSERTION - видалити обмеження;
· GRANT - надати привілею користувачеві або додатку на маніпулювання об'єктами; · REVOKE - скасувати привілею користувача або додатка.
Крім того, є групи операторів установки параметрів сеансу, одержання інформації про БД, оператори статичного SQL, оператори динамічного SQL.
Найбільш важливими для користувача є оператори маніпулювання даними (DML).
Приклад. Вставка одного рядка в таблицю:
INSERT INTO
P (PNUM, PNAME)
VALUES (4, "Іванов");
Приклад. Вставка в таблицю декількох рядків, обраних з іншої таблиці (у таблицю TMP_TABLE уставляються дані про постачальників з таблиці P, що мають номери, більші
2):
INSERT INTO
TMP_TABLE (PNUM, PNAME)
SELECT PNUM, PNAME
FROM P
WHERE P.PNUM>2;
UPDATE - відновлення рядків у таблиці
Приклад. Відновлення декількох рядків у таблиці:
UPDATE P
SET PNAME = "Пушников"
WHERE P.PNUM = 1;
DELETE - видалення рядків у таблиці
Приклад. Видалення декількох рядків у таблиці:
DELETE FROM P
WHERE P.PNUM = 1;
Приклад. Видалення всіх рядків у таблиці:
DELETE FROM P;
Приклади використання оператора SELECT
Оператор SELECT є фактично найважливішим для користувача й самим складним оператором SQL. Він призначений для вибірки даних із таблиць, тобто він, властиво, і реалізує одне з їхніх основних призначень БД - надавати інформацію користувачеві.
Оператор SELECT завжди виконується над деякими таблицями, що входять у БД.
Насправді в БД можуть бути не тільки постійно збережені таблиці, а також тимчасові таблиці й так звані подання. Подання - це SELECT-вираз, що зберігається в БД. З погляду користувачів подання - це таблиця, яка не зберігається постійно в БД, а "виникає" у момент звертання до неї. З погляду оператора SELECT і постійно збережені таблиці, і тимчасові таблиці, й подання виглядають зовсім однаково. Звичайно при реальному виконанні оператора SELECT системою враховуються розходження між збереженими таблицями й поданнями, але ці розходження сховані від користувача.
Результатом виконання оператора SELECT завжди є таблиця. Таким чином, за результатами дій оператор SELECT схожий на оператори реляційної алгебри. Будь-який оператор реляційної алгебри може бути виражений певним чином сформульованим оператором SELECT. Складність оператора SELECT визначається тим, що він містить у собі всі можливості реляційної алгебри, а також додаткові можливості, яких у реляційній алгебрі немає.
Приклад. Вибрати всі дані з таблиці постачальників (ключові слова SELECT…FROM…): SELECT*
FROM P;
У результаті одержимо нову таблицю, що містить повну копію даних із вихідної таблиці P.
Приклад. Вибрати всі рядки з таблиці постачальників, що задовольняють деякій умові (ключове слово WHERE…):
SELECT*
FROM P
WHERE P...PNUM>2;
Як умову в розділі WHERE можна використовувати складні логічні вирази, що використовують поля таблиць, константи, порівняння (>, <, = і т.д.), дужки, союзи AND й OR, заперечення NOT.
Приклад. Вибрати деякі колонки з вихідної таблиці (вказівка списку колонок, що відбирають):
SELECT P.NAME
FROM P;
У результаті одержимо таблицю з однією колонкою, що містить всі найменування постачальників. Якщо у вихідній таблиці були присутні кілька постачальників з різними номерами, але однаковими найменуваннями, то в результуючій таблиці будуть рядки з повтореннями - дублікати рядків автоматично не відкидаються.
Приклад. Вибрати деякі колонки з вихідної таблиці, видаливши з результату повторювані рядки (ключове слово DISTINCT):
SELECT DISTINCT P.NAME
FROM P;
Використання ключового слова DISTINCT призводить до того, що у результуючій таблиці будуть вилучені всі повторювані рядки.
Приклад. Використання скалярних виразів і перейменувань колонок у запитах (ключове слово AS…):