Вступ. 3
МОДУЛЬ 1. 5
Тема 1. Вступ до SQL. Синтаксис SQL. Типи даних. 5
Тема 2. Створення баз даних. 19
Тема 3. Створення таблиць. 21
Тема 4. Вставка стрічок з допомогою оператора INSERT. Вилучення стрічок з допомогою оператора DELETE, редагування стрічки з допомогою команди UPDATE. 24
Тема 5. Оператор SELECT. 35
Тема 6. Комбінування умов з допомогою операторів AND, OR, NOT. Порівняння по шаблону. Порівняння з діапазоном. Сортування стрічок з допомогою речення ORDER BY. 39
Тема 7. Створення псевдонімів. З’єднання таблиці із собою. Вибір даних з кількох таблиць 45
Тема 8. Введення обмежень в базах даних. 59
Тема 9. Використання збережуваних процедур в базах даних. Використання генераторів ключів у базах даних в InterBase. Використання тригерів у базах даних. 65
Тема 10. Безпека в базах даних. 78
МОДУЛЬ 2. 82
Тема 11. Оператор EXISTS. Сумування і групування даних. 82
Тема 12. З’єднання з базою даних. Використання збережуваних процедур в Delphi 99
Тема 13. Використання механізму транзакцій компонента Database. 104
Тема 14. Сервер баз даних InterBase і компоненти InterBase Express. 107
Тема 15. Виконання запитів за допомогою компонента TIBDataSet 110
Тема 16. Підпорядковані запити в таблицях. 114
Література. 116
Багато хто вважає, що поєднання трьох букв S-Q-L є абревіатура, яка розшифровується як Structured Query Language (Структурована мова запитів). Так от, SQL означає SQL, і більш нічого. Чому? Так тому, що так прийнято в ANSI. Офіційна назва SQL – Database Language SQL (Мова баз даних SQL). Особливу увагу на дану помилку звертають лише тому, що вона створює помилки. Якщо програмісти, початківці, будуть вважати, що SQL і справді означає "мова структурованих запитів”, це стане їм у поганій пригоді, оскільки саме ця мова є найгіршою зі всіх можливих описів канонічного SQL, хоча живучість даного опису здається академікам і професіоналам забавною із наступних причин:
· SQL не структурована мова, оскільки його не можна розбити на блоки або процедури;
· SQL не обмежується тільки запитами, оскільки в ньому є багато інших команд крім SELECT;
· SQL не є повною мовою за визначенням Тюрінга.
SQL нікому не належить. Це означає, що на права власності ніхто не претендує. SQL – це відкритий стандарт, що розроблявся одним із комітетів в Американському національному інституті стандартизації (ANSI). У свою чергу, ANSI – це не приватна фірма, а орган уряду США, покликаний сприяти розвитку національних стандартів. Більше того, SQL є не тільки американським, але і міжнародним стандартом ISO/IEC 9075:1992, оскільки в 1992 році був включений в число стандартів Міжнародної організації по стандартизації (ISO). В цьому зв'язку хотілося б зазначити, що справжнє видання засновано на стандарті ANSI SQL 1992. Таким чином, коли ви зустрінете позначення ANSI SQL, SQL-92 або просто SQL, їх слід розглядати як синоніми, якщо додатково не вказано нічого іншого. Положення дещо ускладнюється тим, що з'явився стандарт ANSI SQL-99. Проте на нього поки можна не звертати уваги, оскільки до його впровадження пройде ще декілька років і він буде сумісний із стандартом SQL-92. Тобто, програма, що відповідає стандарту SQL-92, буде працювати під будь-якою СУБД, що відповідає стандарту SQL-99.
Слід зазначити, що всі постачальники СУБД по-різному вносять свої доповнення в канонічний ANSI SQL, щоб зробити його більш могутнім. Частіше всього такими розширеннями є додаткові команди, ключові слова, функції, типи даних і конструкції управляючої логіки. Іноді, правда, цих розширень виявляється дуже багато. Зокрема, Oracle і Microsoft вже внесли так багато доповнень, що з'явилися PL/ SQL і Transact-SQL – самостійні повноправні мови, а не підмножини SQL. Проте звичайно розширення одного постачальника несумісні з розширеннями іншого.
Хронологія розвитку SQL:
1970 р. – Кодд опублікував статтю про реляційну модель.
1974 р. – мова SEQUEL.
1979 р. – реляційна СУБД Oracle.
1986 р. – організація ANSI прийняла SQL1.
1987 р. – організація ISO прийняла SQL1.
1989 р. – SQL1 (SQL-89).
1992 р. – ANSI впровадила SQL2 (SQL-92).
1992 р. – SQL3.
2002 р. – IBM створила СУБД DB2.
1. Вступ до SQL.
2. Синтаксис SQL.
3. Типи даних.
1. Вступ до SQL.
SQL – це стандартна мова програмування, яка використовується для створення, модифікації, пошуку і вибірки інформації, що зберігається в довільній реляційній базі даних, яка управляється відповідною системою управління базами даних (СУБД).
Мова SQL дуже могутня, тому її підтримують найбільш популярні СУБД, зокрема Microsoft Access, Oracle і MySQL, хоча рівень цієї підтримки істотно залежить від того, про яку саме СУБД йдеться.
SQL – це стандартизована, непроцедурна мова програмування, яка використовується для маніпулювання даними і об'єктами баз даних, використовуючи при цьому вбудований і/або інтерактивний SQL.
SQL – одна з формальних мов, тобто засіб, за допомогою якого ви передаєте комп'ютеру інструкції, що називаються програмою. Програмне забезпечення вашої бази даних виконує цю програму, написану на мові SQL. Це значить, що СУБД виконує ті запити, які ви їй передали, і відображає результати їх роботи, у тому числі яке-небудь повідомлення про помилку. Треба сказати, що мови програмування, названі також формальними мовами, відрізняються від мов спілкування, названих неформальними або природними мовами, головним чином тим, що створюються під конкретну мету, повністю позбавлені двозначності, мають вельми обмежений словниковий запас і гнучкість. Таким чином, якщо ви не отримали результату від роботи своєї програми, на який розраховували при її написанні, це відбулося тому, що ваша програма містить яку-небудь помилку (логічну або синтаксичну - в останньому випадку, швидше за все, буде виведено відповідне повідомлення, що описує помилку), а не тому, що комп'ютер неправильно зрозумів ваші інструкції, формалізовані у вигляді програми.
Будучи формальною мовою, SQL, як інша мова цього типу, має свої синтаксис і семантику. Синтаксис включає власне слова і символи, а також правила, по яких ці слова і символи можна використовувати при створенні команд і програм. Семантика допомагає з'ясувати реальне значення, значення будь-якої синтаксично правильної команди. Ви цілком можете написати на SQL яку-небудь команду, відповідну синтаксису мови, яка, проте, буде виражати невірне значення (тобто буде правильною синтаксично, але невірною семантично).
Для будь-якої процедурної мови програміст повинен явно прописувати кроки, які виконує комп'ютер, щоб отримати бажаний результат. SQL відноситься до непроцедурних мов (такі мови ще називають декларативними). Програмуючи на такій мові, вам треба описати те, що саме ви хочете зробити, а не те, як ви збираєтеся це робити. У випадку з SQL оптимізатор, який входить до складу програмного забезпечення вашої СУБД, самостійно розрахує це саме „як”. Саме тому SQL не містить таких конструкцій
Програмуючи на SQL, вам треба вказати тільки те, що саме необхідно зробити, а далі сама СУБД автоматично і непомітно для вас визначає і виконує ту послідовність покрокових операцій, яку вимагається виконати для досягнення бажаного результату.
Проте управляючі конструкції звичайно присутні в SQL і застосовуються при створенні так званих процедур збереження - певних наборів інструкцій, призначених для виконання складних дій з даними.
Якщо ви включаєте команди SQL як елементи в які-небудь програми, написані на процедурних мовах, вважається, що ви застосовуєте так званий вбудований SQL, а ті процедурні мови, на яких написані ці більш великі або, точніше, несучі програми, називають базовими. Такою мовою на практиці частіше всього виявляється будь-яка мова програмування загального призначення, зокрема С, Java або COBOL, або яка-небудь мова сценаріїв, наприклад Perl, PHP або Python.
Якщо в режимі реального часу адресувати команди на мові SQL безпосередньо вашій СУБД, а вона відобразить відповідні результати відразу ж, як тільки отримає, значить, ви застосовуєте інтерактивний або динамічний SQL. Зазначимо, що всі сучасні сервери СУБД поставляються в комплекті з такими графічними додатками або утилітами командного рядка, які сприймають інтерактивні команди SQL або/і текстові файли, що містять SQL-пpoграми,тобто сценарії. Майте на увазі, що між інтерактивними і вбудованими командами можуть існувати невеликі синтаксичні відмінності.
Всі команди SQL прийнято ділити на дві основні групи - мова маніпулювання даними (DML) і мова визначення даних (DDL).
Для будь-якої бази даних команди групи DML відбирають, обчислюють, вставляють, видаляють і редагують ті дані, які зберігаються в цій базі.
Команди групи DDL створюють, модифікують і знищують такі об'єкти бази даних, як таблиці, індекси і погляди.
SQL – це інструмент, призначений для вибірки та опрацювання інформації, яка міститься в комп’ютерній базі даних. SQL – це мова програмування, яка застосовується для організації взаємодії користувача із базою даних. Це не алгоритмічна мова.
Якщо користувачу необхідно отримати якусь інформацію із бази даних, то він запитує її за допомогою SQL. СУБД опрацьовує запит, знаходить потрібні дані і надсилає їх користувачу.
Функції SQL:
1) організація даних – SQL дає користувачу можливість визначити структуру представлення даних, а також встановлювати відношення між елементами бази даних;
2) вибірка даних – SQL дає можливість користувачу чи прикладній програмі отримати із бази даних інформацію, яка в ній міститься;
3) опрацювання даних – SQL дає можливість користувачу чи прикладній програмі змінювати базу даних, тобто додавати нові дані, оновлювати чи вилучати існуючі;
4) управління доступом – за допомогою SQL можна обмежувати можливості користувача щодо вибірки і зміни даних та захистити дані від несанкціонованого доступу;
5) спільне використання даних – SQL координує спільне використання даних користувачами, які працюють паралельно так, щоб вони не заважали один одному;
6) цілісність даних – SQL дозволяє забезпечити цілісність бази даних, захищаючи її від руйнації через неузгоджені зміни чи відмови системи.
Роль SQL
Сам по собі SQL це не СУБД і не який-небудь окремий програмний продукт. SQL – це інструмент, за допомогою якого здійснюється зв’язок користувача з базою даних. SQL працює лише з реляційними базами даних.
Ядро бази даних – це серцевина СУБД. Воно відповідає за фізичне структурування даних, а також запис їх на диск та зчитування з диску. Ядро сприймає SQL-запити від інших компонентів СУБД. SQL використовує самі різні функції, зокрема: 1) SQL-мова інтерактивних запитів; 2) SQL-мова програмування бази даних; 3) SQL-мова адміністрування бази даних. Адміністратор бази даних використовує SQL для визначення структури бази даних та управління доступом до даних; 4) SQL – це мова створення клієнт-серверних програм; 5) SQL – це мова доступу до даних в Internet; 6) SQL – це мова розосереджених баз даних, тобто SQL дозволяє розподілити дані між різними обчислювальними системами і зв’язати відповідне програмне забезпечення; 7) SQL – мова шлюзів баз даних.
Переваги SQL:
1) незалежність від конкретних СУБД;
2) міжплатформна переносимість;
3) наявність стандартів;
4) підтримка компаніями IBM та Microsoft;
5) реляційна основа;
6) високорівнева структура;
7) можливість виконання інтерактивних запитів;
8) забезпечення програмного доступу до бази даних;
9) можливість різноманітного представлення даних;
10) повноцінність, як мови опрацьовування баз даних;
11) можливість динамічного визначення даних;
12) підтримка архітектури клієнт-сервер;
13) підтримка корпоративних прикладних програм;
14) розширюваність та підтримка об’єктно-орієнтованого програмування;
15) можливість доступу до даних в Internet;
16) інтеграція з мовою Java (протокол JDBC);
17) промислова інфраструктура.
2.Синтаксис SQL.
Коментар. Всякий коментар – це необов'язковий текст, який друкується в окремому рядку програми, щоб пояснити цю програму. Коментар повинен починатися з двох дефісів. Коли СУБД знаходить їх, вона ігнорує те, що стоїть за ними, тобто сам коментар. Коментарі займають цілий рядок.
Команда SQL. Будь-яка команда SQL – це допустима комбінація лексем, якій передує яке-небудь ключове слово. Тут під лексемою розуміється основна неподільна частинка мови SQL в тому значенні, що граматично ніякої лексеми не можна розділити на більш дрібні складові елементи. Лексемами є ключові слова, ідентифікатори, оператори, літерали і інші символи.
Речення. Будь-яка команда SQL включає не менш одну пропозицію. В найзагальнішому випадку всяка пропозиція SQL – це фрагмент команди SQL, який починається з якого-небудь ключового слова, є обов’язковим або необов’язковим і повинен бути записаний в певному порядку. В даному прикладі ми маємо чотири пропозиції, а саме: SELECT, FROM, WHERE, ОRDER.
Ключові слова. Довільне ключове слово, іноді зване зарезервованим, – це таке слово, яке в мові SQL має певне значення і застосування якого в SQL строго регламентовано. Слід мати на увазі, що використовування будь-якого ключового слова зовні контексту (наприклад, як ідентифікатора) буде вважатися помилкою. В таб. 1.1 перераховані ключові слова SQL, а в таб. 1.2 – потенційні слова SQL (які поки не є офіційно зарезервованими, але одного разу можуть ними стати).
Ідентифікатори. Довільний ідентифікатор – це таке слово, яке розробник бази даних застосовує для того, щоб іменувати об’єкти довільної бази даних, у тому числі таблиці, стовпці, псевдо імена (псевдоніми) і представлення. Ідентифікатор не може бути ключовим словом, і його довжина не може перевищувати 128 знаків. Знаком в SQL може бути будь-який символ алфавіту, включаючи символи латинського алфавіту і латинські ідеограми. В нашому прикладі іменами, зокрема, є au_fname, au_lname, authors і state.
Завершальна крапка з комою. Запис кожної команди SQL повинен закінчуватися крапкою з комою.
Приклад команди SQL:
--Retrieve authors from New York
SELECT au_fname, au_lname
FROM authors
WHEREstate = 'Lviv'
ORDER BY au_lname;
Таблиця 1.1. Ключові слова SQL
ABSOLUTE |
COMMIT |
ELSE |
INSERT |
Null |
||||
ACTION |
CONNECT |
END |
INT |
ONLY |
||||
ADD |
CONNECTION |
END-EXEC |
INTEGER |
OPEN |
||||
ALL |
CONSTRAINT |
ESCAPE |
INTERSECT |
OPTION |
||||
ALLOCATE |
CONSTRAINTS |
EXCEPT |
INTERVAL |
OR |
||||
ALTER |
CONTINUE |
EXCEPTION |
INTO |
ORDER |
||||
AND |
CONVERT |
EXEC |
IS |
OUTER |
||||
ANY |
CORRESPONDING |
EXECUTE |
ISOLATION |
OUTPUT |
||||
ARE |
COUNT |
EXISTS |
JOIN |
OVERLAPS |
||||
AS |
CREATE |
EXTERNAL |
KEY |
PAD |
||||
ASC |
CROSS |
EXTRACT |
LANGUAGE |
PARTIAL |
||||
ASSERTION |
CURRENT |
FALSE |
LAST |
POSITION |
||||
AT |
CURRENT DATE |
FETCH |
LEADING |
PRECISION |
||||
AUTHORIZATION |
CURRENT TIME |
FIRST |
LEFT |
PREPARE |
||||
AVG |
CURRENTJTIMESTAMP |
FLOAT |
LEVEL |
PRESERVE |
||||
BEGIN |
CURRENTJJSER |
FOR |
LIKE |
PRIMARY |
||||
BETWEEN |
CURSOR |
FOREIGN |
LOCAL |
PRIOR |
||||
BIT |
DATE |
FOUND |
LOWER |
PRIVILEGES |
||||
BIT LENGTH |
DAY |
FROM |
MATCH |
PROCEDURE |
||||
BOTH |
DEALLOCATE |
FULL |
MAX |
PUBLIC |
||||
|
DEC |
GET |
MIN |
READ |
||||
CASCADE |
DECIMAL |
GLOBAL |
MINUTE |
REAL |
||||
CASCADED |
DECLARE |
GO |
MODULE |
REFERENCES |
||||
CASE |
DEFAULT |
GOTO |
MONTH |
RELATIVE |
||||
CAST |
DEFERRABLE |
GRANT |
NAMES |
RESTRICT |
||||
CATALOG |
DEFERRED |
GROUP |
NATIONAL |
REVOKE |
||||
CHAR |
DELETE |
HAVING |
NATURAL |
RIGHT |
||||
CHARACTER |
DESC |
HOUR |
NCHAR |
ROLLBACK |
||||
CHARJ.ENGTH |
DESCRIBE |
IDENTITY |
NEXT |
ROWS |
||||
CHARACTER LENGTH |
DESCRIPTOR |
IMMEDIATE |
NO |
SCHEMA |
||||
CHECK |
DIAGNOSTICS |
IN |
NOT |
SCROLL |
||||
CLOSE |
DISCONNECT |
INDICATOR |
NULL |
SECOND |
||||
COALESCE |
DISTINCT |
INITIALLY |
NULLIF |
SECTION |
||||
COLLATE |
DOMAIN |
INNER |
NUMERIC |
SELECT |
||||
COLLATION |
DOUBLE |
INPUT |
OCTET LENGTH |
SESSION |
||||
COLUMN |
DROP |
INSENSITIVE |
|
SESSIONJJSER |
||||
SET |
SUM |
TRAILING |
UPPER |
WHENEVER |
||||
SIZE |
SYSTEM USER |
TRANSACTION |
USAGE |
WHERE |
||||
SMALLINT |
TABLE |
TRANSLATE |
USER |
WITH |
||||
SOME |
TEMPORARY |
TRANSLATION |
USING |
WORK |
||||
SPACE |
THEN |
TRIM |
VALUE |
WRITE |
||||
SQL |
TIME |
TRUE |
VALUES |
YEAR |
||||
SQLCODE |
TIMESTAMP |
UNION |
VARCHAR |
ZONE |
||||
SQLERROR |
TIMEZONEJHOUR |
UNIQUE |
VARYING |
|
||||
SQLSTATE |
TIMEZONE MINUTE |
UNKNOWN |
VIEW |
|
||||
SUBSTRING |
TO |
UPDATE |
WHEN |
|
||||
Таблиця 1.2. Потенційні ключові слова SQL |
||||||||
AFTER |
EQUALS |
OLD |
RETURN |
TEST |
||||
ALIAS |
GENERAL |
OPERATION |
RETURNS |
THERE |
||||
ASYNC |
IF |
OPERATORS |
ROLE |
TRIGGER |
||||
BEFORE |
IGNORE |
OTHERS |
ROUTINE |
TYPE |
||||
BOOLEAN |
LEAVE |
PARAMETERS |
ROW |
UNDER |
||||
BREADTH |
LESS |
PENDANT |
SAVEPOINT |
VARIABLE |
||||
COMPLETION |
LIMIT |
PREORDER |
SEARCH |
VIRTUAL |
||||
CALL |
LOOP |
PRIVATE |
SENSITIVE |
VISIBLE |
||||
CYCLE |
MODIFY |
PROTECTED |
SEQUENCE |
WAIT |
||||
DATA |
NEW |
RECURSIVE |
SIGNAL |
WHILE |
||||
DEPTH |
NONE |
REF |
SIMILAR |
WITHOUT |
||||
DICTIONARY |
OBJECT |
REFERENCING |
SQLEXCEPTION |
|
||||
EACH |
OFF |
REPLACE |
SQLWARNING |
|
||||
ELSEIF |
OID |
RESIGNAL |
STRUCTURE |
|
||||
SQL - це мова з вільним форматом речень. Будь-яка його команда може:
• бути надрукована як у верхньому, так і в нижньому регістрі (наприклад, ключові слова SELECT і select вважаються ідентичними);
• продовжуватися на наступному рядку скільки завгодно довго за умови, що ви не будете розбивати на дві частини слова, лексеми і рядки в лапках (тобто рядкові константи);
• бути надрукована на одному рядку з будь-якими іншими командами;
• починатися на будь-якій позиції горизонтальної розмітки екрану/листа.
Проте вам слід дотримуватися певного стилю написання команд SQL, наприклад використовувати верхній регістр для ключових слів і нижній регістр для ідентифікаторів. Крім того, можна починати кожне речення з нового рядка з відповідним відступом. Питання стилю не можна ігнорувати, тому що його відсутність приводить до наступних помилок:
В літературі по SQL ввідне ключове слово будь-якої команди часто називають дієсловом, тому що воно явно вказує на ту дію, яку необхідно вчинити.
Оскільки вживати ключові слова як ідентифікатори заборонено, ви цілком можете вбудовувати будь-які ключові слова всередину ідентифікаторів як складову частину слова. Наприклад: group і max не можна використовувати як ідентифікатор, а ідентифікатор groups і max_price цілком допустимі.
select au fname,
AU_LNAME
FROM
authors WhErE state = 'NY' order
bY AU_lname;
Команда, приведена в прикладіеквівалентна попередній команді.
Застосовувати пропуски в іменах бази даних не рекомендується. Але якщо дуже хочеться, можна вставити пропуски в будь-який ідентифікатор, тоді його треба буде укласти в одинарні лапки, от так:' last name'. Проте підкреслимо ще раз: краще застосовувати не пропуски, а знак підкреслення (last name) або ідентифікатор, набраний заголовними і прописними буквами (LastName).
Вираз - це будь-яка дозволена комбінація символів, яка служить для обчислення єдиного агрегованого значення даних. Складаючи будь-який вираз, ви можете комбінувати математичні або логічні оператори, ідентифікатори, константи, функції, імена стовпців і т.д.
Комерційні СУБД накладають власні, обмеження на довжину ідентифікатора і на алфавіт. Тому має сенс проаналізувати документацію по вашій СУБД, використовуючи ключі пошуку „ідентифікатори” і „імена”.
Більше того, різні СУБД мають свої власні додаткові ключові слова, які, очевидно, не можуть бути ідентифікаторами в „рідній” СУБД (але цілком можуть бути ідентифікаторами по канонах SQL і, можливо, в інших СУБД). От чому непогано було б організувати пошук в документації по вашій СУБД з використанням ключів пошуку „ключові слова” і „зарезервовані слова”.
3.Типи даних.
1.3.1. Команди
![]() |
Всього в SQL існує приблизно 40 команд. Кожна команда просить СУБД виконати певну дію: вибрати дані, створити таблицю чи вставити в таблицю нові дані.
Основні команди SQL
Команда |
Опис |
Опрацювання даних |
|
SELECT |
Вибирає дані із таблиці |
INSERT |
Додає нові рядки до таблиці |
DELETE |
Вилучає рядки із таблиці |
UPDATE |
Оновлює дані, які містяться в таблиці |
Визначення даних |
|
CREATE TABLE |
Створює нову таблицю і додає її до бази даних |
DROP TABLE |
Знищує таблицю, тобто вилучає її із бази даних |
ALTER TABLE |
Змінює структуру існуючої таблиці |
CREATE VIEW |
Створює новий погляд та додає його до бази даних |
DROP VIEW |
Знищує погляд, тобто вилучає його з бази даних |
CREATE INDEX |
Створює індекс для стовпчика |
DROP INDEX |
Знищує індекс для стовпчика |
CREATE SCHEMA |
Створює нову схему |
DROP SCHEMA |
Знищує схему |
CREATE DOMAIN |
Створює та додає до бази даних новий домен |
ALTER DOMAIN |
Змінює визначення домену |
DROP DOMAIN |
Знищує домен, тобто вилучає домен з бази даних |
Управління доступом |
|
GRANT |
Надає користувачу певні привілеї доступу |
REVOKE |
Скасовує вказані привілеї доступу |
Управління транзакціями |
|
COMMIT |
Завершує біжучу транзакцію |
ROLLBACK |
Скасовує біжучу транзакцію |
SET TRANSACTION |
Починає транзакцію і вказує режим доступу до даних |
Кожна команда SQL починається із ключового слова, яке визначає дію, що виконується командою. Команда містить одну або кілька секцій. Секція описує дані, з якими працює команда, або містить уточнюючу інформацію про дії, що виконуються командою. Кожна секція також починається із ключового слова, наприклад: WHERE, FROM, INTO. Деякі секції в команді обов’язкові, а деякі необов’язкові. Конкретна структура та зміст секцій залежить від команди. Багато секцій містять імена таблиць чи стовпчиків, деякі секції містять додаткові ключові слова, константи, вирази.
1.3.2. Імена
Кожний об’єкт в базі даних повинен мати ім’я. Повне ім’я кожного об’єкту повинно бути унікальним. Імена вказують, над якими об’єктами SQL-команда виконує свою дію. Основні об’єкти, які повинні мати імена згідно стандарту SQL1 – це таблиці, стовпчики, користувачі. Стандарт SQL2 до цього переліку ще додає схеми (колекції, набори таблиць), обмеження (умови, які накладаються на вміст таблиць та їх відношення) і домени (допустимі набори значень, які можуть бути занесені у стовпчик). За стандартом SQL1 імена повинні складати від 1 до 18 символів, починатися з літери і не містити пробілів, чи знаків пунктуації. Стандарт SQL2 дозволяє утворювати імена довжиною 128 символів.
![]() |
![]() |
![]() |
Приклад 1. Звертання до таблиці із іншої БД за допомогою драйверів BDE.
DELETE FROM Pracivnyky
WHERE Kod IN
(SELECTKod
FROM :ARCHIVE: Pracivnyky)
Цей запит вилучає із таблиці Pracivnyky біжучої бази даних інформацію про тих працівників, яка міститься в однойменній таблиці із бази даних, зв’язаної з BDE-аліасом ARCHIVE.
![]() |
Ця команда вибирає всю інформацію із таблиці Pracivnykyвказаної бази даних.
Якщо в команді вказане ім’я стовпчика, то СУБД сама визначає, якій саме таблиці із тих, що вказані у цій команді, належить даний стовпчик. Якщо в команді вказуються два однойменних стовпчика із різних таблиць, то необхідно вказувати повне ім’я стовпчика:
![]() |
1.3.3. Типи даних
Стандарт SQL1 описує мінімальний набір типів даних. Ці типи підтримуються усіма комерційними СУБД. Стандарт SQL2 додав до переліку типів даних літерні рядки змінної довжини, значення дати і часу тощо.
Типи даних в SQL
Тип даних |
Опис |
CHAR (довжина) |
Літерні рядки постійної довжини SQL1 |
CHARACTER (довжина) |
|
VARCHAR (довжина) |
Літерні рядки змінної довжини SQL1 |
CHAR VARYING (довжина) |
|
CHARACTER VARYING (довжина) |
|
NCHAR (довжина) |
Локалізовані літерні рядки постійної довжини SQL2 |
NATIONAL CHAR (довжина) |
|
NATIONAL CHARACTER (довжина) |
|
NCHAR VARYING (довжина) |
Локалізовані літерні рядки змінної довжини SQL3 |
NATIONAL CHAR VARYING (довжина) |
|
NATIONAL CHARACTER VARYING (довжина) |
|
INTEGER |
Цілі числа SQL |
INT |
|
SMALLINT |
Малі цілі числа SQL1 |
BIT (довжина) |
Рядки бітів постійної довжини SQL2 |
BIT VARYING (довжина) |
Рядки бітів змінної довжини SQL2 |
NUMERIC (точність, степінь) |
Числа з плаваючою крапкою SQL1 |
DECIMAL (точність, степінь) |
|
DEC (точність, степінь) |
|
FLOAT (точність) |
|
REAL |
Числа з плаваючою крапкою низької точності SQL1 |
DOUBLE PRECISION |
Числа з плаваючою крапкою високої точності SQL1 |
DATE |
Дата SQL2 |
TIME (точність) |
Час SQL2 |
TIMESTAMP (точність) |
Дата-час SQL2 |
INTERVAL |
Інтервал SQL2 |
Різні СУБД по-різному опрацьовують типи даних. Розглянемо це на прикладі опрацювання дати і часу.
Приклад.
Для DB2
DATA << June 30, 1990 >>
TIME << 12:30 PM >>
TIMESTAMP – конкретний момент часу з точністю до наносекунди.
В цій СУБД значення дати і часу можна представити за допомогою літерних рядків. Підтримуються арифметичні дії над датами:
SELECT Prizv, DatePryjomu
FROM Pracivnyky
WHERE DatePryjomu > = ‘05/30/1990’+15 DAYS
Тут поле DatePryjomu типу DATE.
Для SQL Server
Є єдиний тип для представлення дати-часу DATATIME:
SELECT Prizv, DatePryjomu
FROM Pracivnyky
WHERE DatePryjomu > = ‘06/14/1990’
Оскільки не вказано часу, то за замовчуванням він вважається рівним опівночі. Якщо вказано точний час, то секція WHERE набуде вигляду:
WHERE DatePryjomu > = ‘06/14/1990 12:00 AM’
В SQL Server також підтримуються арифметичні дії над датами:
WHERE DatePryjomu > = DATEADD (DAY, 15, ‘05/30/1990’)
Для Oracle
Тип DATE ~TIMESTAMP (з SQL). Як і для SQL Server, якщо час явно не вказаний, то він вважається рівним опівночі:
WHERE DatePryjomu > = ‘14-JUN-90’
В Oracle також підтримуються арифметичні дії над датами:
WHERE DatePryjomu > = ‘30-MAY-90’ + 15
1.3.4. Константи
1.3.4.1. Числові константи
Це насамперед точні числові константи:
1)
![]() |
2)
![]() |
Приклад. 2000.00, + 497.13
Не можна ставити символи, які відокремлюють розряди між цифрами. Не всі діалекти SQL дозволяють ставити перед числом знак "+”, тому краще його уникати. Якщо дані представляють грошові одиниці, то в більшості СУБД використовуються цілі або десяткові константи. В деяких із них перед константою можна вказати символ грошової одиниці, наприклад: $ 0.75, 200.75. Константи з плаваючою крапкою відносяться до наближених числових констант, вони визначаються за допомогою літери "Е” і мають той самий формат, що і більшість мов програмування.
1.3.4.2.
Літерні рядки
![]() |
Приклад. ‘школа’
Якщо в константу необхідно включити апостроф, то його потрібно подвоїти, наприклад: ‘ім”я’, ‘м”ясо’.
В деяких СУБД (SQL Server, Informix) дозволяється обробляти літерні константи подвійними лапками. Це може привести до проблем при переході на платформу іншої СУБД, тому подвійні лапки краще не використовувати.
1.3.4.3. Константи дати і часу
Константи дати і часу представляються у вигляді літерних рядків. Формати цих констант в різних СУБД відрізняються один від одного, крім того, спосіб запису дати і часу залежить від країни.
Для SQL Server:
Дата |
Час |
March 15, 1990 Mar 15 1990 3/15/1990 3-15-90 1990 MAR 15 |
15:30:25 3:30 pm ![]() ![]()
При использовании материалов ссылка на источник обязательна. TatMan.ru Copyright 2016
|