Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Оператор корректировки данных UPDATE




Операторы обновления базы

Запрос с группировкой

Требуется для каждой поставляемой детали выдать номер этой детали и общий объем поставок. Запрос имеет вид:

SELECT НОМЕР_ДЕТАЛИ, SUM (КОЛИЧЕСТВО) FROM SP
GROUP BY НОМЕР_ДЕТАЛИ ORDER BY НОМЕР-ДЕТАЛИ;

Запрос с группировкой реализуется фразой GROUP BY. В рассматриваемом примере строки таблицы SP группируются таким образом, что в одной группе содержатся все строки для детали Р1, в другой–все строки для детали Р2 и т. д. Далее, к каждой группе перекомпонованной таблицы, а не к каждой строке исходной таблицы применяется фраза SELECT. Каждое выражение во фразе SELECT должно принимать единственное значение для группы, т. е. оно может быть либо самим полем, указанным во фразе GROUP BY, либо арифметическим выражением, включающим это поле, либо константой, либо такой функцией, как SUM, которая оперирует всеми значениями данного поля в группе и сводит эти значения к единственному значению.

Фраза GROUP BY не предполагает ORDER BY (упорядочить по). Чтобы гарантировать упорядочение результата этого примера по номерам деталей, следует специфицировать фразу ORDER BY НОМЕР-ДЕТАЛИ. Если поле, по значениям которого осуществляется группирование, содержит какие-либо неопределенные значения, то каждое из них порождает отдельную группу.

Пример. Выдать для каждой поставляемой детали ее номер и общий объем поставок, за исключением поставок поставщика S1.

SELECT НОМЕР_ДЕТАЛИ, SUM (КОЛИЧЕСТВО)
FROM SP WHERE НОМЕР_ПОСТАВЩИКАØ= 'S1'
GROUP BY НОМЕР_ДЕТАЛИ;

Строки, не удовлетворяющие фразе WHERE, исключаются до того, как будет осуществляться какое-либо группирование.

Пример. Выдать номера деталей для всех деталей, поставляемых более чем одним поставщиком (тот же пример, что и в 5.2.5).

SELECT НОМЕР_ДЕТАЛИ FROM SP GROUP BY НОМЕР_ДЕТАЛИ
HAVING COUNT (*)>1;

Фраза HAVING используется для того, чтобы исключать группы и она работает только на одном уровне. Невозможно разбить каждую из этих групп на группы более низкого уровня и т. д., а затем применить некоторую стандартную функцию, например SUM или AVG на каждом уровне группирования.

 

Оператор UPDATE имеет следующий общий формат:

UPDATE таблица SET поле = выражение [, поле = выражение]…

[WHERE условие];

Все записи в таблице, которые удовлетворяют условию, обновляются в соответствии с присваиваниями «поле = выражение» во фразе SET.

Пример изменения одной записи. Изменить цвет детали Р2 на желтый, увеличить ее вес на 5 и установить значение города «неизвестен» (NULL).

UPDATE P SET ЦВЕТ = 'Желтый', ВЕС = ВЕС + 5, ГОРОД = NULL
WHERE НОМЕР_ДЕТАЛИ = 'Р2';

Пример изменения группы записей.Удвоить состояние всех поставщиков, находящихся в Лондоне.
UPDATE S SET СОСТОЯНИЕ = 2*СОСТОЯНИЕ WHERE ГОРОД = 'Лондон';

Пример изменения с подзапросом.Установить объем поставок равным нулю для всех поставщиков из Лондона.

UPDATE SP SET КОЛИЧЕСТВО = 0 WHERE 'Лондон' =
(SELECT ГОРОД FROM S WHERE S.НОМЕР_ПОСТАВЩИКА =
SP.НОМЕР_ПОСТАВЩИКА);
Пример обновления нескольких таблиц. Изменить номер поставщика S2 на S9.

UPDATE S SET НОМЕР_ПОСТАВЩИКА = 'S9'

WHERE НОМЕР_ПОСТАВЩИКА = 'S2';

UPDATE SP SET НОМЕР_ПОСТАВЩИКА = 'S9'

WHERE НОМЕР_ПОСТАВЩИКА = 'S2';

В предложении UPDATE должна специфицироваться в точности одна таблица. Поэтому в данном примере мы сталкиваемся со следующей проблемой целостности: база данных становится противоречивой после выполнения первого предложения UPDATE – она включает теперь некоторые поставки, для которых не имеется соответствующей записи о поставщике, и остается в таком состоянии до тех пор, пока не будет выполнено второе предложение UPDATE. Изменение порядка предложений UPDATE, конечно, не решает эту проблему. Поэтому важно обеспечить выполнение обоих этих предложений, а не только одного.

 




Поделиться с друзьями:


Дата добавления: 2014-12-10; Просмотров: 443; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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