изучаем SQL. Она позволяет решать многошаговые задачи одним выражением
Скачать 1.6 Mb.
|
SQL – универсальный язык реляционных баз данных. Это не самостоятель - ный язык; SQL-запросы выполняются из программ, написанных на языках про грам ми ро вания общего назначения, таких как С++, Java, Python и Perl. Реляционные базы данных стали практически вездесущими, и каж дый раз ра- бот чик должен иметь представление о языке, применяемом для доступа к БД. Алан Бьюли приглашает вас в полное открытий путешествие, которое начинается с про- сто го выражения SELECT. Вы научитесь: • Собирать и возвращать взаимосвязанную информацию сразу из нескольких таб- лиц. Этот тип операций называется соединением и составляет самую суть SQL. • Применять для работы с данными подход, ориентированный на множества. SQL просто создан для этого, и пренебречь таким преимуществом – значит отказаться от предлагаемых языком возможностей. • Встраивать условную логику в SQL-выражения, используя выражения CASE. Порой это позволяет заменить два выражения одним. • Писать подзапросы. Эта возможность является фундаментальной для установления существования/несуществования данных и для написания пакетных обновлений. Она позволяет решать многошаговые задачи одним выражением. • Применять множество встроенных функций SQL для трансформирования и по- вторной ин терпретации данных. Чтобы изучить SQL, необходима практика. Примеры данной книги написаны для попу- ляр ной системы управления реляционными БД MySQL, которую можно скачать бесплат- но. Она выполняется практически во всех версиях UNIX, BSD и Linux, а также в Windows и Mac OS X. СУБД MySQL потребляет минимум системных ресурсов, и ее без труда могут уста новить и обслуживать даже неопытные программисты. Сочетание этих факторов де лает MySQL превосходным средством для изучения SQL и реляционных БД. Работа с SQL может быть приятной. Разве не удовольствие решить одним выражением за путанную задачу по мани пулированию данными или составлению отчета, пе реклады- вая на базу данных всю работу, которую в противном случае пришлось бы вы пол нять ва шему приложению? Этот вводный курс быстро подготовит вас к работе с SQL. Он иде- аль но подходит для всех, кто пишет приложения, выполняет функции администра тора или создает отчеты. Из у ч а е м S Q L Изучаем SQL Вводный курс для разработчиков и администраторов БД Алан Бьюли Изучаем SQL Ал а н Б ь ю л и www.symbol.ru Êàòåãîðèÿ: áàçû äàííûõ / SQL Óðîâåíü ïîäãîòîâêè ÷èòàòåëåé: ñðåäíèé 9 785932 860519 ISBN-10: 5-93286-051-0 ISBN-13: 978-5-93286-051-9 Издательство «Символ-Плюс» (812) 324-5353, (495) 945-8100 learning_sql.indd 1 learning_sql.indd 1 13.02.2007 16:57:46 13.02.2007 16:57:46 Learning SQL Alan Beaulieu Алан Бьюли Изучаем SQL Санкт Петербург –Москва 2007 Оглавление Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1. Немного истории . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Введение в базы данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Что такое SQL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Что такое MySQL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Дополнительные источники . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2. Создание и заполнение базы данных . . . . . . . . . . . . . . . . . . . . . . . . . 27 Создание базы данных MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Инструмент командной строки mysql . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Типы данных MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Создание таблиц . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Заполнение и изменение таблиц . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Когда портятся хорошие выражения . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Банковская схема . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3. Азбука запросов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Механика запроса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Блоки запроса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Блок select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Блок from . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Блок where . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Блоки group by и having . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Блок order by . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 4. Фильтрация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Оценка условия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Создание условия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Типы условий . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 NULL: это слово из четырех букв… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 6 Оглавление 5. Запрос к нескольким таблицам . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Что такое соединение? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Соединение трех и более таблиц . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Рекурсивные соединения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Сравнение эквисоединений с неэквисоединениями . . . . . . . . . . . . . . . 103 Сравнение условий соединения и условий фильтрации . . . . . . . . . . . . 105 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 6. Работа с множествами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Основы теории множеств . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Теория множеств на практике . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Операторы работы с множествами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Правила операций с множествами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 7. Создание, преобразование и работа с данными . . . . . . . . . . . . . . 122 Строковые данные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 Числовые данные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Временные данные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Функции преобразования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 8. Группировка и агрегаты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Принципы группировки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Агрегатные функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 Формирование групп . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Условия групповой фильтрации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 9. Подзапросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Что такое подзапрос? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Типы подзапросов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Несвязанные подзапросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Связанные подзапросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 Использование подзапросов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 Краткий обзор подзапросов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 10. И снова соединения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Внешние соединения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Перекрестные соединения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 Естественные соединения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Оглавление 7 11. Условная логика . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Что такое условная логика? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Выражение case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 Примеры выражений case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 12. Транзакции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Многопользовательские базы данных . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Что такое транзакция? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 13. Индексы и ограничения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Индексы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Ограничения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 A. ER диаграмма примера базы данных . . . . . . . . . . . . . . . . . . . . . . . . 257 B. MySQL расширения языка SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 C. Решения к упражнениям . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 D. Дополнительные источники . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 Алфавитный указатель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 Предисловие Языки программирования постоянно появляются и исчезают, и очень немногие из современных языков имеют более чем 10 летнюю исто рию. Среди долгожителей можно назвать КОБОЛ, который до сих пор довольно широко используется в мэйнфреймовых средах, и С, по прежнему весьма популярный при разработке операционных систем, серверов и встроенных систем. В области баз данных это SQL, корни которого уходят в далекие 1970 е. SQL – язык для формирования, манипулирования и извлечения дан ных из реляционной БД. Одна из причин популярности реляционных БД в том, что, будучи правильно спроектированными, они могут опери ровать гигантскими объемами данных. В работе с большими наборами данных SQL напоминает современную цифровую фотокамеру с мощ ным объективом: он позволяет просматривать большие объемы данных или перейти к «крупному плану», т. е. сфокусироваться на отдельных строках (подвластно и все, что между этими крайностями). Другие СУБД дают сбой при мощных нагрузках, потому что их фокус слишком узок (увеличительные линзы достигают своего максимума). Именно по этой причине все попытки низвергнуть реляционные БД и SQL окан чиваются неудачей. Поэтому, даже несмотря на то, что SQL – старый язык, похоже, его ждет еще очень долгая жизнь и блестящее будущее. Зачем изучать SQL? Если вы собираетесь работать с реляционными БД – писать приложе ния, или выполнять задачи по администрированию, или формировать отчеты, – вам понадобится знать, как взаимодействовать с данными БД. Даже при использовании инструмента, генерирующего SQL (на пример, инструмента создания отчетов), могут возникнуть ситуации, в которых понадобится обойти автоматические возможности и созда вать собственные SQL выражения. Дополнительное преимущество изучения SQL в том, что вы быстрее рассмотрите и поймете структуры данных, применяемые для хране ния информации о вашей организации. Почувствовав себя уверенно со своей БД, вы сможете вносить предложения по изменению или до полнению ее схемы. Предисловие 9 Почему именно эта книга? Язык SQL включает несколько категорий. Выражения, с помощью ко торых создаются объекты БД (таблицы, индексы, ограничения и т. д.), называют SQL выражениями управления схемой данных (schema sta tements ). Выражения, предназначенные для создания, манипулирова ния и извлечения данных, хранящихся в БД, называют SQL выраже ниями для работы с данными (data statements). Если вы администра тор, то будете использовать и те и другие SQL выражения. Если вы программист или составитель отчетов, то сможете (или вам будет позво лено ) использовать только SQL выражения для работы с данными. Хо тя в этой книге встречается много SQL выражений управления схемой, основное внимание в ней уделено возможностям программирования. Поскольку команд немного, SQL выражения для работы с данными кажутся простыми. По моему, многие из имеющихся книг по SQL только усиливают это впечатление, давая лишь поверхностный обзор того, что можно делать с помощью этого языка. Однако если вы соби раетесь работать с SQL, вам следует полностью понимать все его воз можности и то, как сочетать их для получения мощных результатов. На мой взгляд, эта книга – единственная, где язык SQL описан подроб но, и при этом она не является «кирпичом» (вам знакомы эти «полные руководства» по 1250 страниц, пылящиеся у народа на полках). Хотя примеры из книги подходят для MySQL, Oracle Database и SQL Server, мне пришлось отобрать один из этих продуктов, чтобы размес тить БД для выполнения примеров и форматировать результирующие наборы, возвращаемые примерами запросов. Из этих трех я выбрал MySQL, потому что он свободно доступен, его легко установить и про сто администрировать. Читателей, использующих другой сервер, про шу скачать и установить MySQL и загрузить предлагаемую БД, чтобы иметь возможность выполнять примеры и экспериментировать с дан ными. Структура книги Книга содержит 13 глав и 4 приложения: • В главе 1 «Немного истории» рассматривается история компьютер ных БД, включая возникновение реляционной модели и языка SQL. • В главе 2 «Создание и заполнение базы данных» показывается, как создавать БД MySQL и таблицы, используемые в примерах к книге, и как заполнять таблицы данными. • Глава 3 «Азбука запросов» знакомит с выражением select и пред ставляет наиболее распространенные блоки (clauses): select, from, where 10 Предисловие • Глава 4 «Фильтрация» представляет разные типы условий, кото рые могут использоваться в блоке where выражений select, update и delete. • В главе 5 «Запрос к нескольким таблицам» показывается, как за просы могут работать с несколькими таблицами посредством соеди нений таблиц. • Глава 6 «Работа с множествами» – все о множествах данных и о том, как они могут взаимодействовать внутри запросов. • Глава 7 «Создание, преобразование и работа с данными» представ ляет несколько встроенных функций, используемых для манипу лирования или преобразования данных. • В главе 8 «Группировка и агрегаты» показывается, как можно аг регировать данные. • Глава 9 «Подзапросы» представляет подзапрос (мой любимый при ем) и показывает, как применяются подзапросы. • Глава 10 «И снова соединения» продолжает рассматривать различ ные типы соединений таблиц. • В главе 11 «Условная логика» рассматривается использование ус ловной логики (т. е. if then else) в выражениях select, insert, up date и delete. • Глава 12 «Транзакции» знакомит с транзакциями и их использова нием. • В главе 13 «Индексы и ограничения» исследуются индексы и огра ничения. • Приложение A «ER диаграмма примера базы данных» содержит схему базы данных, используемой для всех примеров книги. • Приложение B «MySQL расширения языка SQL» представляет не которые интересные возможности реализации SQL – MySQL, не входящие в стандарт ANSI. |