- •Модуль 1 Тема 1. Вступ до sql. Синтаксис sql. Типи даних.
- •1. Вступ до sql.
- •Функції sql:
- •Роль sql
- •Переваги sql:
- •Синтаксис sql.
- •Типи даних.
- •1.3.1. Команди
- •1.3.2. Імена
- •1.3.3. Типи даних
- •1.3.4. Константи
- •1.3.4.1. Числові константи
- •1 .3.4.2. Літерні рядки
- •1.3.4.3. Константи дати і часу
- •1.3.4.4. Іменовані константи
- •1.3.5. Вирази
- •1.3.6. Вбудовані функції
- •Тема 2. Створення баз даних
- •Мова визначення даних
- •2. Створення бази даних
- •Тема 3. Створення таблиць
- •1. Команда створення таблиці.
- •2. Заборона значення null за допомогою обмеження not null
- •Тема 4. Вставка стрічок з допомогою оператора insert. Вилучення стрічок з допомогою оператора delete, редагування стрічки з допомогою команди update.
- •Вставка рядків за допомогою команди insert.
- •Додавання рядка за допомогою положення стовпця
- •Додавання рядка за допомогою назв стовпців
- •Додавання рядків з однієї таблиці в іншу
- •Зміна рядків за допомогою команди update.
- •Зміна рядків
- •Видалення рядків за допомогою команди delete
- •Видалення рядків
- •Тема 5. Оператор select
- •Оператор select.
- •Обчислювальні стовпчики. Альтернативне ім’я стовпчику.
- •Порівняння значення стовпчика із константою
- •Правила виконання однотабличних запитів на вибірку
- •Тема 6. Комбінування умов з допомогою операторів and, or, not. Порівняння по шаблону. Порівняння з діапазоном. Сортування стрічок з допомогою речення order by.
- •Порівняння значень виразів має наступну синтаксичну діаграму:
- •Тема 7. Створення псевдонімів. З’єднання таблиці із собою. Вибір даних з кількох таблиць
- •1. Створення псевдонімів.
- •2. З’єднання таблиці із собою.
- •3. Просте з’єднання таблиць (з’єднання за рівністю)
- •Запити з використанням відношення „головна – підлегла” таблиці (предок – нащадок)
- •3. Запити на вибірку до трьох і більше таблиць
- •4. Запити на об’єднання
- •Тема 8. Введення обмежень в базах даних
- •1. Види обмежень в базі даних.
- •Основні принципи роботи з обмеженнями
- •Присвоєння назви обмеженню
- •2. Первинний і унікальний ключі.
- •3. Зовнішні ключі.
- •4. Обмеження check
- •5. Вилучення обмежень.
- •Тема 9. Використання збережуваних процедур в базах даних. Використання генераторів ключів у базах даних в InterBase. Використання тригерів у базах даних.
- •1. Визначення збережуваної процедури.
- •1.2. Цикли й оператори розгалуження.
- •2. Створення генераторів.
- •2.1. Індекси.
- •2.2. Обробка виключень і помилок.
- •3. 1.Означення тригера.
- •3.2. Приклад тригера.
- •3.3. Контекстні змінні.
- •Тема 10. Безпека в базах даних
- •1. Користувач InterBase.
- •3. Організація користувачі у групи за допомогою ролей.
- •4. Права. Роздача прав.
- •5. Анулювання прав.
- •Модуль 2 Тема 11. Оператор exists. Сумування і групування даних.
- •1.1. Оператор exists.
- •1.2. Використання exists з співвіднесеними підзапитами.
- •1.3. Комбінація оператора exists і з’єднання.
- •1.4. Використання not exists.
- •1.5. Використання складних підзаписів з оператором exists.
- •2.1. Агрегатні (статистичні) функції
- •2.2. Правила опрацювання значення null агрегатними функціями:
- •2.3.Опрацювання унікальних записів агрегатними функціями
- •2.4. Агрегатні функції і значення null
- •3.1. Групування записів
- •3.2. Секція having – умова відбору груп
- •3.3. Обмеження на умову відбору груп
- •3.4. Значення null і умова відбору груп
- •3.5. Секція having без секції group by
- •Тема 12. З’єднання з базою даних. Використання збережуваних процедур в Delphi
- •1. З’єднання з сервером
- •2. Використання збережуваних процедур в Delphi.
- •Компонент tStoredProc.
- •Тема 13. Використання механізму транзакцій компонента Database. Керування транзакціями
- •Тема 14. Сервер баз даних InterBase і компоненти InterBase Express.
- •1. Сервер баз даних InterBase і компоненти InterBase Express
- •2. Механізм доступу до даних InterBase Express
- •3. Компонент tibDatabase.
- •Тема 15. Виконання запитів за допомогою компонента tibDataSet
- •1. Вибірка даних з таблиці.
- •2. Редагування даних за допомогою візуальних компонентів.
- •3. Програмне редагування даних.
- •Тема 16. Підпорядковані запити в таблицях Механізм master-detail
- •Література
-
Зміна рядків за допомогою команди update.
Команда UPDATE змінює значення в існуючих рядках таблиці. Ви можете використовувати цю команду, щоб змінювати:
• всі рядки в таблиці;
• окремі рядки в таблиці.
Щоб відновити рядки, потрібно вказати:
• яку таблицю змінювати;
• назви стовпців, які потрібно змінити, а також нові значення;
• умова пошуку з метою знаходження рядків для оновлення (опціонально).
Перерахуємо важливі параметри команди UPDATE:
• використовує речення WHERE, в якому вказується, які рядки потрібно змінити. Без речення WHERE команда UPDATE змінить всі рядки в таблиці;
• може бути небезпечна, тому що ви можете випадково пропустити речення WHERE (і змінити всі рядки) або неправильно вказати умову пошуку для WHERE (і змінити не ті рядки). Перед запуском команди UPDATE ми рекомендуємо запустити команду SELECT з тим ж реченням WHERE, але для оновлення рядків. Команда SELECT відобразить всі рядки, які будуть змінені СУБД при запуску команди UPDATE. Щоб відобразити тільки кількість цих рядків, користуйтеся командою SELECT COUNT (*);
• кожне змінене значення повинне бути того ж типу (або мати можливість для конвертації), що і інші дані в стовпці
• щоб зберегти посилальну цілісність, СУБД дозволяє вказати дію, яка буде виконуватися автоматично за допомогою команди UPDATE при зміні значення, на яке вказує повторний ключ;
• змінене значення не може відмінити обмеження, накладене на стовпець;
• жоден вираз не повинен приводити до арифметичної помилки (наприклад, переповнюванню або ділення на нуль);
• пригадайте, що порядок рядків в таблиці не має значення і що ви не можете управляти розташуванням рядків, тому нові рядки можуть з'явитися в будь-якому місці таблиці
Зміна рядків
Введіть:
UPDATE table
SET column= expr
[WHERE search condition];
table - це назва таблиці, яку ви будете обновляти; column - назва стовпця. (з даними для зміни) в table; expr- буквене позначення, вираз або запит, який прочитує одне значення. Значення, лічене expr, замінить існуюче значення в со1итп. Щоб змінити значення в декількох стовпцях, введіть в пункті SET список виразів (column = expr), розділених комами. Ви можете задавати список полів для оновлення у будь-якому порядку.
Умову Search condition задають умови які повинні дотримуватися для змінних рядків. Цими умовами можуть бути умови WHERE (оператори порівняння, LIKE, BETWEEN, IN і IS NULL, див. розділ 4) або умови запиту (оператори порівняння, IN, ALL, ANY і EXISTS, див. розділ 8) в комбінації з AND, OR і NOT. Якщо ви опустите речення WHERE, будуть змінені всі рядки в таблиці.
Лістинг 4.8. Замініть значення contract нулем у всіх рядках titles.
UPDATE titles
SET contract =0;
Лістинг 4.9. Подвоїти ціну на книги по історії.
UPDATE titles
SET price = price * 2.0
WHERE type = 'history';
Лістинг 4.10. Змінити стовпці type і pages для книг по психології.
UPDATE titles
SET type = 'self help',
pages = NULL
WHERE type = 'рsychology';
Лістинг 4.11. Зменшити в двічі продажі книг, які знаходяться на середньому рівні.
UPDATE titles
SET sales = sales * 0.5
WHERE sales > (SELECT AVG(sales)
FROM titles);
Лістинг 4.8 замінює значення contract нулем. Відсутність речення WHERE повідомляє СУБД, що слід змінити значення в стовпці contract у всіх рядках. Команда в лістингу 4.8 змінює 13 рядків.
Лістинг 4.9 використовує арифметичний вираз і умову WHERE, щоб подвоїти ціну на книги по історії. Команда, представлена в цьому лістингу, змінює три рядки.
Лістинг 4.10 змінює стовпці type і pages для книг по психології. Ви використовуєте тільки одне речення SET, що б змінити декілька стовпців, розділивши вирази column = expr комами (не слід ставити кому в кінці останнього виразу). Команда з лістинга 4.10 змінює три рядки.
Лістинг 4.11 використовує підзапит і функцію, щоб зменшити в двічі продажі книг, які продаються краще, ніж всі книги в цілому. Команда, представлена в цьому лістингу, змінює дні рядка.
Ви можете змінити значення в таблиці на підставі значень з іншої таблиці. Лістинг 9.12 використовує підзапити щоб змінити дату публікації КНИГ, які написала Sarah Buchmann. Команда з лістинга 4.11 змінює три рядки.
Припустимо, що видавництво Abatis Publishers (P01) купило видавництво Теnterhooks Press (P04). Тепер всі книги останнього випускаються в Abatis Publishers. Лістинг 4.13 міняє інформацію про видавництво в titles з Р04 на Р01. Запит в реченні WHERE прочитує pub_id для видавництва Tenterhooks Press. СУБД використовує pub_id, щоб зчитати з таблиці titles всі книги, які випускаються видавництвом Tenterhooks Press. Потім СУБД за допомогою значення, зчитаного запитом в реченні SET, змінює відповідні рядки в таблиці titles. Оскільки запити використовуються з незмінним оператором порівняння, вони повинні бути скалярними запитами і зчитувати єдині значення (тобто результат одного рядка або стовпця
СУБД буде розраховувати вирази в реченні SET або WHERE з використанням значень, які знаходилися в стовпцях до початку змін. Розглянемо команду UPDATE:
UPDATE mytable
SET col1 = col1 * 2,
col2 = coll * 4,
col3 = col2 * 8 ,
WHERE col1 = 1
AND Cоl2 = 2;
СУБД задає col1 рівним 2, col2 - рівним 4 (1х4, а не 2х4), col3 - рівним 16 (2х8, а не 4х8).
Лістинг 4.12. Замінити дату публікації для всіх книг, які написала Сара Бухманн, на 1 січня 2003 року.
UPDATE titles
SET pubdate = DATE '2003-01-01'
WHERE title id IN
(SELECT title id
FROM title authors
WHERE au id IN
(SELECT au id
FROM authors
WHERE au fname = 'Sarah'
AND au lname = 'Buchman'));
Лістинг 4.13. Приписати всі книги, випущені видавництвом Tenterhooks Press, видавництву Abatis Publishers.
UPDATE titles
SET pub id =
(SELECT pub id
FROM publishers
WHERE pub name = 'Abatis Publishers')
WHERE pub id =
(SELECT pub id
FROM publishers
WHERE pub name = 'Tenterhooks Press');
Якщо ви бажаєте бути особливо уважними при зміні рядків, можете перевірити команду UPDATE за допомогою тимчасової копії таблиці.
Ви також можете змінювати рядки за допомогою представлень.
Якщо ви застосовуєте транзакції, скористайтеся командою COMMIT після команди UPDATE, щоб зробити зміни постійними.