- •Введение
- •Лабораторное занятие № 1
- •Описание учебного примера.
- •Удаление таблиц
- •Создание таблиц
- •Имена ограничений
- •Ограничения null и not null
- •Ограничение primary key
- •IdSubject, idReport, nTerm));
- •Ограничение unique
- •Ограничение Foreign key
- •Ограничение check
- •Вопросы для самоконтроля к лабораторной работе № 1
- •Лабораторная работа № 2
- •Команда вставки - insert
- •Команда обновления - update
- •Команда удаления - delete
- •Вопросы для самоконтроля к лабораторной работе № 2
- •Лабораторная работа №3
- •Команда alter table
- •Модификация ограничений
- •Добавление ограничений с ограниченной областью проверки
- •Отключение и подключение ограничений
- •Правила для изменения и модификации описания столбцов
- •Добавление столбца
- •Модификация столбца
- •Удаление столбца
- •Удаление таблицы
- •Переименование таблицы
- •Вопросы для самоконтроля к лабораторной работе № 3
- •Лабораторная работа № 4
- •Выборка данных из нескольких таблиц
- •Определение условий выборки в предложении where.
- •Групповые функции и предложение group by
- •Наиболее часто встречающиеся ошибки при выполнении group by
- •Предложение order by
- •Вопросы для самоконтроля к лабораторной работе № 4
- •Лабораторная работа № 5
- •Подзапросы
- •Inner join Student s
- •Inner join Student s
- •Inner join
- •Inner join Student s
- •Вопросы для самоконтроля к лабораторной работе № 5
- •Лабораторная работа №6
- •Представления
- •Вопросы для самоконтроля к лабораторной работе № 6
- •Лабораторная работа №7
- •Хранимые процедуры
- •Оператор use
- •Оператор declare
- •Операторы set и select
- •Функция @@identity
- •Функция @@error
- •Объявление параметров
- •Изменение хранимых процедур
- •Удаление хранимой процедуры
- •Лабораторная работа №8
- •If exists
- •Вопросы для самоконтроля к лабораторной работе № 8
- •Задания в тестовой форме
- •Литература Оглавление
Inner join Student s
on P.NRecordBook=S.NRecordBook
GROUP BY IDGroup) b
ON S.IDGroup=b.IDGroup
WHERE mark>BMark
Результат реализации запроса:
Пример 74
Задача.
Вывести имена студентов, чьи средние оценки равны средней оценке в их группе.
Решение:
SELECT a.StName,a.NRecordBook,Amark,Bmark
FROM (SELECT p.NRecordBook,StName,IDGroup,AVG(Mark) Amark
FROM Progress P
Inner join Student s
ON P.NRecordBook=S.NRecordBook
GROUP BY P.NrecordBook,StName,IDGroup) a
Inner join
(SELECT IDGroup,AVG(Mark) Bmark
FROM Progress P
Inner join Student s
on P.NRecordBook=S.NRecordBook
GROUP BY IDGroup) b
ON a.IDGroup=b.IDGroup
WHERE Amark=Bmark
Результат реализации запроса:
Задание 25
Вывести имена студентов отличников и название предметов, по которым они сдавали экзамены.
Задание 26
Вывести все названия видов отчетности и названия дисциплин по тем дисциплинам, по которым не было получено ни одной отличной оценки.
Подзапрос в команде INSERT
Задача.
Добавить в таблицу Student записи из таблицы Student1.
Решение:
INSERT INTO Student
SELECT NRecordBook, Sname, CodeGroup
FROM Student1;
Или, если порядок столбцов в обеих таблицах одинаковый,
INSERT INTO Student
SELECT *
FROM Student_1;
Подзапрос в команде UPDATE
Пример 75
Задача.
Внести в столбец MarkAVG таблицы Student среднюю оценку студента. Предварительно нужно создать такой столбец в таблице Student с помощью команды:
alter table Student
add MarkAVG decimal(3,2)
Решение:
UPDATE Student
SET MarkAVG =
(SELECT AVG(Mark)
FROM Progress
GROUP BY NRecordBook
HAVING Student. NRecordBook= Progress. NRecordBook) ;
Просмотрим результат с помощью запроса:
Select StName ФИО, MarkAVG [Средняя оценка]
from Student
Результат реализации запроса:
Подзапрос в команде DELETE
Пример 76
Задача.
Удалить из таблицы Student студентов тех групп, которые встречаются в таблице Progress меньше 5 раз.
Решение:
DELETE FROM Student
WHERE IDGroup IN
(SELECT IDGroup
FROM Progress Pr, Student St
WHERE Pr. NRecordBook= St .NRecordBook
GROUP BY IDGroup
HAVING Count(IDGroup)< 5 ) ;
Объединение двух или более запросов с помощью UNION
UNION – специальный оператор, с помощью которого можно из двух или более запросов построить единое результирующее множество, т.е. выходные данные одного запроса присоединяются к выходным данным другого запроса.
Основные правила при реализации операций над множествами
запросы, соединяемые оператором UNION должны иметь одинаковое количество столбцов в предложении SELECT;
возвращаемый комбинированный результат будет иметь заголовки столбцов первого предложения SELECT;
тип данных каждого столбца должен быть совместим с типом данных соответствующего столбца другого запроса;
по умолчанию режимом вывода для UNION является DISTINCT.
Пример 77
Задача.
Получить все записи о студентах, фамилии которых начинаются на букву 'М' или 'И'.
Решение.
SELECT NRecordBook,StName
FROM Student
WHERE SUBSTRING(StName,1,1)= 'М'
UNION
SELECT NRecordBook,StName
FROM Student
WHERE SUBSTRING7(StName,1,1)= 'И'
Результат выполнения запроса.
Результатом выполнения этой операции будет вывод только уникальных имен студентов, ни одно имя не будет повторено дважды.
select StName
FROM Student
WHERE StName='Иванов И.И.'
UNION all
select StName
FROM Student
WHERE SUBSTRING(NRecordBook,6,1)='1'
После выполнения операции UNION ALL каждое имя будет выведено столько раз, сколько раз оно встречается в запросах.
Результат выполнения запроса.
Предложение ORDER BY в операциях над множествами может стоять только в последнем предложении запроса, при этом вместо имен столбцов используются их номера из предложения SELECT.
Пример 78
Задача.
Вывести всех студентов, у которых есть или отличные или хорошие оценки.
Решение.
SELECT StName ФИО, Mark Оценка
FROM Student s, Progress p
WHERE s.NRecordBook=p.NRecordBook
AND Mark=5
UNION
SELECT StName,Mark
FROM Student s,Progress p
WHERE s.NRecordBook=p.NRecordBook
AND Mark=4
ORDER BY 1
Результат выполнения запроса.
Задание 27
Используя операторы над множествами, вывести имена всех студентов, которые сдали экзамен по дисциплине Проектирование баз данных или по дисциплине Организация баз данных.