Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методическое пособие по выполнению лабораторных работ по SQL.doc
Скачиваний:
167
Добавлен:
01.05.2014
Размер:
1.22 Mб
Скачать

Наиболее часто встречающиеся ошибки при выполнении group by

Если вы сделаете попытку указать в предложении GROUP BY атрибут, которого нет в списке SELECT, то выдается сообщение об ошибке.

Пример 65

Задание.

Вывести названия всех дисциплин, по которым средняя оценка меньше 4.

Решение:

SELECT NameSubject, ROUND(AVG(Mark),1)

FROM Progress P,Subject S

WHERE P.IDSubject=S.IDSubject

GROUP BY P.IDSubject

HAVING AVG(Mark)<4

Результат реализации запроса:

Server: Msg 8120

Column 'S.NameSubject' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Другая часто встречающаяся ошибка связана с тем, что в предложении SELECT указываются атрибуты, которые не являются параметрами группировки или агрегатной функции.

Пример 66

SELECT NameSubject, P.IDSubject, ROUND(AVG(Mark),1)

FROM Progress P,Subject S

WHERE P.IDSubject=S.IDSubject

GROUP BY P.IDSubject

HAVING AVG(Mark)<4

Результат реализации запроса:

Server: Msg 8120

Column 'S.NameSubject' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Выходом из положения может быть группировка по атрибуту NameSubject.

Предложение order by

Предложение ORDERBYпозволяет выполнить сортировку результатов запроса, оно всегда ставится в конец команды SELECT. По умолчанию сортировка идет по возрастанию. Для изменения порядка сортировки используются опцииASC– возрастание или DESC – убывание. При сортировке по нескольким столбцам столбцы перечисляются через запятую.

Пример 67

Задача.

Вывести список имен студентов по возрастанию.

Решение.

SELECT StName ФИО

FROM Student

ORDER BY StName;

Результат реализации запроса:

Пример 68

Задача.

Вывести список имен и оценок студентов, расположив по возрастанию имена студентов, а также расположив для каждого студента его оценки по возрастанию.

Решение.

SELECT DISTINCT StName ФИО, Mark Оценка

FROM Student, Progress

WHERE Student.NRecordBook= Progress.NRecordBook

ORDER BY StName, Mark;

Результат реализации запроса:

Задание 17

Вывести имена и номера зачеток всех студентов, у которых нет ни одной оценки 3.

Задание 18

Вывести имена всех преподавателей, которые ведут дисциплину Базы данных.

Задание 19

Вывести все дисциплины, по которым сдается экзамен. Название дисциплин расположить в порядке возрастания.

Задание 20

Вывести имена преподавателей и название дисциплин, которые они ведут, если по этим дисциплинам выставлена хоть одна оценка.

Задание 21

Вывести имена преподавателей которые преподают как в 5 так и в 6 семестрах.

Вопросы для самоконтроля к лабораторной работе № 4

  1. Какие предложения в команде SELECT являются обязательными?

  2. Какое из предложений используется для исключения групп строк из результата запроса?

  3. C помощью какого предложения создаются группы?

  4. В каком порядке в команде SELECT должны располагаться предложения ORDER BY, GROUP BY, WHERE?

  5. В чем заключается различие между предложениями WHERE и HAVING?

  6. Всегда ли запрос, построенный с использованием предложений HAVING может быть преобразован в эквивалентный запрос без использования этого предложения?

  7. Какие предложения позволяют ограничить количество выводимых строк?

  8. В чем отличие простого запроса от сложного?

  9. С помощью каких ключевых слов в команде SELECT осуществляется проверка вхождения результата вычисления выражения в заданное множество?

  10. Какая функция используется для подсчета кортежей, отвечающих заданному условию?

  11. Какой вид будет иметь команда SELECT, реализующая операцию проекции на атрибуты AB в отношении со схемой R=ABCD?

  12. Какое из предложений команды SELECT накладывает ограничение на отбор групп?

  13. Как следует сформировать запрос к таблице R1=AB и R2=CD, чтобы получить их декартово произведение?

  14. Возможно ли используя команду SELECT реализовать операцию деления?

  15. В каких случаях нельзя для осуществления операции выбора использовать предложение WHERE?