FROM оценка
GROUP BY osnum;
HAVING AVG (ocen) >= 4;
Результат:
osnum |
AVG (ocen) |
001 |
5 |
002 |
4 |
Вопросы темы:
1. Форматирование выходных данных запросов.
2. Соединение таблиц.
3. Вложенные подзапросы.
4. Связанные подзапросы. Оператор EXISTS.
5. Вложенные и связанные подзапросы. Операторы ANY, ALL, SOME
1. Форматирование выходных данных запросов.
Во многих СУБД, которые используют SQL, имеются специальные средства, позволяющие оформить результат запросов. Эти средства позволяют получить пользователю нечто больше, чем значения полей и функций агрегирования. В предложении SELECT наряду с именами полей могут указываться константы и выражения над полями. Например:
SELECTosnum, «Недобрано баллов = »,
5 – ocenFROM оценка;
Результат:
osnum |
AVG (ocen) |
|
001 |
Недобрано баллов = |
0 |
002 |
----//---- |
1 |
003 |
----//---- |
2 |
… |
… |
По стандарту SQL столбцы с константами и выражениями не имеют имени. MS ACCESS позволяет поименовать эти столбцы с помощью ключевого слова AS имя_столбца. Для нашего примера:
SELECTosnum, «Недобрано баллов = »,
5 – ocenAS «Баллы до 5»;
Результат:
osnum |
AVG (ocen) |
|
001 |
Недобрано баллов = |
0 |
002 |
----//---- |
1 |
003 |
----//---- |
2 |
… |
… |
Результаты выполнения запроса могут быть упорядочены по значению одного или нескольких столбцов путём указания предложения ORDERBY поле [ASC/DESC], … [ASC/DESC], где ASC – сортировка по возрастанию, DESC – сортировка по убыванию.
Пример:
Упорядочить данные из таблицы студентов по возрастанию кодов студентов и убыванию полученных оценок.
SELECT osnum, odate, ocen
FROM оценка
ORDER BY osnum, ocen DESC;
Результат:
osnum |
odate |
ocen |
001 |
10/01/01 |
5 |
001 |
15/01/01 |
5 |
002 |
11/01/01 |
4 |
003 |
17/01/01 |
4 |
003 |
11/01/01 |
3 |
003 |
16/01/01 |
2 |
Предложение ORDERBY может совместно использоваться с GROUPBY, при этом, операция сортировки всегда реализуется по концу выполнения запроса, над уже построенной таблицей.
Пример:
SELECT osnum, AVG (ocen)
FROM оценка
GROUP BY osnum
ORDER BY osnum;
Результат:
osnum |
AVG (ocen) |
001 |
5 |
002 |
4 |
003 |
3 |
Может потребоваться отсортировать таблицу по значениям вычисляемого столбца, не имеющего имени. В таком случае, запрос будет иметь вид:
SELECT osnum, AVG (ocen)
FROM оценка
GROUP BY osnum
ORDER BY AVG (ocen);
Результат:
osnum |
AVG (ocen) |
003 |
3 |
002 |
4 |
001 |
5 |
По стандарту SQL такой запрос является ошибочным, но многие системы, в том числе и MS ACCESS, его воспринимают и отрабатывают. По стандарту SQL в предложении ORDERBY необходимо указывать не имя столбца, а его номер:
SELECT osnum, AVG (ocen)
FROM оценка
GROUP BY osnum
ORDERBY 2;
Номер столбца можно указывать и для столбца с именем, но нужно помнить, что номер столбца – это всегда номер столбца в запросе, а не в таблице, по которой строится запрос. Если в поле, которое используется для упорядочения данных, существует NULL-значения, т.е. значения не заданы, то они всегда располагаются в начале или в конце таблицы. Конкретный вариант стандартом не оговаривается, и вопрос решается индивидуально для каждой СУБД.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.