Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
управление данными методичка.docx
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
522.34 Кб
Скачать

Подзапросы с exists и not exists

EXISTS означает примерно "если подмножество не пусто", соответственно NOT EXISTS означает "если подмножество пусто". Используются в подзапросах.

Пример: Найти всех преподавателей, которые не ведут ни одного предмета

SELECT *

FROM преподаватели

WHERE NOT EXISTS

(SELECT *

FROM группы_дисциплины

WHERE Преподаватели.Код = группы_дисциплины.код_преп)

Во внешнем запросе перебираются строки таблицы Преподаватели, и для каждого преподавателя выполняется подзапрос – ищутся строки в таблице Группа_Дисциплина с кодом данного преподавателя. Если внутренний запрос возвращает пустую таблицу, то внешний запрос заносит строку с информацией о данном преподавателе в результирующую таблицу.

Пример: Найти всех студентов из группы Гр2, у которых есть хоть одна 3-ка.

SELECT *

FROM студенты

WHERE код_группы IN

( SELECT код FROM Группы WHERE название ="Гр2" )

AND EXISTS

(SELECT *

FROM сессия

WHERE студенты.код = сессия.код_студ AND оценка = 3 )

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

Второй подзапрос возвращает записи таблицы сессия, в которых код студента равен коду проверяемого студента и оценка равна 3. Второе условие истинно, если подзапрос вернет таблицу хотя бы с одной строкой.

Если оба условия для данного студента выполняются, то внешний запрос заносит информацию о нем в результирующую таблицу.

Контрольные задания.

  1. Получить список студентов с указанием группы, у которых нет отметок. ( Нет записей в таблице “Сессия”)

  2. Получить список предметов, которые неизвестно кто ведет.

Лабораторная работа № 5

Функции агрегирования.

Цель работы: получить представление о способах использования агрегатных функций внутри запросов на выборку.

Краткие теоретические сведения

Агрегатные функции применяются для обобщения значений одного поля таблицы. Они дают единственное значение для целой группы строк таблицы.

Ниже приводится список этих фунцкий:

COUNT определяет количество строк или значений поля, выбранных посредством запроса и не являющихся NULL-значениями.

SUM вычисляет арифметическую сумму всех выбранных значений данного поля.

AVG вычисляет среднее арифметическое всех выбранных значений данного поля.

MAX, MIN – возвращают максимальное и минимальное значения из всех выбранных значений данного поля.

Содержание работы

Count()

Пример: Сколько всего студентов 1-го курса в базе

SELECT "количество студентов = ", COUNT(*)

FROM студенты, группы

WHERE студенты.код_группы = группы.код

AND группы.N_курса = 1

Присоединяем к строкам таблицы Студенты информацию из таблицы Группы (в таблице Группы присутствует поле номер курса). Подсчитываем количество строк полученной таблицы, в которых номер курса = 1.

SUM()

Пример: Посчитать количество часов учебной нагрузки у преподавателя c кодом 1

SELECT Sum(группы_дисциплины.часов)

FROM Дисциплины, группы_дисциплины

WHERE (Дисциплины.код = группы_дисциплины.код_дисц) AND

(группы_дисциплины.код_преп=1);

MAX()

Пример: Поиск максимального номера студента

SELECT MAX(код)

FROM студенты

Аналогично функции MAX работает функция MIN.

Контрольные задания

1. Посчитать количество пятерок у студентов группы Гр1

2. Посчитать, сколько зачетов должны сдать студенты группы Гр1.

Группировка данных

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

Пример: Найти, сколько студентов в каждой группе

SELECT код_группы, COUNT(*)

FROM студенты

GROUP BY код_группы

Группировка идет по полю код_группы - все данные с одинаковым значением этого поля группируются и подсчитывается число записей в каждой такой группе.

Контрольное задание

Подсчитать количество часов учебной нагрузки на каждой кафедре

Отбор групп

Выбирать можно не только записи, но и группы. Для этого используется предложение HAVING. Использовать агрегатные функции в предложение WHERE нельзя.

Пример: напечатать список групп, в которых количество пятерок у студентов больше 10 на группу.

SELECT название, 'кол-во пятерок ',COUNT(*)

FROM группы, студенты, сессия

WHERE группы.код=студенты.код_группы

AND студенты.код=сессия.код_студ

AND сессия.оценка=5

GROUP BY группы.название

HAVING COUNT(*) > 10

Контрольное задание

Найти студентов, которые не сдали 2 и более предметов.

Содержание отчета

Отчет должен содержать текст запросов, предложенных в контрольных заданиях.

Лабораторная работа № 6.

Запросы на изменение

Цель работы: Получить представление о способах использования запросов на изменение

Содержание работы

Вставка записей в таблицу

Все стоки в SQL вводятся при помощи команды обновления INSERT. В простейшем случае команда INSERT имеет синтаксис:

INSERT INTO <имя таблицы> (<поле1>, <поле2>…)

Values (<значение>, <значение>… );

Пример: Добавить нового студента

INSERT INTO студенты (код, фамилия, имя, отчество, код_группы)

VALUES ( 11, "Сидоров", "Олег", "Петрович", 2)

Вставка записей из другой таблицы

Команду INSERT можно применить для того, чтобы извлечь значения из одной таблицы и разместить их в другой, воспользовавшись для этого запросом. Для этого достаточно заменить предложение VALUES на соответствующий запрос.

Пример: Физика читается у всех групп 1 курса Мироновым (его код = 2). Внести соответствующие записи в таблицу Группы_Дисциплины.

INSERT INTO Группы_Дисциплины (код_дисц,код_группы,код_преп)

SELECT дисциплины.код,группы.код , 2

FROM Дисциплины,Группы

WHERE Дисциплины.название = 'Физика'

AND Группы.N_курса=1