Вложенный запрос, результат которого обрабатывается с помощью оператора IN, может возвращать несколько столбцов, но в этом случае и значение слева от оператора должно быть составным с таким же количеством компонентов (составные значения мы рассмотрели в пункте «Оператор х IN (<Список значений>)».
Далее мы разберем ключевые слова ANY и SOME.
ANY, SOME Ключевое слово ANY («какой-либо») используется совместно с операторами сравнения, описанными в подразделе «Операторы сравнения». При использовании ANY результат сравнения будет верным, если он верен хотя бы для одного из значений, выданных подзапросом. Другими словами, результатом вычисления выраженияможет быть одно из следующих значений:
• 1 (TRUE) – если среди выданных подзапросом значений есть хотя бы одно значение y, для которого выполнено условие
• 0 (FALSE) – если среди выданных подзапросом значений нет ни одного такого значения y, для которого выражение
• NULL – если среди выданных подзапросом значений нет ни одного такого значения y, для которого выражение
Для каждого клиента вложенный подзапрос получает из таблицы Orders (Заказы) суммы заказов (столбец amount) этого клиента. Затем эти суммы сравниваются с величиной 5000, и запись о клиенте попадет в результат запроса, если хотя бы одна из этих сумм превышает 5000. Таким образом, запрос возвращает результат, представленный в табл. 3.11. Отметим, что вложенный запрос может быть только
Ключевое слово SOME является синонимом ключевого слова ANY. Далее мы рассмотрим ключевое слово ALL. ALL Ключевое слово ALL («все»), как и ANY, используется совместно с операторами сравнения, описанными в подразделе «Операторы сравнения». При использовании ALL результат сравнения будет верным, если он верен для
может быть одно из следующих значений:
• 1 (TRUE) – если условие х <Оператор сравнения>
• 0 (FALSE) – если среди выданных подзапросом значений есть такое значение у, для которого выражение х <Оператор сравнения>
• NULL – в остальных случаях.
Например, запросвыведет информацию не только о тех клиентах, у которых в каждом из заказов сумма превышает 5000, но и о тех, кто не сделал ни одного заказа, ведь в последнем случае результат запроса окажется пустым и условие отбора во внешнем запросе будет выполнено. Таким образом, запрос возвращает результат, представленный в табл. 3.15. Чтобы исключить клиентов, для которых нет зарегистрированных заказов, можно ввести дополнительное условие отбора, например
Как и при использовании ключевого слова ANY, в запросе с ключевым словом ANY вложенный запрос может быть только правым операндом для оператора сравнения.
Итак, вы рассмотрели операторы сравнения и научились применять их для обработки результатов вложенных запросов. Теперь перейдем к изучению логических операторов, с помощью которых можно создавать составные условия отбора.
Логические операторы
Логические операторы позволяют построить сложное условие отбора на основе операторов сравнения. Операнды логических операторов рассматриваются как логические значения: TRUE, FALSE и NULL. При этом число 0 и нулевая дата и/или время («0000-00-00 00:00:00») считаются ложными значениями (FALSE), а отличные от нуля числа и даты – истинными значениями (TRUE) (более подробно об этом рассказывалось в пункте «Оператор х IS у, где
Оператор AND («и») возвращает следующие значения:
• 1 (TRUE) – если оба операнда – истинные значения;
• 0 (FALSE) – если один или оба операнда – ложные значения;
• NULL – в остальных случаях.
Иными словами, если вы соединили два условия отбора с помощью оператора AND, то составное условие выполняется только тогда, когда выполняются одновременно оба составляющих условия.
Например, запросне выводит ни одной строки. В таблице Customers (Клиенты) есть имена, начинающиеся с «ООО», и рейтинги, превышающие 1000, но ни одна из строк не удовлетворяет обоим этим условиям одновременно.
Пара символов && является синонимом оператора AND. Следующий оператор, который мы рассмотрим, – это оператор OR.
Оператор x OR yОператор OR («или») возвращает следующие значения:
• 1 (TRUE) – если один или оба операнда – истинные значения;
• 0 (FALSE) – если оба операнда – ложные значения;
• NULL – в остальных случаях.
Иными словами, если вы соединили два условия отбора с помощью оператора OR, то составное условие выполняется, если выполняется хотя бы одно из составляющих условий.
Например, запросвыводит строки таблицы Customers (Клиенты), в которых имя начинается с «ООО», а также строки, в которых рейтинг больше 1000 (см. табл. 3.6). Пара символов | | является синонимом оператора OR. Следующий оператор, который мы рассмотрим, – это оператор XOR. Оператор x XOR y
Оператор XOR («исключающее или») возвращает следующие значения:
• 1 (TRUE) – если один из операндов – истинное значение, а другой – ложное;
• 0 (FALSE) – если оба операнда либо истинные значения, либо ложные;
• NULL – если хотя бы один из операндов равен NULL.
Иными словами, если вы соединили два условия отбора с помощью оператора XOR, то составное условие выполняется, если выполняется
выводит строки таблицы Customers, в которых имя начинается с «ООО», а также те строки, в которых рейтинг больше 500, за исключением тех строк, в которых эти условия выполняются одновременно (см. табл. 3.15). Наконец, рассмотрим последний логический оператор – NOT. Оператор NOT x
Оператор NOT («не», то есть «отрицание») возвращает следующие значения:
• 1 (TRUE) – если операнд – ложное значение;
• 0 (FALSE) – если операнд – истинное значение;
• NULL – если операнд равен NULL.
Иными словами, условие отбора, созданное с помощью оператора NOT, выполняется, если исходное условие не выполнено и не равно NULL.
Например, запросвыводит те строки таблицы Customers, для которых условие name LIKE 'ООО% OR rating>10 0 0 не выполнено и которые, следовательно, не были выведены запросом из пункта «Оператор х OR у». Таким образом, запрос возвращает результат, представленный в табл. 3.1.
Завершая изучение операторов и функций проверки условий, обсудим еще несколько функций, используемых для сравнения различных величин. Эти функции отличаются от операторов, рассмотренных в подразделе «Операторы сравнения», тем, что возвращаемое ими значение не обязательно логическое.
Операторы и