Перед вами — новое издание наиболее полного руководства по использованию структурированного языка запросов SQL, применяемого для работы с базами данных. В книге подробно описываются возможности SQL, реализованные в самых распространенных СУБД и определенные в стандарте ANSI/ISO для SQL. В ней вы найдете подробную информацию, касающуюся применения инструкций для работы с базами данных, стандартов SQL, а также популярных API-интерфейсов, служащих для доступа к таким базам данных, как ODBC, SQL/CLI, JDBC и OCI. Большое внимание уделяется вопросам безопасности данных, влиянию объектных технологий на SQL и интеграции SQL с XML. На прилагающемся компакт-диске содержатся дистрибутивы трех СУБД: SQL Server 2000, IBM DB2 и MySQL. Книга предназначена для всех пользователей, интересующихся языком запросов SQL.
Содержание
Предисловие
Структура книги
Соглашения, принятые в книге
Для кого предназначена эта книга
Благодарности
ЧАСТЬ 1.Обзор SQL
Глава 1.
Введение
Язык SQL
Роль SQL
Достоинства SQL
Независимость от конкретных СУБД
Межплатформенная переносимость
Стандарты языка SQL
Поддержка SQL компанией IBM
Поддержка со стороны Microsoft
Реляционная основа
Высокоуровневая структура
Интерактивные запросы
Программный доступ к базе данных
Различные представления данных
Полноценный язык для работы с базами данных
Динамическое определение данных
Архитектура клиент/сервер
Поддержка корпоративных приложений
Объектно-ориентированные технологии
Доступ к данным в Интернете
Интеграция с языком Java
Промышленная инфраструктура
Глава 2.
Краткий обзор SQL
Простая база данных
Выборка данных
Получение итоговых данных
Добавление данных
Удаление данных
Обновление данных
Защита данных
Создание базы данных
Резюме
Глава 3.
Развитие SQL
SQL и управление базами данных
Краткая история SQL
Первые годы
Первые реляционные СУБД
СУБД компании IBM
Коммерческое признание
Стандарты SQL
Стандарты ANSI/ISO
Другие стандарты SQL
ODBC и консорциум SQL Access Group
Миф о переносимости
SQL и сети
Централизованная архитектура
Архитектура файл/сервер
Архитектура клиент/сервер
Трехуровневая архитектура Интернета
Влияние SQL
SQL и стратегия унификации баз данных компании IBM
SQL и мини-компьютеры
SQL и UNIX
SQL и персональные компьютеры
SQL и обработка транзакций
SQL и базы данных для рабочих групп
SQL и хранилища данных
SQL и распределенные Интернет-приложения
Резюме
Глава 4.
Реляционные базы данных
Первые модели данных
Системы управления файлами
Иерархические базы данных
Сетевые базы данных
Реляционная модель данных
Учебная база данных
Таблицы
Первичные ключи
Отношения предок/потомок
Внешние ключи
Двенадцать правил Кодда*
Резюме
ЧАСТЬ 2. Получение данных
Глава 5.
Основы языка SQL
Инструкции
Имена
Имена таблиц
Имена столбцов
Типы данных
Константы
Числовые константы
Строковые константы
Константы даты и времени
Именованные константы
Выражения
Встроенные функции
Отсутствующие значения
Резюме
Глава 6.
Простые запросы
Инструкция SELECT
Предложение SELECT
Предложение FROM
Результаты запроса на выборку
Простые запросы
Вычисляемые столбцы
Выборка всех столбцов*
Повторяющиеся строки
Отбор строк
Условия отбора
Операторы сравнения
Проверка на принадлежность диапазону значений
Поверка на членство в множестве
Проверка на соответствие шаблону
Проверка на равенство значению NULL
Составные условия отбора
Сортировка результатов запроса
Правила выполнения однотабличных запросов
Объединение результатов нескольких запросов*
Запрос на объединение и повторяющиеся строки*
Запрос на объединение и сортировка*
Вложенные запросы на объединение*
Резюме
Глава 7.
Многотабличные запросы
Пример двухтабличного запроса
Объединение таблиц по равенству
Запросы с использованием отношения предок/потомок
Условия для отбора строк
Несколько связанных столбцов
Запросы на выборку к трем и более таблицам
Прочие объединения таблиц по равенству
Объединение таблиц по неравенству
Особенности многотабличных запросов
Полные имена столбцов
Выборка всех столбцов
Самообъединения
Псевдонимы таблиц
Производительность при обработке многотабличных запросов
Внутренняя структура объединения таблиц
Умножение таблиц
Правила выполнения многотабличных запросов на выборку
Внешнее объединение таблиц*
Левое и правое внешние объединения*
Система записи внешнего объединения*
Объединения и стандарт SQL2
Внутренние объединения в стандарте SQL2*
Внешние объединения в стандарте SQL2*
Перекрестные объединения и расширенные запросы на объединение в SQL2*
Многотабличные объединения в стандарте SQL2
Резюме
Глава 8.
Итоговые запросы на выборку
Статистические функции
Вычисление суммы значений столбца
Вычисление среднего значения столбца
Вычисление экстремумов
Вычисление количества значений в столбце
Статистические функции в списке возвращаемых столбцов
Статистические функции и значения NULL
Удаление повторяющихся строк
Запросы с группировкой
Несколько столбцов группировки
Ограничения на запросы с группировкой
Значения NULL в столбцах группировки
Условия отбора групп
Ограничения на условия отбора групп
Значения NULL и условия отбора групп
Предложение HAVING без GROUP BY
Резюме
Глава 9.
Подчиненные и составные запросы
Применение подчиненных запросов
Что такое подчиненный запрос
Подчиненные запросы в предложении WHERE
Внешние ссылки
Условия отбора в подчиненном запросе
Сравнение с результатом подчиненного запроса
Проверка на принадлежность результатам подчиненного запроса
Проверка на существование
Многократное сравнение*
Подчиненные запросы и объединения
Уровни вложенности запросов
Коррелированные подчиненные запросы*
Подчиненные запросы в предложении HAVING*
Подчиненные запросы - резюме
Сложные запросы в SQL2*
Выражения со скалярными значениями
Выражения с записями таблиц
Табличные выражения
Табличные операции и составные запросы
Резюме
ЧАСТЬ 3.Обновление данных
Глава 10.
Внесение изменений в базу данных
Добавление новых данных
Однострочная инструкция INSERT
Многострочная инструкция INSERT
Утилиты пакетной загрузки
Удаление существующих данных
Инструкция DELETE
Удаление всех строк
Инструкция DELETE с подчиненным запросом*
Обновление существующих данных
Инструкция UPDATE
Обновление всех строк
Инструкция UPDATE с подчиненным запросом*
Резюме
Глава 11.
Целостность данных
Условия целостности данных
Обязательное наличие данных
Условия на значения
Ограничения на значения столбца
Домены
Целостность таблицы
Прочие условия уникальности столбцов
Условия уникальности столбцов и значения NULL
Ссылочная целостность
Проблемы, связанные со ссылочной целостностью
Правила удаления и обновления*
Каскадные удаления и обновления*
Ссылочные циклы*
Внешние ключи и значения NULL*
Расширенные возможности задания ограничений в SQL2
Утверждения
Типы ограничений столбцов и таблиц в SQL2
Отложенная проверка ограничений
Деловые правила
Что такое триггер
Триггеры и ссылочная целостность
Достоинства и недостатки триггеров
Триггеры и стандарты SQL
Резюме
Глава 12.
Обработка транзакций
Что такое транзакция
Инструкции COMMIT и ROLLBACK
Модель транзакции в стандарте ANSI/ISO
Другие модели транзакций
Журнал транзакций*
Транзакции и работа в многопользовательском режиме
Проблема пропавшего обновления
Проблема промежуточных данных
Проблема несогласованных данных
Проблема строк-призраков
Параллельные транзакции
Блокировка*
Уровни блокировки
Жесткая и нежесткая блокировки
Тупиковые ситуации*
Усовершенствованные методы блокировки*
Технология версий
Технология версий в действии
Преимущества и недостатки технологии версий
Резюме
ЧАСТЬ 4.Структура базы данных
Глава 13.
Создание баз данных
Язык определения данных
Создание базы данных
Определения таблиц
Создание таблицы
Удаление таблицы
Изменение определения таблицы
Определение ограничений
Утверждения
Домены
Псевдонимы таблиц
Индексы
Другие объекты базы данных
Структура базы данных
Однобазовая архитектура
Многобазовая архитектура
Каталожная архитектура
Базы данных на нескольких серверах
Структура базы данных и стандарт ANSI/ISO
Каталоги в SQL2
Схемы в SQL2
Резюме
Глава 14.
Представления
Что такое представление
Как СУБД работает с представлениями
Преимущества представлений
Недостатки представлений
Создание представлений
Горизонтальные представления
Вертикальные представления
Смешанные представления
Сгруппированные представления
Объединенные представления
Обновление представлений
Обновление представлений и стандарт ANSI/ISO
Обновление представлений в коммерческих СУБД
Контроль над обновлением представлений
Удаление представления
Материализованные представления*
Резюме
Глава 15.
SQL и безопасность баз данных
Принципы защиты данных, применяемые в SQL
Идентификаторы пользователей
Защищаемые объекты
Привилегии
Представления и защита данных в SQL
Предоставление привилегий
Привилегии на столбцы
Передача привилегий
Отмена привилегий
Инструкция REVOKE и право предоставления привилегий
Инструкция REVOKE и стандарт ANSI/ISO
Резюме
Глава 16.
Системный каталог
Что такое системный каталог
Системный каталог и средства формирования запросов
Системный каталог и стандарт ANSI/ISO
Содержимое системного каталога
Информация о таблицах
Информация о столбцах
Информация о представлениях
Комментарии
Информация об отношениях между таблицами
Информация о пользователях
Информация о привилегиях
Информационная схема в стандарте SQL2
Прочая информация
Резюме
ЧАСТЬ 5.Программирование на SQL
Глава 17.
Встроенный SQL
Обзор программного SQL
Выполнение инструкций SQL в СУБД
Основные концепции встроенного SQL
Компиляция программы со встроенным SQL
Выполнение программы со встроенным SQL
Простые инструкции встроенного SQL
Объявление таблиц
Обработка ошибок
Использование базовых переменных
Выборка данных с помощью встроенного SQL
Запросы, возвращающие одну запись
Запросы, возвращающие набор записей
Удаление и обновление данных с использованием курсоров
Курсоры и обработка транзакций
Резюме
Глава 18.
Динамический SQL
Недостатки статического SQL
Основные концепции динамического SQL
Динамическое выполнение инструкций
Динамическое выполнение в два этапа
Инструкция PREPARE
Инструкция EXECUTE
Динамические запросы на выборку
Инструкция DESCRIBE
Динамическая инструкция DECLARE CURSOR
Динамическая инструкция OPEN
Динамическая инструкция FETCH
Динамическая инструкция CLOSE
Диалекты динамического SQL
Динамический SQL в Oracle*
Динамический SQL и стандарт SQL2
Базовые динамические инструкции в SQL2
Стандарт SQL2 и область SQLDA
Стандарт SQL2 и динамические запросы на выборку
Резюме
Глава 19.
Интерфейсы программирования приложений SQL
Применение программных интерфейсов для доступа к базам данных
Библиотека DB-Library в SQL Server
Базовые принципы работы с SQL Server
Запросы на выборку в SQL Server
Позиционные обновления
Динамические запросы на выборку
Протокол ODBC и стандарт SQL/CLI
Формирование стандарта SQL/CLI
Структуры CLI
Обработка инструкций SQL с помощью CLI
Ошибки CLI и диагностическая информация
Атрибуты CLI
Функции, возвращающие информацию о CLI
Протокол ODBC
Структура ODBC
Независимое взаимодействие с различными СУБД
Функции ODBC для работы с системными каталогами
Расширенные возможности ODBC
Интерфейс вызовов в Oracle
Дескрипторы OCI
Подключение к серверу Oracle
Выполнение инструкций
Обработка результатов запроса
Управление описателями
Управление транзакциями
Протокол JDBC
История развития и версии JDBC
Реализации JDBC и типы драйверов
Интерфейс программирования приложений JDBC
Обработка ошибок в JDBC
Получение метаданных посредством JDBC
Дополнительные возможности JDBC
Резюме
ЧАСТЬ 6.Перспективы развития языка SQL
Глава 20.
Обработка данных и хранимые процедуры
Концепции хранимых процедур
Простейший пример
Использование хранимых процедур
Создание хранимой процедуры
Вызов хранимой процедуры
Переменные хранимых процедур
Блоки инструкций
Возврат значения из процедуры
Возврат значений через параметры
Условное выполнение
Циклы
Другие управляющие конструкции
Циклическая обработка курсоров
Обработка ошибок
Преимущества хранимых процедур
Производительность хранимых процедур
Системные хранимые процедуры
Внешние хранимые процедуры
Триггеры
Преимущества и недостатки триггеров
Триггеры в диалекте Transact-SQL
Триггеры в диалекте Informix
Триггеры в диалекте Oracle PL/SQL
Дополнительные вопросы, связанные с использованием триггеров
Хранимые процедуры, триггеры и стандарт SQL
Хранимые процедуры в стандарте SQL/PSM
Создание подпрограммы
Управляющие конструкции
Операции с курсором
Блоки инструкций
Обработка ошибок
Перегрузка имен подпрограмм
Внешние хранимые процедуры
Дополнительные элементы SQL/PSM, связанные с хранимыми процедурами
Триггеры в стандарте SQL3
Резюме
Глава 21.
SQL и хранилища данных
Концепции хранилищ данных
Компоненты хранилища данных
Эволюция хранилищ данных
Архитектура баз данных для хранилищ
Кубы фактов
Схема "звезда"
Многоуровневые измерения
Расширения SQL для хранилищ данных
Производительность хранилищ данных
Скорость загрузки данных
Производительность запросов
Резюме
Глава 22.
SQL и серверы приложений
SQL и Web-узлы: первые реализации
Серверы приложений и трехуровневая архитектура Web-узла
Доступ к базам данных из серверов приложений
Типы EJB-компонентов
Доступ к базам данных из сеансовых EJB-компонентов
Доступ к базе данных из сущностного EJB-компонента
Спецификация EJB 2.0
Кеширование данных
Резюме
Глава 23.
SQL и распределенные базы данных
Проблемы управления распределенными данными
Практические подходы к управлению распределенными базами данных
Доступ к удаленным базам данных
Прозрачность доступа к удаленным данным
Дублирование таблиц
Репликация таблиц
Двунаправленная репликация
Затраты на репликацию
Типичные схемы репликации
Доступ к распределенным базам данных
Удаленные запросы
Удаленные транзакции
Распределенные транзакции
Распределенные запросы
Метод двухфазного завершения транзакций*
Сетевые приложения и архитектура баз данных
Приложения клиент/сервер
Приложения клиент/сервер с хранимыми процедурами
Корпоративные приложения и кеширование данных
Управление базами данных в Интернете
Резюме
Глава 24.
SQL и объектно-ориентированные технологии
Объектно-ориентированные базы данных
Характеристики объектно-ориентированной базы данных
Плюсы и минусы объектно-ориентированных баз данных
Влияние объектных технологий на рынок баз данных
Объектно-реляционные базы данных
Поддержка больших объектов
Большие объекты в реляционной модели
Специализированная обработка больших объектов
Абстрактные типы данных
Определение абстрактных типов данных
Использование абстрактных типов данных
Наследование
Табличное наследование - реализация классов
Множества, массивы и коллекции
Создание коллекций
Коллекции и запросы на выборку
Манипулирование коллекциями данных
Коллекции и хранимые процедуры
Пользовательские типы данных
Методы и хранимые процедуры
Поддержка объектных возможностей в стандарте SQL3
Резюме
Глава 25.
SQL и XML
Что такое XML
Основы XML
Работа с данными
XML и SQL
Элементы или атрибуты
Использование XML с базами данных
Вывод в формате XML
Ввод в формате XML
Обмен данными в формате XML
Хранение и интеграция данных в формате XML
XML и метаданные
Document Type Definition
Схема XML
XML и запросы
Концепции XQuery
Обработка запросов в XQuery
Базы данных XML
Резюме
Глава 26.
SQL и основные тенденции развития баз данных
Тенденции на рынке баз данных
Насыщение рынка СУБД
Сегментация рынка СУБД
Пакеты корпоративных приложений
Повышение производительности аппаратного обеспечения
Аппаратные средства серверов баз данных
Война за показатели производительности
Стандарты языка SQL
SQL в следующем десятилетии
Распределенные базы данных
Массивные хранилища данных
Сверхпроизводительные базы данных
Интернет и интеграция с сетевыми сервисами
Встроенные базы данных
Интеграция с объектно-ориентированными технологиями
Резюме
Приложения
Приложение А.
Учебная база данных
Приложение Б.
Синтаксис языка SQL
Инструкции DDL
Основные инструкции DML
Инструкции обработки транзакций
Инструкции для работы с курсорами
Выражения запросов
Условия отбора
Выражения
Элементы инструкций
Простые элементы
Приложение В.
Стандарт SQL/CLI
Значения, возвращаемые функциями CLI
Универсальные функции управления дескрипторами
Функции управления средой SQL
Функции управления сеансами подключения
Функции управления инструкциями SQL
Функции для выполнения инструкций SQL
Функции для обработки результатов запроса
Функции для получения информации о результатах запроса
Функции управления описателями CLI
Функции для отложенной обработки динамических параметров
Функции для получения диагностической информации
Функции для получения информации о библиотеке CLI
Коды параметров функций CLI
Приложение Г.
Информационная схема SQL
Представление SCHEMATA
Представление TABLES
Представление COLUMNS
Представление VIEWS
Представление VIEW_TABLE_USAGE
Представление VIEW_COLUMN_USAGE
Представление TABLE_CONSTRAINTS
Представление REFERENTIAL_CONSTRAINTS
Представление CHECK_CONSTRAINTS
Представление KEY_COLUMN_USAGE
Представление ASSERTIONS
Представление CONSTRAINT_TABLE_USAGE
Представление CONSTRAINT_COLUMN_USAGE
Представление TABLE_PRIVILEGES
Представление COLUMN_PRIVILEGES
Представление USAGE_PRIVILEGES
Представление DOMAINS
Представление DOMAIN_CONSTRAINTS
Представление DOMAIN_COLUMN_USAGE
Представление CHARACTER_SETS
Представление COLLATIONS
Представление TRANSLATIONS
Представление SQL_LANGUAGES
Приложение Д.
О прилагаемом компакт-диске
Установка программного обеспечения СУБД
Microsoft SQL Server 2000
Требования к аппаратному и программному обеспечению
Замечания по инсталляции SQL Server 2000
Инсталляция SQL Server 2000
Запуск SQL Server 2000
Деинсталляция SQL Server 2000
IBM DB2
Требования к аппаратному и программному обеспечению
Замечания по инсталляции DB2 Enterprise Edition
Инсталляция DB2 Enterprise Edition
Запуск DB2 Enterprise Edition
Деинсталляция DB2 Enterprise Edition
MySQL
Требования к аппаратному и программному обеспечению
Замечания по инсталляции MySQL
Инсталляция MySQL
Запуск MySQL
Деинсталляция MySQL
Алфавитный указатель
ОТРЫВОК
Часть 1
Обзор SQL
Первые четыре главы этой книги содержат введение в язык SQL. В главе 1 объясняется, что такое SQL, а также описываются его основные свойства и преимущества. В главе 2 дан краткий обзор всего языка и на примерах проиллюстрированы многие его возможности. В главе 3 рассмотрены история и перспективы развития языка, причины его нынешней популярности, а также дано описание SQL-стандартов и рассказано об основных поставщиках продукции, разработанной на базе SQL. В главе 4 описана реляционная модель данных, на основе которой создан SQL, и дано ее сравнение с другими более
ранними моделями данных.
Глава 1. Введение
Глава 2. Краткий обзор SQL
Глава 3. Развитие SQL
Глава 4. Реляционные базы данных
Глава 1
Введение
Стремительный рост популярности SQL является одной из самых важных тенденций в современной компьютерной промышленности. За два последних десятилетия SQL прошел эволюционный путь от небольшой коммерческой программы до компьютерного продукта, собирающего на рынке десятки миллиардов долларов в год, и стал единственным стандартным языком баз данных. На сегодняшний день SQL поддерживают свыше ста СУБД, работающих как на больших ЭВМ (мэйнфреймах), так и на персональных компьютерах. Был принят, а затем трижды дополнен официальный международный стандарт на SQL. Я
зык SQL является важным звеном в архитектуре систем управления базами данных, выпускаемых всеми ведущими поставщиками программных продуктов, и служит одним из стратегических направлений разработок компаний Microsoft, IBM и Oracle, трех крупнейших производителей программного обеспечения. Кроме того, SQL является открытым программным продуктом, что способствует росту популярности Linux и помогает в развитии движения за открытые программные средства. Зародившись в результате выполнения второстепенного исследовательского проекта компании IBM, SQL сегодня широко изве
стен и в качестве важной компьютерной технологии, и в качестве мощного рыночного фактора.
Но, собственно говоря, что такое SQL? Почему он так важен? Что он позволяет делать и как он работает? Если SQL - настоящий стандарт, то почему существует так много различных версий и диалектов? Чем отличаются друг от друга такие популярные СУБД, как SQL Server, Oracle, Informix, Sybase и DB2? Что представляет собой стандарт ODBC компании Microsoft и как он связан с SQL? Каким образом стандарт JDBC связывает SQL с Java и объектными технологиями? Какова его роль в появлении Web-сервисов? Как он влияет на конкуренцию между Web-сервисами, основанными на языке Java и языках, разработанных корпорацией Micros
oft? Каким образом SQL изменяет работу пользователя на компьютере и как извлечь максимальную пользу из применения этого важного инструмента работы с данными?
Язык SQL
SQL является инструментом, предназначенным для выборки и обработки информации, содержащейся в компьютерной базе данных. SQL - это сокращенное название структурированного языка запросов (Structured Query Language). По историческим причинам аббревиатура SQL читается обычно как "сиквел", но используется и альтернативное произношение "эскюэль". Как следует из названия, SQL является языком программирования, который применяется для организации взаимодействия пользователя с базой данных. На самом деле SQL работает только с базами данных одного определенного типа, называемыми
реляционными.
На рис. 1.1 изображена схема работы SQL. Согласно этой схеме, в вычислительной системе имеется база данных, в которой хранится важная информация. Если вычислительная система относится к сфере бизнеса, то в базе данных могут содержаться сведения о материальных ценностях, выпускаемой продукции, объемах продаж и зарплате. В базе данных на персональном компьютере может находиться информация о выписанных чеках, телефонах и адресах или информация, извлеченная из более крупной вычислительной системы. Компьютерная программа, которая управляет базой данных, назы
вается системой управления базой данных, или СУБД.
Если пользователю необходимо получить информацию из базы данных, он запрашивает ее у СУБД с помощью SQL. СУБД обрабатывает запрос, находит требуемые данные и посылает их пользователю. Процесс запрашивания данных и получения результата называется запросом к базе данных; отсюда и название - структурированный язык запросов.
Однако это название не совсем соответствует действительности. Во-первых, сегодня SQL представляет собой нечто большее, чем просто инструмент создания запросов, хотя именно для этого он и был первоначально разработан. Несмотря на то что выборка данных по-прежнему остается одной из наиболее важных функций SQL, сейчас этот язык используется для реализации всех функциональных возможностей, которые СУБД предоставляет пользователю. К ним относятся:
Организация данных. SQL дает пользователю возможность определять структуру представления данных, а также устанавливать отношения между элементами базы данных.
Выборка данных. SQL дает пользователю или приложению возможность извлекать из базы данных содержащуюся в ней информацию и использовать ее.
Обработка данных. SQL дает пользователю или приложению возможность изменять базу данных, то есть добавлять в нее новые данные, а также удалять или обновлять уже имеющиеся.
Управление доступом. С помощью SQL можно ограничить возможности пользователя по выборке и изменению данных и защитить их от несанкционированного доступа.
Совместное использование данных. SQL координирует совместное использование данных пользователями, работающими параллельно, чтобы они не мешали друг другу.
Целостность данных. SQL позволяет обеспечить целостность базы данных, защищая ее от разрушения из-за несогласованных изменений или отказа системы.
Таким образом, SQL является достаточно мощным языком, обеспечивающим эффективное взаимодействие с СУБД.
Во-вторых, SQL - это не полноценный компьютерный язык типа COBOL, C, C++ или Java. В нем нет инструкции IF для проверки условий, нет инструкции GOTO для организации переходов и нет инструкций DO или FOR для создания циклов. SQL является подъязыком баз данных, в который входит около сорока инструкций, предназначенных для управления базами данных. Инструкции SQL встраиваются в базовый язык, например COBOL или C, и дают возможность получать доступ к базам данных. Кроме того, из такого языка, как C, C++ или Java, инструкции SQL можно передавать СУБД в явном виде, используя интерфейс вызово
в функций, либо посредством сообщений, пересылаемых по компьютерной сети.
Наконец, SQL - это слабо структурированный язык, особенно по сравнению с такими высокоструктурированными языками, как C, Pascal или Java. Инструкции SQL напоминают английские предложения и содержат "слова-пустышки", не влияющие на смысл инструкции, но облегчающие ее чтение. В SQL почти нет нелогичностей и к тому же имеется ряд специальных правил, предотвращающих создание инструкций, которые выглядят как абсолютно правильные, но не имеют смысла.
Несмотря на не совсем точное название, SQL на сегодняшний день является единственным стандартным языком для работы с реляционными базами данных. SQL - это достаточно мощный и в то же время относительно легкий для изучения язык. Краткое введение в SQL, представленное в следующей главе, познакомит вас с основными возможностями этого языка.
Роль SQL
Сам по себе SQL не является ни системой управления базами данных, ни отдельным программным продуктом. Нельзя пойти в компьютерный магазин и "купить SQL". SQL - это неотъемлемая часть СУБД, инструмент, с помощью которого осуществляется связь пользователя с ней. На рис. 1.2 изображена структурная схема типичной СУБД, компоненты которой соединяются в единое целое с помощью SQL (своего рода "клея").
Ядро базы данных является сердцевиной СУБД; оно отвечает за физическое структурирование данных и запись их на диск, а также за физическое чтение данных с диска. Кроме того, оно принимает SQL-запросы от других компонентов СУБД (таких как генератор форм, генератор отчетов или модуль запросов), от пользовательских приложений и даже от других вычислительных систем. Как видно из рисунка, SQL выполняет много различных функций:
SQL - язык интерактивных запросов. Пользователи вводят команды SQL в интерактивных программах с целью выборки данных и отображения их на экране. Это удобный способ выполнения специальных запросов.
SQL - язык программирования баз данных. Чтобы получить доступ к базе данных, программисты вставляют в свои программы команды SQL. Эта методика используется как в программах, написанных пользователями, так и в служебных программах баз данных (таких как генераторы отчетов).
SQL - язык администрирования баз данных. Администратор базы данных, находящейся на рабочей станции или на сервере, использует SQL для определения структуры базы данных и управления доступом к данным.
SQL - язык создания приложений клиент/сервер. В программах для персональных компьютеров SQL используется как средство организации связи по локальной сети с сервером базы данных, в которой хранятся совместно используемые данные. Архитектура клиент/сервер весьма популярна в приложениях корпоративного уровня.
SQL - язык доступа к данным в Интернете. На Web-серверах SQL используется как стандартный язык для доступа к корпоративным базам данных.
SQL - язык распределенных баз данных. В системах управления распределенными базами данных SQL помогает распределять данные среди нескольких взаимодействующих вычислительных систем. Программное обеспечение каждой системы посредством SQL связывается с другими системами, посылая им запросы на доступ к данным.
SQL - язык шлюзов баз данных. В вычислительных сетях с различными СУБД SQL часто используется в шлюзовой программе, которая позволяет СУБД одного типа связываться с СУБД другого типа.
Таким образом, SQL превратился в полезный и мощный инструмент, обеспечивающий пользователям, программам и вычислительным системам доступ к информации, содержащейся в реляционных базах данных.
Достоинства SQL
SQL - это легкий для понимания язык и в то же время универсальное программное средство управления данными.
Успех языку SQL принесли следующие его особенности:
независимость от конкретных СУБД;
межплатформенная переносимость;
наличие стандартов;
одобрение и поддержка компанией IBM (СУБД DB2);
поддержка со стороны компании Microsoft (СУБД SQL Server, протокол ODBC и технология ADO);
реляционная основа;
высокоуровневая структура;
возможность выполнения специальных интерактивных запросов;
обеспечение программного доступа к базам данных;
возможность различного представления данных;
полноценность как языка, предназначенного для работы с базами данных;
возможность динамического определения данных;
поддержка архитектуры клиент/сервер;
поддержка корпоративных приложений;
расширяемость и поддержка объектно-ориентированных технологий;
возможность доступа к данным в Интернете;
интеграция с языком Java (протокол JDBC);
промышленная инфраструктура.
Все перечисленные выше факторы явились причиной того, что SQL стал стандартным инструментом для управления данными на персональных компьютерах, рабочих станциях и крупных серверах. Ниже эти факторы рассмотрены более подробно.
Независимость от конкретных СУБД
Все ведущие поставщики СУБД используют SQL, и ни одна новая СУБД, не поддерживающая SQL, не может рассчитывать на успех. Реляционную базу данных и программы, которые с ней работают, можно перенести с одной СУБД на другую с минимальными доработками и переподготовкой персонала. Программные средства, входящие в состав СУБД для персональных компьютеров, такие как программы для создания запросов, генераторы отчетов и генераторы приложений, работают с реляционными базами данных многих типов. Таким образом, SQL обеспечивает независимость от конкретных СУБД, что я
вляется одной из наиболее важных причин его популярности.
Межплатформенная переносимость
Реляционные СУБД выполняются на различных вычислительных системах: от мэйнфреймов и систем среднего уровня до персональных компьютеров, рабочих станций, различных специализированных серверов. Они функционируют на отдельных компьютерах, в локальных и корпоративных сетях и Интернете. Приложения, созданные с помощью SQL и рассчитанные на однопользовательские системы или серверные системы масштаба подразделений (рабочих групп), по мере своего развития могут быть перенесены в более крупные системы. Наконец, информация из корпоративных реляционных баз д
анных может быть загружена в базы данных отдельных подразделений или в персональные базы данных пользователей.
Стандарты языка SQL
Официальный стандарт языка SQL был опубликован Американским национальным институтом стандартов (American National Standards Institute - ANSI) и Международной организацией по стандартизации (International Standards Organization - ISO) в 1986 году, расширен в 1989 году, а затем - в 1992 и 1999 годах. Кроме того, SQL является федеральным стандартом США в области обработки информации (FIPS - Federal Information Processing Standard) и, следовательно, соответствие ему является одним из основных требований, содержащихся в больших правительственных контрактах на разработки в компьютерной промышленности. В течение последних десяти
лет многие другие международные, правительственные и промышленные группы вносили свой вклад в стандартизацию различных составляющих SQL, таких как интерфейсы программирования и объектно-ориентированные расширения. Со временем многие из подобных инициатив стали составной частью стандарта ANSI/ISO. Все эти стандарты служат как бы официальной печатью, одобряющей SQL, и ускорили завоевание им рынка.
Поддержка SQL компанией IBM
SQL был разработан научными сотрудниками компании IBM и широко используется ею во множестве пакетов программного обеспечения. Подтверждением этому служит флагманская СУБД DB2 компании IBM. SQL поддерживают все основные семейства компьютеров компании IBM - от персональных компьютеров и систем среднего уровня (AS/400 и серверов на базе Unix) до мэйнфреймов IBM. Широкая поддержка SQL фирмой IBM ускорила его признание и еще в самом начале возникновения и развития рынка баз данных явилась своего рода недвусмысленным указанием для других поставщиков баз данных и программны
х систем, в каком направлении необходимо двигаться. Сегодня применение SQL выходит далеко за пределы собственных компьютерных систем компании IBM. Продукция на базе SQL используется для широкого спектра технических средств, выпускаемых такими конкурирующими поставщиками компьютерного оборудования, как Sun или Hewlett-Packard.
Поддержка со стороны Microsoft
Компания Microsoft рассматривает подсистему доступа к базам данных как важную часть своей операционной системы Windows. Стандартом этой компании по обеспечению доступа к базам данных является протокол ODBC (Open Database Connectivity - открытый доступ к базам данных) - программный интерфейс, основанный на SQL. Протокол ODBC поддерживается наиболее распространенными Windows-приложениями (электронными таблицами, текстовыми редакторами, базами данных и т. п.), разработанными как самой компанией Microsoft, так и другими ведущими поставщиками. Поддержка ODBC обеспечивается также всеми ведущ
ими реляционными СУБД. Позднее Microsoft реализовала объектно-ориентированные надстройки над ODBC, в частности технологии OLE DB и ADO. Когда в конце 1980-х компания приступила к превращению системы Windows в жизнеспособную серверную операционную систему, был предложен собственный продукт Microsoft на базе SQL - SQL Server. Сегодня SQL Server остается ведущим продуктом Microsoft и ключевым компонентом ее архитектуры .NET для Web-сервисов.
Реляционная основа
SQL является языком реляционных баз данных, поэтому он стал популярным тогда, когда популярной стала реляционная модель представления данных. Табличная структура реляционной базы данных интуитивно понятна пользователям, поэтому язык SQL является простым и легким для изучения. Реляционная модель имеет солидный теоретический фундамент, послуживший основой для эволюции и реализации реляционных баз данных. На волне популярности, вызванной ее успехом, SQL стал единственным языком для реляционных баз данных.
Высокоуровневая структура
Инструкции SQL выглядят как обычные английские предложения, что упрощает их изучение и понимание. Частично это обусловлено тем, что инструкции SQL описывают данные, которые необходимо получить, а не определяют способ их поиска. Таблицы и столбцы в реляционной базе данных могут иметь длинные описательные имена. В результате большинство инструкций SQL означают именно то, что точно соответствует их именам, поэтому их можно читать как простые, понятные предложения.
Интерактивные запросы
SQL является языком интерактивных запросов, который обеспечивает пользователям немедленный доступ к данным. С помощью SQL пользователь может в интерактивном режиме получить ответы на самые сложные запросы в считанные минуты или секунды, тогда как программисту потребовались бы дни или недели, чтобы написать для пользователя соответствующую программу. Из-за того что SQL допускает интерактивное формирование запросов, данные становятся более доступными и могут помочь в принятии решений, делая их более обоснованными.
Программный доступ к базе данных
Программисты пользуются языком SQL, чтобы писать приложения, в которых содержатся обращения к базам данных. Одни и те же инструкции SQL используются как для интерактивного, так и для программного доступа, поэтому части программ, содержащие обращения к базе данных, можно вначале тестировать в интерактивном режиме, а затем встраивать в программу. В традиционных базах данных для программного доступа используются одни программные средства, а для выполнения интерактивных запросов - другие, без какой либо связи между этими двумя режимами доступа.
Различные представления данных
С помощью SQL создатель базы данных может сделать так, что различные пользователи базы данных будут видеть различные представления ее структуры и содержимого. Например, базу данных можно спроектировать таким образом, что каждый пользователь будет видеть только данные, относящиеся к его подразделению или торговому региону. Кроме того, данные из различных частей базы данных могут быть скомбинированы и представлены пользователю в виде одной простой таблицы. Следовательно, представления можно использовать для усиления защиты базы данных и ее настройки п
од конкретные требования отдельных пользователей.
Полноценный язык для работы с базами данных
Первоначально SQL был задуман как язык интерактивных запросов, но сейчас он вышел далеко за рамки выборки данных. SQL является полноценным и логичным языком, предназначенным для создания базы данных, управления ее защитой, изменения ее содержимого, выборки данных и совместного их использования несколькими пользователями, работающими параллельно. Приемы, освоенные при изучении одного раздела языка, могут затем применяться в других командах, что повышает производительность работы пользователей.
Динамическое определение данных
С помощью SQL можно динамически изменять и расширять структуру базы данных даже в то время, когда пользователи обращаются к ее содержимому. Это большое преимущество перед языками статического определения данных, которые запрещают доступ к базе данных во время изменения ее структуры. Таким образом, SQL обеспечивает максимальную гибкость, так как дает базе данных возможность адаптироваться к изменяющимся требованиям, не прерывая работу приложения, выполняющегося в реальном масштабе времени.
Архитектура клиент/сервер
SQL - естественное средство для реализации приложений клиент/сервер. В этой роли SQL служит связующим звеном между клиентской системой, взаимодействующей с пользователем, и серверной системой, управляющей базой данных, позволяя каждой системе сосредоточиться на выполнении своих функций. Кроме того, SQL дает возможность персональным компьютерам функционировать в качестве клиентов по отношению к сетевым серверам или более крупным базам данных, установленным на мэйнфреймах; это позволяет получать доступ к корпоративным данным из приложений, работающих на
персональных компьютерах.
Поддержка корпоративных приложений
Во всех корпоративных приложениях, обеспечивающих ежедневную деятельность крупных компаний и организаций, для хранения и обработки информации применяются базы данных на основе SQL. Как правило, информация о коммерческих операциях (заказах, объемах продаж и выплат, клиентах, уровнях запасов и т. д.) имеет структуру в виде полей записей, которые легко преобразовать в табличную структуру SQL. При разработке этих приложений используются корпоративные базы данных на основе SQL, и большинство производителей не создают собственные программные средства для управ
ления данными, а применяют уже существующие. Поскольку для работы любого корпоративного приложения требуется база данных на основе SQL, продажа таких приложений автоматически порождает спрос на новые копии программных средств управления базами данных.
Объектно-ориентированные технологии
Основным препятствием на пути развития языка SQL стало появление объектных баз данных как следствие общей направленности компьютерного рынка в сторону объектно-ориентированных технологий. В ответ на это поставщики реляционных СУБД начали постепенно модернизировать SQL, добавляя в него различные объектные возможности. Появившиеся в результате "объектно-реляционные" базы данных стали более популярной альтернативой чисто объектным базам данных, гарантировав таким образом "спокойную жизнь" языку SQL в последнем десятилетии. На новой волне объектно-ориент
ированных технологий, воплотившейся в XML и Web-сервисах, возродились и бросили вызов SQL "базы данных XML" и альтернативные языки запросов. Исходя из предыдущего опыта, можно предположить, что ответом на этот вызов станут реляционная модель и расширения на основе XML в SQL, которые позволят языку сохранить свое назначение.
Доступ к данным в Интернете
Взрыв популярности Интернета привел к тому, что к концу 90-х годов SQL стал рассматриваться и как стандартный язык для доступа к данным в глобальной сети. Первоначально, в эпоху зарождения WWW, разработчики, занимавшиеся отображением на Web-страницах информации, извлеченной из баз данных, применяли SQL как средство взаимодействия со шлюзами баз данных. Позднее, с появлением трехуровневой архитектуры Интернета с четким разделением на клиент, сервер приложений и сервер баз данных, SQL стал связующим звеном между вторым и третьим уровнями. В будущем сфера применен
ия SQL в Интернете будет распространяться не только на Web-узлы, но и на управление данными для совместно работающих приложений и распределенных объектов в Web-сервисах.
Интеграция с языком Java
В целях обеспечения связи между Java-приложениями и реляционными базами данных компания Sun Microsystems (создатель Java) разработала протокол JDBC (Java Database Connectivity) - набор стандартных API-функций, позволяющих программам, написанным на языке Java, использовать SQL для доступа к данным. Затем JDBC был принят как стандарт доступа к данным в версии языка Java2 Enterprise Edition (J2EE), который поддерживается всеми основными Интернет-серверами приложений. Кроме того, многими ведущими поставщиками СУБД было объявлено о включении поддержки языка Java в их продукты. Таким образом, появилась возм
ожность, например, писать хранимые процедуры на языке Java. Это подчеркивает важность SQL в эпоху значительного роста интереса к программированию на Java.
Промышленная инфраструктура
Возможно, самой главной причиной, обусловившей возрастание значения SQL, стало возникновение базирующейся на нем компьютерной промышленной инфраструктуры. Главная часть этой инфраструктуры - реляционные системы баз данных на основе SQL. Другой важной составляющей являются корпоративные приложения, в которых используются SQL и базы данных SQL, а также инструменты генерации отчетов, ввода данных, конструкторы, инструменты программирования и другие средства, позволяющие сделать применение SQL более простым. В инфраструктуре важное место занимают опытные про
граммисты, а также службы обучения и обслуживания, помогающие при создании и поддержке функционирования проектов SQL. Целая отрасль возникла вокруг консультаций по SQL, его оптимизации и настройки. Все части инфраструктуры SQL взаимосвязаны и способствуют дальнейшему успешному развитию друг друга. Если вам необходимо решить проблему управления данными, то самым легким, дешевым и надежным будет решение с использованием языка SQL.
Энциклопедия SQL (+CD). / Дж. Грофф, П. Вайнберг - СПб: Питер, 2003. - 896 с.
|