Informix короткий посібник з мови sql

Ідентифікатор (ім'я об'єкта) - це слово, що складається з букв, цифр, і знаків підкреслення (_), що починається з букви або знака (_). У INFORMIX-4GL не розрізняються маленькі і великі літери. Тому i_Un1023Tt і I_UN1023TT - одне і теж ім'я.
Ім'я бази даних не довше 10.
Імена інших об'єктів SQL - таблиць, стовпців, view (псевдотабліц). синонімів - не довше 18.

Оператори опису даних призначені для опису (створення), зміни опису та знищення об'єктів бази даних.
У SQL розрізняються наступні види об'єктів:


Кожен об'єкт має власне ім'я - ідентифікатор. Кожен об'єкт має власника - тобто того користувача, який його створив. Ім'я об'єкта можна уточнювати за допомогою імені його власника (owner-name) в такій формі: moshkow.table1
Нижче наводяться приклади використання всіх операторів опису даних. Повний же їх синтаксис можна знайти в "Короткому довіднику по 4GL", або в "Довідковому посібнику з INFORMIX-4GL".

Створення бази даних.


У будь-який момент часу ви можете мати доступ до об'єктами тільки однієї - ПОТОЧНОГО (CURRENT) - бази даних. Оператор DATABASE робить нову базу поточної, закриваючи при цьому доступ до об'єктів попередньої поточної бази. Оператор CLOSE DATABASE просто закриває поточну базу даних.


Створюються таблиці kadry і ceh, що містять стовпці різних типів.


У вже існуючої таблиці ми можемо поміняти тип стовпця, додати новий, знищити старий.


Зміна структури таблиці призводить до фізичного перетворення даних в ній. Якщо змінений тип стовпця, то дані в ньому перетворюються до нового типу, і якщо це неможливо здійснити, то оператор ALTER "валиться" з кодом помилки, а таблиця залишається в незмінному стані.
View - "псевдо" таблиця, базується на існуючих таблицях.


Поводиться точно так само, як справжня таблиця, тільки місце на диску під неї не відводяться, оскільки дані, що лежать в ній насправді зберігаються в таблиці, на якій це view базується.
Індекс - додаткова структура до стовпців таблиці, потрібен для прискорення пошуку значень в стовпці.


Ми можемо фізично впорядкувати таблицю відповідно до індексу. У кластерізованний таблиці SELECT працює швидше.


Імена стовпців в різних таблицях можуть збігатися. Якщо в будь-якому операторі SQL згадуються два стовпці з однаковими назвами, то їх потрібно уточнювати іменами таблиць, їх містять. Перед ім'ям будь-якого об'єкта можна (а іноді і необхідно) вказати ім'я його власника (owner-name) - вхідне ім'я користувача, який створив (CREATE) цей об'єкт.


Синонім для імені таблиці використовується для скорочення запису.


Тепер всюди можна (хоча і не обов'язково) замість імені petrow.sostoqnie_postow використовувати ім'я t1.
База даних може мати системний журнал транзакцій (logfile).


Якщо немає журналу транзакцій для всієї бази даних, то для окремих таблиць в базі з тією ж метою можна створити audit trail.


Природно, що будь-який створений в базі даних об'єкт можна знищити. Треба тільки пам'ятати, що оператори опису даних не відкочуються назад, а тому якщо ви знищили таблицю, або базу даних то знайте, що це назавжди.


Якщо ваш оператор намагається записати в блокований іншим користувачем рядок, то оператор "звалюється". Ви можете встановити для своєї програми режим "Чекати розблокування рядків".

У базі даних, яка не має системного журналу неможливе виконання транзакцій і відновлення до поточної контрольної точки.
Оскільки за все хороше доводиться платити, наявність системного журналу у бази даних викликає помітне зростання накладних витрат і уповільнення роботи запитів. До того ж при активній роботі з базою системний журнал швидко "розпухає". За ним потрібно стежити і періодично чистити.
Вказати базі новий системний журнал.


Відновлюють зруйновану (наприклад через збій обладнання) базу даних так:
У середовищі UNIX


Якщо під час транзакції програма "звалилася" то INFORMIX автоматично зробить відкатку.


В результаті зі списків будуть викреслені працівники 4-го цеху "Петров", "Іванов", "Сидоров" і т.п Як бачимо, INFORMIX надає націоналістично стурбованим керівникам потужні засоби для втілення в життя своїх ідей.
А цей оператор знищить ВСЕ рядки в таблиці kadry, власником якої є moshkow, але не саму таблицю

Найпростіша форма оператора SELECT.


Третій приклад вибирає прізвища працівників з таблиці кадри, а назви цехів, в яких вони працюють, з таблиці ceh.


Якщо ми хочемо, щоб при вставлянні рядки в стовпець типу SERIAL автоматично заносилося чергове значення лічильника, потрібно вставляти в цей стовпець константу 0. Якщо не в усі стовпці вставляється рядки вноситься значення (як це зроблено в третьому операторі), то незаповнені стовпці заповнюються значенням NULL .


У таблиці ceh в цехах номер 3,4,5 а так само в токарному і ливарному перші чотири символи в коді цеху будуть замінені на подстроку поля nameceh з тієї ж рядки.

Пропозиція WHERE може бути присутнім в будь-якому з операторів DELETE, UPDATE, SELECT, коли потрібно задати умови на рядки, які потрібно обробити (відповідно, знищити, змінити або вибрати). Розглянемо структуру та приклади використання пропозицій WHERE.
У реченні WHERE пишеться логічне умова, яке виходить з'єднанням за допомогою логічних операторів AND, OR і NOT елементарних порівнянь типу:


а так же елементарних порівнянь спеціального виду:


Можна з'ясувати, чи підходить символьний рядок під певний шаблон, чи ні. Для цього використовуються дві операції порівняння за шаблоном - LIKE і MATCHES.


LIKE має більш простий шаблон. У ньому використовуються тільки два спецсимволи: (%) заміщає будь-яку кількість символів, (_) заміщає рівно один символ. Всі інші символи в шаблоні позначають самі себе. Якщо ми хочемо включити в шаблон% або _ скасувавши їх спеціальний сенс, то перед ними треба поставити ESC-символ (за замовчуванням це (\)).
Припустимо нам потрібно вибрати з таблиці tab8 всі рядки, в яких символьний стовпець string1 містить символ "+" а передостання буква в ньому - "И". Оператор вибірки буде виглядати так:


MATCHES використовує такі спецсимволи шаблону: *. [,], ^, -.


Якщо ви хочете скористатися спецсимволами як звичайними, застосуєте escape-char. Якщо escape-char = "", то \? позначає просто символ. \ * Позначає просто символ *, \\ позначає просто символ \. Зате знак лапки ( ") всередині шаблону потрібно позначати двома лапками (" ").
Вибрати всі дані про замовників в назві компанії яких друга буква не лежить в інтервалі від G до L, а третя буква c. (До речі, коди російських букв на Бест йдуть підряд, але на відміну від латинських букв, росіяни не впорядковані за алфавітом.)


Вибрати всі дані про замовників в назві компанії яких присутній знак питання.


В даному прикладі використовувався ESC-символ "Я" для скасування спецсмисла символу "?".


то застосовуйте умови з підзапитом.


Тут підзапит повертає єдине значення - максимальне значення зарплати. А зовнішній SELECT оператор знаходить прізвища володарів оной.


Тут запит виводить дані про керівників, які отримали фінансування і працюють на Уралі.


Цей запит (використовуючи пов'язаний підзапит) виводить список всіх виробів, чия загальна ціна не менше ніж в два рази перевершує мінімальну ціну виробів перерахованих в цьому ж ордері.
Ви можете поєднувати будь-яку кількість вищеперелічених умов разом, використовуючи логічні оператори NOT, AND, OR.

Оператор UNLOAD скидає дані з таблиці в файл в друкованому поданні. Кожен рядок перетвориться в окрему запис, значення з стовпців поділяються символом "|".
Після виконання оператора


в файлі kadry19.unl можна буде знайти наступне:

Пропозиції INTO, INTO TEMP, FROM.


Вибирати можна з декількох таблиць. При цьому беруться всі можливі комбінації рядків з першої таблиці з другої. Припустимо, що таблиці tab1 6 рядків а в tab2 - 7 рядків. Результат нижченаведеного прикладу - таблиця, яка містить три стовпці і 7 * 6 = 42 рядки.


Ми зараз не будемо уточнювати, куди саме результуюча таблиця поміщається. Але використовувати її можна по різному: її можна перегнати (INTO TEMP) в тимчасову таблицю, її можна віддати на обробку іншого оператора (якщо вибірку здійснював підзапит), для неї можна створити курсор ( "буфер" з покажчиком на поточний рядок), а можна покласти її (INTO) в просту програмну змінну (якщо обрано не більше одного рядка).
Вибрані рядки можна впорядкувати по зростанню (зменшенням) значення в стовпці (стовпцях)


У ORDER BY пропозиції замість імені стовпця можна вказувати його порядковий номер у списку вибірки (select-list). Вищенаведені оператори еквівалентні.
Помістити значення з стовпців в змінні: (Оскільки lname використовується і як ім'я змінної, і як ім'я стовпця, то ім'я стовпця передує знаком (@)

До обраним рядках можна застосовувати агрегатні функції COUNT (*) - кількість, MAX (column) і MIN (column) - максимальне і мінімальне значення в стовпці, SUM (column) - сума всіх значень в стовпці, AVG (column) - середнє значення в стовпці.
Помістити в змінну num кількість рядків в таблиці orders, в яких стовпець customer_num дорівнює 101:


Приклад з використанням з'єднання таблиць. Знаходиться середнє значення зарплати перевищує 300 (стовпець zarplata належить одній з таблиць), за умови збігу стовпців dolvnost в двох таблицях.


Отримати кількість працюючих і їх середню зарплату по кожній посаді з штатного розкладу.


Еквівалентна запис.
Пропозиція HAVING накладає додаткові умови на групу.


Цей запит повертає номера ордерів і середнє значення total_price в заявках для всіх ордерів, що мають не менше двох заявок.

Зовнішнє з'єднання таблиць.


Запит знаходить назви компаній і номера ордерів, які вони послали. Якщо ж компанія ордерів не присилає, то її назва все одно буде вибрано, а номер ордера в цьому рядку буде дорівнює NULL. (А якщо б ми запустили запит без параметра OUTER, то назви цих компаній взагалі б не потрапили у вибірку.)

Оператори маніпуляції даними - найпотужніша складова SQL.
Наступний приклад ліквідує однакові рядки в таблиці kadry.


Наступний приклад змінює інформацію в рядках за значенням ключа:


Ту ж саму операцію можна виконати за допомогою одного оператора UPDATE, що використовує підзапит:


Приклад змінює інформацію в рядках за значенням ключа при виконанні умов. накладених на змінювані рядки:

Схожі статті