Page 143 - 4636
P. 143
4 Рядкові підзапити
Всі розглянуті досі підзапити повертали єдине значення, яке в більшості випадків дорівнює
true або false (як в попередньому прикладі, що використовує EXISTS). Рядкові підзапити
повертають цілий рядок, який може порівнюватися з цілим рядком у зовнішньому запиті.
Зазвичай такий підхід використовуєть для пошуку рядків таблиці, які також існують в іншій
таблиці. База даних books не дозволяє привести хороший приклад, тому ми просто приведемо
узагальнений приклад згаданого синтаксису:
select cl, с2, сЗ
from tl
where (cl, c2, сЗ) in (select cl, c2, c3 from t2);
5 Використання підзапиту як тимчасової таблиці
Підзапит можна використовувати в конструкції FROM зовнішнього запиту. Цей підхід дає
можливість виконувати запит до вихідних даних підзапиту, розглядаючи їх як тимчасову
таблицю.
Нижче наведено простий приклад:
select * from(select customerid, name from customers where
city='r. Сонячний')
as box_hill_customers;
Зверніть увагу, що ми помістили під запит в конструкцію FROM. Безпосередньо після
закриваючої дужки під запиту результату потрібно присвоїти якийсь псевдонім. Після цього у
зовнішньому запиті з псевдонімом можна працювати як з будь-якою іншою таблицею.
7.9 Оновлення записів в базі даних
Крім того, що дані необхідно витягувати з бази даних, дуже часто їх потрібно змінювати.
Наприклад, іноді потрібно підвищити ціни на книги в базі даних. Це можна зробити за
допомогою оператора UPDATE.
Типова форма цього оператора виглядає таким чином:
UPDATE [LOW_PRIORITY] [IGNORE] ім'я_таблиціSET
стовпець1=вираження1, стовпець2=вираження2, ...[WHERE умова][ORDER ВУ
критерій_сортування][LIMIT кількість]
Основна ідея полягає в оновленні таблиці з ім'ям ім'я_таблиці шляхом занесення в кожен
зазначений стовпець відповідного виразу. Дію оператора UPDATE можна обмежити певними
рядками використовуючи конструкцію WHERE і обмеживши загальну кількість рядків, які будуть
оновлені, за допомогою конструкції LIMIT. Конструкція ORDERBY зазвичай використовується в
зв'язці з конструкцією LIMIT; наприклад, якщо необхідно оновити тільки перші 10 рядків, часто
потрібно спочатку розташувати рядки в певному порядку. Якщо вказані конструкції
LOWPRIORITY і IGNORE, то вони працюють так само, як і в операторі INSERT.
Розглянемо кілька прикладів.
Якщо потрібно підвищити ціну абсолютно всіх книг на 10%, можна скористатися
оператором UPDATE без конструкції WHERE:
update booksset price=price*l.1;
Якщо ж потрібно змінити один рядок, скажімо, адреса певного клієнта, можна чинити так:
update customersset address = ’78, пр. Знайки’where customerid = 4;
Зміна після створення таблиць
Крім оновлення рядків, може знадобитися змінити структуру таблиць у базі даних. Для
цього служить дуже гнучкий оператор ALTERTABLE.
Його основна форма така:
ALTERTABLE [IGNORE] имятаблицы зміна [, зміна ...]
140