Читайте также:
|
|
Блок where может содержать одно или более условий, разделенных опе_ раторами and и or. При использовании только оператора and строка бу_ дет включена в результирующий набор в случае истинности (True) всех условий для нее. Рассмотрим следующий блок where:
WHERE title = 'Teller' AND start_date < '2003_01_01'
Исходя из этих двух условий, из рассмотрения будет исключен любой сотрудник, не являющийся операционистом или работающий в банке
Оценка условия | |
начиная с 2003 года. В данном примере используется только два усло_ вия, но если условия в блоке where разделены оператором and, то неза_ висимо от их количества строка попадет в результирующий набор, только если все условия для нее будут истинны.
Если все условия в блоке where разделены оператором or, то чтобы стро_ ка вошла в результирующий набор, должно выполниться (принять зна_ чение true) хотя бы одно из них. Рассмотрим следующие два условия:
WHERE title = 'Teller' OR start_date < '2003_01_01'
Теперь есть несколько вариантов условий, по которым строка employee может быть включена в результирующий набор:
• Сотрудник является операционистом и был принят на работу до 2003 года.
• Сотрудник является операционистом и был принят на работу после 1 января 2003.
• Сотрудник не является операционистом, но был принят на работу до 2003 года.
В табл. 4.1 показаны возможные результаты вычисления блока where, содержащего два условия, разделенных оператором or.
Таблица 4.1. Результаты вычисления выражений с двумя условиями, разделенными оператором or
Промежуточный результат | Конечный результат | |||||
WHERE true | OR | true | True | |||
WHERE true | OR | false | True | |||
WHERE | false | OR | true | True | ||
WHERE | false | OR | false | False | ||
В предыдущем примере единственный вариант исключения строки из результирующего набора – если сотрудник не является операциони_ стом и был принят на работу начиная с 1 января 2003 года.
Скобки
Если блок включает три или больше условий с использованием как оператора and, так и or, следует применять круглые скобки. Это сдела_ ет намерения запроса понятными и для сервера БД, и для всех, кто бу_ дет читать код. Вот блок where, расширяющий предыдущий пример. Он проверяет, работает ли сотрудник в банке до сих пор:
WHERE end_date IS NULL
AND (title = 'Teller' OR start_date < '2003_01_01')
Теперь имеем три условия. Чтобы строка попала в конечный результи_ рующий набор, первое условие для нее должно быть истинным (true), а также истинным должно быть второе или третье условие (или оба).
74 Глава 4. Фильтрация
В табл. 4.2 показаны возможные результаты вычисления этого блока where.
Таблица 4.2. Результаты вычисления выражений с тремя условиями, разделенными операторами and и or
Промежуточный результат | Конечный результат |
WHERE true AND (true OR true) | True |
WHERE true AND (true OR false) | True |
WHERE true AND (false OR true) | True |
WHERE true AND (false OR false) | False |
WHERE false AND (true OR true) | False |
WHERE false AND (true OR false) | False |
WHERE false AND (false OR true) | False |
WHERE false AND (false OR false) | False |
Как видите, чем больше условий в блоке where, тем больше комбина_ ций должен рассмотреть сервер. В данном случае конечный результат true обеспечивают только три из восьми комбинаций.
Дата добавления: 2015-08-17; просмотров: 38 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Сортировка с помощью числовых заместителей | | | Оператор not |