Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Пример выполнения лабораторной работы № 3




Запрос 1_1

Тип запроса: выборка c сортировкой по одному полю.

Формулировка запроса с точки зрения пользователя: вывести список тренеров с указанием  ФИО, звания, номера телефона и даты рождения каждого тренера, упорядочив данные в алфавитном порядке фамилий.

Вид запроса на языке SQL:

SELECT ТРЕНЕРЫ.[ФИО тренера], ЗВАНИЯ.[Название звания], ТРЕНЕРЫ.[Номер телефона], ТРЕНЕРЫ.[Дата рождения]

FROM ЗВАНИЯ INNER JOIN ТРЕНЕРЫ ON ЗВАНИЯ.КЗ = ТРЕНЕРЫ.КЗ

ORDER BY ТРЕНЕРЫ.[ФИО тренера];

Структура запроса в режиме конструктора представлена на рис. 3.10.

Рисунок 3.10 – Структура запроса в режиме конструктора

Результат работы запроса представлен на рис. 3.11.

Рисунок 3.11 – Результат работы запроса

Запрос 1_2

Тип запроса: выборка c сортировкой по нескольким полям.

Формулировка запроса с точки зрения пользователя: вывести список посещений тренировок с указанием секции, даты и времени проведения, ФИО клиента, и ФИО тренера, упорядочив данные по секциям и по датам тренировок.

Вид запроса на языке SQL:

SELECT СЕКЦИИ.[Название секции], [ПРОВЕДЕНИЕ ТРЕНИРОВКИ].[Дата проведения], [ГРАФИК ТРЕНИРОВОК].[Начало тренировки], [ГРАФИК ТРЕНИРОВОК].[Окончание тренировки], КЛИЕНТЫ.[ФИО клиента], ТРЕНЕРЫ.[ФИО тренера]

FROM ТРЕНЕРЫ INNER JOIN (СЕКЦИИ INNER JOIN (КЛИЕНТЫ INNER JOIN ([ГРАФИК ТРЕНИРОВОК] INNER JOIN [ПРОВЕДЕНИЕ ТРЕНИРОВКИ] ON [ГРАФИК ТРЕНИРОВОК].КГ = [ПРОВЕДЕНИЕ ТРЕНИРОВКИ].КГ) ON КЛИЕНТЫ.КК = [ПРОВЕДЕНИЕ ТРЕНИРОВКИ].КК) ON СЕКЦИИ.КС = [ГРАФИК ТРЕНИРОВОК].КС) ON ТРЕНЕРЫ.КТ = [ГРАФИК ТРЕНИРОВОК].КТ

ORDER BY СЕКЦИИ.[Название секции], [ПРОВЕДЕНИЕ ТРЕНИРОВКИ].[Дата проведения];

Структура запроса в режиме конструктора представлена на рис. 3.12.

Рисунок 3.12 – Структура запроса в режиме конструктора

Результат работы запроса представлен на рис. 3.13.

Рисунок 3.13 – Результат работы запроса

Примечание:

Сортировка по двум полям означает, что список сортируется сначала по полю "Секция", а затем при совпадении значений в этом поле – по полю "Дата проведения".

Запрос 2_1

Тип запроса: выборка c условием отбора на текстовое поле.

Формулировка запроса с точки зрения пользователя: вывести список тренеров, не имеющих звания с указанием ФИО тренера и номера телефона.

Вид запроса на языке SQL:

SELECT ТРЕНЕРЫ.[ФИО тренера], ЗВАНИЯ.[Название звания], ТРЕНЕРЫ.[Номер телефона]

FROM ЗВАНИЯ INNER JOIN ТРЕНЕРЫ ON ЗВАНИЯ.КЗ = ТРЕНЕРЫ.КЗ

WHERE (((ЗВАНИЯ.[Название звания])="Без звания"));

Структура запроса в режиме конструктора представлена на рис. 3.14.

Рисунок 3.14 – Структура запроса в режиме конструктора

Результат работы запроса представлен на рис. 3.15.

Рисунок 3.15 – Результат работы запроса

Примечание:

Текстовое значение в строке "Условие отбора" должно быть в двойных кавычках (например, "Текст").

Запрос 2_2

Тип запроса: выборка c условием отбора на числовое поле.

Формулировка запроса с точки зрения пользователя: вывести график работы секций со стоимостью 1 тренировки меньшей 200 рублей.

Вид запроса на языке SQL:

SELECT СЕКЦИИ.[Название секции], ТРЕНЕРЫ.[ФИО тренера], [ГРАФИК ТРЕНИРОВОК].[День недели], [ГРАФИК ТРЕНИРОВОК].[Начало тренировки], [ГРАФИК ТРЕНИРОВОК].[Окончание тренировки], [ГРАФИК ТРЕНИРОВОК].[Стоимость 1 тренировки]

FROM ТРЕНЕРЫ INNER JOIN (СЕКЦИИ INNER JOIN [ГРАФИК ТРЕНИРОВОК] ON СЕКЦИИ.КС = [ГРАФИК ТРЕНИРОВОК].КС) ON ТРЕНЕРЫ.КТ = [ГРАФИК ТРЕНИРОВОК].КТ

WHERE ((([ГРАФИК ТРЕНИРОВОК].[Стоимость 1 тренировки])<200));

Структура запроса в режиме конструктора представлена на рис. 3.16.

Рисунок 3.16 – Структура запроса в режиме конструктора

Результат работы запроса представлен на рис. 3.17.

Рисунок 3.17 – Результат работы запроса

Запрос 2_3

Тип запроса: выборка c условием отбора на поле типа "дата/время".

Формулировка запроса с точки зрения пользователя: вывести список проведенных тренировок за 15.05.2017 с указанием ФИО клиента, времени тренировки, секции, а также ФИО тренера.

Вид запроса на языке SQL:

SELECT [ПРОВЕДЕНИЕ ТРЕНИРОВКИ].[Дата проведения], КЛИЕНТЫ.[ФИО клиента], [ГРАФИК ТРЕНИРОВОК].[Начало тренировки], [ГРАФИК ТРЕНИРОВОК].[Окончание тренировки], СЕКЦИИ.[Название секции], ТРЕНЕРЫ.[ФИО тренера]

FROM СЕКЦИИ INNER JOIN (ТРЕНЕРЫ INNER JOIN (КЛИЕНТЫ INNER JOIN ([ГРАФИК ТРЕНИРОВОК] INNER JOIN [ПРОВЕДЕНИЕ ТРЕНИРОВКИ] ON [ГРАФИК ТРЕНИРОВОК].КГ = [ПРОВЕДЕНИЕ ТРЕНИРОВКИ].КГ) ON КЛИЕНТЫ.КК = [ПРОВЕДЕНИЕ ТРЕНИРОВКИ].КК) ON ТРЕНЕРЫ.КТ = [ГРАФИК ТРЕНИРОВОК].КТ) ON СЕКЦИИ.КС = [ГРАФИК ТРЕНИРОВОК].КС

WHERE ((([ПРОВЕДЕНИЕ ТРЕНИРОВКИ].[Дата проведения]) = #5/15/2017#));

Структура запроса в режиме конструктора представлена на рис. 3.18.

Рисунок 3.18 – Структура запроса в режиме конструктора

Результат работы запроса представлен на рис. 3.19.

Рисунок 3.19 – Результат работы запроса

Примечание:

Значение даты или времени в строке "Условие отбора" должно быть в # с двух сторон (например, #20.12.2017# или #15:30#).

 

 

Запрос 2_4

Тип запроса: выборка c условием отбора на несколько полей.

Формулировка запроса с точки зрения пользователя: вывести список тренировок клиентов мужского пола позже 17.05.2017 г. с указанием дней недели и секций, в которых они занимаются.

Вид запроса на языке SQL:

SELECT [ПРОВЕДЕНИЕ ТРЕНИРОВКИ].[Дата проведения], КЛИЕНТЫ.[ФИО клиента], КЛИЕНТЫ.Пол, [ГРАФИК ТРЕНИРОВОК].[День недели], СЕКЦИИ.[Название секции]

FROM СЕКЦИИ INNER JOIN (КЛИЕНТЫ INNER JOIN ([ГРАФИК ТРЕНИРОВОК] INNER JOIN [ПРОВЕДЕНИЕ ТРЕНИРОВКИ] ON [ГРАФИК ТРЕНИРОВОК].КГ = [ПРОВЕДЕНИЕ ТРЕНИРОВКИ].КГ) ON КЛИЕНТЫ.КК = [ПРОВЕДЕНИЕ ТРЕНИРОВКИ].КК) ON СЕКЦИИ.КС = [ГРАФИК ТРЕНИРОВОК].КС

WHERE ((([ПРОВЕДЕНИЕ ТРЕНИРОВКИ].[Дата проведения])>#5/17/2017#) AND ((КЛИЕНТЫ.Пол)="М"));

Структура запроса в режиме конструктора представлена на рис. 3.20.

Рисунок 3.20 – Структура запроса в режиме конструктора

Результат работы запроса представлен на рис. 3.21.

Рисунок 3.21 – Результат работы запроса

Запрос 3_1

Тип запроса: параметрический с одним параметров.

Формулировка запроса с точки зрения пользователя: для секции, вводимой по запросу, вывести даты проведения тренировок клиентов.

Вид запроса на языке SQL:

SELECT [ПРОВЕДЕНИЕ ТРЕНИРОВКИ].[Дата проведения], КЛИЕНТЫ.[ФИО клиента], СЕКЦИИ.[Название секции]

FROM СЕКЦИИ INNER JOIN (КЛИЕНТЫ INNER JOIN ([ГРАФИК ТРЕНИРОВОК] INNER JOIN [ПРОВЕДЕНИЕ ТРЕНИРОВКИ] ON [ГРАФИК ТРЕНИРОВОК].КГ = [ПРОВЕДЕНИЕ ТРЕНИРОВКИ].КГ) ON КЛИЕНТЫ.КК = [ПРОВЕДЕНИЕ ТРЕНИРОВКИ].КК) ON СЕКЦИИ.КС = [ГРАФИК ТРЕНИРОВОК].КС

WHERE (((СЕКЦИИ.[Название секции])=[Введите СЕКЦИЮ]));

Структура запроса в режиме конструктора представлена на рис. 3.22.

Рисунок 3.22 – Структура запроса в режиме конструктора

Диалоговое окно с введенным значением параметра запроса представлено на рис. 3.23.

Рисунок 3.23 – Диалоговое окно с введенным значением параметра

Результат работы запроса представлен на рис. 3.24.

 

 

Рисунок 3.24 – Результат работы запроса

Примечание:

Имя параметра заключается в квадратные скобки и помещается в строку "Условие отбора" нужного столбца (например, [Введите дату тренировки].

Запрос 3_2

Тип запроса: параметрический с несколькими параметрами.

Формулировка запроса с точки зрения пользователя: вывести график тренировок с указанием секции, дня недели, времени проведения и ФИО тренера по вводимым в запросе дню недели и времени начала тренировки, позже которого могут начинаться тренировки.

Вид запроса на языке SQL:

SELECT СЕКЦИИ.[Название секции], [ГРАФИК ТРЕНИРОВОК].[День недели], [ГРАФИК ТРЕНИРОВОК].[Начало тренировки], [ГРАФИК ТРЕНИРОВОК].[Окончание тренировки], ТРЕНЕРЫ.[ФИО тренера]

FROM ТРЕНЕРЫ INNER JOIN (СЕКЦИИ INNER JOIN [ГРАФИК ТРЕНИРОВОК] ON СЕКЦИИ.КС = [ГРАФИК ТРЕНИРОВОК].КС) ON ТРЕНЕРЫ.КТ = [ГРАФИК ТРЕНИРОВОК].КТ

WHERE ((([ГРАФИК ТРЕНИРОВОК].[День недели])=[Введите день недели]) AND (([ГРАФИК ТРЕНИРОВОК].[Начало тренировки])>[Введите время начала тренировки, позже которого]));

Структура запроса в режиме конструктора представлена на рис. 3.25.

Рисунок 3.25 – Структура запроса в режиме конструктора

Диалоговые окна с введенными значениями параметров запроса представлены на рис. 3.26.

          

Рисунок 3.26 – Диалоговые окна с введенными значениями параметров

Результат работы запроса представлен на рис. 3.27.

Рисунок 3.27 – Результат работы запроса

Примечание:

Диалоговые окна для ввода значений параметров появляются в том порядке, в котором они находятся в Конструкторе запроса.

 

 

В итоговых запросах желательно иметь столбец с вычислением количества строк в каждой группе.

Запрос 4_1

Тип запроса: итоговый с группировкой по одному полю.

Формулировка запроса с точки зрения пользователя: вывести минимальную и максимальную стоимость 1 тренировки в каждой секции.

Вид запроса на языке SQL:

SELECT СЕКЦИИ.[Название секции], Min([ГРАФИК ТРЕНИРОВОК].[Стоимость 1 тренировки]) AS [Min-Стоимость 1 тренировки], Max([ГРАФИК ТРЕНИРОВОК].[Стоимость 1 тренировки]) AS [Max-Стоимость 1 тренировки], Count([ГРАФИК ТРЕНИРОВОК].[День недели]) AS [Count-День недели]

FROM СЕКЦИИ INNER JOIN [ГРАФИК ТРЕНИРОВОК] ON СЕКЦИИ.КС = [ГРАФИК ТРЕНИРОВОК].КС

GROUP BY СЕКЦИИ.[Название секции];

Структура запроса в режиме конструктора представлена на рис. 3.28.

Рисунок 3.28 – Структура запроса в режиме конструктора

Результат работы запроса представлен на рис. 3.29.

Рисунок 3.29 – Результат работы запроса

Примечание:

Столбец "Count-День недели" служит для вывода значения количества строк в каждой группе.

Запрос 4_2

Тип запроса: итоговый с группировкой по нескольким полям.

Формулировка запроса с точки зрения пользователя: вывести минимальную и максимальную дату тренировки и количество клиентов, посетивших тренировки, для каждой секции по каждому дню недели.

Вид запроса на языке SQL:

SELECT СЕКЦИИ.[Название секции], [ГРАФИК ТРЕНИРОВОК].[День недели], Min([ПРОВЕДЕНИЕ ТРЕНИРОВКИ].[Дата проведения]) AS [Min-Дата проведения], Max([ПРОВЕДЕНИЕ ТРЕНИРОВКИ].[Дата проведения]) AS [Max-Дата проведения], Count(КЛИЕНТЫ.[ФИО клиента]) AS [Count-ФИО клиента]

FROM СЕКЦИИ INNER JOIN (КЛИЕНТЫ INNER JOIN ([ГРАФИК ТРЕНИРОВОК] INNER JOIN [ПРОВЕДЕНИЕ ТРЕНИРОВКИ] ON [ГРАФИК ТРЕНИРОВОК].КГ = [ПРОВЕДЕНИЕ ТРЕНИРОВКИ].КГ) ON КЛИЕНТЫ.КК = [ПРОВЕДЕНИЕ ТРЕНИРОВКИ].КК) ON СЕКЦИИ.КС = [ГРАФИК ТРЕНИРОВОК].КС

GROUP BY СЕКЦИИ.[Название секции], [ГРАФИК ТРЕНИРОВОК].[День недели];

Структура запроса в режиме конструктора представлена на рис. 3.30.

Рисунок 3.30 – Структура запроса в режиме конструктора

Результат работы запроса представлен на рис. 3.31.

Рисунок 3.31 – Результат работы запроса

Запрос 5_1

Тип запроса: с вычисляемыми полями с использованием обычных арифметических операций.

Формулировка запроса с точки зрения пользователя: вычислить скидку на каждую тренировку по абонементу, составляющую 10% от стоимости 1 тренировки без абонемента и стоимость каждой тренировки по абонементу.

Вид запроса на языке SQL:

SELECT СЕКЦИИ.[Название секции], [ГРАФИК ТРЕНИРОВОК].[День недели], [ГРАФИК ТРЕНИРОВОК].[Стоимость 1 тренировки], [ГРАФИК ТРЕНИРОВОК]![Стоимость 1 тренировки]*0.1 AS Скидка, [ГРАФИК ТРЕНИРОВОК]![Стоимость 1 тренировки]*0.9 AS [Стоимость по абонементу]

FROM СЕКЦИИ INNER JOIN [ГРАФИК ТРЕНИРОВОК] ON СЕКЦИИ.КС = [ГРАФИК ТРЕНИРОВОК].КС;

Структура запроса в режиме конструктора представлена на рис. 3.32.

Рисунок 3.32 – Структура запроса в режиме конструктора

Результат работы запроса представлен на рис. 3.33.

Рисунок 3.33 – Результат работы запроса

 

Окна "Построителя выражений" с построенными вычисляемыми полями представлены на рис. 3.34 и рис. 3.35.

 

Рисунок 3.34 – Окно "Построитель выражений" с построенным полем
"Скидка"

 

Рисунок 3.35 – Окно "Построитель выражений" с построенным полем "Стоимость по абонементу"


Запрос 5_2

Тип запроса: с вычисляемыми полями с использованием встроенных функций.

Формулировка запроса с точки зрения пользователя: вычислить возраст и день недели рождения каждого тренера.

Вид запроса на языке SQL:

SELECT ТРЕНЕРЫ.[ФИО тренера], ЗВАНИЯ.[Название звания], ТРЕНЕРЫ.[Дата рождения], Int((Date()-[ТРЕНЕРЫ]![Дата рождения])/365) AS Возраст, WeekdayName(Weekday([ТРЕНЕРЫ]![Дата рождения],2)) AS [День недели рождения]

FROM ЗВАНИЯ INNER JOIN ТРЕНЕРЫ ON ЗВАНИЯ.КЗ = ТРЕНЕРЫ.КЗ;

Структура запроса в режиме конструктора представлена на рис. 3.36.

Рисунок 3.36 – Структура запроса в режиме конструктора

Результат работы запроса представлен на рис. 3.37.

Рисунок 3.37 – Результат работы запроса

Окна "Построителя выражений" с построенными вычисляемыми полями представлены на рис. 3.38 и рис. 3.39.

Рисунок 3.38 – Окно "Построитель выражений" с построенным полем
"Возраст"

Рисунок 3.36 – Окно "Построитель выражений" с построенным полем "День недели рождения "

 

Все запросы на удаление (простое, каскадное, запрещающее) продемонстрированы на связанных копиях таблиц


Запрос 6_1

Тип запроса: простое удаление из таблицы.

Формулировка запроса с точки зрения пользователя: удалить все тренировки, проведенные до 01.01.2017.

Вид запроса на языке SQL:

 

Структура запроса в режиме конструктора представлена на рис. 3.37.

 

Таблица                                  до удаления представлена на рис. 3.38.

 

Результат работы запроса представлен на рис. 3.39.

 

Таблица                                 после удаления представлена на рис. 3.40.

 

Примечание:

Простое удаление – это удаление из таблицы, не являющейся справочником ни для какой другой.

Запрос 6_2

Тип запроса: каскадное удаление из связанных таблиц.

Формулировка запроса с точки зрения пользователя: удалить все тренировки, проведенные до 01.01.2017.

Вид запроса на языке SQL:

 

Структура запроса в режиме конструктора представлена на рис. 3.41.

 

Таблицы                                  до удаления представлены на рис. 3.42 и рис. 3.43.

 

Результат работы запроса представлен на рис. 3.44.

 

Таблицы                                                после удаления представлены на рис. 3.45 и рис. 3.46.

 

Примечание:

Для связей таблиц            установлены все 3 параметра, в том числе v "каскадное удаление связанных записей". Тогда удаление записей из таблицы-справочника (со стороны "один") повлечет за собой удаление связанных с ними записей из связанных таблиц со стороны "много".

Запрос 6_3

Тип запроса: запрещающее удаление из связанных таблиц.

Формулировка запроса с точки зрения пользователя: удалить все тренировки, проведенные до 01.01.2017.

Вид запроса на языке SQL:

 

Структура запроса в режиме конструктора представлена на рис. 3.47.

 

Результат работы запроса представлен на рис. 3.48.

 

Примечание:

Для связей таблиц            установлены только 2 параметра, а параметр "каскадное удаление связанных записей" не установлен. Запрещающее удаление не может осуществиться только если для удаляемых записей из таблицы-справочника (со стороны "один") есть связанные с ними записи в таблице со стороны "много".

 

Все запросы на добавление записей (из существующей таблицы и конкретной записи) продемонстрированы на связанных копиях таблиц

Запрос 7_1

Тип запроса: добавление записей из существующей таблицы.

Формулировка запроса с точки зрения пользователя: удалить все тренировки, проведенные до 01.01.2017.

Вид запроса на языке SQL:

 

Структура запроса в режиме конструктора представлена на рис. 3.49.

 

Таблица                               до добавления представлена на рис. 3.50.

 

Результат работы запроса представлен на рис. 3.51.

 

Таблица                                после добавления представлена на рис. 3.52.

 

Примечание:

Простое удаление – это удаление из таблицы, не являющейся справочником ни для какой другой.

Запрос 7_2

Тип запроса: добавление конкретной записи в строку таблицы.

Формулировка запроса с точки зрения пользователя: удалить все тренировки, проведенные до 01.01.2017.

Вид запроса на языке SQL:

 

Структура запроса в режиме конструктора представлена на рис. 3.53.

 

Таблица                          до добавления представлена на рис. 3.54.

 

Диалоговые окна с введенными значениями в таблицу представлены на рис. 3.55.

 

Результат работы запроса представлен на рис. 3.56.

 

Таблица                             после добавления представлена на рис. 3.57.

 

Примечание:

Простое удаление – это удаление из таблицы, не являющейся справочником ни для какой другой.

 

Запросы на обновление записей продемонстрированы на связанных копиях таблиц

Запрос 8

Тип запроса: обновление информации в таблице.

Формулировка запроса с точки зрения пользователя: удалить все тренировки, проведенные до 01.01.2017.

Вид запроса на языке SQL:

 

Структура запроса в режиме конструктора представлена на рис. 3.58.

 

Таблица                    до обновления представлена на рис. 3.59.

 

Результат работы запроса представлен на рис. 3.60.

 

Таблица               после обновления представлена на рис. 3.61.

 

Примечание:

Простое удаление – это удаление из таблицы, не являющейся справочником ни для какой другой.

 

Запрос 9

Тип запроса: поиск дубликатов (повторяющихся записей) в таблице.

Формулировка запроса с точки зрения пользователя: удалить все тренировки, проведенные до 01.01.2017.

Вид запроса на языке SQL:

 

Структура запроса в режиме конструктора представлена на рис. 3.62.

 

Результат работы запроса представлен на рис. 3.63.

 

Примечание:

Простое удаление – это удаление из таблицы, не являющейся справочником ни для какой другой.

Запрос 10

Тип запроса: перекрестный.

Формулировка запроса с точки зрения пользователя: удалить все тренировки, проведенные до 01.01.2017.

Вид запроса на языке SQL:

 

Структура запроса в режиме конструктора представлена на рис. 3.64.

 

Результат работы запроса представлен на рис. 3.65.

 

Примечание:

Простое удаление – это удаление из таблицы, не являющейся справочником ни для какой другой.

Запрос 11

Тип запроса: поиск неуказанных записей (без подчиненных) в таблице.

Формулировка запроса с точки зрения пользователя: удалить все тренировки, проведенные до 01.01.2017.

Вид запроса на языке SQL:

 

Структура запроса в режиме конструктора представлена на рис. 3.66.

 

Результат работы запроса представлен на рис. 3.67.

 

Примечание:

Простое удаление – это удаление из таблицы, не являющейся справочником ни для какой другой.

Запрос 12

Тип запроса: создание новой таблицы.

Формулировка запроса с точки зрения пользователя: удалить все тренировки, проведенные до 01.01.2017.

Вид запроса на языке SQL:

 

Структура запроса в режиме конструктора представлена на рис. 3.68.

 

Результат работы запроса представлен на рис. 3.69.

 

Примечание:

Простое удаление – это удаление из таблицы, не являющейся справочником ни для какой другой.

 










Последнее изменение этой страницы: 2018-06-01; просмотров: 209.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...