Программирование баз данных MS SQL Server (1084479), страница 19
Текст из файла (страница 19)
1НРОФ(ОТТО))): $СНЕМЛ(УХЕИБ) . Эти.слйцибдьнЫл. НутийсстулакСмвглдлнм)лм. 4слстймв былй)ПРОДУСмотйвнмьдлл 'гого,- чтобь( искл)садить'нвобходймссгь в ислсльвслании твк:явз1ывавммх:",сист<вмных таблиц', 82 Глава 3 Проверка работы введенного оператора вк1,кСт Проведем с использованием указанного оператора некоторые дополнительные действия. Измените текущую базу данных так, чтобы ею стала база данных Дс)чепспгеногхз. Напомним, что для этого достаточно выбрать элемент Аг1чепгпгеиогхэ из поля со списком, находящегося на панели инструментов в верхней части окна Опегу в программе Мапааегпепг Бгис))о (рис.
3.1). Рис. 3.1. Окно Дпегу юфограммы Мапаяетепг Япи1ю Если вы столкнетесь с затя)зуднениями п)ти поиске поля со списком, в котором перечислены розличнъте базы данных, попытайтесь один роз щелкнуть в окне Опету. Панели инсвт)тументов прогутолсмы 5~® Зетоет Мапаветепг Якого являются контекстнозависамъгми. Этпо означоетп, что их соде)тжимое изменяется с учетом тех действий, которые в текущий мо. мент выполняет пользователь. Если, напттимер, окно Опету не активили1товано, то может окозатпьсц что в нем подготовлен к работе фугой набф панеий инструментов (тот, кото уттлй в большей ппепени подходит для выполнения какой-то фугой задачи). Но как только окно Опегу станет активизи)тованным, оно должно переключиться на тот набор панелей инстутументов, котоРъгй являетсл более подходящим для утаботы с зап)зосоми.
Теперь, после того как выбрана база данных яочепгпгемогкз, приступим к просмотру некоторых реальных данных из этой базы данных. Введите следующий запрос: яеьест * еаом яа1еэ.созсопег Основные операторы языка Т-Въдз. 8З После того как этот запрос будет введен в окне (епегу, достаточно щелкнуть на кнопке Ехесц(е панели инструментов и понаблюдать за тем, как СУБД ЯОЕ Яегчег выдает требуемые результаты. Данный запрос выводит каждую строку данных со всеми столбцами из таблицы Яа1ея.
Спясоюег текущей базы данных (в данном случае Ас(оепгпгепог)(я). Если перед запуском на выполнение этого запроса вы не изменили ни одного параметра настройки в своей системе и не модифицировали сами данные в базе данных Ас(чепгпгехог)ся, то после щелчка на вкладке Меяяацея должны увидеть следующую информацию: (19185 гон(я) аГгесгей) В случае оператора ЯЕЬЕСТ показанное здесь число обозначает количество строк, возвращенных запросом. Описание полученных результатов Рассмотрим некоторые особенности оператора ЯЕЬЕСТ.
Прежде всего следует отметить, что автор вящелил ключевые слова ЯЕЕЕСТ и РВОМ прописными буквами. Но в СУБД ЯЯ. Яегчег такое требование не является обязательным; эти ключевые слова вполне можно ввести как Яеьесс и ТгОМ, после чего они будут действовать столь же успешно. Таким образом, обозначение операторов с помощью прописных букв используется исключительно для соблюдения определенного соглашения и обеспечения удобства чтения. Читатель сможет сам убедиться в том, что многие программисты, работающие на языке ЯО)., придерживаются соглашения о выделении прописными буквами всех команд и ключевых слов, а для ввода имен таблиц, столбцов и отличных от констант переменных применяют смешанный регистр букв. Разработчик может выбрать для себя такой стандарт или быть вынужденным применять другие стандарты, но следует всегда придерживаться одного важного правила — неизменно соблюдать одно и то же соглашение, касающееся использования прописных и строчных букв.
Автор снова хочгт впсочить на любимого конька — заняться критикой неиспфебимых недо. ппатков. Нет ничего более раздражаюгцего для и оппюрон него пользователя, копифый вынужден читать чужой код или запоминать придуманные другими имена таблиц, чем отсутспюиеединообрвзия. Если разрабатываемый код предназначен для чтения другими программистами или, что тце более важно, имена создаваемых спголбцов и таблиц должны использовать дРугие РазРаботчики, то от этих людей не должны тРебоватъся значительные усилия для понимания принятого соглаимния об именовании.
Важно, чтобы им бъсго достаточно воспслъзоватъся опытом работы с теми частями созданного приложениц с которыми они уже знакомы. Почти любая база данных, с которой приходилось работать авпифу хотя бы в определенной степени была лишена того достоинппеа, которого так легко достичь, — единообразия.
Покончите с зпит' тенденцим1 — соблюдайте требования к единообразию. Ввод оператора ЯЕЬЕСТ равносилен передаче программному обеспечению окна Опегу сообщения о том, что мы намереваемся сделать, а символ * указывает, какие данные нам требуются (напомним, что символ * эквивалентен указанию "все столбцы"). За этими обозначениями следует ключевое слово РВОМ. Конструкция РВОМ выполняет буквально то, что означает ключевое слово РВОМ (Из).
Иными словами, эта конструкция определяет место, из которого должны быть получены данные. Непосредственно за ключевым словом РВОМ должны следовать имена одной или нескольких таблиц. В рассматриваемом запросе все данные должны 84 Глава 3 Теперь попытаемся получить немного более конкретную информацию. Предположим, что нам требуется получить список всех заказчиков, указанных по фамилиям: ВВЬВСт Ьазгмапе ГНОМ Вегзоп.еопъасс Полученные результаты будут выглядеть примерно так: Аспопо АЬе1 АЬегсгопЬ1е Не Епепц Но Обратите внимание на то, что в целях сокращения строки, находящиеся в середине, удалены, поскольку данный запрос приводит к получению 19 972 строк.
В данном случае было решено получить список фамилий всех заказчиков, поэтому и была применена конструкция, предназначенная для выборки всех этих данных. Мноеиерафаботчики, использующие язык 54~А„стремятся создавать как можно бааее краткие затфосы и всегда тфедусматри вают выбтфку всех столбцов, используя жмвоа * в качестве ~фитафтая выбтфки.
Это — еще одна дурная тфи вычка, котафую нельзя усваив тъ. Безусловно, если ввести символ * вместо т7тебуачь х имен стаабцов, то не понадобится несколько Раз нажимать клавиши, но вместе с тем объем данных, поступающих из базы данных, становится больше, чем действительно требуетш. Кроме того, на СУБД 5® 5егоет возлагается допоанителъноя Работа, связанная с необходимостью уточнять количество столбцов, под7тазумеваеиых под символом *, а также отфеделятт, какими именно являются зти сокгтбцы.
Часто после пефехода от конкфетного указания стяоабцов к испвлъюванию симвааа * Рафаботчик с уйгвленым обнафуживаетть насколько снизилась пфоизводипгельность тфиложения и увеличился объем данных, передаваемых по сети. Коуточе говорзь следует всегда тфидефживотъся хофошего тфолиаа — осуществлять вътбтфху тоаько требуемой инфсфлтациц, т.е. той инфсфмации, котсфая дейсвюительно тфвбуетвся, — ни больше ни менъше.
Ниже приведен еще один простой запрос. Любопытно, к каким результатам он приведет. ВВЬВСт папе ГНОМ Вгодоссгоп.вгодосг И в этом случае подразумевается, что данные, предусмотренные в этой базе данных, используемой в качестве образца, не были модифицированы. В ответ СУБД 5О1.
Бегчег должна возвратить список из 504 различных товаров, информация о которых имеется в базе данных Асьтепгигеиогат папе АН7пзгаЬ1е Васе Веагапд Ва11 ВВ Ва11 Веагьпц Ноаг4-750 В1аса, 44 Роао-750 В1асх, 48 асад-750 В1аса, 52 Основные операторы языка Т-БЯТ. 85 Столбцы, заданные непосредственно после ключевого слова БЕЗВЕСТ, называются списком выборки. Короче говоря, список выборки состоит из столбцов, которые, согласно запросу, должны участвовать в формировании выходных данных. Конструкция инжвж Итак, мы сумели успешно разобраться еще в одном сложном вопросе.
Теперь перейдем к изучению конструкции ХНЕЕЕ, которая позволяет налагать условия, определяющие, какую именно информацию должен возвратить запрос. До сих пор не устанавливались какие-либо ограничения, касающиеся объема возвращаемой информации; иными словами, в условиях запроса подразумевалось, что в итоговые результаты должны быть включены все строки указанной таблицы. Подобные неограниченные запросы являются очень удобными для заполнения таких структур представления данных, как списки и поля со списками, а также в других сценариях организации работы, когда предпринимаются попытки подготовить листинг доменов. Й 'КОНтвсКОтзодаННОГО ИЗЛГОжЕйИИ'НЕОЛЕдувзт-'Лсутатъ! ИрООГОй)дОМ)Ей:О дОМЕНОсМ))йлбОЭ(Е.-ЯИОГ тйнгс доменов:=„- это.
олиоок иоклюнительнмх верйййтое-'вмйорсе! няцример! оолй требуегоя ЛрвйццщэйтЬ В ПрптрйММЕГИНфОйМадИВУО 'КОКОМ.та'Штато США, тб Мбжиа:ИръЕдурМОтрвтЬ иепользование, опушка;который, огрганйчгиеает',перемен!)вариййтоотольлО пвтьюдеолтьйг. : щтатаМН.„ТаКИМ4бсрВЗОМ,. ВО)ЕГда Мпжие. 6уд6т Гйряитнрекат)Ь .Чтп йМбрлииий Варнаит ОКЗ- " .: жЕтоя дайетЕИтвЛЬНММ;.С.атей:КбицопцйЕй'дОМ5ЕНОВ:Мыз' ОтябохъМИМОЛ:6ОЛЕЕ.ПОдрпбНО,,:КОЛ-" да:речь' поддето пррек1ййоеании.",бой денных. Теперь мы попытаемся выполнить поиск более конкретной информации. Допустим, что требуется не список с наименованиями товаров, а информация о конкретном товаре. Прежде всего попробуйте самостоятельно подготовить запрос, который возвращает наименование, код товара и информацию о том, каковы условия возобновления запасов этого товара применительно к товару с идентификатором Ргососгто, равным 356.
Разобьем эту задачу на несколько подзадач и приступим к поэтапному составлению запроса. Прежде всего нам предстоит запросить из базы данных хранимую в ней информацию, поэтому очевидно, что должен использоваться оператор БЕЗВЕСТ. В формулировке требований к получаемой информации указано, что нам требуется наименование товара, код товара и информация об условиях возобновления запасов товара, поэтому необходимо узнать имена столбцов, в которых хранятся эти фрагменты информации. Кроме того, необходимо узнать, из какой таблицы или таблиц можно осуществить выборку данных этих столбцов.
Теперь рассмотрим доступные нам таблицы. Поскольку мы уже однажды использовали таблицу Ргопоссйоп. Ргооцсг, то нам известно, что она существует (ниже в этой главе будет показано, как узнать имена доступных таблиц, если они еще не известны). Таблица Ргос!исг1оп. Ргодисг имеет несколько столбцов. Для быстрого ознакомления с имеющимся выбором столбцов можно изучить дерево ОЬ)ес1 Ехр)огег таблицы Ргопцссьоп. Ргоспсс с помощью программы Мапаяещеп! Егия!о. Чтобы открыть нужное окно в программе Мапакещепс а!ос!!о, щелкните на элементе ТаЫез, находящимся под обозначением базы данных Ас1чепгогеиог!сэ. В результате этого развернутся узлы Ргобцс!1оп.ргобис! и Со1цгппэ.
Как показано на рис. 3.2, появится список всех столбцов с обозначением типов хранимых в них данных и с указанием возможности представлять с их помощью неопределенные данные (пп!1аЬ!1!су). 86 Глава 3 Ниже в этой главе будут описаны и некоторые другие методы поиска необходимой информации. з с',и уббю ю на буйку у»ию и Я бк,паьбнс юа и и сьоб№нсаю№ и и бйо.эп»НВ Ф З бю,ууий»буасн и я юкюаюк В.О раса»ю и и ноВВЮЬ №сю,«и»боои и я нп№капокю.епиьукпппуоа и и нпа№икккюйайьоннрапюсаьйюу и и нпапжук№ВВ,ОПЬ,П»Р» н»ь у и Я н»пинаапсю,збк№УВЫэ и и нопп пюу ь °,н;Й а Я Ро ка.акп№ и Я юа№юмюууя и и Н 3 *Сс»УП№ и Й Р» ою,сп кипур» и и Рака.сапауьуию и и Роу№бюсаоак№ и и юаь;аа,ьйсн паюнс и и ЮаьсЬа,ОУЬУП В Й ЮВППП№.О№ВП№ и и нойкаа.йнй»на в Я Руоакью,ь№юю и Я Соьюи 5 Нпбоб№ОК, ЬЬ кроки Я В»аобу» .»( Всинм)), Вй й) Я акнаюпй»у (юабуп(и), пи кй) Я но»НЮОП»Н)к), ,'око Я абба«иорк(Ю (Н»ВПЮ), а Ви Я Сбар-ВСЬЬ(33«аи л Пнау5ьбс.» й(юбьи, В»о О Я и»кайсою (акра, Вп Во Я 5ь 3» км(п№ау,паки Я (, е Я Оюр кеюэа№О Оу»СПУРι»ѻ Н О«, у.б В(5), ВО ау оиниаосюпсаь си, уа (ж ВО НИ»йй (дюа И~П,П), ВЖ Я Оуауаау а№о Ой, па ВФ Я наоикм Ьпо»Я с Й Я Сок(Выли), соа Я КУЬ(Н3В (Е, ВЯ Р о йкс»орсапоюую О«, №, Ва Набоб»ой»о О'«, НЬ Вй) аркин»ю (бап»ую, ю Вбу Я мь йко(йьнаа,,й) Я 03*ВО'.Пьв»пп (бюб В.