SELECT поле1, групповая функция (поле2) [,…] FROM таблица
GROUP BY поле1
[HAVING условие отбора для групповых данных]
GROUP BY
разбивает таблицу на группы, групповая функция возвращает один результат на группу
Примечание 1. Список столбцов (полей) в GROUP BY обязателен.
Примечание 2. Использование псевдонимов не допустимо.
Примечание 3. Все столбцы, которые входят в список SELECT и к которым не применяются групповые функции, должны быть указаны в GROUP BY.
Групповые функции работают с множеством строк и возвращают один результат на группу.
Множество строк может быть целой таблицей или таблицей разбитой на группы.
Групповые функции
COUNT(поле) – считает только те записи, в которых задано значение
COUNT(*) – считает все записи
AVG(поле) и SUM(поле) применяются к числовым полям
MAX(поле) и MIN(поле) – к полям любого типа
Задание1 Посчитать количество студентов в каждой группе
SELECT gr AS [группа], COUNT(n) AS [количество] FROM student
GROUP BY gr
Изменение данных в таблице
UPDATE таблица SET поле1=новое значение1 [,поле2=новое значение2…] [WHERE условия отбора]
ПРИМЕР
Поменять фамилию студентки из группы П-323
UPDATE student SET fam=“Кузнецова” WHERE fam=“Иванова” AND gr=“П323”
Удаление записей
DELETE * FROM таблица [WHERE условия отбора]
ПРИМЕР
Удалить из таблицы сотрудники тех сотрудников, у которых трудовой стаж меньше года.
DELETE * FROM sort WHERE year(NOW())-year([date])<1
Добавление записи в таблицу:INSERT INTO имя_таблицы [(поле1[,поле2[, ...]])] VALUES (значение1 [,значение2 [, ...]) Пример: INSERT INTO Сотрудники (Номер, Имя, Фамилия, Должность) VALUES (5, 'Борис', 'Колесников', 'Ученик'); Если номер-счётчик, его значение не вводится. Контрольные вопросы:
Назначение предикатов distinct и top в операторе SELECT.
Назначение ключевого слова GROUP BY в операторе SELECT.
Назовите групповые функции и их назначение.
Чем отличается условие отбора записей, указанное в WHERE, от условия отбора записей в HAVING?
Может ли в групповом запросе отсутствовать GROUP BY? Если может, то в каком случае?
Отчёт
по практической работе №6
студента Талайбек Уулу Ынтымак группы З-207к
Тема: «Сложные запросы»
Цель: «Научиться писать запросы к БД на языке SQL»
Выполнение работы
Записать отлаженные SQL команды:
1. SELECT TOP 3 Фамилия
FROM Студенты
ORDER BY Фамилия DESC
2. SELECT DISTINCT Студенты.Код_специальности
FROM Студенты
WHERE (((Студенты.[Код_специальности])<>"Ложь"));
3. SELECT Студенты.Фамилия
FROM Студенты
WHERE Студенты.Фамилия Like "[АМ*АНВ]*";
4. SELECT Имя
FROM Студенты
WHERE пол=[Введите пол]
5. UPDATE Студенты
SET Фамилия = [введите фамилию]
WHERE Номер=(select top 1 Номер FROM Студенты WHERE Пол=[введите пол] ORDER BY
Номер desc);
6. DELETE *
FROM Студенты
WHERE year(now())-Year(дата_рождения)>20;
7. UPDATE Студенты SET Группа = Left(Группа,2) & Mid(Группа,3,1)+1 &Right (Группа,2)
WHERE Mid(Группа,3,1)<4
8. SELECT TOP 1 Студенты.Имя, Count(*) AS Выражение1
FROM Студенты
WHERE (((Студенты.[Пол])=[Введите пол]))
GROUP BY Студенты.Имя
ORDER BY Count(*) DESC;
9. SELECT TOP 1 Оценка, Count(*) AS Количество1
FROM Успеваемость
WHERE (((Успеваемость.[Оценка])=[Введите Оценку]))
GROUP BY Успеваемость.Оценка
ORDER BY Count(*) DESC;
10. SELECT Студенты.Дата_рождения
FROM Студенты
WHERE Day (Дата_рождения)<=15
SELECT Студенты.Дата_рождения
FROM Студенты
WHERE Day (Дата_рождения)>= 15
11. SELECT TOP 1 Группа, Count(*)
FROM Студенты
GROUP BY Студенты.Группа
ORDER BY Count(*) DESC;
Ответы на контрольные вопросы
1. Предикат DISTINCT предназначен для удаления строк – дубликатов.
Предикат TOP позволяет выбрать первые n отсортированных записей.
2.GROUP BY разбивает таблицу на группы, групповая функция возвращает один результат на
группы.
3. COUNT(поле) – считает только те записи, в которых задано значение
COUNT(*) – считает все записи
AVG(поле) и SUM(поле) применяются к числовым полям
MAX(поле) и MIN(поле) – к полям любого типа
COUNT(поле) – считает только те записи, в которых задано значение
COUNT(*) – считает все записи
AVG(поле) и SUM(поле) применяются к числовым полям
MAX(поле) и MIN(поле) – к полям любого типа
4. WHERE условия отбора, а HAVING условие отбора для групповых данных.
5. GROUP BY не является обязательным предложением.
Если оно присутствует в предложении SELECT, то располагается после предложения FROM.
Если используются групповые функции, а предложение
GROUP BY отсутствует, то роль группы играет вся совокупность исходных записей запроса.