Логические операторы
Ключевые слова AND, OR и NOT являются логическими (булевыми) операторами PostgreSQL. Обычно они используются для операций с логическими условиями в командах SQL, особенно в секциях WHERE и HAVING.
В табл. 5.7 приведена сводка результатов, возвращаемых логическими операторами AND, OR и NOT для всех возможных сочетаний операндов (true, false и NULL).
Таблица 5.7. Операторы AND, OR и NOT.
а | b | a AND b | a OR b | NOT a | NOT b |
true | true | true | true | false | false |
true | false | false | true | false | true |
true | NULL | NULL | true | false | NULL |
false | false | false | false | true | true |
false | NULL | false | NULL | true | NULL |
NULL | NULL | NULL | NULL | NULL | NULL |
В листинге 5.14 приведена пара запросов с ключевыми словами OR и AND, объединяющими условия выборки записей. Первый запрос возвращает информацию о книгах, которые стоят больше 30 долларов или отсутствуют на складе. Как видно из итогового набора, для возвращения записи должно выполняться одно или оба условия.
Во втором запросе те же условия объединяются ключевым словом AND. В результате записи проходят более жесткий отбор, поскольку должны выполняться сразу оба критерия. Итоговый набор состоит всего из одной записи для книги, которая стоит дороже 30 долларов и отсутствует на складе.
Листинг 5.14. Объединение условий с использованием логических операторов.
booktown=# SELECT isbn, cost, stock booktown-# FROM stock booktown-# WHERE cost > 30 booktown-# OR stock = 0: Isbn cost | stock 0394900014 23.00 | 0 044100590X | 36.00 | 89 0451198492 | 36.00 | 0 0451457994 17.00 j 0 (4 rows) booktown=# SELECT Isbn, cost, stock booktown-# FROM stock booktown-# WHERE cost > 30 booktown-# AND stock = 0; Isbn | cost stock 0451198492 36.00 0 (1 row)