- •Выборка данных
- •Оператор select
- •Выражения sql
- •Выражение from
- •Операции left join, right join
- •Операция inner join
- •Выражение in
- •Предикаты all, distinct, distinctrow, top
- •Объявление with owneraccess option
- •Выражение where
- •Операция Like
- •Операция In
- •Операция Between...And
- •Подзапрос
- •Выражение order by
- •Выражение group by
- •Выражение having
- •Оператор union
- •Оператор transform
- •Выражение procedure
- •Объявление parameters
- •Изменение данных
- •Оператор update
- •Оператор insert into
- •Оператор delete
- •Изменение структуры
- •Оператор select...Into
- •Оператор create table3
- •Выражение constraint4
- •Оператор alter table5
- •Оператор create index6
- •Оператор drop7
- •Агрегатные функции
- •Функция Count
- •Функция Avg
- •Функция Sum
- •Функции Var и VarP
- •Функции StDev и StDevP
- •Функции Min, Max
- •Функции First, Last
Выражение 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;
