Программирование баз данных MS SQL Server (1084479), страница 20
Текст из файла (страница 20)
й) Я са .(Ьн (нуосабкйую, ку ВУО Я юк»вара» (Впккю юс Вй) и Йй «оуу кайс» ююн иуяун„, и ай!В(»ВВ Рис. Р.З. Список с)333)У(биов яабйий(м Рхосйуйоб1оп. Рхо(ййоб В этом списке не удается найти столбец ргос(пег пате (наименование товара), но имеется такой столбец, который, по-видимому, нам как раз и требуется — На)бе (не правда ли, весьма оригинальное имя?).
Другие два столбца можно найти гораздо проще, если не считать того, что в их именах отсутствует пробел между двумя словами. Основные операторы языка Т-ЯЯТ. 87 Итак, источником данных, из которого должна быть получена информация, указанным в конструкции ГРОМ, является таблица Ргобпсгз, а конкретными столбцами, в которых находится требуемая информация, являются столбцы Мапсе (Наименование), РгобпсгпяпЬег (Код товара) и Ееогбегро1пс (Условие возобновления запасов): ЕЕЬЕСТ Нате, Ргобпсскпеьег, ЕепгбегРо1пС ГРОМ Ргобпс11оп.ргобпсС Но данный запрос все еще не может использоваться для получения только требуемых результатов, поскольку он по-прежнему возвращает слишком много информации. Вызвав его на выполнение, можно убедиться в том, что этот запрос снова возвращает все записи из таблицы, а не только ту, которая необходима.
Такое положение дел вполне бы нас устроило, если бы в таблице было только несколько записей и нам требовалось быстро с ними ознакомиться. В конечном итоге просмотр небольшого списка — это всегда простая задача. Но, к сожалению, подобная ситуация возникает довольно редко. В любой достаточно развитой системе небольшое количество записей может находиться лишь в незначительной части всех таблиц. А задача просмотра с помощью прокрутки десяти тысяч записей вряд ли покажется кому-то привлекательной. Такое положение дел еще в большей степени усугубляется, если количество записей составляет сотни тысяч или миллионы. Даже если вы готовы просмотреть все записи в поиске нужной информации, затраты времени на получение результатов по мере увеличения количества записей существенно возрастают.
Наконец, что делать, если такая большая таблица используется в составе приложения, а в процессе работы требуется быстро получить не все данные подряд, а только нулсные результаты? Поэтому нам требуется такая операция проверки условия, которая позволит свести весь объем результатов запроса лишь к одному идентификатору товара, равному 35 6. Именно для этой цели и предназначена конструкция ХНЕЕЕ. Конструкция ХНЕЕЕ непосредственно следует за конструкцией ГРОМ и определяет, каким условиям должна соответствовать запись, чтобы рассматривать ее как подлежащую возврату.
Для данного запроса требуется, чтобы значение Ргобпсс10 было равно 35 6, поэтому окончательно сформулируем рассматриваемый запрос следующим образом: ЕЕЬЕСТ Базе, РгобпсснпеЬег, РеогбегРозпС ГРОМ Ргобпсгбоп.РгобпсС ЯЕЕРЕ РгобпсС10 = 358 Вызовите на выполнение этотзапросприменительнок базе данных Абчепгпгепог)сз. Должны быть получены такие результаты: Ргобпс1кпеЬег Ееогбегро1пс Мазе 600 6Т-0820 ЬЬ Огьр Таре (1 гпэ(з) агГесгеб) На сей раз было получено именно то, что требовалось.
Кроме того, этот запрос был выполнен намного быстрее по сравнению с первым запросом. Все операции, которые могут использоваться в конструкции ХНЕЕЕ, перечислены в табл. 3.1. 88 Глава 3 Примеры использования Назначение <Со1пяп папе> = <Опьег Со1ипп Нптпе> <Со1ипп Маме> = 'Воь' Стандартные операции сравнения.
Эти операции действуют в основном так же, как и в любом другом языке программирования. Тем не менее следует под- черкнуть некоторые описанные ниже отличительные особенности. 1. Результаты выполнения операций сравнения "боль- ше" (>), "меньше"(<) и "равно" могут изменяться в зависимости от выбранной схемы упорядочения. Например, если в базе данных выбрана схемы упоря- дочения, нечувствительная к регистру, то "ксмку" = "хояеу", а если регистр учитывается, та "помет" <> "хотеуьч 2, И знак операции .' =, и знак <> соответствуют опе- рации сравнения на неравенство, а знаки операции .
'< и ~ > рассматриваются как соответствующие опе- рациям сравнения "ие меньше" и "не больше" =,>,<,>тч<тч <>,!тч!>,!< <Со1итп1> = <Со|оп г> ЛНО <Со1птпЗ»= <Со1шпп 4> <Со1пяп1> "МуЬ|пегп1" ОЯ <Со1ияпг> = "МуосьегЬ|пехп1" Стандартные булевы логические операции. Они могут использоваться для объединения нескольких условий в одной конструкции ннеяе.
В первую очередь выполняется операция нот, затем лмо, после чего оя. Если требуется изменить порядок выполнения операций, то можно ввести круглые скобки. Следует отметить, что операция хое в непосредственном виде не под- держивается лно, оя, мот <Со1ппп1> ВЕТХЕЕН 1 АМО 5 ВЕТХЕЕМ Эта операция сравнения возвращает значение тяое, если первое значение находится между вторым и третьим значениями включительно и является функци- онально эквивалентной выражению я>=В пмо я<=с.
В качестве любого из указанных здесь значений могут быть заданы имена столбцов, переменные или литералы <Со1ппп1> 1|КЕ "КОМЪ" ЫКЕ Операция сравнения, позволяющая использовать сим- волы и и в качестве подстановочных знаков. Символ Ъ указывает, что вместо него может быть подставлено строковое значение любой длины, а символ указы- вает, что вместо него может быть подставлен любой символ. Выражение, состоящее из квадратных скобок ( ( ) ), в которые заключены символы, указывает, что для сравнения может использоваться любой отдельный символ, указанный в квашзатных скобках, или любой символ из диапазона, обозначенного дефисом (-). (Например, выражение (и-с) означает, что для срав- нения мокнут использоваться символы "и", "ь" и "с", а выражение [аь) — что могут использоваться символы "а" и "ь".) Символ ", стоящий за открывающей квадратной скоб- кой, действует как знак операции инверсии (обраще- ния); он указывает, что для сравнения могут использо- ваться все символы, кроме тех, что следуют за ним Таблица З.т.
Операции, применяемые в конструкции инннж Основные операторы языка Т-БЯх. 89 Окончание табл. 3,! Примеры Операция использования <Со1 1> 1М (Ььзг ог Мотьегз) <Со1с 1> ЬМ ( А , "Ь", "ЗЧЗ") Операция сравнения, которая возвращает ТРЛЕ, если значение, находящееся слева от ключевого слова тм, согласуется с любым из значений в списке, на- ходящемся справа от ключевого слова 1М. Как будет показано в главе !6, зта операция часто используется в подзапросах АЬц Ану, ЗОМЕ <со1ияш )ехргеззгоп> (сотраггзгоп орегатог) <АМУ(ЗОМЕ> (зсЪг)негу) Эти операции сравнения возвращают тере, если лю- бое или все значения (в зависимости от выбранной операции) в подзапросе(зоЬцсегу) соответствуют условию операции сравнения (согпрапайоп орега(ог), например, <, », ==, , =.
Ключевое слово Аьт указывает, что значение должно согласовываться со всеми зна- чениями в множестве. Операции Аму и зоме являются функциональными эквивалентами и возвращают тепе, если значение поля в столбце (со(шпп) или выраже- ние (ехргеззюп) согласуется с каким-либо значением в множестве ехтзтз ЕХ1этэ (зосг(оегу) Операция сравнения, которая возвращает тере, если подзапрос(зоЬцоегу) возвращает по крайней мере одну строку. Эта операция также рассматривается бо- лее подробно в главе )б Конструкция ОКОЕМ ВУ ЯЕЬЕСТ Мате, Ргог)ооснотьег, Реогг(егРо1пс ГПОМ Ргооцссгоп.Ргососс Он должен привести к получению таких результатов: Результаты основного числа запросов, выполненных до сих пор, были представлены в порядке, напоминающем алфавитный, и это не случайно, что на первый взгляд может показаться неожиданным.
Но дело в том, что если в запросе не указано, что результаты должны быть отсортированы в каком-то определенном порядке, получение этих данных происходит в том порядке, который выбирает сама СУБД БОБ Яегкег. Выбор применяемого по умолчанию способа сортировки всегда осуществляется на основании принятого СУБД 5Я(. Бегуег решения о том, какой способ сбора требуемых данных связан с наименьшими издержками. Как правило, выборка данных происходит с учетом либо физической последовательности данных в таблице, либо с учетом структуры индексов, используемых СУБД ЯЯ1. Бегуег для поиска данных.
Конструкцию ОМРее Вх удобно рассматривать как аналог команды "сортировать по...". Эта конструкция предоставляет возможность определить последовательность, в которой должны поступать затребованные данные. В конструкции ОЕОЕЕ ВУ можно использовать любые сочетания столбцов, при условии, что эти столбцы (указанные непосредственно или в каких-либо выражениях) находятся в таблицах, перечисленных в конструкции ГЕОМ. Рассмотрим следующий запрос: 90 Глава 3 КеогбегРоапС наве Ргобосгкпвьег Аб)овгаЬ1е Васе Веаггпч Ва11 АР,-5381 ВА-8327 750 750 Коаб-750 В1асх, 48 Коаб-750 81аск, 52 (504 гов(я) аггессеб) ВК-В19В-48 ВК-В19В-52 75 75 БЕЬЕСТ агаве, РгобосвнпвЬег, КеогбегРогпг РВОМ Ргобпсвгоп.РгобисС ОКВЕК Вт агаве Обратите внимание на то, что в этом запросе конструкция ИНЕВЕ не потребовалась. Наличие или отсутствие этой конструкции зависит от того, с какой целью применяется запрос, но следует помнить, что если в запросе присутствует конструкция ИНЕВЕ, то она должна быть задана перед конструкцией ОВРЕВ ВУ.
К сожалению, последний запрос в действительности не приводит к получению данных, отличных от приведенных выше, поэтому не позволяет ознакомиться с тем, как сортировка влияет на конечные результаты. Поэтому модифицируем запрос так, чтобы в нем данные сортировались по-другому — по значениям столбца РгобпсСИпвЬег: БЕЬЕСТ Наве, РгобпсгнпвЬег, ВеогбегРоЬпС РВОМ Ргобпсггоп.РгобпсС ОВРЕК Вг" Ргобпсвновьег Теперь результаты становятся совсем другими.