ВУЗ:
Составители:
Рубрика:
74
Фраза GROUP BY (группировать по) инициирует перекомпоновку указанной во FROM
таблицы по группам, каждая из которых имеет одинаковые значения в поле, указанном в GROUP BY.
В рассматриваемом примере записи таблицы Продажи группируются так, что в одной группе
содержатся все записи с датой продажи ДатаПродажи = 25.03.03, в другой с датой продажи
ДатаПродажи = 02.01.04 и т.д. (см. Таблицу 3-6). Далее к каждой группе применяется фраза SELECT.
Каждое выражение в этой фразе должно принимать единственное значение для группы, т.е. оно
может быть либо значением поля, указанного в GROUP BY, либо арифметическим выражением,
включающим это значение, либо константой, либо одной из SQL-функций, которая оперирует всеми
значениями поля в группе и сводит эти значения к единственному значению (например, к сумме).
4.2.2. Вложенные подзапросы
Виды вложенных подзапросов
Вложенный подзапрос - это подзапрос, заключенный в круглые скобки и вложенный в
WHERE (HAVING) фразу предложения SELECT или других предложений, использующих WHERE
фразу. Вложенный подзапрос может содержать в своей WHERE (HAVING) фразе другой вложенный
подзапрос и т.д. Вложенный подзапрос создан для того, чтобы при отборе записей таблицы,
сформированной основным запросом, можно было использовать данные из других таблиц.
Существуют простые и коррелированные вложенные подзапросы. Они включаются в WHERE
(HAVING) фразу с помощью условий IN, EXISTS или одного из условий сравнения ( = | <> | < | <= | >
| >= ). Простые вложенные подзапросы обрабатываются системой "снизу вверх". Первым
обрабатывается вложенный подзапрос самого нижнего уровня. Множество значений, полученное в
результате его выполнения, используется при реализации подзапроса более высокого уровня и т.д.
Запросы с коррелированными вложенными подзапросами обрабатываются системой в
обратном порядке. Сначала выбирается первая строка рабочей таблицы, сформированной основным
запросом, и из нее выбираются значения тех столбцов, которые используются во вложенном
подзапросе (вложенных подзапросах). Если эти значения удовлетворяют условиям вложенного
подзапроса, то выбранная строка включается в результат. Затем выбирается вторая строка и т.д., пока
в результат не будут включены все строки, удовлетворяющие вложенному подзапросу
(последовательности вложенных подзапросов).
Вложенные подзапросы с предикатом IN
Простые вложенные подзапросы используются для представления множества значений,
исследование которых должно осуществляться в каком-либо предикате IN
1. Подзапрос с одним уровнем вложенности
Выдать название и телефон поставщиков продукта с кодом 9, т.е. моркови.
SELECT Поставщик, Телефон
FROM Поставщики
WHERE КодПост IN
(SELECT КодПост
FROM Поставки
WHERE КодПрод=9);
Как уже отмечалось, при обработке полного запроса система выполняет прежде всего
вложенный подзапрос. Этот подзапрос выдает множество номеров поставщиков, которые поставляют
продукт с кодом КодПрод = 9, а именно множество (1, 2, 3). Поэтому первоначальный запрос
эквивалентен такому простому запросу:
SELECT Поставщик, Телефон
FROM Поставщики
WHERE КодПост IN (1,2,3);
Результат запроса
Фраза GROUP BY (группировать по) инициирует перекомпоновку указанной во FROM таблицы по группам, каждая из которых имеет одинаковые значения в поле, указанном в GROUP BY. В рассматриваемом примере записи таблицы Продажи группируются так, что в одной группе содержатся все записи с датой продажи ДатаПродажи = 25.03.03, в другой с датой продажи ДатаПродажи = 02.01.04 и т.д. (см. Таблицу 3-6). Далее к каждой группе применяется фраза SELECT. Каждое выражение в этой фразе должно принимать единственное значение для группы, т.е. оно может быть либо значением поля, указанного в GROUP BY, либо арифметическим выражением, включающим это значение, либо константой, либо одной из SQL-функций, которая оперирует всеми значениями поля в группе и сводит эти значения к единственному значению (например, к сумме). 4.2.2. Вложенные подзапросы Виды вложенных подзапросов Вложенный подзапрос - это подзапрос, заключенный в круглые скобки и вложенный в WHERE (HAVING) фразу предложения SELECT или других предложений, использующих WHERE фразу. Вложенный подзапрос может содержать в своей WHERE (HAVING) фразе другой вложенный подзапрос и т.д. Вложенный подзапрос создан для того, чтобы при отборе записей таблицы, сформированной основным запросом, можно было использовать данные из других таблиц. Существуют простые и коррелированные вложенные подзапросы. Они включаются в WHERE (HAVING) фразу с помощью условий IN, EXISTS или одного из условий сравнения ( = | <> | < | <= | > | >= ). Простые вложенные подзапросы обрабатываются системой "снизу вверх". Первым обрабатывается вложенный подзапрос самого нижнего уровня. Множество значений, полученное в результате его выполнения, используется при реализации подзапроса более высокого уровня и т.д. Запросы с коррелированными вложенными подзапросами обрабатываются системой в обратном порядке. Сначала выбирается первая строка рабочей таблицы, сформированной основным запросом, и из нее выбираются значения тех столбцов, которые используются во вложенном подзапросе (вложенных подзапросах). Если эти значения удовлетворяют условиям вложенного подзапроса, то выбранная строка включается в результат. Затем выбирается вторая строка и т.д., пока в результат не будут включены все строки, удовлетворяющие вложенному подзапросу (последовательности вложенных подзапросов). Вложенные подзапросы с предикатом IN Простые вложенные подзапросы используются для представления множества значений, исследование которых должно осуществляться в каком-либо предикате IN 1. Подзапрос с одним уровнем вложенности Выдать название и телефон поставщиков продукта с кодом 9, т.е. моркови. SELECT Поставщик, Телефон FROM Поставщики WHERE КодПост IN (SELECT КодПост FROM Поставки WHERE КодПрод=9); Как уже отмечалось, при обработке полного запроса система выполняет прежде всего вложенный подзапрос. Этот подзапрос выдает множество номеров поставщиков, которые поставляют продукт с кодом КодПрод = 9, а именно множество (1, 2, 3). Поэтому первоначальный запрос эквивалентен такому простому запросу: SELECT Поставщик, Телефон FROM Поставщики WHERE КодПост IN (1,2,3); Результат запроса 74
Страницы
- « первая
- ‹ предыдущая
- …
- 71
- 72
- 73
- 74
- 75
- …
- следующая ›
- последняя »