Применение операций IN, ANY, ALL
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Запросы, представленные на рис. 7.76 и 7.77, применяют подзапросы, формирующие скалярные результирующие наборы. Для работы с результирующими наборами, представляющими собой множество однородных значений (значений одного типа), можно использовать операции IN, ANY и ALL.

В простейшем случае множество значений может быть указано явно. На рис. 7.78 приведен пример использования оператора SELECT, в секции WHERE которого, используется операция IN.

 

Рис. 7.78. Применение операции IN с явно указанным списком значений

 

Операция IN формирует логическое значение «истина» в том случае, если значение, указанное слева от ключевого слова IN (на рис. 7.78 – значение в столбце NOTE таблицы PROGRESS), равно хотя бы одному из значений списка, указанного справа от IN (на рис. 7.78 –одно из значений: 7, 9 или 10). Выражение IN на рис. 7.78 может быть заменено выражением, использующим операцию OR (рис. 7.79).

 

 

Рис. 7.79. Замена операции IN с явным списком значений (рис. 7.78),
несколькими сравнениями, соединенными операциями OR

 

На рис. 7.80 приведен пример SELECT-запроса, в котором список для операции IN формируется как результат выполнения некоррелированного подзапроса. Обратите внимание на то, что в этом случае заменить операцию IN несколькими сравнениями не получится.

 

Рис. 7.80. Формирование списка значений для операции IN с помощью
 подзапроса, формирующего результирующий набор из одного столбца

 

Операция IN может применяться совместно с другими логическими операциями. Пример на рис. 7.81 демонстрирует операцию IN в сочетании с операциями NOT и AND. При этом следует помнить, что IN и LIKE будут иметь наивысший приоритет: операция NOT будет применяться к результату выполнения операции IN, и лишь затем операция AND соединит отрицание IN и предварительно полученный результат LIKE-сравнения.

 

 

Рис. 7.81. Применение операции IN совместно с другими
 логическими операциями

 

Операция ALL используется совместно с операциями сравнения и тоже предназначена для сравнения со списком значений, который задается как результат выполнения подзапроса (рис. 7.82).

 

 

Рис. 7.82. Применение операции ALL совместно с операцией сравнения

 

В примере на рис. 7.82 операция ALL применяется совместно с операцией сравнения «больше». Обратите внимание: справа от символов > ALL (читается: больше каждого) в скобках записан подзапрос, возвращающий столбец значений. Операция >ALL сформирует истинное значение в том случае, если значение, стоящее слева (на рис. 7.82 – значение в столбце NOTE таблицы PROGRESS), больше каждого значения в списке, указанном справа (значения в столбце, сформированном подзапросом).

Операцию ALL можно применять со всеми операциями сравнения и в сочетании с другими логическими операциями (рис. 7.83).

 

 

Рис. 7.83. Применение операции ALL совместно с другими
 логическими операциями

 

Операция ANY записывается и применяется аналогично операции ALL, но результат формируется иным образом (рис. 7.84).

 

 

Рис. 7.84. Применение операции ANY совместно с операцией сравнения
 и другими логическими операциями

 

При выполнении ANY-сравнения (на рис. 7.84 – операция >= ANY) стоящее слева значение (столбец NOTE таблицы PROGRESS) сравнивается (операция >=) с каждым значением списка, записанным справа (содержимое столбца, сформированного подзапросом). Если хотя бы для одного значения из списка операция сравнения принимает значение «истина», то вся операция (>= ANY) принимает значение «истина».

 






Применение операции EXISTS

Часто в подзапросе, который применяется в секции WHERE, бывает достаточно выяснить только сам факт наличия строк в результирующем наборе. В таких случаях удобно использовать операцию EXISTS.

На рис. 7.85 представлен пример использования операции EXISTS.

 

Рис. 7.85. Пример использования операции EXISTS

 

В скобках, следующих за ключевым словом EXISTS, записывается подзапрос. Результатом операции является «истина», если результирующий набор подзапроса содержит хотя бы одну строку, в противоположном случае операция EXISTS формирует значение «ложь».

 

Рис. 7.86. Пример применения операции EXISTS в сочетании
 с другими логическими операциями

 

Как и другие логические операции, EXISTS может использоваться в логических выражениях (рис. 7.86).


Секция GROUP BY

 

Если в SELECT-запросе есть секция GROUP BY, то она применяется после секции WHERE. Основное назначение GROUP BY – разбиение множества строк, сформированного секциями FROM и WHERE, на группы в соответствии со значениями в заданных операцией GROUP BY столбцах, а также выполнение вычислений над группами строк (подсчет количества строк; суммирование значений; вычисление средних, минимальных, максимальных значений и т. п.).

На рис. 7.87 изображена схема обработки строк секцией GROUP BY.

Рис. 7.87. Схема работы секции GROUP BY

 

Секция GROUP BY выполняет обработку строк в три этапа: 1) формирование строковых групп; 2) вычисление агрегатных функций над каждой группой строк; 3) формирование результирующего набора. В секции GROUP BY задается одно или несколько выражений (формирующих значения), задающих признак объединения строк в группы. На втором этапе для вычислений могут применяться агрегатные функции. Перечень наиболее часто используемых функций приведен в табл.7.2.

Таблица 7.2

Дата: 2019-02-25, просмотров: 211.