
методические указания по лабораторной работе / методичка 4 SELECT-ЗАПРОСЫ -АГРЕГИРОВАНИЕ И ГРУППОВЫЕ ФУНКЦИИ
.docМинистерство образования и науки Российской Федерации
Саратовский государственный технический университет
Балаковский институт техники, технологии и управления
SQL: SELECT-ЗАПРОСЫ -АГРЕГИРОВАНИЕ И ГРУППОВЫЕ ФУНКЦИИ
Методические рекомендации к лабораторной работе по курсу
«Автоматизированные информационно-управляющие системы»
для студентов специальности 2101 по направлению Т-02
Одобрено
редакционно-издательским советом
Балаковского института техники,
технологии и управления
Саратов 2005
ЦЕЛЬ РАБОТЫ:
• научиться использовать агрегирующие и групповые функции.
• научиться выполнять упорядочение выходных полей с помощью ORDER BY.
-
ОБЩИЕ ПОНЯТИЯ
Агрегирующие функции позволяют получать из таблицы сводную (агрегированную) информацию, выполняя операции над группой строк таблицы. Для задания в SELECT-запросе агрегирующих операций используются следующие ключевые слова:
-
count определяет количество строк или значений поля, выбранных посредством запроса и не являющихся значениями;
-
sum вычисляет арифметическую сумму всех выбранных значений данного поля;
-
avg вычисляет среднее значение для всех выбранных значений/данною поля;
-
мах вычисляет наибольшее из всех выбранных значений данного поля;
-
min вычисляет наименьшее из всех выбранных значений данного поля.
В SELECT-запросе агрегирующие функции используются, аналогично именам полей, при этом последние (имена полей) используются в качестве аргументов этих функций.
2. СОДЕРЖАНИЕ РАБОТЫ
Задание №1 Определить среднее значения по полям МАТЕМАТИКА, ФИЗИКА, ИНФОРМАТИКА в таблице ЛИЧНЫЕ_ДАННЫЕ.
SELECT AVG(МАТЕМАТИКА), AVG(ФИЗИКА), AVG(ИНФОРМАТИКА),
FROM ЛИЧНЫЕ_ДАННЫЕ;
Для запуска запроса нажмите кнопку Запуск на панели инструментов.
Задание №2. Подсчитать общее количество строк в каждой таблице.
Для подсчета общего количества строк следует использовать функцию COUNT со звездочкой
SELECT COUNT (*)
FROM СПИСОК;
Аналогично, определить число строк в таблице ЛИЧНЫЕ_ДАННЫЕ и ГРУППЫ.
Задание №3. Требуется найти максимальное значение оценки по физике. (аналогично, по математике и информатике )
Запрос будет выглядеть следующим образом:
SELECT MAX (ФИЗИКА)
FROM ЛИЧНЫЕ_ДАННЫЕ;
Предложение GROUP BY (группировать по) позволяет группировать записи в подмножества, определяемые значениями какого-либо поля, и применять агрегирующие функции уже не ко всем записям таблицы, а раздельно к каждой сформированной группе.
Задание №4. Создать запрос на вывод кода студентов таблицы ЛИЧНЫЕ_ДАННЫЕ, сгруппировав по полю ФИЗИКА.
SELECT КОД_СТУДЕНТА, ФИЗИКА
FROM ЛИЧНЫЕ_ДАННЫЕ
GROUP BY ФИЗИКА, КОД_СТУДЕНТА;
В этом случае строки вначале группируются по значениям первого столбца, а внутри этих групп — и подгруппы но значениям второго столбца. Таким образом, GROUP BY не только устанавливает столбцы, по которым осуществляется группирование, но и указывает порядок разбиения столбцов на группы.
Следует иметь в виду, что в предложении GROUP BY должны быть указаны все выбираемые столбцы, приведенные после ключевого слова SELECT, кроме столбцов, указанных в качестве аргумента в агрегирующей функции.
При необходимости часть сформированных с помощью GROUP BY групп может быть исключена с помощью предложения HAVING.
Предложение HAVING определяет критерий, по которому группы следует включать в выходные данные, по аналогии с предложением WHERE которое осуществляет это для отдельных строк.
Задание №5. Выбрать из таблицы ГРУППЫ информацию о преподавателях, сгруппировав их по ФИО, часы которых больше 17ч.
SELECT ПРЕПОДАВАТЕЛЬ, MAX(ЧАСЫ)
FROM ГРУППЫ
GROUP BY ПРЕПОДАВАТЕЛЬ
HAVING MAX (ЧАСЫ) >17;
В условиях, задаваемом предложением HAVING, указывают только поля или выражения, которые на выходе имеют единственное значение для каждой
выводимой группы.
3. ПУСТЫЕ ЗНАЧЕНИЯ (NULL) В АГРЕГИРУЮЩИХ ФУНКЦИЯХ
Наличие пустых (NULL) значений в полях таблицы определяет особенности выполнения агрегирующих операций над данными, которые следует учитывать в SQL-запросах.
Влияние NULL-значений в функции COUNT.
Если аргумент функции COUNT является константой или столбцом без пустых значений, то функция возвращает количество строк, к которым применимо определенное условие или группирование.
Если аргументом функции является столбец, содержащий пустое значение, то COUNT вернет число строк, которые не содержат пустые значения и к которым применимо определенное в COUNT условие или группироиапие.
Если бы механизм NULL не был доступен, то неприменимые и отсутствующие значения пришлось бы исключать с помощью конструкции WHERE.
Поведение функции COUNT(*) не зависит от пустых значений. Она возвратит общее количество строк в таблице.
Влияние NULL-значений и функции AVG.
Среднее значение множества чисел равно сумме чисел, деленной на число элементов множества. Однако если некоторые элементы пусты (т.е. их значения неизвестны или не существуют), деление на количество всех элементов множества приведет к неправильному результату.
AVG вычисляет среднее значение всех известных значений множества элементов, то сеть эта функция подсчитывает сумму известных значений и делит ее на количество этих значений, а не на общее количество значений, среди которых могут быть, NULL-значения. Если столбец соcтоит только из пустых значении, то функция AVG также возвратит NULL.
4. УПОРЯДОЧЕНИЕ ВЫХОДНЫХ ПОЛКИ (ORDER BY)
Записи в таблицах реляционной базы данных не упорядочены. Однако данные, выводимые в результате выполнения запроса, могут быть упорядочены. Для этого используется оператор ORDER BY, который позволяет упорядочивать выводимые записи в соответствии со значениями одного или нескольких выбранных столбцов. При этом можно задать возрастающую (ASC) или убывающую (DESC) последовательность сортировки для каждого из столбцов. По умолчанию принята возрастающая последовательность сортировки.
Задание №6. Выбрать все данные из таблицы СПИСОК с упорядочением по ФАМИЛИЯМ
SELECT *
FROM СПИСОК
ORDER BY ФАМИЛИЯ;
Задание №7. Выбрать все данные из СПИСОК с упорядочением в обратном порядке по ИМЕНАМ.
SELECT *
FROM СПИСОК
ORDER BY ИМЯ DESC;
Задание №8. Упорядочить, выводимые данные из таблицы СПИСОК по фамилиям, а внутри полученных групп - по именам.
SELECT *
FROM СПИСОК
ORDER BY ФАМИЛИЯ, ИМЯ;
Предложение ORDER BY может использоваться с GROUP BY упорядочения гpvпп записей. При этом оператор ORDER BY в запросе всегда должен быть последним.
При упорядочении вместо наименований столбцов можно указывать их номера, имея, однако, в виду, что в данном случае это номера столбцов, указанные при определении выходных данных в запросе, а не номера столбцов в таблице. Полем с номером 1 является первое поле, указанное в предложении ORDER BY - независимо от его расположения в таблице.
Задание №9. Выбрать из таблицы СПИСОК информацию о коде студента и стипендии, упорядочив значение стипендии по убыванию.
SELECT КОД, СТИПЕНДИЯ
FROM СПИСОК
ORDER BY 2 DESC;
В этом запросе выводимые записи будут упорядочены по полю СТИПЕНДИЯ.
Если в поле, которое используется для упорядочения, существуют значения, то все они размещаются и конце или предшествуют всем остальным значениям этого поля.