alan_beaulieu-learning_sql-ru (865932), страница 5
Текст из файла (страница 5)
Все концепции, присутствующие в данномзапросе (и многие другие), будут рассмотрены в следующих главах;здесь мне просто хотелось показать, как выглядел бы запрос.Предыдущий запрос содержит три разных блока (clauses): select, fromи where. Практически каждый сформированный вами запрос будетвключать, по крайней мере, эти три блока, хотя есть и другие блоки,применяемые для более сложных целей. Роль каждого из этих трехблоков можно продемонстрировать следующим образом:SELECT /* одна или более сущностей */ ...FROM /* одно или более мест */ ...WHERE /* удовлетворяется одно или более условий */ ...Большинство реализаций SQL воспринимают текст, расположенный между тегами /* и */, как комментарии.Обычно первая задача при создании запроса – определить, какая таблица или таблицы понадобятся, а затем добавить их в блок from.
Далеенеобходимо отсеять данные этих таблиц, которые не помогут ответитьна запрос. Для этого в блок where вводятся условия. Наконец, принимается решение о том, какие столбцы разных таблиц требуется извлечь, и они добавляются в блок select. Вот простой пример поискавсех клиентов по фамилии Smith (Смит):SELECT cust_id, fnameFROM customerWHERE lname = 'Smith'Этот запрос выполняет поиск в таблице customer всех строк, столбецlname которых соответствует строке 'Smith', и возвращает столбцыcust_id и fname этих строк.Кроме создания запросов к БД вам, скорее всего, придется заполнятьи изменять данные БД.
Вот простой пример добавления новой строкив таблицу product:INSERT INTO product (product_cd, name)VALUES ('CD', 'Certificate of Depasit')Ой, кажется, в слове «Deposit» ошибка! Никаких проблем. Это можноисправить с помощью выражения update:UPDATE product24Глава 1. Немного историиSET name = 'Certificate of Deposit'WHERE product_cd = 'CD';Обратите внимание, что в выражении update тоже есть блок where, каки в выражении select, потому что update должно отобрать строки, подлежащие изменению. В данном случае задано, что должны быть изменены только те строки, столбцы product_cd которых соответствуютстроке 'CD'.
Поскольку столбец product_cd является первичным ключом таблицы product, следует ожидать, что выражение update измениттолько одну строку (или ни одной, если такого значения в таблиценет). При выполнении любого SQLвыражения для работы с даннымимеханизм СУБД выводит отчет с указанием того, сколько строк былоподвержено его воздействию. Если используется интерактивный инструмент, например уже упомянутый инструмент командной строкиmysql, будет получено сообщение о том, сколько строк было:• возвращено выражением select;• создано выражением insert;• изменено выражением update;• удалено выражением delete.Если используется процедурный язык с одним из уже упомянутыхпрограммных средств, то после выполнения SQLвыражения для работы с данными это средство включит вызов функции запроса этой информации.
В общем, не мешает проверять эти данные, чтобы убедиться, что выражение не сделало ничего непредвиденного (например, если забыть включить в выражение delete блок where, будут удалены всестроки таблицы!).Что такое MySQL?Реляционные базы данных продаются уже более двух десятилетий.К самым зрелым и популярным продуктам относятся:• Oracle Database от Oracle Corporation• SQL Server от Microsoft• DB2 Universal Database от IBM• Sybase Adaptive Server от Sybase• Informix Dynamic Server от IBMВсе эти серверы БД делают примерно одно и то же, хотя некоторыелучше оснащены для работы с очень большими или высокопроизводительными БД.
Другие лучше ведут себя при работе с объектами, илиочень большими файлами, или XMLдокументами и т. д. Кроме того,очень хорошо, что все эти серверы совместимы с последним стандартом ANSI SQL. Это положительный момент, и я обязательно покажу,как писать SQLвыражения, которые будут выполняться на любой изэтих платформ (с небольшими изменениями или вообще без них).Дополнительные источники25Наряду с этим последние пять лет в сообществе сторонников открытого исходного кода наблюдалась активная деятельность по созданиюжизнеспособной альтернативы коммерческим серверам БД.
Два наиболее распространенных сервера БД с открытым исходным кодом –PostgreSQL и MySQL. Вебсайт MySQL (http://www.mysql.com) в настоящее время заявляет о более чем 6 000 000 установок, их сервер доступен бесплатно, и я убедился, что скачать и установить его чрезвычайно просто. Поэтому я решил, что все примеры для данной книги будутвыполняться на БД MySQL (версии 4.1.11).
Для форматирования результатов запросов будет использоваться инструмент командной строки mysql. Даже если вы уже работаете с другим сервером и вообще непланируете использовать MySQL, я рекомендую установить последнюю версию сервера MySQL, загрузить схему и данные примера и экспериментировать с примерами этой книги.Однако помните, что:Эта книга не о реализации SQL в MySQL.Скорее, данная книга создана, чтобы обучить читателя создавать SQLвыражения, которые будут выполняться на MySQL и последних версиях Oracle Database, Sybase Adaptive Server и SQL Server с небольшимиизменениями или вообще без них.
Возможно, при использовании одного из упомянутых серверов IBM хлопот у вас будет чуть больше.Чтобы по возможности сохранить код из данной книги платформонезависимым, я воздержусь от демонстрации некоторых интересных вещей, реализованных в языке SQL для MySQL и не осуществимых в других реализациях БД. Но для читателей, планирующих продолжать работу с MySQL, некоторые из этих возможностей рассмотрены в приложении В.Дополнительные источникиОбщая цель следующих четырех глав – представить SQLвыражениядля работы с данными, уделив при этом особое внимание трем основным блокам выражения select.
Кроме того, приводится множествопримеров, использующих банковскую схему (она представлена в следующей главе и задействована во всех примерах данной книги). Надеюсь, что постоянное использование одной и той же БД позволит читателю вникать в суть примера, не тратя время на изучение применяемых таблиц.Твердо усвоив основы, с помощью оставшихся глав вы изучите дополнительные концепции, по большей части не зависимые друг от друга.Поэтому, столкнувшись с какимилибо трудностями, всегда можнодвинуться дальше, а позже перечитать главу. Прочитав книгу и проработав все примеры, вы уверенно пойдете к вершинам мастерства SQL.26Глава 1. Немного историиВот несколько заслуживающих внимания источников для читателей,желающих узнать больше о реляционных БД, истории компьютеризированных систем управления БД или языке SQL:• К.
Дж. Дейт (C. J. Date) «Database in Depth: Relational Theory forPractitioners», O’Reilly.• К. Дж. Дейт «An Introduction to Database Systems, Eighth Edition»,Addison Wesley.1• К. Дж. Дейт «The Database Relational Model: A Retrospective Review and Analysis: A Historical Account and Assessment of E. F. Codd’sContribution to the Field of Database Technology», Addison Wesley.• http://en.wikipedia.org/wiki/Database_management_system• http://www.mcjones.org/System_R/1К. Дейт «Введение в системы баз данных», 8е издание, Вильямс, 2005.Создание и заполнение базы данныхВ этой главе представлена информация, необходимая для создания вашей первой БД, таблиц и ассоциированных данных, используемыхв примерах книги. Также рассказывается о различных типах данныхи об их применении при создании таблиц.
Поскольку примеры книгивыполняются на СУБД MySQL, здесь наблюдается небольшое смещение акцентов представляемого материала в сторону возможностейи синтаксиса MySQL, но большинство концепций применимы к любому серверу.Создание базы данных MySQLЕсли в вашем распоряжении уже есть СУБД MySQL, можно выполнять приведенные ниже инструкции, начиная с п. 8. Но не забывайте,что эта книга ориентирована на MySQL версии 4.1.11 или более поздних, поэтому если вы используете более раннюю версию, скорее всего,не помешает обновить ее или установить другой сервер.Следующие инструкции отражают минимальный набор действий, необходимых для установки сервера MySQL на компьютере, работающем под управлением Windows, создания базы данных и загрузки тестовых данных для этой книги:1.
Скачайте MySQL Database Server (версии 4.1.11 или более поздней)с http://dev.mysql.com. Если сервер планируется использовать толькодля обучения, скачайте Essentials Package (Основной пакет), включающий только широко используемые инструменты, а не CompletePackage (Полный пакет).2. Двойным щелчком по загруженному файлу запустите процесс установки.28Глава 2. Создание и заполнение базы данных3.