Программирование >>  Программирование баз данных 

1 ... 22 23 24 [ 25 ] 26 27 28 ... 346


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

Такое положение дел вполне бы нас устроило, если бы в таблице было только несколько строк и нам требовалось быстро с ними ознакомиться. Но положение изменяется, если количество строк составляет сотни тысяч или миллионы. Поэтому должна быть предусмотрена условная конструкция, позволяющая включить в полученные результаты запроса данные только об одном товаре с идентификатором 356. Именно для этой цели предназначена конструкция WHERE. Конструкция WHERE следует непосредственно за конструкцией FROM и определяет, каким условиям должна соответст вовать строка, для того чтобы ее можно было включить в итоговые результаты. Для данного запроса требуется, чтобы значение Product ID было равно 356, поэтому окончательно сформулируем рассматриваемый запрос следующим образом:

SELECT Name, ProductNumber, ReorderPoint FROM Production.Product ШЕКЕ ProductID = 356;

Вызовем на выполнение этот запрос применительно к базе данных AdventureWorks.

Name ProductNumber ReorderPoint

LL Grip Tape GT-0820 600

(1 row(s) affected)

Должны были быть получены именно такие результаты. Кроме того, этот запрос был выполнен намного быстрее по сравнению с первым запросом.

Все операции, которые могут использоваться в конструкции WHERE, перечислены в табл. 3.7.

Таблица 3.7. Операции, применяемые в конструкции where Операция Примеры использования Назначение

= , >, <, >=, <Column Name> = Стандартные операции сравнения. Эти операции

<=, о, 1 = , <Other Column Name> действуют В ОСНОВНОМ так же, как И В любом < <Column Name> = другом языке программирования. Тем не менее

Bob следует подчеркнуть некоторые отличительные

особенности.

1. Результаты выполнения операций сравнения больше (>), меньше (<) и равно могут изменяться в зависимости от выбранной схемы упорядочения. Например, если в базе данных выбрана схемы упорядочения, нечувствительная к регистру, то ROMEY = romey , а если регистр учитывается, то ROMEY <> romey .

2. ! = и о означают не равно . ! < и i > означают не меньше и не больше соответственно



Продолжение табл. 3.7

Операция Примеры использования

Назначение

AND, OR, NOT

BETWEEN

LIKE

ALL, ANY, some

<Columnl> = <Column2> AND <Column3> >= <Column 4> <Columnl> != MyLiteral OR <Column2> = MyOtherLiteral

<Columnl> BETWEEN 1 AND 5

c:Columnl> LIKE ROM%

<Colunml> IN (List of Numbers)

<Columnl> IN ( a , b , 345 )

<columnIexpression>

(comparision

operator)

<anysome> (subquery)

Стандартные булевы логические операции. Они могут использоваться для объединения нескольких условий в одной конструкции where. В первую очередь выполняется операция not, затем and, а после этого or. Если требуется изменить порядок выполнения операций, то можно ввести круглые скобки. Следует отметить, что операция xor в непосредственном виде не поддерживается

Выполнение этой операции сравнения приводит к получению значения true, если первый операнд меньше или равен второму и больше или равен третьему. Это - функциональный эквивалент выражения а>=в and а<=с. Любое из указанных значений может быть именами столбцов, переменными или литералами

Операция сравнения, позволяющая использовать символы % и в качестве подстановочных знаков. Символ % указывает, что вместо него может быть подставлено строковое значение любой длины. Символ указывает, что вместо него может быть подставлен любой символ. Конструкция, состоящая из символов, заключенных в квадратные скобки ([]), указывает, что допускается применение любого отдельного символа из числа тех, которые находятся в квадратных скобках (выражение [а-с] показывает, что допускается применение символов а, b и с. Выражение [аЬ] указывает на возможность применения символа а или Ь). Символ , стоящий за открывающей квадратной скобкой, действует как знак операции инверсии (обращения); он указывает, что для сравнения могут использоваться все символы, кроме тех, что следуют за ним

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

Эти операции сравнения возвращают true, если любое или все значения (в зависимости от выбранной операции) в подзапросе (subquery) соответствуют условию операции сравнения (comparision operator), например <, >, =, >=. Ключевое слово all указывает, что значение должно согласовываться со всеми значениями в множестве. Операции ?ш и some являются функциональными эквивалентами и возвращают true, если значение поля в столбце (column) или выражение (expression) согласуется с каким-либо значением в множестве



Окончание табл. 3.7

Операция Примеры использования Назначение

EXISTS EXISTS (subquery) Операция сравнения, которая возвращает TRUE,

если подзапрос (subquery) возвращает по крайней мере одну строку. Эта операция также рассматривается более подробно в главе 6

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

Рассмотрим еще раз тот сложный оператор соединения, который использовался для получения данных обо всех служащих и их руководителях. Но предположим, что на этот раз необходимо включить в список только тех служащих, которыми руководит служащий Jo Brown. Итак, известно, что в качестве условия получения списка применяется то, что в список должны быть включены только подчиненные служащего Jo Brown, поэтому данные о самом этом служащем не должны присутствовать в результирующем наборе; с учетом этого проведено редактирование списка выборки и получен следующий оператор:

SELECT е.EmployeelD, се.FirstName, се.LastName FROM HumanResources.Employее e JOIN HumanResources.Employee m

ON e.ManagerlD = m.EmployeelD JOIN Person.Contact ce

ON e.ContactID = ce.ContactID JOIN Person.Contact cm

ON m.ContactID = cm.ContactID WHERE cm.FirstName = Jo

AND cm.LastName = Brown;

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

Рассмотрим результаты, полученные при выполнении соответствующего запроса: EmployeelD FirstName LastName

1 Guy Gilbert

57 Annik Stahl



1 ... 22 23 24 [ 25 ] 26 27 28 ... 346

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика