Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методическое пособие по выполнению лабораторных работ по SQL.doc
Скачиваний:
167
Добавлен:
01.05.2014
Размер:
1.22 Mб
Скачать

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

Используя операторы над множествами, вывести имена всех студентов, которые сдали экзамен по дисциплине Проектирование баз данных или по дисциплине Организация баз данных.