Логические операторы при отсутствии скобок, как и арифметические операторы, выполняются в соответствии с их старшинством.
Одноместная операция NOT имеет наивысший приоритет. В этом легко убедиться, если выполнить следующие два запроса.
Консоль
-- модели, не являющиеся ПК
-- второй предикат ничего не меняет, т.к. он добавляет условие,
-- уже учтенное в первом предикате
SELECT maker, model, type
FROM Product
WHERE NOT type='PC' OR type='Printer';
Консоль
-- модели производителя A, которые не являются ПК
SELECT maker, model, type
FROM Product
WHERE NOT type='PC' AND maker='A';
Поменять порядок выполнения логических операторов можно при помощи скобок:
Консоль
-- модели, не являющиеся ПК или принтером, т.е. модели ноутбуков в нашем случае
SELECT maker, model, type
FROM Product
WHERE NOT (type='PC' OR type='Printer');
Консоль
-- модели, которые не являются ПК, выпускаемыми производителем A
SELECT maker, model, type
FROM Product
WHERE NOT (type='PC' AND maker='A');
Следующий приоритет имеет оператор AND. Сравните результаты следующих запросов.
Консоль
-- модели ПК, выпускаемые производителем A, и любые модели производителя B
SELECT maker, model, type
FROM Product
WHERE type='PC' AND maker='A' OR maker='B';
Консоль
-- модели ПК, выпускаемые производителем A или производителем B
SELECT maker, model, type
FROM Product
WHERE type='PC' AND (maker='A' OR maker='B');
Примечание:
Если вы не уверены, что точно помните порядок выполнения логических операторов, ставьте скобки.
Следующая страница