10.01.2017 Views

sql

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

производителями DLL01 и BRS01 товаров, цена которых $10 и выше. В следующей<br />

инструкции SELECT используется комбинация ключевых слов AND и OR для<br />

формулирования предложения WHERE:<br />

ВВОД<br />

SELECT prod_name, prod_price<br />

FROM Products<br />

WHERE vend_id = 'DLL01' OR vend_id = 'BRS01'<br />

AND prod_price > = 10;<br />

ВЫВОД<br />

prod_name<br />

prod_price<br />

Fish bean bag toy 3.4900<br />

Bird bean bag toy 3.4900<br />

Rabbit bean bag toy 3.4900<br />

18 inch teddy bear 11.9900<br />

Raggedy Ann 4.9900<br />

Анализ<br />

Взгляните на результат. В четырех возвращенных строках значатся цены ниже $10 —<br />

очевидно, строки не были отфильтрованы так, как надо. Что же произошло? Причина в<br />

порядке обработки. SQL (как и большинство других языков) вначале обрабатывает<br />

логические операторы AND, а потом уже логические операторы OR. Когда SQL “видит”<br />

такое предложение WHERE, он его считывает так: выбрать все продукты, которые<br />

стоят $10 и больше, изготовленные производителем BRS01, и все продукты,<br />

изготовленные производителем DLL01 независимо от их цены. Другими словами, так как<br />

приоритет у логического оператора AND выше, были объединены “не те” операторы.<br />

Решение этой проблемы состоит в использовании скобок для точного группирования<br />

необходимых логических операторов. Взгляните на следующий оператор SELECT и его<br />

выходные данные:<br />

ВВОД<br />

SELECT prod_name, prod_price<br />

FROM Products<br />

WHERE (vend_id = 'DLL01' OR vend_id = 'BRS0l')<br />

AND prod_price >= 10;<br />

ВЫВОД<br />

prod_name<br />

prod_price<br />

18 inch teddy bear 11.9900<br />

Анализ<br />

Единственным отличием между предыдущим выражением и этим являются скобки,<br />

в которые заключены первые два предложения оператора WHERE. Поскольку скобки<br />

имеют еще больший приоритет, чем логические операторы AND и OR, СУБД вначале<br />

обрабатывает условие OR внутри скобок. Соответственно, SQL-оператор будет<br />

пониматься так: выбрать все продукты, изготовленные либо производителем DLL01, либо<br />

производителем BRS01, которые стоят $10 и больше, а это именно то, что нужно.<br />

Использование скобок в предложениях WHERE<br />

Когда бы вы ни использовали предложения WHERE С ключевыми словами AND И OR, всегда<br />

вставляйте скобки, чтобы точно сгруппировать логические операторы. Не полагайтесь на

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!