Вывести список студентов, пришедших на экзамен, но не сдавших его (нет оценки).
SELECT ФИО, Дисциплина
FROM R1
WHERE Оценка IS NULL;
Применение агрегатных функций.
Агрегатные функции позволяют вычислять обобщенные групповые значения, т. е. предполагается, что есть группировка:
COUNT - количество строк или непустых значений полей, которые будут выбраны в запросе.
В выражении COUNT (*) символ * означает подсчет всех строк в группе.
SUM (поле) - сумма значений, аргумент - числовое значение.
AVG (поле) - среднее арифметическое из всех значений.
MIN (поле), MAX (поле) - минимальное и максимальное значения (могут быть символьные данные).
Все агрегатные функции используются подобно именам полей, но имя поля здесь используется как аргумент.
Пример.
R1=<ФИО, Дисциплина, Оценка> R2=<ФИО, Группа> R3=<Группа, Дисциплина>
Посчитать количество студентов, сдавших экзамен по всем дисциплинам.
SELECT Дисциплина, COUNT(*)
FROM R1
GROUP BY Дисциплина;
Если агрегатная функция используется без операции предварительной группировки, то все отношения рассматриваются как одна группа.
SELECT COUNT(*)
FROM R1
WHERE Оценка>2;
Результатом этого запроса будет одна строка.
Аргументом агрегатных функций могут быть отдельные столбцы таблицы. Для того, чтобы вычислить количество различных элементов столбца, перед именем столбца указывается DISTINCT.
Пример.
Вывести количество различных оценок по дисциплине.
SELECT Дисциплина, COUNT( DISTINCT Оценка )
FROM R1
WHERE Оценка IS NOT NULL
GROUP BY Дисциплина;
В результат можно включать несколько полей группировки и несколько агрегатных функций. При этом группы образуются по набору заданных полей.
Пример.
Определить для каждой группы и дисциплины количество успешно сдавших экзамены студентов и средний балл.
SELECT R1.Дисциплина, R2.Дисциплина, COUNT( * ), AVG(R1.Оценка)
FROM R1, R2
WHERE R1.ФИО= R2.ФИО AND R1.Оценка>2
GROUP BY R2.Группа, R1.Дисциплина
ORDER BY R2.Группа;
Агрегатные функции использовать в WHERE нельзя, если есть группировка; их можно использовать в HAVING.
Пример.
Вывести те группы, в которых по одной дисциплине на экзамене получено более одной двойки.
SELECT R2.Группа
FROM R1, R2
WHERE R1.ФИО= R2.ФИО AND Оценка=2
GROUP BY R2.Группа, R1.Дисциплина
HAVING COUNT(*)>1;
Аргументы HAVING должны иметь единственные значения для группы. Если такого ……………
Результат выполнения HAVING - это таблица, которая содержит те группы строк, для которых результат вычисления условия истина. Если HAVING присутствует в таблице, где нет группировки, то результат выполнения либо пустая таблица, либо как одна группа.
Вложенные запросы.
SQL позволяет вкладывать один запрос в другой. Это означает, что результат вложенного запроса генерирует значение, которое проверяется в предикате внешнего запроса. Вместе с подзапросом можно использовать предикат EXIST, если результат не пустой. В подзапросе можно использовать синонимы таблиц, заданных во внешнем запросе.
Примеры.
Вывести список тех, кто сдал все положенные экзамены.
SELECT ФИО
FROM R1 AS A
WHERE Оценка>2
GROUP BY ФИО
HAVING COUNT(*)=
(SELECT COUNT(*)
FROM R2, R3
WHERE R2.Группа = R3.Группа AND A.ФИО= R2.ФИО)
Вывести список тех, кто должен был сдавать экзамен по БД, но пока не сдал.
SELECT ФИО
FROM R2 AS A, R3
WHERE R2.Группа = R3.Группа AND R3.Дисциплина= 'БД' AND NOT EXIST
(SELECT ФИО
FROM R1
WHERE R1.ФИО= A.ФИО AND R1.Дисциплина='БД')
Операторы манипулирования данными.
1. Оператор ввода данных.
INSERTINTO таблица
[(столбцы)]
VALUES (значения)
С помощью оператора можно ввести данные только в одну строку. Список столбцов необязателен, если вводятся значения во все поля. Если значения столбцов не вводятся, то они получают значение NULL. Если при описании структуры таблицы задан обязательный столбец, то вводить значение в поле обязательно.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.