metBD (1084482), страница 39

Файл №1084482 metBD (Учебное пособие) 39 страницаmetBD (1084482) страница 392018-01-12СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 39)

Упражнения

Как и в предыдущей части, все следующие упражнения основаны на базе данных поставщиков-деталей-изделий. В каждом из них требуется записать предложение SELECT для указанного запроса, за исключением упражне­ний 15—18 и 26. Для удобства повторим здесь структуру рассматриваемой базы данных:

S (НОМЕР_ПОСТАВЩИКА, ФАМИЛИЯ, СОСТОЯНИЕ, ГОРОД)

P (НОМЕР_ДЕТАЛИ, НАЗВАНИЕ, ЦВЕТ, ВЕС, ГОРОД)

J (НОМЕР_ИЗДЕЛИЯ, НАЗВАНИЕ, ГОРОД)

SPJ (НОМЕР_ПОСТАВЩИКА, НОМЕР_ДЕТАЛИ, НОМЕР_ИЗДЕЛИЯ,

КОЛИЧЕСТВО)

В каждом разделе упражнения упорядочены приблизительно в порядке возра­стания их сложности. Необходимо попытаться выполнить, по крайней мере, некоторые из легких упражнений в каждой группе. Упражнения 12—18 являются весьма трудными.

Подзапросы

    1. Выдать названия изделий, для которых поставляются детали поставщиком S1.

    2. Выдать цвета деталей, поставляемых поставщиком S1.

    3. Выдать номера деталей, поставляемых для какого-либо изделия в Лондоне.

    4. Выдать номера изделий, использующих, по крайней мере, одну деталь, поста­вляемую поставщиком S1.

    5. Выдать номера поставщиков, поставляющих, по крайней мере, одну деталь, поставляемую, по крайней мере, одним поставщиком, который поставляет, по крайней мере, одну красную деталь.

    6. Выдать номера поставщиков, имеющих состояние меньшее, чем у постав­щика S1.

    7. Выдать номера поставщиков, поставляющих детали для какого-либо изделия с деталью Р1 в количестве, большем, чем средний объем поставок детали Р1 для этого изделия. Примечание. В этом упражнении нужно использовать стан­дартную функцию AVG.

Квантор EXISTS

    1. Повторите упражнение 3.3 и используйте в Вашем решении EXISTS.

    2. Повторите упражнение 3.4 и используйте в Вашем решении EXISTS.

    3. Выдать номера изделий, для которых не поставляет какой-либо красной детали поставщик из Лондона.

    4. Выдать номера изделий, для которых детали полностью поставляет постав­щик S1.

    5. Выдать номера деталей, поставляемых для всех изделий в Лондон.

    6. Выдать номера поставщиков, поставляющих одну и ту же деталь для всех изделий.

    7. Выдать номера изделий, для которых поставляются, по крайней мере, все детали, имеющиеся у поставщика S1.

Для следующих четырех упражнений (15—18) преобразуйте приведенное предложение SELECT языка SQL обратно в его эквивалент на естественном языке.

    1. SELECT DISTINCT НОМЕР_ИЗДЕЛИЯ

FROM SPJ SPJX

WHERE NOT EXISTS

(SELECT *

FROM SPJ SPJY

WHERE SPJY.НОМЕР_ИЗДЕЛИЯ = SPJX.НОМЕР_ИЗДЕЛИЯ

AND NOT EXISTS

(SELECT *

FROM SPJ SPJZ

WHERE SPJZ.НОМЕР_ДЕТАЛИ =

SPJY.НОМЕР_ДЕТАЛИ

AND SPJZ.НОМЕР_ПОСТАВЩИКА =S1’));

    1. SELECT DISTINCT НОМЕР_ИЗДЕЛИЯ

FROM SPJ SPJX

WHERE NOT EXISTS

(SELECT *

FROM SPJ SPJY

WHERE EXISTS

(SELECT *

FROM SPJ SPJA

WHERE SPJA.НОМЕР_ПОСТАВЩИКА = ’S1’

AND SPJA.НОМЕР_ДЕТАЛИ =

SPJY.НОМЕР_ДЕТАЛИ)

AND NOT EXISTS

(SELECT *

FROM SPJ SPJB

WHERE SPJB.НОМЕР_ПОСТАВЩИКА = ’S1

AND SPJB.НОМЕР_ДETAЛИ =

SPJY.НОМЕР_ДЕТАЛИ

AND SPJB.НОМЕР_ИЗДEЛИЯ =

SPJX.НОМЕР_ИЗДЕЛИЯ));

    1. SELECT DISTINCT НОМЕР_ИЗДЕЛИЯ

FROM SPJ SPJX

WHERE NOT EXISTS

(SELECT *

FROM SPJ SPJY

WHERE EXISTS

(SELECT *

FROM SPJ SPJA

WHERE SPJA.НОМЕР_ДЕТАЛИ =

SPJY.НОМЕР_ДЕТАЛИ

AND SPJA.НОМЕР_ИЗДЕЛИЯ =

SPJX.НОМЕР_ИЗДЕЛИЯ)

AND NOT EXISTS

(SELECT *

FROM SPJ SPJB

WHERE SPJB.НОМЕР_ПОСТАВЩИКА = ’S1’

AND SPJB.НОМЕР_ДЕТАЛИ =

SPJY.НОМЕР_ДЕТАЛИ

AND SPJB.НОМЕР_ИЗДЕЛИЯ =

SPJX.НОМЕР_ИЗДЕЛИЯ));

    1. SELECT DISTINCT НОМЕР_ИЗДЕЛИЯ

FROM SPJ SPJX

WHERE NOT EXISTS

(SELECT *

FROM SPJ SPJY

WHERE EXISTS

(SELECT *

FROM SPJ SPJA

WHERE SPJA.НОМЕР_ПОСТАВЩИКА =

SPJY.НОМЕР_ПОСТАВЩИКА

AND SPJA.НОМЕР_ДЕТАЛИ IN

(SELECT НОМЕР_ДЕТАЛИ

FROM P

WHERE ЦВЕТ = ’Красный’)

AND NOT EXISTS

(SELECT *

FROM SPJ SPJB

WHERE SPJB.НОМЕР_ПОСТАВ­ЩИКА =

SPJY.НОМЕР_ПОСТАВЩИКА

AND SPJB.НОМЕР_ИЗДЕ­ЛИЯ =

SPJX.НОМЕР_ИЗДЕЛИЯ)));

Стандартные функции

    1. Выдать общее число изделий, для которых поставляет детали поставщик S1.

    2. Выдать общее количество деталей Р1, поставляемых поставщиком S1.

    3. Для каждой поставляемой для некоторого изделия детали выдать ее номер, номер изделия и соответствующее общее количество деталей.

    4. Выдать номера изделий, для которых город является первым в алфавитном списке таких городов.

    5. Выдать номера изделий, для которых средний объем поставки деталей Р1 больше наибольшего объема поставки любой детали для изделия J1.

    6. Выдать номера поставщиков, поставляющих деталь Р1 для какого-либо изделия в количестве, большем среднего объема поставок детали Р1 для этого изделия.

Объединение

    1. Постройте упорядоченный список всех городов, в которых размещаются, по крайней мере, один поставщик, деталь или изделие.

    2. Приведите результат следующего предложения SELECT:

SELECT Р.ЦВЕТ

FROM Р

UNION

SELECT P.ЦВЕТ

FROM Р;

8.4 Операции обновления

Введение

В двух последних частях весьма подробно было рассмотрено предложение выборки данных SELECT языка SQL. Обратим те­перь наше внимание на предложения обновления данных UPDATE (обновить), DELETE (удалить) и INSERT (вставить).

Как и предложение SELECT, три предложения обновления данных оперируют не только базовыми таблицами, но и представ­лениями. Однако не все представления являются обновляе­мыми. Если пользователь попытается выполнять операцию обнов­ления над необновляемым представлением, система просто отвергнет эту операцию с соответствующим сообщением для пользователя. Предположим, следовательно, для целей данной части, что все таблицы, которые будут обновляться, являются ба­зовыми таблицами.

В следующих трех разделах подробно обсуждаются три опе­рации обновления. Синтаксис этих операций следует тому же общему образцу, который был уже показан для операции SELECT. Для удобства в начале соответствующих разделов приводится в общих чертах синтаксис обсуждаемых предложений языка SQL.

Предложение update

Предложение UPDATE имеет следующий общий формат:

UPDATE таблица

SET поле = выражение

[, поле = выражение]

[WHERE предикат];

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

Обновление единственной записи

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

UPDATE Р

SET ЦВЕТ = ’Желтый’, ВЕС = ВЕС + 5, ГОРОД = NULL

WHERE НОМЕР_ДЕТАЛИ = Р2’;

Для каждой записи, которая должна быть обновлена (т. е. для каждой записи, которая удовлетворяет предикату WHERE,. или для всех записей, если фраза WHERE опущена), ссылки во фразе SET на поля этой записи обозначают значения этих полей перед тем, как будет выполнено какое-либо присваивание в этой фразе SET.

Обновление множества записей

Удвоить состояние всех поставщиков, находящихся в Лондоне.

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, конечно, не решает эту проблему. Поэтому важно обеспечить вы­полнение обоих эти предложений, а не только одного.

Предложение delete

Предложение DELETE имеет следующий общий формат:

DELETE

FROM таблица [WHERE предикат];

Удаляются все записи в «таблице», которые удовлетворяют «предикату».

Удаление единственной записи

Удалить поставщика S1.

DELETE

FROM S

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

И снова, если таблица SP в настоящее время содержит ка­кие-либо поставки для поставщика S1, это удаление нарушит не­противоречивость базы данных.

Удаление множества записей

Удалить всех поставщиков из Лондона.

DELETE

FROM S

WHERE ГОРОД = Лондон;

Удаление множества записей

Удалить все поставки.

DELETE

FROM SP;

SP — все еще известная таблица, но она теперь пуста. Удалить все записи — это не уничтожить таблицу (операция DROP).

Удаление с подзапросом

Удалить все поставки для поставщиков из Лондона.

DELETE

FROM SP

WHERE Лондон’ =

(SELECT ГОРОД

FROM S

WHERE S.НОМЕР_ПОСТАВЩИКА =

SP.НОМЕР_ПОСТАВЩИКА);

Предложение insert

Предложение INSERT имеет следующий общий формат:

INSERT

INTO таблица [(поле [, поле] …)]

VALUES (константа [, константа] …);

или:

INSERT

INTO таблица [(поле [, поле] …)]

подзапрос;

Характеристики

Тип файла
Документ
Размер
1,9 Mb
Тип материала
Предмет
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6294
Авторов
на СтудИзбе
314
Средний доход
с одного платного файла
Обучение Подробнее