Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка языка запросов в бинарной модели знаний и транслятора этого языка в язык SQL (бакалаврская работа).doc
Скачиваний:
13
Добавлен:
28.06.2014
Размер:
1.31 Mб
Скачать

3.4. Примеры работы транслятора.

Запрос 1. Найти студентов, родившихся в 1991 году.

?X.ФИО-X IN Студент(ГодРожд=1991)

ИЛИ

?X.ФИО-X IN Студент;X.ГодРожд=1991

Результат трансляции:

SELECT DISTINCT X.ФИО

FROM (SELECT id, ФИО FROM Студент WHERE ГодРожд=1991) AS X

Запрос 2.Какую фамилию имеет староста группы А13-09?

?X.Группа.Староста.ФИО - X IN Студент;X.Группа.Номер = 'А13-09'

ИЛИ

?X.Группа.Староста.ФИО - X IN Студент(Группа.Номер = 'А13-09')

Результат трансляции:

SELECT DISTINCT __0.ФИО

FROM (SELECT id, ФИО FROM Студент) AS __0

CROSS JOIN (SELECT id, Староста FROM Группа) AS __2

CROSS JOIN (SELECT id, Группа FROM Студент) AS X

CROSS JOIN (SELECT id FROM Группа WHERE Номер='А13-09') AS __1

WHERE __2.Староста = __0.id AND X.Группа = __1.id AND X.Группа = __2.id

ИЛИ

?X.Группа.Староста.ФИО - X IN Студент;X.Группа = Y;Y.Номер = 'А13-09'

Результат трансляции:

SELECT DISTINCT __0.ФИО

FROM (SELECT id, ФИО FROM Студент) AS __0

CROSS JOIN (SELECT id, Староста FROM Группа) AS __1

CROSS JOIN (SELECT id, Группа FROM Студент) AS X

CROSS JOIN (SELECT id FROM Группа WHERE Номер='А13-09') AS Y

WHERE __1.Староста = __0.id AND X.Группа = Y.id AND X.Группа = __1.id

Запрос 3.Найти всех студентов группы А13-01, родившихся ранее старосты этой группы.

?X.ФИО - X IN Студент(Группа.Номер = 'А13-08';ГодРожд < Группа.Староста.ГодРожд)

Результат трансляции:

SELECT DISTINCT X.ФИО

FROM (SELECT id, Группа, ФИО, ГодРожд FROM Студент) AS X

CROSS JOIN (SELECT id, ГодРожд FROM Студент) AS __2

CROSS JOIN (SELECT id FROM Группа WHERE Номер='А13-08') AS __0

CROSS JOIN (SELECT id, Староста FROM Группа) AS __1

WHERE X.Группа = __0.id AND __1.Староста = __2.id AND X.ГодРожд<__2.ГодРожд

Запрос 4. Какие студенты группы А13-08 сдали экзамен по дискретной математике на отлично?

?X.ФИО - X IN Студент; X.Группа.Номер = 'А13-08';

(X СдалЭкзамен Z Y); Y.Назв = 'Дискретная математика'; Z.Оценка = 5

Результат трансляции:

SELECT DISTINCT X.ФИО

FROM (SELECT id, Группа, ФИО FROM Студент) AS X

CROSS JOIN (SELECT id, Студент, Предмет FROM СдалЭкзамен WHERE Оценка=5) AS Z

CROSS JOIN (SELECT id FROM Группа WHERE Номер='А13-08') AS __0

CROSS JOIN (SELECT id FROM Предмет WHERE Назв='Дискретная математика') AS Y

WHERE X.Группа = __0.id AND Z.Студент = X.id AND Z.Предмет = Y.id

Запрос5. Каков средний бал на экзвмене по дискретной математике у студентов группы А13-08?

?AVG(Z.Оценка) - Z IN СдалЭкзамен(Предмет.Назв = 'Дискретная математика';Студент.Группа.Номер = 'А13-08')

Результат трансляции

SELECT AVG( Z.Оценка

FROM (SELECT id, Предмет, Студент, Оценка FROM СдалЭкзамен) AS Z

CROSS JOIN (SELECT id FROM Предмет WHERE Назв='Дискретная математика') AS __0

CROSS JOIN (SELECT id, Группа FROM Студент) AS __1

CROSS JOIN (SELECT id FROM Группа WHERE Номер='А13-08') AS __2

WHERE Z.Предмет = __0.id AND Z.Студент = __1.id AND __1.Группа = __2.id

Запрос6. Какие студенты сдали все экзамены на отлично в январе 2012 года?

?X.ФИО - (X СдалЭкзамен Z Y); Z.Оценка = 5; Z.Дата >= '01/01/2012'; Z.Дата <= '01/31/2012'

Результат трансляции:

SELECT DISTINCT X.ФИО

FROM (SELECT id, ФИО FROM Студент) AS X

CROSS JOIN (SELECT id, Студент, Предмет FROM СдалЭкзамен WHERE Оценка=5 AND Дата>='01/01/2012' AND Дата<='01/31/2012') AS Z

CROSS JOIN (SELECT id FROM Предмет) AS Y

WHERE Z.Студент = X.id AND Z.Предмет = Y.id

Запрос 7. Найти всех профессоров кафедры Прикладной математики.

?X.ФИО-Работает_на(X).Назв='Прикладная математика'; X.Должность='Профессор'

ИЛИ

?X.ФИО- (X Работает_на Y Z);X.Должность='Профессор'; Z.Назв='Прикладная математика'

Результат трансляции:

SELECT DISTINCT X.ФИО

FROM (SELECT id, ФИО FROM Препод WHERE Должность='Профессор') AS X

CROSS JOIN (SELECT id, Препод, Кафедра FROM Работает_на) AS __1

CROSS JOIN (SELECT id FROM Кафедра WHERE Назв='Прикладная математика') AS __0

WHERE __1.Препод = X.id AND __1.Кафедра = __0.id

Запрос 8. Какие студенты и по каким предметам сдади экзамены на отлично? У каких препододавателей и по каким предметам студент Иванов сдал экзамены на отлично?

?X.Студент.ФИО,X.Предмет.Назв - X IN СдалЭкзамен(Оценка=5)

Результат трансляции:

SELECT DISTINCT __0.ФИО, __1.Назв

FROM (SELECT id, ФИО FROM Студент) AS __0

CROSS JOIN (SELECT id, Назв FROM Предмет) AS __1

CROSS JOIN (SELECT id, Студент, Предмет FROM СдалЭкзамен WHERE Оценка=5) AS X

WHERE X.Студент = __0.id AND X.Предмет = __1.id

ИЛИ

?X.ФИО,Y.Назв - (X СдалЭкзамен Z Y); Z.Оценка=5

Результат трансляции:

SELECT DISTINCT X.ФИО, Y.Назв

FROM (SELECT id, ФИО FROM Студент) AS X

CROSS JOIN (SELECT id, Назв FROM Предмет) AS Y

CROSS JOIN (SELECT id, Студент, Предмет FROM СдалЭкзамен WHERE Оценка=5) AS Z

WHERE Z.Студент = X.id AND Z.Предмет = Y.id

Запрос 9. У каких препододавателей и по каким предметам студент Иванов сдал экзамены на отлично?

?Z.Кому.ФИО,Y.Назв - (X СдалЭкзамен Z Y);X.ФИО = 'Иванов А.П.';Z.Оценка=5

Результат трансляции:

SELECT DISTINCT __0.ФИО, Y.Назв

FROM (SELECT id, ФИО FROM Препод) AS __0

CROSS JOIN (SELECT id, Назв FROM Предмет) AS Y

CROSS JOIN (SELECT id, Студент, Предмет, Кому FROM СдалЭкзамен WHERE Оценка=5) AS Z

CROSS JOIN (SELECT id FROM Студент WHERE ФИО='Иванов А.П.') AS X

WHERE Z.Студент = X.id AND Z.Предмет = Y.id AND Z.Кому = __0.id

Соседние файлы в предмете Государственный экзамен