Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
db / Лекции / 6 семестр / Языки запросов.docx
Скачиваний:
134
Добавлен:
23.03.2015
Размер:
280.32 Кб
Скачать
      1. Объединение таблиц

Запрос.Вывести названия факультетов и кафедр, расположенных в корпусе 6, а также фамилии их деканов или заведующих.

SELECT Name, Dean

FROM FACULTY

WHERE Building = '6'

UNION

SELECT Name, Head

FROM DEPARTMENT

WHERE Building = '6';

-------------------

NAME

DEAN

базы данных

Соколов

информатика

Сидоров

программирование

Федоров

Запрос.Вывести названия факультетов и кафедр, имеющих фонд финансирования больше 25 000 (также вывести сведения о том, из какой таблицы эти данные получены).

Запрос. Вывести фамилии преподавателей с указанием категории их зарплаты (0-500 – низкая, 500-1000 – средняя, 1000-1500 – высокая, 1500 и более – очень высокая).

SELECT Name "Фамилия", 'низкая' "Категория зарплаты"

FROM TEACHER WHERE Salary + Rise <= 500

UNION

SELECT Name, 'средняя'

FROM TEACHER WHERE Salary + Rise > 500 AND Salary + Rise <= 1000

UNION

SELECT Name, 'высокая'

FROM TEACHER WHERE Salary + Rise > 1000 AND Salary + Rise <- 1500

UNION

SELECT Name, 'очень высокая'

FROM TEACHER WHERE Salary + Rise > 1500;

Часто бывает полезным такое объединение двух и более запросов, в котором второй запрос (и возможные последующие запросы) добавляет в результат строки, которые не были отобраны из базовых таблиц первым запросом.

Рассмотрим пример.

Запрос.Показать фамилии кураторов групп.

SELECT SGROUP.Num Труппа". TEACHER.Name "Куратор"

FROM SGROUP, TEACHER

WHERE SGROUP.CurFK = TEACHER.TehPK;

Теперь предположим, что некоторые из групп кураторов не имеют, а также что не все преподаватели являются кураторами. В результирующей таблице такие группы (в столбце Num) и преподаватели (в столбце Name) не представлены. Однако нам хотелось бы, чтобы были перечислены все группы, независимо от того, есть ли у них куратор, и все преподаватели, независимо от того, являются ли они кураторами.

Запрос. Показать группы и фамилии кураторов групп, включая группы, у которых нет кураторов

SELECT SGROUP.Num "Группа", TEACHER.Name "Куратор"

FROM SGROUP, TEACHER

WHERE SGROUP.CurFK = TEACHER.TchPK

UNION

SELECT SGROUP.Num, "куратора нет"

FROM SGROUP

WHERE SGROUP.CurFK IS NULL OR

NOT SGROUP.CurFK = ANY (SELECT TchPK FROM TEACHER);

      1. Пересечение таблиц

В результирующей таблице оператора INTERSECT содержатся только те строки, которые имеются в обеих исходных таблицах. Исходные таблицы задаются запросами, выступающими в качестве операндов этого оператора.

Запрос.Вывести факультеты, которые имеют кафедры с фондами финансирования больше 26 000 и меньше 15 000.

SELECT f.Name

FROM FACULTY f. DEPARTMENT d

WHERE f.FacPK = d.FacFK AND d.Fund < 15000

INTERSECT

SELECT f.Name

FROM FACULTY f, DEPARTMENT d

WHERE f.FacPK = d.FacFK AND d.Fund > 26000;

Запрос.Вывести названия кафедр, на которых работают профессора и доценты.

SELECT d.Name

FROM DEPARTMENT d, TEACHER t

WHERE d.DepPK = t.DepFK AND LOWER(t.Post) = 'профессор'

INTERSECT

SELECT d.Name

FROM DEPARTMENT d, TEACHER t

WHERE d.DepPK = t.DepFK AND LOWER(t.Post) = 'доцент';

      1. Разность таблиц

Результирующая таблица оператора EXCEPT (MINUS) содержит только те строки, которые имеются в первой из исходных таблиц, но не имеются во второй. Исходные таблицы задаются запросами, выступающими в качестве операндов этого оператора.

Запрос.Вывести фамилии преподавателей, читающих лекции по дисциплине «базы данных», но не читающих лекции по дисциплине «операционные системы».

SELECT t.Name

FROM TEACHER t, LECTURE l. SUBJECT s

WHERE t.TchPK = l.TchFK AND l.SbjFK = s.SbjPK AND

LOWER(s.Name) = 'базы данных'

EXCEPT

SELECT t.Name

FROM TEACHER t, LECTURE l, SUBJECT s

WHERE t.TchPK = l.TchFK AND l.SbjFK = s.SbjPK AND

LOWER(s.Name) = 'операционные системы';