Языки манипулирования данными. Карепова Е.Д. - 15 стр.

UptoLike

Составители: 

29
Поскольку инструкция HAVING выполняется после формирования
итогов, то условие в HAVING, наоборот, должно содержать ограничения на
столбцы только с агрегатными функциями.
Инструкция HAVING никогда не употребляется без GROUP BY.
Группировка может происходить по вычисляемым полям, т.е. инст-
рукция GROUP BY может содержать вычисляемые поля.
GROUP BY ALL игнорирует инструкцию WHERE
МНОГОТАБЛИЧНЫЕ ЗАПРОСЫ
Соединение данных из разных таблиц в однуодна из важнейших
возможностей SQL. Любое соединение можно выполнить несколькими спо-
собами: включением условия соединения в инструкцию WHERE, с помощью
оператора JOIN в инструкции FROM, созданием коррелированных запросов.
Ниже одни и те же запросы на соединение описаны различными операторами
SELECT. Поэтому сами запросы имеют уникальные номера, а различные ре-
шения одного и того же запроса пронумерованы.
Естественное соединение
Так как в нормализованной БД необходимая информация часто хра-
нится в различных таблицах, то операция натурального соединения является
одной из часто используемых. Синтаксис оператора SELECT легко позволяет
выполнить эту операцию. При использовании более чем одной таблицы пе-
ред именем поля через точку указывается имя соответствующей таблицы, а
после FROM – список необходимых таблиц. Поля связи указываются в опе-
раторе WHERE как условие совпадения.
Запрос: Указать Ф.И.О. студентов и названия дисциплин, по которым
они сдавали экзамены и оценки, полученные студентами.
Решение:
SELECT ФИО=СФам, Дисциплина=Наименование, Оценка
FROM СТУДЕНТ, УСПЕВАЕМОСТЬ, КУРС
WHERE СТУДЕНТ.ID_Stud=УСПЕВАЕМОСТЬ.ID_Stud
AND УСПЕВАЕМОСТЬ.ID_Subj=КУРС.ID_Subj
В стандарт SQL-92 добавлен также оператор NATURAL JOIN – аналог
соединения в РА. Он записывается как соединение двух результирующих
множеств операторов SELECT. Инструкции FROM этих операторов должны
содержать не более одной таблицы, причем они должны быть связаны в схе-
ме данных. Например, предыдущий запрос в этом случае может быть записан
следующим образом:
Решение (2):
SELECT ФИО=СФам FROM СТУДЕНТ
NATURAL JOIN
SELECT Оценка FROM УСПЕВАЕМОСТЬ
30
NATURAL JOIN
SELECT Дисциплина=Наименование FROM КУРС
Тета-соединение
При соединении таблицы самой с собой используются псевдонимы
таблицы. Псевдоним указывается в инструкции FROM после имени таблицы
через пробел или служебное слово AS.
Запрос 1: Указать студентов, которые сдавали экзамены и по курсу
«Базы данных» и по курсу «Высшая математика».
Решение:
SELECT DISTINCT №Студента = СТУДЕНТ.ID_Stud, ФИО = СФам
FROM СТУДЕНТ, УСПЕВАЕМОСТЬ AS У1,
УСПЕВАЕМОСТЬ AS У2, КУРС AS К1, КУРС AS К2
WHERE №Студента=У1.ID_Stud AND У2.ID_Stud=У1.ID_Stud
AND К1.ID_Subj=У1.ID_Subj AND К2.ID_Subj=У2.ID_Subj
AND К1.Наименование LIKE ‘*Б*Д*’
AND К2.Наименование LIKE ‘*В*М*
Запрос 2: Определить студентов, которые сдали экзамены не хуже сво-
их консультантов.
Решение:
SELECT DISTINCT №Студента=СТУДЕНТ.ID_Stud, ФИО=СФам,
Дисциплина=Наименование, ОценкаСт=У1.Оценка,
ОценкаКонс=У2.Оценка
FROM СТУДЕНТ, УСПЕВАЕМОСТЬ AS У1, УСПЕВАЕМОСТЬ AS У2
WHERE №Студента=У1.ID_Stud AND Консультант=У2.ID_Stud
AND У1.Оценка >= У2.Оценка AND У1.ID_Subj=У2.ID_Subj
AND У1.Семестр=У2.Семестр
Для реализации тета-соединений в SQL-92 добавлены инструкции
A JOIN B USING k,l
что эквивалентно соединению по условию равенства указанных столбцов
WHERE A.k=B.k AND A.l=B.l
и
A JOIN B ON <условие соединения>
Внешнее соединение
Внешнее соединение реализуется в стандарте SQL-89 операторами
сравнения в инструкции WHERE вида
*= включение всех записей из первой таблицы;
=* включение всех записей из второй таблицы;
Запрос 3: Вывести список студентов, предметов, которые они сдавали
и полученных оценок. Список должен включать и информацию о студентах,
еще не сдававших экзамены.