Виктор Гольцман - MySQL 5.0. Библиотека программиста стр 25.

Книгу можно купить на ЛитРес.
Всего за 104.9 руб. Купить полную версию
Шрифт
Фон

Для каждого клиента, то есть строки таблицы Customers, вложенный запрос выдает даты заказов этого клиента. Если дата "2007-12-12" есть среди этих дат, то строка таблицы Customers включается в результат запроса. Таким образом, запрос выводит информацию о тех клиентах, которые сделали заказ 12 декабря 2007 г. Результат этого запроса представлен в табл. 3.11.

Вложенный запрос, результат которого обрабатывается с помощью оператора IN, может возвращать несколько столбцов, но в этом случае и значение слева от оператора должно быть составным с таким же количеством компонентов (составные значения мы рассмотрели в пункте "Оператор х IN (<Список значений>)".

Далее мы разберем ключевые слова ANY и SOME.

ANY, SOME Ключевое слово ANY ("какой-либо") используется совместно с операторами сравнения, описанными в подразделе "Операторы сравнения". При использовании ANY результат сравнения будет верным, если он верен хотя бы для одного из значений, выданных подзапросом. Другими словами, результатом вычисления выражения

x <Оператор сравнения> ANY (<Вложенный запрос>)

может быть одно из следующих значений:

• 1 (TRUE) – если среди выданных подзапросом значений есть хотя бы одно значение y, для которого выполнено условие x <Оператор сравнения> y ;

• 0 (FALSE) – если среди выданных подзапросом значений нет ни одного такого значения y, для которого выражение x <Оператор сравнения> y истинно (TRUE) или не определено (NULL), в том числе, если подзапрос возвращает пустой результат;

• NULL – если среди выданных подзапросом значений нет ни одного такого значения y, для которого выражение x <Оператор сравнения> y истинно TRUE), но в то же время есть одно или несколько значений y, для которых это выражение не определено (NULL).

Например, вывести информацию о клиентах, которые сделали хотя бы один заказ на сумму более 5000, можно с помощью запроса

SELECT * FROM Customers WHERE 5000 < ANY (SELECT amount FROM Orders WHERE Customers.id = customer_id);

Для каждого клиента вложенный подзапрос получает из таблицы Orders (Заказы) суммы заказов (столбец amount) этого клиента. Затем эти суммы сравниваются с величиной 5000, и запись о клиенте попадет в результат запроса, если хотя бы одна из этих сумм превышает 5000. Таким образом, запрос возвращает результат, представленный в табл. 3.11. Отметим, что вложенный запрос может быть только правым операндом для оператора сравнения: например, рассмотренный выше запрос нельзя переписать в виде

SELECT * FROM Customers WHERE

ANY (SELECT amount FROM Orders

WHERE Customers.id = customer_id)

> 5000;

Ключевое слово SOME является синонимом ключевого слова ANY. Далее мы рассмотрим ключевое слово ALL. ALL Ключевое слово ALL ("все"), как и ANY, используется совместно с операторами сравнения, описанными в подразделе "Операторы сравнения". При использовании ALL результат сравнения будет верным, если он верен для всех значений, выданных подзапросом. Другими словами, результатом вычисления выражения

x <Оператор сравнения> ALL <Вложенный запрос>

может быть одно из следующих значений:

• 1 (TRUE) – если условие х <Оператор сравнения> у выполнено для всех у, выданных подзапросом, а также в случае, если подзапрос возвращает пустой результат;

• 0 (FALSE) – если среди выданных подзапросом значений есть такое значение у, для которого выражение х <Оператор сравнения> у ложно (FALSE);

• NULL – в остальных случаях.

Например, запрос

SELECT * FROM Customers WHERE 5000 < ALL (SELECT amount FROM Orders WHERE Customers.id = customer_id);

выведет информацию не только о тех клиентах, у которых в каждом из заказов сумма превышает 5000, но и о тех, кто не сделал ни одного заказа, ведь в последнем случае результат запроса окажется пустым и условие отбора во внешнем запросе будет выполнено. Таким образом, запрос возвращает результат, представленный в табл. 3.15. Чтобы исключить клиентов, для которых нет зарегистрированных заказов, можно ввести дополнительное условие отбора, например

SELECT * FROM Customers

WHERE 5000 < ALL

(SELECT amount FROM Orders

WHERE Customers.id = customer_id)

AND EXISTS

(SELECT amount FROM Orders

WHERE Customers.id = customer_id);

Как и при использовании ключевого слова ANY, в запросе с ключевым словом ANY вложенный запрос может быть только правым операндом для оператора сравнения.

Итак, вы рассмотрели операторы сравнения и научились применять их для обработки результатов вложенных запросов. Теперь перейдем к изучению логических операторов, с помощью которых можно создавать составные условия отбора.

Логические операторы

Логические операторы позволяют построить сложное условие отбора на основе операторов сравнения. Операнды логических операторов рассматриваются как логические значения: TRUE, FALSE и NULL. При этом число 0 и нулевая дата и/или время ("0000-00-00 00:00:00") считаются ложными значениями (FALSE), а отличные от нуля числа и даты – истинными значениями (TRUE) (более подробно об этом рассказывалось в пункте "Оператор х IS у, где у – TRUE, FALSE, UNKNOWN или NULL"). Начнем с изучения оператора AND.

Оператор x AND y

Оператор AND ("и") возвращает следующие значения:

• 1 (TRUE) – если оба операнда – истинные значения;

• 0 (FALSE) – если один или оба операнда – ложные значения;

• NULL – в остальных случаях.

Иными словами, если вы соединили два условия отбора с помощью оператора AND, то составное условие выполняется только тогда, когда выполняются одновременно оба составляющих условия.

Например, запрос

SELECT * FROM Customers WHERE name LIKE \'ООО%\' AND rating>1000;

не выводит ни одной строки. В таблице Customers (Клиенты) есть имена, начинающиеся с "ООО", и рейтинги, превышающие 1000, но ни одна из строк не удовлетворяет обоим этим условиям одновременно.

Пара символов && является синонимом оператора AND. Следующий оператор, который мы рассмотрим, – это оператор OR.

Оператор x OR y

Оператор OR ("или") возвращает следующие значения:

• 1 (TRUE) – если один или оба операнда – истинные значения;

• 0 (FALSE) – если оба операнда – ложные значения;

• NULL – в остальных случаях.

Иными словами, если вы соединили два условия отбора с помощью оператора OR, то составное условие выполняется, если выполняется хотя бы одно из составляющих условий.

Например, запрос

SELECT * FROM Customers WHERE name LIKE \'ООО%\' OR rating>1000;

выводит строки таблицы Customers (Клиенты), в которых имя начинается с "ООО", а также строки, в которых рейтинг больше 1000 (см. табл. 3.6). Пара символов | |является синонимом оператора OR. Следующий оператор, который мы рассмотрим, – это оператор XOR. Оператор x XOR y

Оператор XOR ("исключающее или") возвращает следующие значения:

• 1 (TRUE) – если один из операндов – истинное значение, а другой – ложное;

• 0 (FALSE) – если оба операнда либо истинные значения, либо ложные;

• NULL – если хотя бы один из операндов равен NULL.

Иными словами, если вы соединили два условия отбора с помощью оператора XOR, то составное условие выполняется, если выполняется ровно одно из составляющих условий.

Например, запрос

SELECT * FROM Customers WHERE name LIKE \'ООО%\' XOR rating>500;

выводит строки таблицы Customers, в которых имя начинается с "ООО", а также те строки, в которых рейтинг больше 500, за исключением тех строк, в которых эти условия выполняются одновременно (см. табл. 3.15). Наконец, рассмотрим последний логический оператор – NOT. Оператор NOT x

Оператор NOT ("не", то есть "отрицание") возвращает следующие значения:

• 1 (TRUE) – если операнд – ложное значение;

• 0 (FALSE) – если операнд – истинное значение;

• NULL – если операнд равен NULL.

Иными словами, условие отбора, созданное с помощью оператора NOT, выполняется, если исходное условие не выполнено и не равно NULL.

Например, запрос

SELECT * FROM Customers WHERE NOT (name LIKE \'ООО%\' OR rating>1000);

выводит те строки таблицы Customers, для которых условие name LIKE \'ООО% OR rating>10 0 0 не выполнено и которые, следовательно, не были выведены запросом из пункта "Оператор х OR у". Таким образом, запрос возвращает результат, представленный в табл. 3.1.

Завершая изучение операторов и функций проверки условий, обсудим еще несколько функций, используемых для сравнения различных величин. Эти функции отличаются от операторов, рассмотренных в подразделе "Операторы сравнения", тем, что возвращаемое ими значение не обязательно логическое.

Операторы и функции, основанные на сравнении

В этом подразделе я кратко расскажу об операторах и функциях, которые, как и операторы из подраздела "Операторы сравнения", сравнивают две или несколько величин, однако возвращают не логическое значение (TRUE, FALSE или NULL), а один из своих аргументов (или порядковый номер аргумента). Рассмотрим эти функции.

• LEAST( a 1, a 2,…, an )

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке

Скачать книгу

Если нет возможности читать онлайн, скачайте книгу файлом для электронной книжки и читайте офлайн.

fb2.zip txt txt.zip rtf.zip a4.pdf a6.pdf mobi.prc epub