Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SQL.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
327.17 Кб
Скачать

Выражение order by

Сортирует результат запроса по указанному полю/полям в порядке возрастания (по умолчанию) или убывания. Формат

SELECT fieldlist FROM table WHERE selectcriteria [ORDER BY field1 [ASC | DESC ][, field2 [ASC | DESC ]][, ...]]]

Оператор SELECT, содержащий выражение ORDER BY, имеет следующие части:

Часть

Описание

fieldlist

Имя выбранного поля или полей, их псевдонимы, агрегатные функции SQL, предикаты выбора ALL, DISTINCT, DISTINCTROW или TOP и т.п.

table

Имя таблицы – источника данных (см. выражение FROM)

selectcriteria

Критерий отбора. Microsoft Jet сортирует результат после применения критерия.

field1, field2

Имена полей, по которым проводится сортировка

Выражение ORDER BY не обязательно, но если нужно упорядочить результат – необходимо. ORDER BY обычно последний элемент оператора SQL.По умолчанию результат сортируется по возрастанию (от A до Z, от 0 до 9). Следующие два оператора сортируют фамилии по возрастанию:

SELECT LastName, FirstName FROM Employees ORDER BY LastName;

SELECT LastName, FirstName FROM Employees ORDER BY LastName ASC;

Для сортировки по убыванию (от Z до A, от 9 до 0) после имени поля указывается служебное слово DESC. Следующий оператор сортирует в порядне убывания окладов:

SELECT LastName, Salary FROM Employees ORDER BY Salary DESC, LastName;

Если в выражении указаны Memo поле или OLE объект, происходит ошибка – Microsoft Jet не сортирует поля этих типов. Если в выражении указано несколько полей, то сначала результат сортируется по первому полю, внутри одинаковых значений первого поля – по второму полю, и т.д.

В Microsoft Access выражение эквивалентно установке значения в ячейке Sort конструктора запросов.

Для выполнения следующего примера нужно создать новый запрос в базе Northwind и ввести в режиме SQL

SELECT LastName, FirstName FROM Employees ORDER BY LastName DESC;

– результат тот же, что и в процедуре. Запрос

SELECT CategoryID, ProductName, UnitPrice FROM Products ORDER BY CategoryID, ProductName;

Сортирует сперва по CategoryID, а затем по ProductName.

Выражение group by

Используется в запросах, содержащих агрегатные функции (агрегатные функции формируют одну запись на основе нескольких записей источника, например выбирают запись с максимальным значением поля), группирует записи, содержащие одинаковые значения в перечисленных полях, в единую запись и вычисляет для каждого набора указанную в SELECT агрегатную функцию, например Sum или Count. Формат

SELECT fieldlist FROM table WHERE criteria [GROUP BY groupfieldlist]

Оператор SELECT, содержащий выражение GROUP BY, имеет следующие части:

Часть

Описание

fieldlist

Имя поля/полей с псевдонимами, агрегатные функции, предикаты ALL, DISTINCT, DISTINCTROW, TOP, и т.п.

table

Имя таблицы/таблиц с данными (см. FROM)

criteria

Критерий отбора – выражение, которому должны удовлетворять записи, попадающие в запрос. Если есть выражение WHERE, Microsoft Jet группирует записи после наложения этого условия.

groupfieldlist

Имена полей для группировки (до 10). Порядок перечисления определяет уровень группировки от высшего к низшему.

Выражение GROUP BY не обязательно, итоговые величины не выводятся, если SELECT не содержит агрегатрных функций. Значения Null участвуют в группировке, но не обрабатываются агрегатными функциями. Для фильтрации исходных записей используется выражение WHERE, HAVING фильтрует сгруппированные записи.

В список полей GROUP BY можно включать любые поля из любых таблиц, перечисленных в выражении FROM, даже не включенные в список , не Memo и не OLE-поля. Все поля в списке SELECT должны быть либо в списке GROUP BY, либо быть аргументами агрегатных функций.

Средняя цена всех товаров каждого поставщика:

SELECT SupplierID, Avg(UnitPrice) AS AvgOfUnitPrice FROM Products GROUP BY SupplierID;

Максимальная цена товаров по каждой категории:

SELECT CategoryID, Max(UnitPrice) AS MaxOfUnitPrice FROM Products GROUP BY CategoryID;

Число заказов для каждого служащего:

SELECT EmployeeID, Count(OrderID) AS CountOfOrderID FROM Orders GROUP BY EmployeeID;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]