ЗАОЧНАЯ ФОРМА ОБУЧЕНИЯ

Содержание

Слайд 2

Информатика

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ
УНИВЕРСИТЕТ ПЕЧАТИ

Информатика МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ПЕЧАТИ

Слайд 3

ЛЕКЦИЯ
Базы данных

ЛЕКЦИЯ Базы данных

Слайд 4

Лектор
Попов Дмитрий Иванович
доктор технических наук, заведующий кафедрой Информатика и вычислительная техника МГУП, директор Института

Лектор Попов Дмитрий Иванович доктор технических наук, заведующий кафедрой Информатика и вычислительная
открытого образования МГУП

Слайд 5

План лекции

1. Язык запросов SQL
2. Использование SQL для выборки данных из таблиц.

План лекции 1. Язык запросов SQL 2. Использование SQL для выборки данных

Оператор SELECT.
3. Операции сравнения, логические и арифметические
операции
4. Использование специальных операторов IN,
BETWEEN, LIKE, NULL, NOT
5. Пример создания простой БД в СУБД
MS-ACCESS-2002

Слайд 6

Язык запросов SQL

Язык запросов SQL

Слайд 7

SQL (Structured Query Language – структурированный язык запросов) предназначен для обработки реляционных

SQL (Structured Query Language – структурированный язык запросов) предназначен для обработки реляционных
БД. Многие конструкции и операторы языка SQL связаны с операциями реляционной алгебры.
С этой точки зрения методы реляционной алгебры являются базовыми для более глубокого понимания и использования языка SQL.

Слайд 8

В различных СУБД используются два типа языка SQL:

В различных СУБД используются два типа языка SQL:

Слайд 9

1. Интерактивный SQL − используется для
выполнения действий непосредственно над БД

1. Интерактивный SQL − используется для выполнения действий непосредственно над БД в

в оперативном режиме. Как правило,
интерактивному SQL сопутствует некоторая
программа-сервер SQL. Наиболее популярны в
настоящее время Oracle SQL-Server, MS-SQL Server,
My-SQL, Inter Base и некоторые другие

В различных СУБД используются два типа языка SQL:

Слайд 10

1. Интерактивный SQL − используется для
выполнения действий непосредственно над БД

1. Интерактивный SQL − используется для выполнения действий непосредственно над БД в

в оперативном режиме. Как правило,
интерактивному SQL сопутствует некоторая
программа-сервер SQL. Наиболее популярны в
настоящее время Oracle SQL-Server, MS-SQL Server,
My-SQL, Inter Base и некоторые другие
2. Встроенный SQL − состоит из команд SQL,
включенных непосредственно в программы, которые
написаны на другом языке программирования.
Например, в таких системах программирования,
как Delphi, C++ Builder, VBasic, VC++ имеется
встроенный SQL. В различных СУБД, например
в MS-Access, также имеются возможности
использовать команды встроенного SQL

В различных СУБД используются два типа языка SQL:

Слайд 11

Можно разделить SQL на определенные подмножества:

Можно разделить SQL на определенные подмножества:

Слайд 12

DQL – язык запросов. Команды предназначены для
извлечения данных из таблиц

Можно

DQL – язык запросов. Команды предназначены для извлечения данных из таблиц Можно
разделить SQL на определенные подмножества:

Слайд 13

DQL – язык запросов. Команды предназначены для
извлечения данных из таблиц
DML

DQL – язык запросов. Команды предназначены для извлечения данных из таблиц DML
– язык манипуляция данными

Можно разделить SQL на определенные подмножества:

Слайд 14

DQL – язык запросов. Команды предназначены для
извлечения данных из таблиц
DML

DQL – язык запросов. Команды предназначены для извлечения данных из таблиц DML
– язык манипуляция данными
TPL – язык обработки транзакций. Команды позволяют
объединить команды языка DML в группы транзакций.
Если одна из команд не может быть выполнена, то
отменяются все предыдущие команды из этой же
транзакции, – происходит «откат транзакции»

Можно разделить SQL на определенные подмножества:

Слайд 15

DQL – язык запросов. Команды предназначены для
извлечения данных из таблиц
DML

DQL – язык запросов. Команды предназначены для извлечения данных из таблиц DML
– язык манипуляция данными
TPL – язык обработки транзакций. Команды позволяют
объединить команды языка DML в группы транзакций.
Если одна из команд не может быть выполнена, то
отменяются все предыдущие команды из этой же
транзакции, – происходит «откат транзакции»
DDL – язык определение данных. Включает в себя также
инструкции обеспечения целостности данных.
Например, команды создания таблиц и организации
связей между ними

Можно разделить SQL на определенные подмножества:

Слайд 16

DQL – язык запросов. Команды предназначены для
извлечения данных из таблиц
DML

DQL – язык запросов. Команды предназначены для извлечения данных из таблиц DML
– язык манипуляция данными
TPL – язык обработки транзакций. Команды позволяют
объединить команды языка DML в группы транзакций.
Если одна из команд не может быть выполнена, то
отменяются все предыдущие команды из этой же
транзакции, – происходит «откат транзакции»
DDL – язык определение данных. Включает в себя также
инструкции обеспечения целостности данных.
Например, команды создания таблиц и организации
связей между ними
CCL – язык управления курсором. Позволяет выбрать для
обработки одну строку из результирующего множества
запросов

Можно разделить SQL на определенные подмножества:

Слайд 17

DQL – язык запросов. Команды предназначены для
извлечения данных из таблиц
DML

DQL – язык запросов. Команды предназначены для извлечения данных из таблиц DML
– язык манипуляция данными
TPL – язык обработки транзакций. Команды позволяют
объединить команды языка DML в группы транзакций.
Если одна из команд не может быть выполнена, то
отменяются все предыдущие команды из этой же
транзакции, – происходит «откат транзакции»
DDL – язык определение данных. Включает в себя также
инструкции обеспечения целостности данных.
Например, команды создания таблиц и организации
связей между ними
CCL – язык управления курсором. Позволяет выбрать для
обработки одну строку из результирующего множества
запросов
DCL – язык управления данными. Содержит инструкции с
помощью которых выполняется присваивание прав
доступа к БД, множеству таблиц или представлений

Можно разделить SQL на определенные подмножества:

Слайд 18

Использование SQL
для выборки данных
из таблиц.
Оператор SELECT

Использование SQL для выборки данных из таблиц. Оператор SELECT

Слайд 19

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

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

Слайд 20

Запросы обычно рассматриваются как часть языка DML. Однако, так как запрос не

Запросы обычно рассматриваются как часть языка DML. Однако, так как запрос не
меняет информацию в таблицах, а просто показывает ее пользователю, будем рассматривать запросы как самостоятельную категорию среди команд DML, которые производят действие, а не просто показывают содержание базы данных.

Слайд 21

Все запросы в SQL состоят из одиночной команды. Эта команда называется SELECT

Все запросы в SQL состоят из одиночной команды. Эта команда называется SELECT (выбор).
(выбор).

Слайд 22

Например, для того чтобы вывести на экран таблицу Cтуденты достаточно использовать такую

Например, для того чтобы вывести на экран таблицу Cтуденты достаточно использовать такую
команду:
SELECT StudNo, Имя, Фамилия, Адрес, Телефон
FROM Студенты;

Слайд 23

Запрос может быть сформирован в несколько строк или же в одну.

Запрос может быть сформирован в несколько строк или же в одну.

Слайд 24

В списке полей можно использовать символ * для указания, что необходимо выводить

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

Слайд 25

Другими словами, можно составить следующий запрос, полностью аналогичный предыдущему:
SELECT * FROM

Другими словами, можно составить следующий запрос, полностью аналогичный предыдущему: SELECT * FROM
Студенты;
Общий вид оператора SELECT
SELECT [ DISTINCT | ALL ] <выражение или имя поля>, ...
FROM <ссылка на таблицу>, ...
[WHERE <предикат>]
[GROUP BY <столбец, по которому выполняется группировка>, ...]
[HAVING <предикат>]
[ORDER BY <столбец, по которому выполняется упорядочивание> [ ASC | DESC ], ... ]

Слайд 26

Команда извлекает только те строки из таблицы для, которых такое утверждение верно.

Команда извлекает только те строки из таблицы для, которых такое утверждение верно.

Например, если необходимо выбрать информацию по студенту Петров, то можно использовать такой запрос:
SELECT Имя, Фамилия, Телефон, СтудNo
FROM Студенты
WHERE Фамилия = ‘Петров’;

Слайд 27

Заметим, что если поле не является текстовым, то в операции сравнения кавычки

Заметим, что если поле не является текстовым, то в операции сравнения кавычки
указывать не нужно.
Например, выберем студентов, стипендия которых больше 1400 рублей:
SELECT Имя, Фамилия, Телефон
FROM Студенты
WHERE Стипендия > 1400;

Слайд 28

Операции сравнения, логические и арифметические операции

Операции сравнения, логические и арифметические операции

Слайд 29

Логические и другие операции в SQL

Конкатенация (объединение двух строк или двух любых

Логические и другие операции в SQL Конкатенация (объединение двух строк или двух
разнотипных значений)

&

Деление

/

Умножение

*

Вычитание

-

Сложение двух чисел

+

Логическая операция НЕ (отрицание)

NOT

Логическая операция ИЛИ (дизъюнкция)

OR

Логическая операция И (конъюнкция)

AND

Сравнивает два значения и возвращает «истину», если левое значение не равно значения справа

<>

Сравнивает два значения и возвращает «истину», если левое значение равно значения справа

=

Сравнивает два значения и возвращает «истину», если левое значение меньше или равно значения справа

<=

Сравнивает два значения и возвращает «истину», если левое значение больше или равно значения справа

>=

Сравнивает два значения и возвращает «истину», если левое значение меньше значения справа

<

Сравнивает два значения и возвращает «истину», если значение слева от оператора больше значения справа

>

Назначение

Операция

Слайд 30

Пример.
Пусть необходимо найти жилье в Пензе стоимостью не более 400 рублей

Пример. Пусть необходимо найти жилье в Пензе стоимостью не более 400 рублей
в сутки.
Select Улица, Город, Плата
From Жилье
Where Город=’Пенза’ AND Плата<=400;

Слайд 31

Для формирования более сложных предикатов можно использовать скобки, определяющие порядок вычисления значения

Для формирования более сложных предикатов можно использовать скобки, определяющие порядок вычисления значения
предиката.
Предположим, нужно вывести цену за аренду жилья и рядом налог на имущество, выплачиваемый за это жилье. Результат выдать отсортированный по полям «город» и «адрес». Пусть налог на имущество за месяц представляет собой фиксированную сумму, равную 40 рублям плюс 13% от стоимости аренды:
SELECT Жилье.ЖNo, Жилье.Город, Жилье.Улица, Жилье.Плата,
'40 руб. + 13%' AS СтавкаНалога,
(40+ Жилье.Плата*13/100)&'рублей' AS Налог
FROM Жилье
ORDER BY Город, Улица;

Слайд 32

Ключевые слова ORDER BY используются для окончательной сортировки, полученных данных. Указываются столбцы,

Ключевые слова ORDER BY используются для окончательной сортировки, полученных данных. Указываются столбцы,
по которым нужно сортировать, при этом ключевое слово ASC означает сортировку по возрастанию, DESC – сортировку по убыванию.

Слайд 33

Результат выполнения запроса

88,75рублей

40 руб. + 13%

375,00р.

ул.М-2

Пенза

ЖЖ36

98,5рублей

40 руб. + 13%

450,00р.

ул.N-5

Пенза

ЖЖ16

85,5рублей

40 руб. + 13%

350,00р.

ул.L-6

Пенза

ЖЖ4

118рублей

40

Результат выполнения запроса 88,75рублей 40 руб. + 13% 375,00р. ул.М-2 Пенза ЖЖ36
руб. + 13%

600,00р.

ул.D-18

Пенза

ЖЖ21

92рублей

40 руб. + 13%

400,00р.

ул.А-6

Москва

ЖЛ94

124,5рублей

40 руб. + 13%

650,00р.

ул.Н-16

Астрахань

ЖА14

Налог

Ставка
Налога

Плата

Улица

Город

ЖNo

Слайд 34

Пример.
Выдать список сотрудников мужского пола старше 55 лет и женского пола

Пример. Выдать список сотрудников мужского пола старше 55 лет и женского пола
старше 45 лет. В данном примере будем использовать дополнительную функцию Date ( ), которая возвращает текущую дату. Аналог такой функции присутствует в различных реализациях СУБД, но не рассматривается стандартом SQL:
Select Имя, Фамилия, Дрожд
From Сотрудники
Where (Пол=’М’ AND (Date()- Дрожд)>55) OR
(Пол=’Ж’ AND (Date()- Дрожд)>45);

Слайд 35

Использование специальных операторов IN,
BETWEEN, LIKE, NULL, NOT

Использование специальных операторов IN, BETWEEN, LIKE, NULL, NOT

Слайд 36

Для определения более сложных выражений в предикатах с одной стороны и упрощения

Для определения более сложных выражений в предикатах с одной стороны и упрощения
внешнего вида предикатов – с другой в SQL используются различные дополнительные операторы.

Слайд 37

Специальные операторы

Проверяет, совпадает ли значение проверяемого поля с шаблоном. В качестве метасимволов

Специальные операторы Проверяет, совпадает ли значение проверяемого поля с шаблоном. В качестве
шаблонов используются: символ подчеркивания ( _ ), который замещает любой одиночный символ; символ процента (%) замещает последовательность любого количества символов

<поле> LIKE <шаблон>
Пример.
SELECT * FROM Сотрудники WHERE Фамилия LIKE ‘Б%’;

Определяет диапазон, значения которого должны увеличиваться от возможного минимального значения (<МinЗнач>) до максимального (<МахЗнач>) и возвращает истину, если проверяемое поле принадлежит данному диапазону. Значение может быть как числовым, так и символьным

<поле> BETWEEN <МinЗнач> AND <МахЗнач>
Пример.
SELECT * FROM Сотрудники WHERE ЗП BETWEEN 9000 AND 20000;

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

<поле> IN (знач.1, знач.2, …)
Пример.
SELECT * FROM Сотрудники WHERE Фno IN (‘Ф3’, ‘Ф7’);

Назначение

Оператор, пример

Слайд 38

Замечания:

Замечания:

Слайд 39

SELECT * FROM Сотрудники
WHERE (ЗП BETWEEN 9000 AND 20000) AND NOT

SELECT * FROM Сотрудники WHERE (ЗП BETWEEN 9000 AND 20000) AND NOT
ЗП IN (9000,20000);

Замечания:

1. Оператор BETWEEN включает в результат
граничные значения, поэтому, для того чтобы
исключить граничные значения, можно
использовать оператор IN. Например,
необходимо выдать список всех сотрудников,
зарплата которых больше 9000, но меньше 20000,
т.е. граничные значения не включаются в результат.
Тогда запрос может быть таким:

Слайд 40

SELECT * FROM Сотрудники
WHERE Фамилия BETWEEN ‘А’ AND ‘Л’;

Замечания:

2. Если в

SELECT * FROM Сотрудники WHERE Фамилия BETWEEN ‘А’ AND ‘Л’; Замечания: 2.
BETWEEN используются в качестве
аргументов строки, то происходит отбор значений
по диапазону ASCII-кодов символов. Например,
если необходимо выбрать сотрудников, чьи
фамилии находятся в алфавитном диапазоне
от А до Л, то можно использовать такой запрос:

Слайд 41

Замечания:

3. Оператор LIKE применим только к символьным
данным (типа CHAR).

Замечания: 3. Оператор LIKE применим только к символьным данным (типа CHAR).

Слайд 42

Замечания:

3. Оператор LIKE применим только к символьным
данным (типа CHAR).
4. В

Замечания: 3. Оператор LIKE применим только к символьным данным (типа CHAR). 4.
некоторых реализациях SQL (например, в СУБД
MS-Access) вместо метасимвола ‘%’ используется
метасимвол ‘*’.

Слайд 43

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

Часто в таблицах существуют записи, которые не имеют никаких значений для каждого
поля, например, потому, что информация не завершена, или потому, что это поле просто не заполнялось. SQL учитывает такой вариант, позволяя вводить значение NULL (ПУСТОЙ) в поле вместо значения.

Слайд 44

Когда значение поля равно NULL, это означает, что программа базы данных специально

Когда значение поля равно NULL, это означает, что программа базы данных специально
промаркировала это поле как не имеющее никакого значения для этой строки (или записи).

Слайд 45

Следует учитывать, что NOT (неверное) равняется «верно», NOT (неизвестное) равняется «неизвестно». Следовательно,

Следует учитывать, что NOT (неверное) равняется «верно», NOT (неизвестное) равняется «неизвестно». Следовательно,
выражение типа 'Фамилия = NULL' или 'Фамилия IN (NULL)' будет неизвестно, независимо от значения поля «Фамилия».

Слайд 46

Найдем все записи в таблице Съемщик с NULL значениями в столбце «Фамилия»:

Найдем все записи в таблице Съемщик с NULL значениями в столбце «Фамилия»:

SELECT * FROM Съемщик WHERE Фамилия IS NULL;
Здесь не будет никакого вывода, потому что в таблице нет никаких значений NULL.

Слайд 47

Специальные операторы IN, BETWEEN, LIKE, а также NULL могут использоваться совместно с

Специальные операторы IN, BETWEEN, LIKE, а также NULL могут использоваться совместно с
булевым оператором NOT – отрицание, инверсия.

Слайд 48

Пример.
Если мы хотим устранить NULL из нашего вывода, мы будем использовать NOT,

Пример. Если мы хотим устранить NULL из нашего вывода, мы будем использовать
чтобы изменить на противоположное значение предиката:
SELECT * FROM Съемщик WHERE Фамилия IS NOT NULL;

Слайд 49

Другие примеры использования NOT:
SELECT * FROM Жилье
WHERE Город NOT IN (

Другие примеры использования NOT: SELECT * FROM Жилье WHERE Город NOT IN
' Астрахань ', 'Москва' );
SELECT * FROM Жилье
WHERE NOT Город IN ( 'Астрахань', 'Москва' );

Слайд 50

Пример создания простой БД в СУБД
MS-ACCESS-2002

Пример создания простой БД в СУБД MS-ACCESS-2002

Слайд 51

Задача.
Создадим БД, имеющую 2 таблицы, 1 форму для ввода, 1 запрос

Задача. Создадим БД, имеющую 2 таблицы, 1 форму для ввода, 1 запрос
и 1 отчет. БД описывает студентов учебного учреждения и их распределение по группам.

Слайд 52

Создание новой БД

Создание новой БД

Слайд 53

Сохранение БД под новым именем

Сохранение БД под новым именем

Слайд 54

Создание новой таблицы (отношения) в БД

Создание новой таблицы (отношения) в БД

Слайд 55

Создание полей в таблице БД

Создание полей в таблице БД

Слайд 56

Пример создания поля денежного типа

Пример создания поля денежного типа

Слайд 57

Пример создания числового поля
«одинарное с плавающей точкой»

Пример создания числового поля «одинарное с плавающей точкой»

Слайд 58

Сохранение таблицы в БД

Сохранение таблицы в БД

Слайд 59

Добавление ключевого поля

Добавление ключевого поля

Слайд 60

Добавление ключевого поля
«Номер студенческого билета»

Добавление ключевого поля «Номер студенческого билета»

Слайд 61

Способ указать ключевое поле

Способ указать ключевое поле

Слайд 62

Обозначение ключевого поля в списке полей таблицы

Обозначение ключевого поля в списке полей таблицы

Слайд 63

Основные режимы работы с таблицей

Основные режимы работы с таблицей

Слайд 64

Просмотр в режиме «Таблица» (пустая таблица)

Просмотр в режиме «Таблица» (пустая таблица)

Слайд 65

Добавление данных (записей о студентах) в таблицу

Добавление данных (записей о студентах) в таблицу

Слайд 66

Переход в окно «База данных»

Переход в окно «База данных»

Слайд 67

Вид окна «База данных» раздел «Таблицы»

Вид окна «База данных» раздел «Таблицы»

Слайд 68

Добавление новой таблицы «Группы» в БД

Добавление новой таблицы «Группы» в БД

Слайд 69

Вид окна «База данных» раздел «Таблицы»
Создано две таблицы «Студенты» и «Группы»

Вид окна «База данных» раздел «Таблицы» Создано две таблицы «Студенты» и «Группы»

Слайд 70

Добавление связей между отношениями (таблицами)
в меню «Сервис/схема данных»

Добавление связей между отношениями (таблицами) в меню «Сервис/схема данных»

Слайд 71

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

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

Слайд 72

Схема данных. Связи еще не установлены

Схема данных. Связи еще не установлены

Слайд 73

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

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

Слайд 74

Отображение связи «один ко многим»

Отображение связи «один ко многим»

Слайд 75

Создание формы

Создание формы

Слайд 76

Выбор таблицы для формы и полей

Выбор таблицы для формы и полей

Слайд 77

Выбранные поля попали в правую часть экрана

Выбранные поля попали в правую часть экрана

Слайд 78

Выбор внешнего вида формы «В один столбец»

Выбор внешнего вида формы «В один столбец»

Слайд 79

Выбор стиля формы «Стандартный»

Выбор стиля формы «Стандартный»

Слайд 80

Задание имения формы и ее сохранение

Задание имения формы и ее сохранение

Слайд 81

Вид созданной формы «Группы» для ввода данных в таблицу

Вид созданной формы «Группы» для ввода данных в таблицу

Слайд 82

Столбец связи поля «ФИО» с таблицей «Группы»

Столбец связи поля «ФИО» с таблицей «Группы»

Слайд 83

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

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

Слайд 84

Добавление таблиц, участвующих в запросе

Добавление таблиц, участвующих в запросе

Слайд 85

Выбор полей для запроса и установка условий отбора

Выбор полей для запроса и установка условий отбора

Слайд 86

Режимы работы с запросами

Режимы работы с запросами

Слайд 87

Режим запроса «Таблица» - результат выполнения запроса

Режим запроса «Таблица» - результат выполнения запроса

Слайд 88

Сохранение запроса под именем «По стипендии»

Сохранение запроса под именем «По стипендии»

Слайд 89

Выбор режима просмотра запроса на языке SQL

Выбор режима просмотра запроса на языке SQL

Слайд 90

Вид запроса в режиме «SQL» (запрос на языке SQL)

Вид запроса в режиме «SQL» (запрос на языке SQL)

Слайд 91

Создание отчета

Создание отчета

Слайд 92

Выбор таблицы и полей для отчета

Выбор таблицы и полей для отчета

Слайд 93

Выбранные поля для отчета в правом столбце

Выбранные поля для отчета в правом столбце

Слайд 94

Способы группировки данных в отчете

Способы группировки данных в отчете

Слайд 95

Требуемый порядок сортировки данных в отчете

Требуемый порядок сортировки данных в отчете

Слайд 96

Макет отчета «Табличный»

Макет отчета «Табличный»

Слайд 97

Стиль отчета «Деловой»

Стиль отчета «Деловой»

Слайд 98

Сохранение отчета под именем «Студенты»

Сохранение отчета под именем «Студенты»

Слайд 99

Результат выполнения отчета «Студенты»

Результат выполнения отчета «Студенты»

Слайд 100

Результат работы. Таблицы: «Группы», «Студенты»

Результат работы. Таблицы: «Группы», «Студенты»

Слайд 101

Результат работы. Запрос: «По стипендии»

Результат работы. Запрос: «По стипендии»

Слайд 102

Результат работы. Форма «Группы»

Результат работы. Форма «Группы»

Слайд 103

Результат работы. Отчет «Студенты»

Результат работы. Отчет «Студенты»
Имя файла: ЗАОЧНАЯ-ФОРМА-ОБУЧЕНИЯ.pptx
Количество просмотров: 228
Количество скачиваний: 0