Главная » Просмотр файлов » Программирование баз данных MS SQL Server

Программирование баз данных MS SQL Server (1084479), страница 35

Файл №1084479 Программирование баз данных MS SQL Server (Программирование баз данных MS SQL Server) 35 страницаПрограммирование баз данных MS SQL Server (1084479) страница 352018-01-12СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

При этом с самого начала (заблаговременно) будем вводить псевдонимы, поскольку желательно, чтобы псевдонимами были обозначены все таблицы в окончательном варианте запроса: ЯЕЬЕСТ н.Чепоогкате ГЕОМ Чепоога и Выполнение этого запроса приводит к получению всего лишь трех строк: Чепоогкаве Поп'а РаСаЬаае Пеагдп япор пане'а Раса Тпе ЯСЬ Яецие1 (3 гое(а) ассесСео) В состав данных результатов входят имена всех поставщиков, информация о которых имеется к этому времени в базе данных.

Теперь получим также информацию об адресах поставщиков. Но при этом возникают две проблемы. Прежде всего необходимо, чтобы запрос возвращал данные всех поставщиков, независимо от того, есть ли о них еще какая-либо информация, поэтому необходимо воспользоваться внешним соединением. Далее, поставщик может иметь больше одного адреса, а по одному адресу могут находиться несколько поставщиков, поэтому в проекте базы данных Соединения 143 было предусмотрено использование связующей таблицы. Это означает, что отсутствуют какие-либо столбцы, позволяющие непосредственно связывать таблицы Чепбогв и Аббгевв; вместо этого необходимо предусмотреть соединение обеих этих таблиц со связующей таблицей, называемой ЧепбогАббгевв.

Начнем с той части соединения, которая по праву должна считаться первой: БЕЬЕСТ ч.Чепаогнате ЕБОМ Чепбогв ч ЬЕЕТ ООТЕА ООТМ Чепбоглпбгевв ОМ ч.Чепбог10 = ча.Чепбог1О Безусловно, в самой таблице Чепбоглббгевв информация об адресах отсутствует, поэтому в список выборки не включены какие-либо столбцы из этой таблицы. Единственное практическое назначение таблицы Чепбогдббгевв состоит в том, что она должна быть соединительной точкой связи "многие ко многим" (любой поставщик может иметь много адресов, а также, как уже было сказано, по одному и тому же адресу могут находиться несколько поставщиков).

Как и можно было предположить, выполнение этого оператора приводит к получению тех же результатов, как и перед этим: Чепбогнате Ооп'в ОасаЬаве Оевзчп БЬор паче'в пасв ТЬе БЯЬ БеЧпе1 (3 гав(в) а11ессеб) На время отвлечемся от данного конкретного запроса, чтобы ознакомиться с той таблицей, с которой было только что сформировано соединение. Попытаемся выполнить выборку всех данных из таблицы чепбогАббгевв: БЕЬЕСТ * ГРОМ ЧепбогАббгевв В результате выполнения этого запроса происходит возврат только двух записей: Чепбог1О Аббгевв10 (2 гоч(в) аггесгеб) Таким образом, подтверждается, что приведенный выше оператор внешнего соединения был выполнен успешно.

А поскольку в таблице ЧепбогАббгевв имеются только две строки, тогда как происходит возврат информации о трех поставщиках, то можно сделать вывод, что выполняется возврат из таблицы чепс)огв по крайней мере одной строки, не имеющей согласующейся с ней строки в таблице ЧепбогАббгевв. Продолжая рассматривать данный пример, просто убедимся в этом, введя на время еще один столбец в запрос, касающийся поставщиков: БЕЬЕСТ н.Чепбогнаее, ча.Чепбогго ГЕОМ Чепбогв ч БЕРТ ООТЕЕ 301М ЧепбогАббгевв ча ОИ ч.Чепбог1О = ча.ЧепбогХР 144 Глава 4 В соответствии с ожиданиями обнаруживается, что в столбце Чепйог10 из таблицы ЧепбогАбйгезз имеется МЛЛ;значение: Чепйогнаее Чепбог1О Ооп'з Оасаьаве Оезгзп Бпор 1 паче'з Овса 2 ТЪе БОЬ Беопе1 МОЬЬ (3 гон(в) агГессеб) Если бы использовалось внутреннее соединение или правое внешнее соединение, то имя поставщика "Тпе БОЬ Бес(пе1" не было бы возвращено. Возврат данных обо всех поставщиках в результатах запроса был гарантирован благодаря использованию левого внешнего соединения.

Теперь, убедившись в правильности выбранного подхода, возвратимся к первоначальному запросу и введем второе ключевое слово 301М для получения фактической информации об адресе. На данный момент мы можем не задумываться над тем, получены ли все адреса, поэтому не требуется какая-либо специальная версия оператора соединения; по крайней мере, на первый взгляд не складывается впечатление, что в этом есть необходимость... БЕЬЕСТ т.чепдогнате, а.лййгевв ЕЕОМ Чепбогз т ЬЕЕТ ООТЕЕ БО1М ЧепбогАббгевв ча ОН ч.чепйог1О = ча.чепбог1О ЮО1Н Аббгевз а ОИ ча.лббгевз1О = а.Аббгевз1О Как и предполагалось, информация об адресах получена, но возникла определенная проблема: Чепйогнате Аббгевв Ооп'в Оасаьаве Оевьчп БЪор паче'з Оага 1234 Апуепеге 567 Ма'и БГ.

(2 гон(в) аггессей) Дело в том, что была каким-то образом потеряна информация об одном из поставщиков. Причина этого состоит в том, что СУБД Я~Ь Яегчег выполняет конструкции, из которых состоит запрос, в том порядке, в каком они заданы. Вначале было задано ключевое слово ООТЕК 301М между именами таблиц Чепбогв и Чепбоглббгевв. СУБД зЯЬ Вегчег выполнила то, что требовалось в этой части запроса, — возвратила информацию обо всех поставщиках. А проблема возникла в связи с применением следующей части оператора.

Мы получили результирующий набор, включающий информацию обо всех поставщиках, а затем использовали его как одну из частей (левую), к которой применяется операция внутреннего соединения. Тем не менее операция 1ММЕК 301М действует на обе стороны соединения как исключающая все строки, не находящие взаимного соответствия, поэтому в окончательные результаты включаются только те строки из результирующего набора, полученные в первом соединении, которые согласуются со строками, образующими правую часть второго соединения.

А поскольку со строками таблицы Аббгевв согласуются только две строки промежу- Соединения 145 0 Предусмотреть использование еще одной операции внешнего соединения. С) Изменить последовательность выполнения внешнего и внутреннего соединений. Проверим оба эти способа. Вначале введем еще одно внешнее соединение: БЕЬЕСТ в.уепсогнаае, в.Асмгеяя РВОМ Чепоогя в ЬЕРт ОптЕВ ЗОТМ Чепсоглошгевв вя ОМ ч.уепоог1Р = чаЛепоог1Р ЬЕРт ОптЕВ АСТМ Асшгевя а ОМ чя.лоогеяя10 = а.Асмгевв10 Теперь действительно получены ожидаемые результаты: Чесс)огнапе Асс)гевв Ооп'я РвсяЬаяе Ревтдп БЬор Ояве'я Раса Тпе БОЬ Яецпе1 1234 Апувьеге 567 Мвтп БС. НОЬЬ (3 гов(в) атгессео) А на данном этапе внесем гораздо более значительные изменения, связанные с изменением порядка расположения внешнего и внутреннего соединений в первоначальном запросе: БЕЬЕСТ н.Чесс)огнаае, а.Асс)гевв РВОМ Чесс)оглсЫгввв оя 301М Аоогеяв в ОМ ов.Аоогеяв1О = в.лсщгеяв1О В1ОНТ ООТЕВ 301М Чепоогя в ОН вЛепеог10 = ва.Чесс)ог1О И этот вариант приводит к получению желаемого результата: Чепоогнаае Асшгезв Оог.'в ОасяЬявв Реять БЬор Раве'в Раса Тпе БОЬ Бецпе1 1234 Апувпеге 567 Мвтп БС.

МРЬЬ (3 гов(в) а11ессес)) Поскольку оказалось, что оба способа составления рассматриваемого запроса являются приемлемыми, возникает резонный вопрос: "Какой из них является наилучшим?" При использовании языка БЯ1. довольно часто обнаруживаются ситуации, в которых можно найти несколько разных способов выполнения одного и того же запроса, притом что ни один из них не имеет существенного преимущества над другими, но в данной ситуации дело обстоит иначе.

В рассматриваемом случае определенно следует порекомендовать использовать второе из возможных решений. точного результирующего набора, то в окончательном результирующем наборе при- сутствуют лишь две строки. Данную проблему можно устранить одним из двух опи- санных ниже способов. 146 Глава 4 Причина этого связана с тем, что второй способ позволяет максимально ускорить обработку данных.

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

Следует счце раз подчеркнуть, что ошибки тфи вьгборе последовательности выполнения операций соедингния встречаются слишком часом. Это — одна из тех области~, в копкфьгх знания„ приобретенные разработчиками, лишь вюпане кажутся доппаточ ными. Автоф снова и снова сталкивался с просьбами взглянуть на загфос, над копифым другие разфаботчики сфовели целые часы, гфоверяя каждъсй раздел, пфичеи в половине случаев приходилось слышать, не сталкивался ли я зфежде с подобной "гфофоммной ошибкой" в СУБД 50Б 5епуес.

7ем не менее в каждом из таких случ аев ошибка обзифуживалась не в СУБД 5~Е 5егоег, а в коде, соппавлен нам фафаботчиком. Автсф надеется, что изучение данного раздела пазвагяет поняпгь сгедуюгцеег если полученные Результаты не соответствуют ожиданиям, то необходимо пРежде всего п~ю верить, нет ли ошибок в въйфе посеедователъности узасположения операций соешснения. Просмотр содержимого таблиц, находящихся с обеих сторон от операции соединения, с помощью ~онстр~хции ГОЬЬ ЮОХБ Как и многие конструкции в языке ВЯЕ, конструкция Е0ЕЬ д01М (применяемая также в форме ЕЕЬЬ 00ТЕЕ 101И) по существу выполняет именно то действие, о котором говорит ее название, — эта конструкция согласует данные в таблицах, имена которых находятся по обе стороны от ключевого слова д011г, и вводит в окончательные результаты все строки, независимо от того, с какой стороны соединения они определены.

Конструкции Е0ЕЬ д01М относятся к числу тех языковых средств, которые вызывают восхищение во время их изучения, но в дальнейшем почти не применяются. Чаще можно встретить поистине честного политического деятеля, чем используемую на практике конструкцию Е0ЕЕ д01М Основное назначение этой конструкции состоит в том, что она позволяет увидеть полную связь между данными в таком виде, в котором не дается преимущество ни левой, ни правой стороне. Эта конструкция Соединения 147 Выполнение операции полного соединения с помощью конструкции р()ьБ тот)4 Вначале еще раз рассмотрим последний запрос из раздела, посвященного внешним соединениям: ЯЕЬЕСТ ч.уепбогнаее, а.Аббгеяя ГНОМ Чепбоглббгеяя ча 301М Аббгеяя я ОН ча.лббгеяя1О = а.Аббгеяя1О К1ОНТ СОТЕН 301М Чепбогя ч ОН ч.уепбог1О = ча.чепбог1О Теперь наша задача состоит в том,чтобы последовательно дополнять отдельные части исходного оператора и вводить некоторые поля в список выборки, проверяя, что при этом происходит.

Вначале выполним соединение двух первых таблиц с использованием конструкции РОЬЬ 301ГН ЯЕЬЕСТ я.лббгеяя, ча.лббгеяя1О ГНОМ ЧепбогАббгеяв ча ЕОЬЬ 301Н Аббгеяя а ОИ чя.лббгеяя1О = а.лббгеяя1О Как оказалось, первый оператор ЕОЬЬ 301М, рассматриваемый в этом разделе, не позволяет получить больше информации, чем оператор 301М Н10НТ: Аббгеяя Аббгеяя1О 1234 Апуяьеге 557 Маьп ЯВ. 999 1я" ЯВ. 1212 Яеьсь Аче 364 веягяп 1 3 ХОЬЬ МОЬЬ ИОЬЬ (5 гоя(я) аббесвеб) применяется, если есть необходимость ознакомиться с каждой строкой всех таблиц, находящихся по обе стороны от ключевого слова 301М, без каких-либо исключений. По-видимому, если одно и то же соединение может быть применено и в форме левого, и в форме правого соединения, то лучше всего использовать полное соединение, имеющее форму конструкции РОЬЬ 301И.

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

Тип файла
PDF-файл
Размер
39,07 Mb
Тип материала
Предмет
Высшее учебное заведение

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

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