Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 2. SQL. Объединения, подзапросы..docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
36 Кб
Скачать
☆

Ключевое слово all

Можно использовать ключевое слово ALL, чтобы определить, меньше или больше значение, чем все значения в результате запроса.

Параметры для запросов, которые используют ключевое слово ALL:

1) ALL изменяет оператор сравнения в тесте запроса и сопровождает его операторами =, <>, <, <=, > или >=;

2) комбинация оператора сравнения и ключевого слова ALL сообщает СУБД, как применить тест сравнения ко всем значениям, которые считал запрос. Например, < ALL обозначает, что сравнение должно быть меньше, чем любое значение в результате запроса, > ALL – сравнение должно быть больше, чем

любое значение в результате запроса;

3) сравнение = ALL возможно, но используется нечасто. = ALL всегда будет ложным условием, только если все значения, считанные запросом, не идентичны (и не равны значению при тестировании);

4) список столбцов команды SELECT запроса может включать только одно выражение или название столбца;

5) если результат запроса не считывает строки, условие ALL становится истинным.

Сравнение всех значений запроса

WHERE test_expr op ALL (subquery)

test_expr – это буквенное значение, название столбца, выражение или запрос, который считывает одно значение;

op – оператор сравнения (=, <>, <, <=, > или >=);

subquery – скалярный запрос, который считывает один столбец.

Если все значения, считанные с помощью запроса, соответствуют условию ALL или результат запроса пустой (имеет строки с нулями), условие ALL задается как истинное. Условие ALL задается как ложное, если какое-либо (хотя бы одно) значение запроса не соответствует условию ALL или если любое значение запроса равно нулю.

Предложение HAVING имеет такую же структуру:

HAVING test_expr op ALL (subquery).

Примеры:

1) Отобразить список авторов, которые живут в городе, где нет ни одного издательства.

SELECT au_id, au_lname, au_fname, city

FROM authors

WHERE city <> ALL

(SELECT city

FROM publishers);

2) Отобразить список книг (не биографий), цена которых меньше, чем цена биографий.

SELECT title_id, title_name

FROM titles

WHERE type <> 'biography'

AND price < ALL

(SELECT price

FROM titles

WHERE type = 'biography'

AND price IS NOT NULL);

Ключевое слово ALL является эквивалентом оператора NOT IN.

Выражения, эквивалентные ALL

Выражение ALL Функция столбца

< ALL (subquery) < MIN (subquery values)

> ALL (subquery) > MAX (subquery values)

Ключевое слово any

Можно использовать слово ANY аналогично ALL. Это слово определяет, равно ли, меньше или больше значение, чем любое (хотя бы одно) значение в результате

Наиболее важные параметры запросов, которые используют это ключевое слово:

1) ANY изменяет оператор сравнения в тесте запроса и сопровождает его операторами =, <>, <, <=, > или >=;

2) комбинация оператора сравнения и ANY сообщает СУБД, как применить тест сравнения ко всем значениям, которые считал запрос. Например, < ANY означает, что сравнение должно быть меньше, чем хотя бы одно значение в результате запроса; > ANY означает, что сравнение должно быть больше, чем хотя бы одно значение в результате запроса;

3) если ANY используется с операторами <, <=, > или >=, сравнение будет эквивалентно расчету максимального или минимального значения в результате запроса. < ANY свидетельствует о том, что значение меньше, чем хотя бы одно значение в запросе, то есть меньше минимального значения; > ANY – больше максимального значения;

4) сравнение = ANY эквивалентно IN;

5) если результат запроса не считывает строки, условие ANY становится ложным.

Сравнение некоторых значений запроса

WHERE test_expr op ANY (subquery).

test_expr – буквенное значение, название столбца, выражение или запрос, который считывает одно значение;

op – оператор сравнения (=, <>, <, <=, > или >=);

subquery – скалярный запрос, который считывает один столбец.

Если хотя бы одно значение, считанное с помощью запроса, соответствует условию ANY, то это условие задается как истинное. Условие ANY задается как ложное, если ни одно значение запроса не соответствует условию или если запрос пуст (содержит строки с нулями) либо содержит только нули.

Предложение HAVING имеет такую же структуру:

HAVING test_expr op ANY (subquery)

Примеры:

1) Отобразить список всех авторов, которые живут в городе, где расположено издательство.

SELECT au_id, au_lname, au_fname, city

FROM authors

WHERE city = ANY

(SELECT city

FROM publishers);

2) Отобразить список всех книг (не биографий), цена которых меньше, чем цена хотя бы одной биографии.

SELECT title_id, title_name

FROM titles

WHERE type <> 'biography'

AND price < ANY

(SELECT price

FROM titles

WHERE type = 'biography');

В отличие от примера с ALL, условие IS NOT NULL здесь не нужно.

Ключевое слово ANY эквивалентно IN, однако <> ANY не является эквивалентом NOT IN. Если запрос считал значения x, y, z, то выражение:

test_expr <> ANY (subquery)

является эквивалентом

test_expr <> x OR

test_expr <> y OR

test_expr <> z

Но выражение

test_expr NOT IN (subquery)

является эквивалентом

test_expr <> x AND

test_expr <> y AND

test_expr <> z

(NOT IN эквивалентно <> ALL).