- •Язык запросов sql
- •Просмотр только определенного столбца таблицы
- •Переупорядочение столбца
- •Удаление избыточных данных
- •Квалифицированный выбор при использовании предложений
- •Использование специальных операторов в условиях.
- •In и between используются также, как и реляционные операторы, чтобы сравнивать значения, которые берутся либо из набора ( для in ) либо из диапазона ( для between ).
- •Работа с нулевыми( null ) значениями
- •Использование not со специальными операторами
- •Обобщение данных с помощью агрегатных функций
- •Включение дубликатов в агрегатные функции
- •Агрегаты построенные на скалярном выражении
- •Предложение group by
- •Предложение having
- •Формирование выводов запросов
- •Упорядочение вывода по номеру столбца
- •Упорядочение с помощью опретора null
Включение дубликатов в агрегатные функции
Агрегатные функции могут также использовать аргумент ALL, который помещается перед именем поля, подобно DISTINCT, но означает противоположное - включать дубликаты.
Различия между ALL и * когда они используются с COUNT -
ALL использует имя_поля как аргумент.
ALL не может подсчитать значения NULL.
Пока * является единственным аргументом, который включает NULL значения, и он используется только с COUNT; функции отличные от COUNT игнорируют значения NULL в любом случае. Следующая команда подсчитает число не-NULL значений в поле rating в таблице Заказчиков ( включая повторения ):
SELECT COUNT (ALL rating)
FROM Customers;
Агрегаты построенные на скалярном выражении
До этого, вы использовали агрегатные функции с одиночными полями как аргументами. Вы можете также использовать агрегатные функции с аргументами, которые состоят из скалярных выражений, включающих одно или более полей. (Если вы это делаете, DISTINCT не разрешается). Предположим, что таблица Заказов имеет еще один столбец, который хранит предыдущий неуплаченный баланс (поле blnc) для каждого заказчика. Вы должны найти этот текущий баланс, добавлением суммы приобретений к предыдущему балансу. Вы можете найти наибольший неуплаченый баланс следующим образом:
SELECT MAX (blnc + amt)
FROM Orders;
Для каждой строки таблицы, этот запрос будет складывать blnc и amt для этого заказчика и выбирать самое большое значение которое он найдет.
Предложение group by
Предложение GROUP BY позволяет определять подмножество значений в особом поле в терминах другого поля, и применять функцию агрегата к подмножеству. Это дает вам возможность объединять поля и агрегатные функции в едином предложении SELECT. Например, предположим что вы хотите найти наибольшую сумму приобретений, полученную каждым продавцом. Вы можете сделать раздельный запрос для каждого из них, выбрав MAX(amt) из таблицы Заказов для каждого значения поля snum. GROUP BY, однако, позволит Вам поместить их все в одну команду:
SELECT snum, MAX (amt)
FROM Orders
GROUP BY snum;
GROUP BY применяет агрегатные функции независимо от серий групп, которые определяются с помощью значения поля в целом. В этом случае, каждая группа состоит из всех строк с тем же самым значением поля snum, и MAX функция применяется отдельно для каждой такой группы. Это значение поля, к которому применяется GROUP BY, имеет, по определению, только одно значение на группу вывода, также как это делает агрегатная функция. Результатом является совместимость, которая позволяет агрегатам и полям объединяться таким образом.
Вы можете также использовать GROUP BY с многочисленными полями. Совершенствуя вышеупомянутый пример далее, предположим, что вы хотите увидеть наибольшую сумму приобретений, получаемую каждым продавцом каждый день. Чтобы сделать это, вы должны сгруппировать таблицу Заказов по датам продавцов, и применить функцию MAX к каждой такой группе, подобно этому:
SELECT snum, odate, MAX ((amt))
FROM Orders
GROUP BY snum, odate;
Конечно же, пустые группы, в дни, когда текущий продавец не имел заказов, не будут показаны в выводе.
