Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Язык SQL (Structured Query Language). Интерактивный и встроенный SQL. Составные части SQL. Типы данных SQL. Основные типы команд SQLСтр 1 из 4Следующая ⇒
Язык SQL (Structured Query Language). Интерактивный и встроенный SQL. Составные части SQL. Типы данных SQL. Основные типы команд SQL SQL – это язык структурированных запросов (Structured Query Language) к реляционным БД. Используя SQL-запросы, можно выбирать из таблиц БД только необходимые записи. При этом мы можем получить доступ не просто к одной таблице, а к сложной выборке из связанных между собой таблиц или наборов данных. SQL как стандартный способ управления БД реализован во многих СУБД, включая Microsoft Access и SQL Server. Существуют две формы языка SQL: интерактивный SQL и встроенный SQL. Интерактивный SQL используется для задания SQL-запросов пользователем и получения результата в интерактивном режиме. Встроенный SQL состоит из команд SQL, встроенных внутрь программ, обычно написанных на каком-то другом языке (Паскаль, С, C++и др.). Составные части SQL. И интерактивный, и встроенный SQL подразделяются на следующие составные части: DDL, или язык определения данных; DML, или язык манипулирования данными; DQL, или язык запросов; DCL, или язык управления данными; Команды администрирования данных; Команды управления транзакциями. Типыданных SQL CHARACTER (CHAR) представляет собой символьные строки фиксированной длины. INTEGER — представление целых чисел в диапазоне от –231 до +231. SMALLINT — используется для представления целых чисел в диапазоне от –215 до +215. DECIMAL (точность [, масштаб ])— десятичное число с фиксированной точкой, точность определяет количество значащих цифр в числе. Масштаб указывает максимальное число цифр справа от точки. FLOAT [(точность)] — число с плавающей точкой и указанной миним. точностью. REAL — число такое же, как при типе FLOAT, за исключением определения точности по умолчанию (в зависимости от конкретной реализации SQL). DOUBLE PRECISION — число аналогично REAL, но точность в два раза выше точности REAL. Дата и время -Тип данных, предназначенный для представления даты и времени, также является нестандартным, хотя и чрезвычайно полезным. Неопределенные или пропущенные данные (NULL) Для обозначения отсутствующих, пропущенных или неизвестных значений атрибута в SQL используется ключевое слово NULL. Типы команд SQL 1. Команды языка определения данных (data definition language — DDL) позволяют создавать новые таблицы в БД, добавлять индексы и т.д.: CREATE TABLE - создать таблицу, ALTER TABLE - модифицировать таблицу, DROP TABLE - удалить таблицу, CREATE INDEX - создать индекс, ALTER INDEX - модифицировать индекс, DROP INDEX - удалить индекс.
2. Команды языка обработки данных (data manipulation language — DML) используются для добавления, корректировки и удаления строк в таблицах и включают команды: INSERT - вставить данные в таблицу, UPDATE - обновить данные, DELETE - удалить данные. 3. Команда языка запросов данных (dataquerylanguage — DQL) (единственная команда) используется для получения данных из таблиц и определения формы представления этих данных: SELECT - выполнить запрос из таблиц базы. 4. Команды языка управления данными (data control language— DCL) определяют доступ отдельных пользователей и групп пользователей к объектам БД посредством полномочий, предоставляемых и отменяемых командами: GRANT - предоставить привилегии, REVOKE - отменить привилегии. 5. Команды языка обработки транзакций (transaction processing language — TPL) обеспечивают обновление всех строк, используемых в операторе DML, и включают следующие команды: BEGIN TRANSACTION - начать транзакцию, COMIT TRANSACTION - завершить транзакцию, SAVE TRANSACTION - создать точку сохранения внутри транзакции. 6. Команды языка управления курсором (cursor control language — CCL) выполняют операции с отдельными строками одной или нескольких таблиц и включают команды: DECLARE CURSOR, FETCH INTO и UPDATE WHERE CURRENT. Строковые функции • LENGTH — определение длины строки LENGTH (<строка>) · LFAD(<строка>,<длина>[,<подстрока>]) — дополнение строки слева. · RPAD(<строка>,<длина>[,<подстрока>]) — дополнение строки справа. · LTRIM(<строка>[,<подстрока>]) — удаление левых граничных символов. · RTRIM(<строка>[,<подстрока>]) — удаление правых граничных символов · SUBSTR (<строка>,<нзчало>[,<количество>)) — выделение подстроки. · INSTR (<строка>,<подстрока>[,<начало поиска> [,<номер вхождения>]]) — поиск подстроки. Функции работы с числами · ABS — абсолютное значение. · FLOOR — урезает значение числа с плавающей точкой до наибольшего целого · CEIL — самое малое целое, равное или большее заданного числа. · Гиперболические функции — COSH, SINH, TANH · Тригонометрические функции — COS, SIN, TAN и т.д.
· Функция округления— ROUND · Функция усечения— TRUNC · Функция возведения в степень — POWER Функции преобразования из одного типа данных в другой: · TO_CHAR, TO_NUMBER, TO_DATE, CAST. SELECT COUNT FROM EXAM_MARKS; Предложение GROUP BY (группировать по) позволяет группировать записи в подмножества, определяемые значениями какого-либо поля, и применять агрегирующие функции уже не ко всем записям таблицы, а раздельно к каждой сформированной группе Предположим, требуется найти максимальное значение оценки, полученной каждым студентом, тогда запрос имеет вид: SELECT STUDENT_ID, MAX (MARK) FROM EXAM_MARKS GROUP BY STUDENT_ID; Однозвенная архитектура Однозвенная (one-tier, single-tier) архитектура – это система, в которой все службы БД, приложения и представления (пользовательский интерфейс) размещены на одной системе. Системы такого типа не производят обработку вне тех компьютеров, на которых они исполняются. Примером однозвенной архитектуры может служить БД Microsoft Аccess с локальными службами представления. Пример однозвенной архитектуры с SQL Server найти гораздо труднее. 20. Общие понятия и определения целостности. Принципы поддержки целостности в СУБД. Преимущества и недостатки средств обеспечения целостности данных. Примеры использования объекта «ограничения целостности» в базе данных. Одним из основополагающих понятий в технологии БД является понятие целостности. В реляционной модели под целостностью понимается соответствие информационной модели предметной области, хранимой в БД, объектам реального мира и их взаимосвязям в каждый момент времени. Поддержка целостности в реляционной модели данных в ее классическом понимании включает в себя 3 аспекта: · поддержка структурной целостности · поддержка языковой целостности · поддержка ссылочной целостности (Declarative Referential Integrity, DRI) Поддержка структурной целостности: трактуется как то, что реляционная СУБД должна допускать работу только с однородными структурами данных типа "реляционное отношение". При этом понятие "реляционного отношения" должно удовлетворять всем ограничениям, накладываемым на него в классической теории реляционной БД. Поддержка языковой целостности: Состоит в том, что реляционная СУБД должна обеспечивать языки описания и манипулирования данными не ниже стандарта SQL. Не должны быть доступны иные низкоуровневые средства манипулирования данными, не соответствующие стандарту. Именно поэтому доступ к информации, хранимой в БД, и любые изменения этой информации могут быть выполнены только с использованием операторов языка SQL. Поддержка ссылочной целостности: Означает обеспечение одного из заданных принципов взаимосвязи между экземплярами кортежей взаимосвязанных отношений: · кортежи подчиненного отношения уничтожаются при удалении кортежа основного отношения, связанного с ними. · кортежи основного отношения модифицируются при удалении кортежа основного отношения, связанного с ними, при этом на месте ключа родительского отношения ставится неопределенное Null значение. Ссылочная целостность обеспечивает поддержку непротиворечивого состояния БД в процессе модификации данных при выполнении операций добавления или удаления. Кроме указанных ограничений целостности, которые в общем виде не определяют семантику БД, также существует понятие семантической поддержки целостности.
Преимущества и недостатки: Триггеры должны использоваться только в том случае, если ограничения не позволяют достичь намеченной цели. Таким образом, для обеспечения целостности данных следует преимущественно использовать ограничения. Эти конструкции являются быстродействующими, а задача их создания не так уж сложна. Недостаток ограничений состоит в том, что их функциональные возможности строго лимитированы (в частности, любые ограничения, кроме ограничений внешнего ключа, не позволяют ссылаться на другие таблицы). А если в БД широко применяются однотипные условия ограничений, то приходится заниматься однообразной и скучной работой- переопределять одни и те же ограничения снова и снова. Примеры правил: вес детали должен быть положительным; количество знаков в телефонном номере не должно превышать 25; возраст родителей не может быть меньше возраста их биологического ребёнка и т.д. Главное средство обеспечение доменной целостности в SQL Server - это ограничение CHECK. Оно может быть определено при создании таблицы или добавлено позднее при помощи команды ALTER TABLE, например: ALTER TABLE dbo.Employees ADDCONSTRAINT CK_birthdate CHECK (BirthDate> '01-01-1900' AND BirthDate<getdate()) Понятие подзапроса. Примеры формирования связанных и вложенных подзапросов. Подзапрос – это инструмент создания временной таблицы, содержимое которой извлекается и обрабатывается внешним оператором. Текст подзапроса должен быть заключен в скобки. Запросы, отделенные круглыми скобками и входящие в состав конструкций HAVING, WHERE, FROM, SELECT и WITH внешнего запроса SELECT или каких-либо других перечисленных запросов, заключающих в себе эти конструкции, называются вложенными запросами (подзапросами). Вложенные подзапросы могут быть простыми и связанными. Если результат вложенного запроса не зависит от результата внешнего, то такой вложенный запрос называется простым. Вложенные подзапросы: Предположим, та фамилия студента («Петров»), но неизвестно значение поля STUDENT_ID для него. Чтобы извлечь данные обо всех оценках этого студента, можно записать следующий запрос: SELECT * FROM EXAM_MARKS WHERE STUDENT_ID = (SELECT STUDENT_ID FROM STUDENTSURNAME='Петров' ); Как работает запрос SQL со связанным подзапросом? 1) Выбирается строка из таблицы, имя которой указано во внешнем запросе. 2) Выполняется подзапрос и полученное значение применяется для анализа этой строки в условии предложения WHERE внешнего запроса.
3) По результату оценки этого условия принимается решение о включении или не включении строки в состав выходных данных. 4) Процедура повторяется для следующей строки таблицы внешнего запроса. В некоторых случаях для гарантии получения единственного значения в результате выполнения подзапроса используется DISTINCT. Широко применяется в подзапросах оператор IN, задающий список значений, с которыми сравниваются другие значения для определения истинности задаваемого этим оператором предиката. Подзапросы можно применять внутри предложения HAVING. Пусть требуется определить количество предметов обучения с оценкой, превышающей среднее значение оценки студента с идентификатором 301: SELECT COUNT (DISTINCT SUBJ_ID ), MARK FROM EXAM_MARKS GROUP BY MARK HAVING MARK > (SELECT AVG( MARK ) FROM EXAM_MARKS WHERE STUDENT_ID = 301 ); Связанныеподзапросы: Если результат вложенного запроса зависит от результата внешнего, то такой вложенный запрос называется связанным вложенным запросом. Иными словами, вложенный запрос является связанным, если в конструкциях WHERE, HAVING указан столбе, фигурирующий во внешнем запросе. Такая связь имеет название внешней ссылки. В связанных вложенных запросах названия столбцов записываются полностью. Если во внешней конструкции запроса и вложенной используется общая таблица, то столбцам присваиваются псевдонимы. При использовании подзапросов во внутреннем запросе можно ссылаться на таблицу, имя которой указано в предложении FROM внешнего запроса. В этом случае такой связанный подзапрос выполняется по одному разу для каждой строки таблицы основного запроса. Пример: выбрать сведения обо всех предметах обучения, по которым проводился экзамен 20 января 2006 г. SELECT * FROM SUBJECT SU WHERE '20/01/2006' IN (SELECT EXAM_DATE FROM EXAM_MARKS EX WHERE SU.SUBJ_ID=EX.SUBJ_ID ); Пример создания триггера В стандарте SQL1 ни хранимые процедуры, ни триггеры были не определены. В добавлении к стандарту SQL2, выпущенному в 1996 году, те и другие объекты были стандартизированы и определены. Для создания триггеров используется специальная команда: CREATE TRIGGER <имя_триггера> ON <имя_таблицы> FOR {[INSERT][, UPDATE] [, DELETE] } [WITH ENCRIPTING] AS SQL-операторы (Тело триггера) Имя триггера является идентификатором во встроенном языке программирования СУБД и должно удовлетворять соответствующим требованиям. В параметре FOR задается одна или несколько операций модификации, которые запускают данный триггер. Параметр WITH ENCRIPTING имеет тот же смысл, что и для хранимых процедур, он скрывает исходный текст тела триггера. Существует несколько правил, которые ограничивают набор операторов, которые могут быть использованы в теле триггера.
Так, в большинстве СУБД действуют следующие ограничения: · Нельзя использовать в теле триггера операции создания объектов БД (новой БД, новой таблицы, нового индекса, новой хранимой процедуры, нового триггера, новых индексов, новых представлений).
· Нельзя использовать в триггере команду удаления объектов DROP для всех типов базовых объектов БД. · Нельзя использовать в теле триггера команды изменения базовых объектов ALTER TABLE, ALTER DATABASE. · Нельзя изменять права доступа к объектам БД, то есть выполнять команду GRAND или REVOKE. · Нельзя создать триггер для представления VIEW. · В отличие от хранимых процедур, триггер не может возвращать никаких значений, он запускается автоматически сервером и не может связаться самостоятельно ни с одним клиентом. Абстрактные типы данных Одной из наиболее известных СУБД третьего поколения является система Postgres, а создатель этой системы М.Стоунбрекер, по всей видимости, является вдохновителем всего направления. В Postgres реализованы многие интересные средства: поддерживается темпоральная модель хранения и доступа к данным (см. ниже) и в связи с этим абсолютно пересмотрен механизм журнализации изменений, откатов транзакций и восстановления БД после сбоев; обеспечивается мощный механизм ограничений целостности; поддерживаются ненормализованные отношения (работа в этом направлении началась еще в среде Ingres), хотя и довольно странным способом: в поле отношения может храниться динамически выполняемый запрос к БД OLTP и OLAP-системы Сильно нормализованные модели данных хорошо подходят для так называемых OLTP-приложений (On-LineTransactionProcessing (OLTP)- оперативная обработка транзакций). Типичными примерами OLTP-приложений являются системы складского учета, системы заказов билетов, банковские системы, выполняющие операции по переводу денег, и т.п. Другим типом приложений являются так называемые OLAP-приложения (On-Line Analitical Processing (OLAP) - оперативная аналитическая обработка данных). Это обобщенный термин, характеризующий принципы построения систем поддержки принятия решений (DecisionSupportSystem - DSS), хранилищ данных (DataWarehouse), систем интеллектуального анализа данных (DataMining). Такие системы предназначены для нахождения зависимостей между данными (например, можно попытаться определить, как связан объем продаж товаров с характеристиками потенциальных покупателей), для проведения анализа "что если…". OLAP-приложения оперируют с большими массивами данных, уже накопленными в OLTP-приложениях, взятыми их электронных таблиц или из других источников данных. Такие системы характеризуются следующими признаками: · Добавление в систему новых данных происходит относительно редко крупными блоками. · Данные, добавленные в систему, обычно никогда не удаляются. · Перед загрузкой данные проходят различные процедуры "очистки", связанные с тем, что в одну систему могут поступать данные из многих источников, имеющих различные форматы представления для одних и тех же понятий, данные могут быть некорректны, ошибочны. · Запросы к системе являются нерегламентированными и, как правило, достаточно сложными. · Скорость выполнения запросов важна, но не критична. Схема «снежинки» получила свое название за свою форму, в виде которой отображается логическая схема таблиц в многомерной БД. Так же как и в схеме звезды, схема снежинки представлена централизованной таблицей фактов, соединенной с таблицами измерений. Отличием является то, что здесь таблицы измерений нормализованы с рядом других связанных измерительных таблиц, — в то время как в схеме звезды таблицы измерений полностью денормализованы, с каждым измерением представленным в виде единой таблицы, без соединений на связанные таблицы в схеме снежинки. Чем больше степень нормализации таблиц измерений, тем сложнее выглядит структура схемы снежинки. Создаваемый «эффект снежинки» затрагивает только таблицы измерений, и не применим к таблицам фактов. Схема «звезды», схема звёздного соединения, звездоподобная схема, звёздная схема (от англ. starschema) — специальная организация реляционных таблиц, удобная для хранения многомерных показателей. Лежит в основе реляционного OLAP. Модель данных состоит из двух типов таблиц: одной таблицы фактов (facttable) — центр «звезды» — и нескольких таблиц измерений (dimensiontable) по числу измерений в модели данных — лучи «звезды». Объектно-реляционные СУБД. Подходы к построению объектно-реляционных СУБД (ОРСУБД). Классификация СУБД В ОРСУБД широко используются такие объектно-ориентированные компоненты, как: · расширяемая пользователем система типов, · инкапсуляция, · наследование, · полиморфизм, · динамическое связывание методов, · использование составных, · поддержка идентичности объектов. Архитектура СУОБД ODMG-93 определяет СУОБД как СУБД, интегрирующую свойства БД и объектно-ориентированных языков программирования. В качестве основы объектной модели ODMG-93 используется объектная модель OMG. Модель данных. Базовыми примитивами являются объекты и литералы. Каждый объект имеет уникальный идентификатор, литерал не имеет идентификатора. Объект, на который можно установить ссылку, называется экземпляром; он хранит определенный набор данных Состояние объекта определяется набором значений, реализуемых множеством свойств. Этими свойствами могут быть атрибуты объекта или связи между объектом и одним или несколькими другими объектами. Поведение объекта определяется набором операций, которые могут быть выполнены над объектом или самим объектом. Операции могут иметь список входных и выходных параметров строго определенного типа. Каждая операция может также возвращать типизированный результат. БД хранит объекты, позволяя совместно использовать их различным пользователям и приложениям. БД основана на схеме данных, определяемой языком определения данных, и содержит экземпляры типов, определенных схемой. Каждый тип имеет внешнюю спецификацию и одну или несколько реализаций. Спецификация определяет внешние характеристики типа: пользователю для работы с объектом предоставляется набор операций и набор атрибутов объекта, при помощи которых можно работать с реальными экземплярами. Реализация определяет внутреннее содержание объектов, например операции. Тип также является объектом. Поддерживается иерархия супертипов и подтипов, реализуя стандартный механизм ООП — наследование. Новые типы данных Особенность ООСУБД состоит в том, что создание нового типа не требует модификации ядра базы и основано на принципах ООП. В ООСУБД для объектов, которые предполагается хранить в базе, требуется, чтобы их предком был конкретный базовый тип, определяющий все основные операции взаимодействия с сервером БД. Поэтому для создания своего типа необходимо: · унаследовать свойства любого имеющегося типа, наиболее подходящего по своему поведению и состоянию к типу, который требуется получить; · расширить недостающие операции и атрибуты; · переопределить, по необходимости, уже имеющиеся Язык СУБД и запросы Общепризнанны две группы вариантов языков запросов: · Первая группа объединяет языки, унаследованные от SQL и представляющие собой разновидность языка OQL (ObjectQueryLanguage), стандартизованного ODMG. Объектно-реляционные СУБД используют различные варианты ограниченных объектных расширений SQL. · Вторая группа языков запросов базируется на языках группы XML QL, (или XQL). Они могут применяться в качестве языков запросов в объектных и объектно-реляционных БД. Три главных характеристики: · целостность, · масштабируемость · отказоустойчивость. Для создания ООСУБД были реализованы несколько проектов, например: ORION, O2 и Cache. ООСУБД полностью поддерживают объектно-ориентированные языки программирования. Разработчики, применяющие C++ или Smalltalk, могут использовать такие преимущества объектной технологии, как наследование, инкапсуляция и полиморфизм Язык SQL (Structured Query Language). Интерактивный и встроенный SQL. Составные части SQL. Типы данных SQL. Основные типы команд SQL SQL – это язык структурированных запросов (Structured Query Language) к реляционным БД. Используя SQL-запросы, можно выбирать из таблиц БД только необходимые записи. При этом мы можем получить доступ не просто к одной таблице, а к сложной выборке из связанных между собой таблиц или наборов данных. SQL как стандартный способ управления БД реализован во многих СУБД, включая Microsoft Access и SQL Server. Существуют две формы языка SQL: интерактивный SQL и встроенный SQL. Интерактивный SQL используется для задания SQL-запросов пользователем и получения результата в интерактивном режиме. Встроенный SQL состоит из команд SQL, встроенных внутрь программ, обычно написанных на каком-то другом языке (Паскаль, С, C++и др.). Составные части SQL. И интерактивный, и встроенный SQL подразделяются на следующие составные части: DDL, или язык определения данных; DML, или язык манипулирования данными; DQL, или язык запросов; DCL, или язык управления данными; Команды администрирования данных; Команды управления транзакциями. Типыданных SQL CHARACTER (CHAR) представляет собой символьные строки фиксированной длины. INTEGER — представление целых чисел в диапазоне от –231 до +231. SMALLINT — используется для представления целых чисел в диапазоне от –215 до +215. DECIMAL (точность [, масштаб ])— десятичное число с фиксированной точкой, точность определяет количество значащих цифр в числе. Масштаб указывает максимальное число цифр справа от точки. FLOAT [(точность)] — число с плавающей точкой и указанной миним. точностью. REAL — число такое же, как при типе FLOAT, за исключением определения точности по умолчанию (в зависимости от конкретной реализации SQL). DOUBLE PRECISION — число аналогично REAL, но точность в два раза выше точности REAL. Дата и время -Тип данных, предназначенный для представления даты и времени, также является нестандартным, хотя и чрезвычайно полезным. Неопределенные или пропущенные данные (NULL) Для обозначения отсутствующих, пропущенных или неизвестных значений атрибута в SQL используется ключевое слово NULL. Типы команд SQL 1. Команды языка определения данных (data definition language — DDL) позволяют создавать новые таблицы в БД, добавлять индексы и т.д.: CREATE TABLE - создать таблицу, ALTER TABLE - модифицировать таблицу, DROP TABLE - удалить таблицу, CREATE INDEX - создать индекс, ALTER INDEX - модифицировать индекс, DROP INDEX - удалить индекс. 2. Команды языка обработки данных (data manipulation language — DML) используются для добавления, корректировки и удаления строк в таблицах и включают команды: INSERT - вставить данные в таблицу, UPDATE - обновить данные, DELETE - удалить данные. 3. Команда языка запросов данных (dataquerylanguage — DQL) (единственная команда) используется для получения данных из таблиц и определения формы представления этих данных: SELECT - выполнить запрос из таблиц базы. 4. Команды языка управления данными (data control language— DCL) определяют доступ отдельных пользователей и групп пользователей к объектам БД посредством полномочий, предоставляемых и отменяемых командами: GRANT - предоставить привилегии, REVOKE - отменить привилегии. 5. Команды языка обработки транзакций (transaction processing language — TPL) обеспечивают обновление всех строк, используемых в операторе DML, и включают следующие команды: BEGIN TRANSACTION - начать транзакцию, COMIT TRANSACTION - завершить транзакцию, SAVE TRANSACTION - создать точку сохранения внутри транзакции. 6. Команды языка управления курсором (cursor control language — CCL) выполняют операции с отдельными строками одной или нескольких таблиц и включают команды: DECLARE CURSOR, FETCH INTO и UPDATE WHERE CURRENT.
|
|||||||||
Последнее изменение этой страницы: 2017-01-25; просмотров: 2496; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 100.26.140.179 (0.12 с.) |