Создание запросов и подзапросов (база данных "Оcenki"), страница 2

SELECT Ocenki.фамилия, Ocenki.осенка_1_экзамен, Ocenki.оценка_2_экзамен, Ocenki.оценка_3_экзамен, Ocenki.оценка_4_экзамен, ;

(YEAR(DATE())-YEAR(Ocenki.дата_рождения)) as Возраст_студента ;

FROM  Ocenki ;

WHERE Ocenki.осенка_1_экзамен >= 4;

AND Ocenki.оценка_2_экзамен >= 4;

AND Ocenki.оценка_3_экзамен >= 4;

AND Ocenki.оценка_4_экзамен >= 4;

AND (YEAR(DATE())-YEAR(Ocenki.дата_рождения))>(SELECT AVG(YEAR(DATE())-YEAR(Ocenki.дата_рождения)) as Ср_возраст;

FROM  Ocenki_d ;

INNER JOIN Ocenki ;

ON Ocenki_d.identif = Ocenki.identif;

WHERE Ocenki_d.факультет = "ФЭН")

Endif

Запрос3

SELECT AVG(YEAR(DATE())-YEAR(Ocenki.дата_рождения)) as Ср_возраст;

FROM  Ocenki_d ;

INNER JOIN Ocenki ;

ON Ocenki_d.identif = Ocenki.identif;

WHERE Ocenki_d.факультет = "ФЭН"

if(ThisForm.Optiongroup1.Option1.value=1)

SELECT Ocenki.фамилия, Ocenki.курс, Ocenki_d.факультет, ;

(YEAR(DATE())-YEAR(Ocenki.дата_рождения)) as Возраст_студента ;

FROM  Ocenki_d ;

INNER JOIN Ocenki ;

ON Ocenki_d.identif = Ocenki.identif;

WHERE !(Ocenki_d.факультет = "РТФ" AND         Ocenki.курс = 2);

AND (YEAR(DATE())-YEAR(Ocenki.дата_рождения))<(SELECT AVG(YEAR(DATE())-YEAR(Ocenki.дата_рождения)) as Ср_возраст;

FROM  Ocenki_d ;

INNER JOIN Ocenki ;

ON Ocenki_d.identif = Ocenki.identif;

WHERE Ocenki_d.факультет = "ФЭН")

else

SELECT Ocenki.фамилия, Ocenki.курс, Ocenki_d.факультет, ;

(YEAR(DATE())-YEAR(Ocenki.дата_рождения)) as Возраст_студента ;

FROM  Ocenki_d ;

INNER JOIN Ocenki ;

ON Ocenki_d.identif = Ocenki.identif;

WHERE !(Ocenki_d.факультет = "РТФ" AND         Ocenki.курс = 2);

AND (YEAR(DATE())-YEAR(Ocenki.дата_рождения))>(SELECT AVG(YEAR(DATE())-YEAR(Ocenki.дата_рождения)) as Ср_возраст;

FROM  Ocenki_d ;

INNER JOIN Ocenki ;

ON Ocenki_d.identif = Ocenki.identif;

WHERE Ocenki_d.факультет = "ФЭН")

endif

Запрос4

SELECT AVG(YEAR(DATE())-YEAR(Ocenki.дата_рождения)) as Ср_возраст;

FROM  Ocenki_d ;

INNER JOIN Ocenki ;

ON Ocenki_d.identif = Ocenki.identif;

WHERE Ocenki_d.факультет = "ФЭН"

if(ThisForm.Optiongroup1.Option1.value=1)

SELECT Ocenki.фамилия, Ocenki.курс, Ocenki_d.факультет, ;

(YEAR(DATE())-YEAR(Ocenki.дата_рождения)) as Возраст_студента ;

FROM  Ocenki_d ;

INNER JOIN Ocenki ;

ON Ocenki_d.identif = Ocenki.identif;

WHERE Ocenki_d.факультет = "АВТ";

AND      Ocenki.курс = 1;

AND (YEAR(DATE())-YEAR(Ocenki.дата_рождения))<(SELECT AVG(YEAR(DATE())-YEAR(Ocenki.дата_рождения)) as Ср_возраст;

FROM  Ocenki_d ;

INNER JOIN Ocenki ;

ON Ocenki_d.identif = Ocenki.identif;

WHERE Ocenki_d.факультет = "ФЭН")

else

SELECT Ocenki.фамилия, Ocenki.курс, Ocenki_d.факультет, ;

(YEAR(DATE())-YEAR(Ocenki.дата_рождения)) as Возраст_студента ;

FROM  Ocenki_d ;

INNER JOIN Ocenki ;

ON Ocenki_d.identif = Ocenki.identif;

WHERE Ocenki_d.факультет = "АВТ";

AND      Ocenki.курс = 1;

AND (YEAR(DATE())-YEAR(Ocenki.дата_рождения))>(SELECT AVG(YEAR(DATE())-YEAR(Ocenki.дата_рождения)) as Ср_возраст;

FROM  Ocenki_d ;

INNER JOIN Ocenki ;

ON Ocenki_d.identif = Ocenki.identif;

WHERE Ocenki_d.факультет = "ФЭН")

endif


Защита:

Вывести студентов, имеющих учебник Физики или Алгебры издательства Науки или Сибирь, год выпуска с 70 по 80 годы; проживающих в 3-м или 6-м общежитии, кроме студентов 1 и 3 курса ФБ и ФЛА; получающих стипендию больше средней стипендии студентов, обучающихся в аудиториях с 201 по 411, 2 и 4 курса факультетов ФПМИ и АВТ.

SELECT AVG(Ocenki.стипендия) as Ср_стипендия;

FROM  Ocenki_d ;

INNER JOIN Ocenki ;

ON Ocenki_d.identif = Ocenki.identif ;

WHERE (Ocenki_d.факультет = "ФПМИ" ;

OR Ocenki_d.факультет = "АВТ") ;

AND (Ocenki.курс = 2 ;

OR  Ocenki.курс = 4) ;

AND Ocenki.аудитория >= 201 ;

AND Ocenki.аудитория <= 411

SELECT Ocenki.фамилия, Ocenki_d.факультет, Ocenki.курс, Ocenki.учебник, Ocenki.издательство, Ocenki.год_выпуска, Ocenki.общежитие, Ocenki.стипендия ;

FROM  Ocenki_d ;

INNER JOIN Ocenki ;

ON Ocenki_d.identif = Ocenki.identif ;

WHERE (Ocenki.учебник = "Физика" ;

or Ocenki.учебник = "Алгебра") ;

and (Ocenki.издательство = "Наука" ; 

or Ocenki.издательство = "Сибирь") ;

and Ocenki.год_выпуска >= 1970  ;

and Ocenki.год_выпуска <= 1980  ;

and (Ocenki.общежитие = 3 ; 

or Ocenki.общежитие = 6) ;

and !((Ocenki.курс = 1 or Ocenki.курс = 3) ;

and (Ocenki_d.факультет = "ФБ" or Ocenki_d.факультет = "ФЛА")) ;

and Ocenki.стипендия > (SELECT AVG(Ocenki.стипендия) as Ср_стипендия ;

FROM  Ocenki_d ;

INNER JOIN Ocenki ;

ON Ocenki_d.identif = Ocenki.identif ;

WHERE (Ocenki_d.факультет = "ФПМИ" ;

OR Ocenki_d.факультет = "АВТ") ;

AND (Ocenki.курс = 2 ;

OR  Ocenki.курс = 4) ;

AND Ocenki.аудитория >= 201 ;

AND Ocenki.аудитория <= 411)


Анализ результатов и выводы:

Были получены навыки создания запросов.

В ходе выполнения лабораторной работы были изучены:

  • средства быстрого поиска информации в БД и получения ответов на разнообразные вопросы в среде VFP;
  • Запросы любого уровня сложности;
  • Организация вычислений над полями, выбираемыми из таблиц;
  • Произведена группировка таблиц.

            Для осуществления многотабличных запросов необходимо предусмореть, чтобы подчинённая и главная таблицы содержали поле «идентификатор поля». Тогда, при добавлении таблицы в окно Query Designer делает запрос, какое отношение установить между уже имеющимися таблицами и вновь добавляемой. Исследовано следующее условие объединения .