Динамика роста объемов продаж предприятий. Динамика роста объемов продаж предприятий. Появление и развитие персональных компьютеров, страница 7

Вывести список студентов, пришедших на экзамен, но не сдавших его (нет оценки).

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. Если при описании структуры таблицы задан обязательный столбец, то вводить значение в поле обязательно.