Упорядочение результатов запроса (ключевое слово ORDER BY…):
Использовать GROUP BY имеет смысл только вместе с одной из аналитических групповых функций
MAX() - максимальное значение в колонке
MIN()- минимальное значение в колонке
COUNT() - количество значений в колонке
SUM() - сумма всех значений в колонке
AVG() - среднее значение
SELECT
PD.PNUM, --выбранная колонка.
SUM(PD.VOLUME) AS SM --сумма всех значений в колонке.
FROM PD --получим новую таблицу.
GROUP BY PD.DNUM; --упорядочить результата запроса.
Этот запрос будет выполняться следующим образом.
· Сначала строки исходной таблицы будут сгруппированы так, чтобы в каждую группу попали строки с одинаковыми значениями DNUM.
· Потом внутри каждой группы будет просуммировано поле VOLUME.
· От каждой группы в результирующую таблицу будет включено по одной строке.
Исходная таблица PD
Результат после группировки :
HAVING
n Получить номера деталей, суммарное поставляемое количество которых превосходит 400 (ключевое слово HAVING…):
SELECT
PD.DNUM,
SUM(PD.VOLUME) AS SM
GROUP BY PD.DNUM
HAVING SUM(PD.VOLUME) > 400; -- отбор групп.
В результате получим следующую таблицу из исходной таблицы PD:
Замечание. В одном запросе могут встретиться как условия отбора строк в разделе WHERE, так и условия отбора групп в разделе HAVING. Условия отбора групп нельзя перенести из раздела HAVING в раздел WHERE. Аналогично и условия отбора строк нельзя перенести из раздела WHERE в раздел HAVING, за исключением условий, включающих поля из списка группировки GROUP BY.
Выполнение операций с несколькими таблицами
SELECT
Оператор SELECT позволяет выбирать значения полей из нескольких таблиц.
SELECT -- оператор выбирает требуемые таблицы.
P.PNUM,
P.PNAME,
PD.DNUM,
PD.VOLUME
FROM P, PD
WHERE P.PNUM = PD.PNUM;
Исходные таблицы P и PD :
В результате получим новую таблицу, в которой строки с данными о поставщиках соединены со строками с данными о поставках деталей:
Замечание. Соединяемые таблицы перечислены в разделе FROM оператора, условие соединения приведено в разделе WHERE. Раздел WHERE, помимо условия соединения таблиц, может также содержать и условия отбора строк.
UNION
n Получить имена поставщиков, имеющих статус, больший 3 или поставляющих хотя бы одну деталь номер 2 (объединение двух подзапросов - ключевое слово UNION):
SELECT P.PNAME
FROM P
WHERE P.STATUS > 3
UNION -- результат после объединения
SELECT P.PNAME
FROM P, PD
WHERE P.PNUM = PD.PNUM AND
PD.DNUM = 2 ;
n Результирующие таблицы объединяемых запросов должны быть совместимы, т.е. иметь одинаковое количество столбцов и одинаковые типы столбцов в порядке их перечисления.
n Не требуется, чтобы объединяемые таблицы имели бы одинаковые имена колонок.
n Это отличает операцию объединения запросов в SQL от операции объединения в реляционной алгебре.
n Наименования колонок в результирующем запросе будут автоматически взяты из результата первого запроса в объединении.