русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Зміна існуючих даних


Дата добавления: 2015-07-09; просмотров: 484; Нарушение авторских прав


Набагато більше серйозним питанням є можливість зміни деяких або всіх значень в існуючому рядку таблиці, що реалізується за допомогою команди UPDATE.

Ця команда містить ключове слово UPDATE, де вказувався ім'я використовуваної таблиці, і пропозиція SET, що визначає внесена зміна для необхідного поля таблиці. Наприклад, щоб змінити оцінки всіх студентів на 5, необхідно використати команду:

UPDATE USP

SET OCENKA = 5;

Звичайно, набагато частіше доводиться вказувати не всі, а тільки певні рядки таблиці для зміни єдиного значення, і із цією метою разом з UPDATE можна використати предикати. Наприклад, змінити оцінки на 5 по предметі з кодом 2003, можна виконавши таку команду:

UPDATE USP

SET OCENKA = 5

WHERE PNUM = 2003;

За допомогою команди UPDATE можна модифікувати дані з декількох полів - пропозиція SET може призначати будь-яке число стовпців, відокремлюваних комами. Всі зазначені призначення можуть бути зроблені для будь-якого табличного рядка, але тільки для однієї в кожен момент часу. Припустимо, що викладач Викулина пішла на пенсію, і замість її заняття повинна вести викладач Федченко. Це можна реалізувати такою командою:

UPDATE TEACHERS

SET TFAM = 'Федченко ', TNAME = 'Світлана'

TOTCH = 'Геннадіївна', TDATE = 01/09/1999

WHERE TNUM = 4001;

Ця команда передасть новому викладачеві Федченко всі поточні навчальні предмети з таблиці PREDMET - у нашому прикладі це буде фізика. Однак майте на увазі, що модифікувати відразу багато таблиць в одній команді UPDATE не можна, а отже, не можна й використати назву (префікс) таблиці з ім'ям поля для цієї команди. Т.е., наприклад, пропозиція SET TEACHERS. TFAM = 'Федченко' викличе помилку.

У пропозиції SET команди UPDATE можна використати вираження, розташовуючи їх у списку для того поля, яких необхідно змінити (нагадаємо, що в пропозиції VALUES команди INSERT вираження використати не можна). Наприклад, для того, щоб збільшити стипендію в 2 рази, можна використати наступну конструкцію:



UPDATE STUDENTS

SET STIP = STIP*2;

При цьому щораз, коли команда посилається до зазначеного значення поля в пропозиції SET, дія виробляється, зрозуміло, над ще не модифікованими даними поточного запису.

Крім того, можна використати більше складні предикати вибору запису для модифікації. Наприклад, якщо необхідно подвоїти тільки стипендію розміром 25.50, то команда буде наступною:

UPDATE STUDENTS

SET STIP = STIP*2

WHERE STIP = 25.50;

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

До речі кажучи, команда UPDATE може працювати з NULL значеннями. Т.к. пропозиція SET не є предикатом, то можна вводити NULL значення так само, як уводяться звичайні дані. Так що, якщо необхідно змінити всі оцінки студентів по навчальному предметі з кодом 2003 на NULL, можна скористатися наступною командою:

UPDATE USP

SET OCENKA = NULL

WHERE PNUM = 2003;

Потужним засобом модифікації даних є використання подзапросов у команді модифікації UPDATE. Важливий принцип, якому треба дотримувати при роботі з командами модифікації й подзапросами, полягає в тому, що не можна в пропозиції FROM будь-якого подзапроса модифікувати таблицю, до якої посилається основна команда.

Зверніть увагу на наступний важливий момент - у команді модифікації UPDATE (до речі, так само, як й у команді INSERT) може виникнути проблематична ситуація, пов'язана з можливими дублікатами рядків, одержуваними в результаті вкладеного запиту. У цьому випадку, якщо в модифікує таблице, що, є обмеження, які змушують її значення бути унікальними, команда модифікації або вставки зазнає невдачі. Тому рекомендується яким-небудь образом з'ясувати те. Що ці значення могли минулого вже бути використані в таблиці, перш ніж намагатися вставити або модифікувати запис. Це можна реалізувати за допомогою додавання вкладеного подзапроса, що використає в предикаті оператори EXISTS, IN, < > або аналогічні.

З іншого боку, не варто забувати про заборону посилання у вкладених запитах до таблиці, що модифікується командою UPDATE. Із цієї причини запити й подзапросы в командах модифікації мають часом досить складну структуру. Крім того, усередині необов'язкового предиката цієї команди можна використати співвіднесені подзапросы, аналогічно тому, як це робиться для DELETE.

Наприклад, що випливає запит збільшує розмір стипендії в 2 рази студентам, у яких є оцінки, принаймні, по двох навчальних предметах:

UPDATE STUDENTS

SET STIP = STIP*2

WHERE 2 <=

(SELECT COUNT (SNUM)

FROM USP

WHERE STUDENTS.SNUM = USP.SNUM);

Тут внутрішній запит підраховує кількість записів у таблиці успішності для кожного студента, і, якщо воно 2 або більше, предикат основної функції стає щирим, а розмір стипендії модифікується.

Розглянемо ще один, досить складний, приклад зі співвіднесеним подзапросом. Тут будемо модифікувати розмір стипендії для студентів, що мають мінімальний бал у той або інший день:

UPDATE STUDENTS

SET STIP = STIP - 1

WHERE SNUM IN

(SELECT SNUM

FROM USP FIRST

WHERE OCENKA =

(SELECT MIN (OCENKA)

FROM USP SECOND

WHERE FIRST.UDATE = SECOND.UDATE));

Як уже говорилося, до істотного недоліку UPDATE варто віднести неможливість послатися на таблицю, задіяну в будь-якому подзапросе з команди модифікації. Наприклад, неможливо однією командою виконати така дія, як модифікація оцінок для студентів, у яких оцінки нижче середньої. Для виконання цієї дії спочатку прийде виконати пошук середньої оцінки

SELECT AVG (OCENKA)

FROM USP;

а потім результат цього запиту використати для модифікації

UPDATE USP

SET OCENKA = OCENKA - 1

WHERE OCENKA < 4.2

Таким чином, команда UPDATE, що управляє змістом запису, є однієї із ключових у язиці SQL. Вона застосовна як до всіх рядків таблиці, якщо не використається предикат, що визначає записи, що модифікують, так і до конкретних рядків при наявності предиката, що, у свою чергу, може мати досить складну структуру.

 

Розділ 4 Способи створення баз даних



<== предыдущая лекция | следующая лекция ==>
Видалення даних | Створення баз даних


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.747 сек.