Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpory_v2.doc
Скачиваний:
50
Добавлен:
26.08.2019
Размер:
231.42 Кб
Скачать
  1. Многотабличные запросы. Состояние справочной целостности. Использование псевдонимов.

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

Предполагается, что созданы следующие таблицы:

STUDENT (SNUM, SFAM, SIMA, STIP)

USPEV (UNUM, OCENKA, UDATA, SNUM, PNUM)

PREDMET (PNUM, PNAME, TNUM)

TEACHER (TNUM, TFAM, TIMA, TDATE)

UDATA – дата оценки

TDATE – день рождения учителя

  1. Вывод фамилии преподавателя и предмет, который он ведет

SELECT TEACHER.TFAM, PREDMET.PNAME;

FROM TEACHER, PREDMET;

WHERE TEACHER.TNUM=PREDMET.TNUM

Эти таблицы уже были соединены через поле TNUM. Эта связь называется состоянием справочной целостности. Объединение многотабличных запросов, которые используют предикаты, основанные на равенствах – объединение по равенству. Этот же подход может использоваться для объединения вместе двух копий одиночной таблицы. Когда объединяется таблица сама с собой, все повторяемые имена столбца заполняются префиксами имени таблицы. Чтобы ссылаться к этим столбцам внутри запроса, необходимо иметь 2 различных имени для этой таблицы. Это можно сделать с помощью определения временных имен, называемых псевдонимами, которые определяются в предложении FROM запроса.

  1. Вывод фамилий студентов, имеющих одинаковый размер стипендии

SELECT FIRST.SFAM, SECOND.SFAM, FIRST.STIP;

FROM STUDENT FIRST, STUDENT SECOND; WHERE FIRST.STIP=SECOND.STIP

FIRST, SECOND - псевдонимы

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

  1. Использование union для объединения результатов инструкций select.

UNION объединяет информацию из 2-х и более отдельных запросов SELECT в один курсор или таблицу. При этом в команде SELECT можно использовать до 10 членов UNION, связывая каждую инструкцию SELECT с предыдущей. Результирующий набор, созданный первой командой SELECT, определяет требуемую структуру для остальных команд SELECT. Порядок, количество, размер и тип полей в первой команде SELECT определяет структуру для всех последующих команд SELECT.

Например, для получения списка всех студентов и преподавателей фамилии которых заключены между буквами «К» и «С»:

SELECT SFAM, SIMIA FROM STUD;

WHERE SFAM BETWEEN ‘K’ AND ‘C’;

UNION;

SELECT TFAM, TIMIA FROM TEACHER;

WHERE TFAM BETWEEN ‘K’ AND ‘C’

Когда 2 или более запросов подвергаются объединению, их столбцы вывода должны быть совместимы для объединения. Это означает для каждого запроса необходимость включения одинакового числа столбцов в том же порядке, что и 1, 2, 3 и т.д. и при этом должна присутствовать совместимость типов.

Например: символьные поля должны иметь одинаковое число символов. Кроме того нельзя использовать агрегатные функции в запросе SELECT при объединении. Агрегатные функции – MIN, MAX, AVG, SUM. Также UNION будет автоматически исключать дубликаты строк из вывода.

Воздействие ключевого слова UNION аналогично действию DISTINCT. Это значит, что каждая добавленная в результирующий набор запись проверяется на уникальность. Члены UNION используются только для объединения запросов, но никак не влияют на подзапросы.

Правила объединения с помощью UNION:

  1. Любое поле, включенное в первый список полей, должно быть представлено полем или заглушкой в последующих списках полей.

  2. Любое поле из последующих списков полей, которое не входит в первый список полей, должно быть представлено заглушкой в первом списке

  3. В первом списке не должно быть вычисляемых полей

  4. Члены ORDER BY и INTO могут входить в любую инструкцию SELECT, но только 1 раз и применяются ко всему результату.

  5. Член ORDER BY должен ссылаться на поля, по их позициям в списке, а не по имени.

  6. При отсутствии члена ORDER BY для сортировки используется порядок следования полей в списке.

  7. Члены GROUP BY и HAVING могут присутствовать в каждой инструкции SELECT, причем их влияние ограничено только результатами работы данной инструкции SELECT.

  8. С помощью членов UNION нельзя объединять результаты подзапросов, то есть члены UNION нельзя применить к инструкциям SELECT, используемым внутри члена WHERE других инструкций SELECT.

При построении объединения можно использовать не более 10 членов UNION.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]