Практическое руководство по SQL

3-е издание
Джудит С. Боуман, Сандра Л. Эмерсон, Марси Дарновски

The Practical SQL Handbook: Using Structured Query Language Third Edition
Judith Bowman
книга Практическое руководство по SQL, 3-е издание

Тираж данной книги закончился.
Введение
Файлы к книге
Рецензии на книгу

О книгах по SQL в блоге Виктора Штонда

Эта книга поможет даже в тех случаях, когда бесполезно самое лучшее руководство пользователя. Здесь раскрываются темы, которые часто пропускаются или очень кратко описаны в стандартных руководствах пользователя - структуры баз данных, индексация, подзапросы, виртуальные таблицы, производительность и целостность данных. Вы шаг за шагом изучите основы SQL и научитесь с помощью этого языка создавать приложения для работы с базами данных. Книга предназначена для пользователей реляционных баз данных - независимо от того, работают ли они на больших многопользовательских компьютерных системах или на персональных компьютерах.

336 стр., с ил.; ISBN 5-8459-0140-5, 0-201-44787-8; формат 70x100/16; 2001, 1 кв.; Вильямс.



Понравилась книга? Порекомендуйте её друзьям и коллегам:







Книги, рекомендуемые вместе с этой книгой:

Раздел каталога:



Предисловие

Язык SQL вырос из языков баз данных, известных только компьютерным специалистам, в широко используемый мировой стандарт индустрии ПК. Число SQL-92-совместимых баз данных увеличивается с каждым годом и сегодня, наверное, достигло миллиона. Если вы получаете какую-либо информацию из Internet или из внутренних сетей, то почти с полной уверенностью можно сказать, что в этом принимает участие SQL. Однако то, что сегодня кажется столь очевидным, было таким далеко не всегда.

В начале эры реляционных баз данных, когда SQL только разрабатывался в исследовательской лаборатории IBM, я участвовал в создании языка управления базами данных, который должен был стать конкурентом SQL. Наш язык, в отличие от SQL, мог обрабатывать более сложные запросы, но был труднее в изучении. Спустя семь лет, в течение которых на основе нашего языка были разработаны два готовых программных продукта, я стал полным сторонником языка SQL.

Причина того тривиальна: язык SQL достаточно мощен и прост в изучении, постоянно улучшается и, что наиболее важно, поддерживается всеми поставщиками систем управления базами данных. Именно поэтому свою третью программу (для Sybase) я уже написал на языке SQL.

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

Сегодня все существующие системы управления базами данных (СУБД) поддерживают язык SQL. Кроме того, с помощью специальных трансляторов SQL, которые соединяют данные из разных баз данных, можно получить доступ и к устаревшим базам данных. В системах типа клиент/сервер доступ к базам данных также осуществляется на основе SQL. Поэтому знание языка SQL сегодня просто необходимо, независимо от того, какую СУБД вы используете.

Принимая во внимание академическое происхождение SQL, можно понять, почему для многих людей SQL и реляционные базы данных являются чем-то непостижимым. Термины типа "нормальные формы", "корреляционные переменные" и "ссылочная целостность" совершенно не проясняют заложенный в них абсолютно простой смысл. Поэтому процесс управления базой данных может показаться чем-то из области высшей математики, доступным только высокоученым специалистам.

Несмотря на ряд заложенных в его основу упрощений, SQL — очень мощный язык. Эта мощность иногда может привести к результатам, весьма неожиданным даже для профессионалов. Семь лет назад, например, я принимал участие в сравнительном тестировании ряда СУБД различных производителей. Все проходило нормально, но однажды мы в течение шести часов ожидали результата SQL-запроса, не-SQL-аналог которого на других системах выполнялся всего за несколько минут.

Мы терялись в догадках и не могли понять, как такое вообще может быть, пока кто-то не предложил нам сформулировать свой запрос к базе данных на обычном "человеческом" языке. В результате до нас дошло, что правая скобка в запросе стоит не на том месте. После исправления запрос выполнился меньше, чем за минуту.

Никогда не забывайте, что реляционные языки более чувствительны к ошибкам в расстановке скобок, чем FORTRAN. Книга Практическое руководство по SQL позволит вам избежать подобных ошибок и сэкономит вам много нервов и времени.

Работая с реляционными базами данных с 1976 года, я с удовольствием прочитал Практическое руководство по SQL. В нем описывается не только сам язык SQL, но и рассматриваются общие вопросы построения баз данных и нормализации, причем в соответствии с названием, именно с практической точки зрения.

Многочисленные примеры в Практическом руководстве по SQL проясняют важность объясняемых понятий. Например, вам станет ясно, что при соблюдении ссылочной целостности вы не сможете заказать несуществующий товар или обратиться к несуществующему пользователю, другими словами, вашу базу данных нельзя будет "поставить на колени".

Кроме того, Практическое руководство по SQL подготовит вас к будущему. SQL не является "мертвым" языком, разработчики СУБД постоянно расширяют его возможности, которые со временем становятся общепринятыми стандартами. Многие изменения связаны с необходимостью разработки чрезвычайно сложных систем, в которых ведущую роль играют именно базы данных. Расширения SQL, упрощающие администрирование баз данных, особенно важны в системах типа клиент/сервер, в которых персональные компьютеры и рабочие станции общаются с СУБД по сети. В книге Практическое руководство по SQL описаны некоторые из таких расширений, в частности язык Transact-SQL, созданный компанией Sybase для своих систем SQL Server и SQL Anywhere.

Наконец, эта книга может послужить прекрасным введением в SQL как для новичков, так и для имеющих некоторый опыт работы с СУБД.

Роберт Эпштейн (Robert Epstein)
Исполнительный вице-президент Sybase, Inc.

Введение

Начала SQL

Вначале была IBM, и IBM создала SQL.

SQL — сокращение от Structured Query Language (Язык структурированных запросов) — это универсальный язык для создания, модификации и управления данными в реляционных базах данных.

Реляционная модель была предложена в 1970 году И.Ф. Коддом (E.F. Codd), работавшим в исследовательской лаборатории IBM в Сан-Хосе, Калифорния, и развивалась последующие десять лет в университетах и научных организациях. SQL — один из нескольких языков, выросших из этой идеи, в настоящее время практически полностью господствует в мире реляционных баз данных. Производители систем управления реляционными базами данных, первоначально использовавшие другие языки, сегодня полностью переориентировались на SQL.

В этот период (1970–1980) коммерческому успеху систем управления реляционными базами данных препятствовала их невысокая производительность. Преимущества реляционных моделей — математическая строгость и интуитивная простота — в ранних системах нивелировались сложностью, а иногда просто невозможностью управления большими базами данных. Ситуацию изменили два фактора — появление более мощных компьютеров и разработка новых методов хранения и доступа к данным.

В 1981 году IBM объявила о своем первом, основанном на SQL, программном продукте, SQL/DS. В начале 80-х годов о создании собственных реляционных СУБД заявили компании Oracle, Relational Technology и ряд других поставщиков. К 1989 году насчитывалось более 25 SQL-подобных СУБД, работающих на самых разных компьютерах, — от однопользовательских микрокомпьютеров до машин с сотнями пользователей. Сегодня SQL широко применяется в коммерческих, государственных и общественных организациях для работы с базами данных, содержащими самую различную информацию.

Появление высококонкурентного рынка реляционных СУБД было обусловлено созданием целого ряда SQL-приложений, в которых воплотились годы работы по созданию полного и выразительного языка для реляционных моделей. Но проблема остается. Количество диалектов SQL сегодня равно количеству имеющихся на рынке СУБД. И хотя во всех диалектах без труда узнается SQL, все они отличаются друг от друга синтаксисом и семантикой. Более того, многие поставщики постоянно расширяют свои версии SQL, внося этим дополнительную путаницу.

SQL продолжает развиваться — частично из-за того, что его исходная структура не удовлетворяет требованиям некоторых предметных областей, а частично из-за того, что производители СУБД стремятся выжать максимум возможностей из самой реляционной модели.

Гибкость и простота расширения SQL позволяет ему удовлетворять все текущие требования рынка.

Коммерциализация SQL

Первые коммерческие реализации SQL имели тот же налет экспериментальности, что и версии, разрабатываемые в университетах и исследовательских лабораториях. Это во многом было связано с отсутствием в то время каких-либо общепринятых стандартов SQL. Сегодня версии Oracle, SQL/DS и DB2 существенно отличаются от своих родителей. Кроме того, коммерческие реализации по-прежнему отличаются друг от друга во многих отношениях и не полностью соответствуют стандарту ANSI SQL (как выпущенному в 1983 году, так и расширенному в 1992 году).

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

Такое взаимное схождение объясняется двумя причинами. Во-первых, компании стараются предлагать своим потенциальным клиентам системы с аналогичными списками функций и возможных расширений. Во-вторых, они постоянно стремятся привлечь к себе внимание пользователей других реляционных систем и поэтому вынуждены уменьшать стоимость перехода с их SQL-систем на свои.

Таким образом, коммерческие интересы заставляют производителей создавать совместимые системы и добавлять новые возможности, чтобы при этом обеспечивалась совместимость с предыдущими версиями.

Эта книга (и прилагаемый компакт-диск с версией Sybase Anywhere) помогут вам самостоятельно изучить основы SQL. Полученные знания вы сможете затем применить для освоения других диалектов SQL. Разобравшись в основах SQL, вы с легкостью сможете переходить на его различные версии.

Для кого предназначена эта книга

Книга Практическое руководство по SQL предназначена для пользователей реляционных баз данных — независимо от того, работают ли они на больших многопользовательских компьютерных системах или на персональных компьютерах. Мы не считаем вас компьютерным профессионалом — вы можете быть конечным пользователем в большой компании, государственном учреждении, некоммерческой компании, мелким бизнесменом, менеджером в небольшой организации, домашним пользователем, работающим над собственным проектом, или студентом, изучающим технологии баз данных. Вы могли перейти на реляционные системы баз данных с обычного диспетчера файлов ПК, с другой системы управления базами данных, не основанной на SQL, либо вообще можете их видеть в первый раз.

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

Если вы планируете разрабатывать сложные приложения для баз данных, вам, возможно, потребуется встраивать команды SQL в программы на других языках программирования или использовать так называемые языки приложений четвертого поколения (4GL). Однако для успешного изучения основ SQL и освоения более сложных тем с помощью книги Практическое руководство по SQL вовсе не требуется, чтобы когда-нибудь вами была написана хотя бы одна строка программного кода.

Мы не предназначаем эту книгу для теоретиков, полагая, что тонкости реляционной теории и дебаты ISO–ANSI по поводу стандартов SQL не являются основными интересами наших читателей.

Мы считаем, что вы находитесь в стороне от полемики об SQL — по крайней мере, по поводу его основных структур — и готовы к его использованию. Короче говоря, мы предполагаем: вы хотите узнать, что и как действительно работает или, по крайней мере, получить об этом минимальные представления.

Эта книга построена так, чтобы поэтапно научить вас использовать SQL — вы вводите команду и немедленно получаете ее результат на экране, а не занимаетесь разработкой каких-то сложных программ. Любая коммерческая версия SQL содержит диалоговый интерфейс, который помогает освоить основы языка и позволяет создавать запросы любой сложности. Многие версии предлагают генераторы отчетов или 4GL-языки, которые могут использоваться совместно с командами SQL для построения сложных приложений.

Цель этой книги

Исходя из вышесказанного, мы акцентируем ваше внимание на реальном мире коммерческих реализаций SQL, которые мы также будем называть "промышленными SQL", а не на текущих стандартных ANSI-версиях SQL. Мы делаем это потому, что промышленные версии SQL включают в себя удобные средства обучения, хорошо документированы и обладают большими функциональными возможностями.

  • Документация по промышленным версиям SQL обычно написана на простом языке и интуитивно понятна. В документации ISO–ANSI, в противоположность этому, для описания синтаксиса языка используется BNF (Backus Naur Form — форма Бэкуса–Наура), математически строгая, но сложная для чтения и понимания.
  • Все промышленные SQL предоставляют диалоговый интерфейс для начинающих и неопытных пользователей, а стандартные версии больше тяготеют к расширениям SQL для программистов и разработчиков программного обеспечения.
  • Поставщики систем реляционных баз данных стараются удовлетворить все потребности своих клиентов, учитывая при этом опыт своих конкурентов. Реализация же команд ANSI SQL может различаться в разных версиях. Поэтому в этой книге мы будем опираться на промышленные стандарты (а не на стандарты ANSI) и расскажем о реализованных на сегодня возможностях SQL.

Описание ANSI SQL само по себе является весьма непривлекательным документом, напичканным примечаниями и ссылками. BNF-форма к тому же больше подходит для описания функций каждого элемента языка, чем для представления его синтаксиса. Но если вы все же хотите окунуться в подобные самостоятельные исследования, мы рекомендуем вам начать с книги C.J. Date A Guide to SQL Standard. К. Дейт — один из ведущих теоретиков в области реляционных моделей и один из самых известных авторов по этой тематике. С помощью этой книги вы научитесь читать BNF-формы и узнаете мнение профессионала о стандартах SQL.

После "переваривания" документации ISO–ANSI, даже воспользовавшись для этого руководством Дейта, для прояснения некоторых деталей вы, вероятно, захотите обратиться к руководству пользователя по конкретной системе управления базами данных. Но подобные руководства всегда имеют свои недостатки и ограничения.

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

Книга Практическое руководство по SQL призвана помочь вам в тех случаях, когда будет бесполезным даже самое лучшее руководство пользователя. С ее помощью вы шаг за шагом изучите основы SQL и научитесь на его основе создавать приложения для работы с базами данных. В Практическом руководстве по SQL раскрываются темы, которые обычно пропускаются или написаны мелким шрифтом в стандартных руководствах пользователя, — структуры баз данных, индексация, объединения, подзапросы, виртуальные таблицы (курсоры), производительность и целостность данных.

Как изучать SQL с помощью этой книги

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

Все остальное зависит от вас. Некоторые люди усваивают новый материал, внимательно вчитываясь в объяснения, другим достаточно просто взглянуть на соответствующие картинки. Мы считаем, что эта книга одинаково полезна и тем, кто вчитывается в каждое слово, и тем, кто бегло просматривает текст, останавливаясь только на примерах. Термины, впервые встречающиеся в тексте и помещенные в словарь терминов, выделяются полужирным начертанием.

Некоторые из сотен примеров книги Практическое руководство по SQL будут очень простыми — они служат только для иллюстрации основных понятий. Другие будут более сложными. Некоторые примеры могут послужить моделью для ваших собственных приложений. Наиболее сложные примеры будут объясняться более детально.

Все реализации SQL, по крайней мере в мелких деталях, отличаются друг от друга, поэтому ни одна книга по SQL не может гарантировать, что все приведенные в ней примеры будут работать одинаково на всех системах. Хорошая новость состоит в том, что благодаря нашему решению опираться в книге Практическое руководство по SQL на промышленные версии SQL, а не на официальные стандарты, процесс "перевода" с одной версии на другую не будет для вас слишком болезненным. Используя документацию к используемой вами реализации SQL, Приложение Б, описывающее соответствия между ключевыми словами в различных реализациях SQL, и немного поработав детективом, вы сможете успешно выполнить все примеры из этой книги на своей системе.

Все примеры, если специально не оговорено обратное, гарантированно работают в Sybase SQL Server и в Sybase Anywhere. Мы не будем окунаться в самые глубины реализаций SQL и рассуждать о преимуществах и ограничениях того или иного диалекта. Наша цель — рассказать об основных возможностях, имеющихся в большинстве промышленных реализаций SQL.

За исключением ряда случаев, все примеры основаны на нашей базе данных под названием bookbiz. Она описывается в главах 2 и 3. Вам не обязательно использовать нашу базу, однако это будет самым простым способом проверки правильности получаемых вами результатов.

Bookbiz — совсем небольшая база данных. Вы можете воспользоваться ее копией, находящейся на прилагаемом компакт-диске, или воссоздать ее на своей системе. Однако эта база достаточно сложна, чтобы проиллюстрировать на ней все важные моменты в технологии реляционных баз данных.

Структура книги

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

Объяснение ведется по следующей схеме.

  • Определение — что есть что.
  • Минимальный синтаксис — упрощенный "скелет" команды (без расширений и предложений, которые могут изменяться от одной версии к другой).
  • Простой пример.

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

По мере необходимости мы будем приводить расширенный синтаксис команды (необязательные предложения, обеспечивающие дополнительные функции) и соответственно более сложные примеры. В любом случае, каждая новая конструкция будет подробно описываться на содержательных примерах.

Там, где это возможно, каждый новый пример будет основываться на предыдущем. Однако примеры в разных главах не зависят друг от друга, поэтому вы можете читать книгу по отдельным главам. Изучение SQL напоминает изучение иностранного языка. Процесс изучения начинается с подражания, затем выходит на стадию понимания, и наконец заканчивается свободным владением. На каждой стадии ключом к успеху является практика.

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

Сохраняйте написанные вами команды SQL в файлах. (Ваша система должна позволять это делать.) Если вы не уверены, что в результате выполнения запроса вы получили требуемые результаты, сохраните их для дальнейшего изучения. Запишите, что работает, а что — нет, и если это возможно, сохраните сообщения об ошибках.

Сохраняйте удачно отработавшие запросы. Сохраняйте их в отдельных файлах, удачные решения могут пригодиться вам в будущем.

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

Заведите специальную тетрадку. Даже если в документацию к вашей системе включен краткий справочник команд, все равно сделайте это. Это будет способствовать лучшему усвоению материала. Вскоре вы обнаружите, что одни команды SQL используются значительно чаще других.

Старайтесь улучшать предлагаемые нами решения. Наш опыт свидетельствует, что чем больше вы будете самостоятельно работать над освоением SQL, тем более простыми и элегантными будут становиться написанные вами операторы.

Изучив SQL на практике, вы сможете правильно использовать его операторы, получая требуемые результаты. Чтобы достичь такого уровня профессионализма, вы, кроме того, должны изучить и проверить вашу реляционную СУБД. Проверьте, чтобы выполнение на ней 50 транзакций в секунду не приводило к появлению сообщения об ошибке SQL (логической ошибке).

SQL требует практики, потому что это фактически иностранный язык, причем говорить нужно исключительно четко, так как общаться вы будете с машиной. Несмотря на то, что в SQL содержится заведомо конечное число легко читаемых операторов и ключевых слов, это достаточно запутанная область. Подобно другим языкам программирования высокого уровня, SQL имеет строго определенную грамматику и структуру и полный набор синтаксических правил. Он во многом напоминает английский язык, но на самом деле весьма далек от естественного языка. Рано или поздно вы обязательно столкнетесь с операциями, выполнение которых будет SQL не под силу.

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

Краткий обзор книги

Глава 1. SQL и управление реляционными базами данных. В этой главе кратко описывается и иллюстрируется реляционная модель, рассказывается об основных возможностях языка SQL.

Глава 2. Проектирование баз данных. Проектирование баз данных часто вызывает значительные затруднения. В этой главе на примере простой базы данных будут проиллюстрированы полезные методы анализа данных и принятия решений о структуре создаваемой системы. Мы расскажем о первичных и вторичных ключах, моделировании связей, правилах нормализации, обо всем том, что позволит вам проектировать качественные базы данных.

Глава 3. Создание и заполнение базы данных. В этой главе структура базы данных, описанная в предыдущих главах, наполнится реальным содержимым. Мы детально расскажем о командах SQL для создания баз данных, таблиц, индексов, о командах добавления, изменения и удаления данных. Изучив синтаксис этих команд, вы сможете практически использовать язык SQL.

Глава 4. Выборка информации из базы данных. В этой главе мы начнем использовать примеры с компакт-диска и описывать основные элементы оператора SELECT. Мы расскажем, как извлекать из таблицы необходимые строки и столбцы, как выполнять вычисления, применять логические операторы и операторы сравнения.

Глава 5. Сортировка данных и другие методы выбора. Специальные предложения в операторе SELECT позволят вам сортировать данные, удалять повторяющуюся информацию в результирующих данных, использовать специальные функции для вычисления средних значений, сумм и других подсчетов.

Глава 6. Группировка данных и построение отчетов. Оператор SELECT также предоставляет вам возможности по группировке данных и генерации отчетов, используя для этого агрегирующие функции, описанные в предыдущих главах. В этой главе также ведется дискуссия о том, как в системах реляционных баз данных должны обрабатываться нулевые значения (пропуски информации).

Глава 7. Объединение таблиц и сложный анализ данных. Оператор объединения — один из китов реляционной модели. В этой главе рассказывается, как использовать этот оператор для выборки данных из одной или нескольких таблиц. Усложненный вариант простого оператора выбора, оператор объединения, требует от пользователей повышенного внимания к анализу и проверке получаемых данных.

Глава 8. Структурированные запросы и подзапросы. В этой главе мы расскажем о правильном использовании вложенных запросов, или подзапросов. На большом количестве примеров описываются коррелированные подзапросы, которые часто являются источником многих неприятностей.

Глава 9. Создание и использование виртуальных таблиц (курсоров). В этой главе описывается использование виртуальных таблиц (курсоров) для организации удобного доступа к данным. Виртуальные таблицы также позволяют обеспечить дополнительную безопасность, так как с их помощью можно запретить другим пользователям доступ к определенным частям таблицы и выполнение над ними определенных операций.

Глава 10. Безопасность, транзакции, производительность и целостность. Эта глава посвящена характерным вопросам управления реальными базами данных. В ней описываются команды для установления полномочий пользователей, кроме того, мы вернемся к теме индексирования с позиций повышения производительности системы, а также рассмотрим механизмы управления транзакциями. В этой главе также рассматриваются расширения языка SQL, обеспечивающие непротиворечивость и целостность данных. Некоторые из них характерны исключительно для реализации Sybase SQL.

Глава 11. Разрешение проблем. В этой главе на основе нашей базы bookbiz мы ответим на вопросы, заданные пользователями через Internet. Здесь вы столкнетесь с реальными проблемами — представлением результатов, поиском данных, многотабличными запросами и предложением GROUP BY. Эта глава напоминает кулинарную книгу, напичканную полезными советами, которыми вы можете воспользоваться в своей работе.

Глава 12. Ошибки, и как их избежать. Эта глава также наполнена примерами, взятыми из Internet и сформулированными в терминах базы bookbiz, но имеющими несколько другой оттенок. Это примеры наиболее характерных ошибок. Здесь вы найдете описание типичных ошибок при использовании конструкций GROUP BY, HAVING, WHERE и DISTINCT. Эта глава поможет вам избежать классических ошибок.

Приложение А. Краткое описание синтаксиса SQL.

Приложение Б. Аналогии между ключевыми словами разных диалектов SQL.

Приложение В. Словарь терминов.

Приложение Г. Описание базы данных bookbiz. Это приложение содержит таблицы данных, описание структуры и код для создания самой базы.

Приложение Д. Список литературы.


Copyright © 1992-2019 Издательская группа "Диалектика-Вильямс"

Rambler  Top100