Федеральное агентство по образованию
Государственное образовательное учреждение
высшего профессионального образования
Петрозаводский государственный университет
Кольский филиал
Кафедра
информационных технологий
Доклад на тему:
«Язык SQL –
общая характеристика, интерфейс с традиционными языками программирования»
студента 5 курса (гр. 2)
очного отделения
факультета ИПМ
специальности 230102 - Автоматизированные
системы обработки информации и управления
Самсонова Антона Владимировича
Апатиты
2010
Оглавление
1 Характеристики
2 Вопросы
практического программирования
3 Вопросы
совместимости
4 Реализации
SQL
5 Типы
команд SQL
6 Преимущества
и недостатки языка SQL
6.1 Преимущества
6.2 Недостатки
Список использованных источников
1. Характеристики
В начале 1970-х годов в
одной из исследовательских лабораторий компании IBM была разработана
экспериментальная реляционная СУБД IBM System R, для которой затем был создан
специальный язык SEQUEL, позволявший относительно просто управлять данными в
этой СУБД. Аббревиатура SEQUEL расшифровывалась как Structured English QUEry
Language — «структурированный английский язык запросов». Позже по юридическим
соображениям язык SEQUEL был переименован в SQL.
Целью разработки было
создание простого непроцедурного языка, которым мог воспользоваться любой
пользователь, даже не имеющий навыков программирования. Собственно разработкой
языка запросов занимались Дональд Чэмбэрлин (Donald D. Chamberlin) и Рэй Бойс
(Ray Boyce). Пэт Селинджер (Pat Selinger) занималась разработкой стоимостного
оптимизатора (cost-based optimizer), Рэймонд Лори (Raymond Lorie) занимался
компилятором запросов.
Первыми СУБД,
поддерживающими новый язык, стали в 1979 году Oracle V2 для машин VAX от
компании Relational Software Inc. (впоследствии ставшей компанией Oracle) и
System/38 от IBM, основанная на System/R. Вопреки сложившемуся мнению, первой
стала именно СУБД Oracle.
Рост количества данных,
необходимость их хранения и обработки привели к тому, что возникла потребность
в создании стандартного языка баз данных, который мог бы функционировать в
многочисленных компьютерных системах различных видов. Действительно, с его
помощью пользователи могут манипулировать данными независимо от того, работают
ли они на персональном компьютере, сетевой рабочей станции или универсальной
ЭВМ.
SQL (англ. Structured
Query Language — «язык структурированных запросов») — универсальный
компьютерный информационно-логический язык, появившийся в результате разработки
реляционной модели данных, применяемый для создания, модификации и управления
данными в реляционных базах данных.
Изначально, SQL
был основным способом работы пользователя с базой данных и представлял собой
небольшую совокупность команд (операторов) допускающих создание таблиц,
добавление в таблицы новых записей, извлечение записей из таблиц (в соответствии
с заданным условием), удаление записей и изменение структур таблиц. В связи с
усложнением язык SQL стал более
прикладным языком программирования, а пользователи получили возможность
использовать визуальные построители запросов.
SQL принципиально отличается
от традиционных алгоритмических языков программирования прежде всего тем, что
он относится к непроцедурным языкам. На языке типа Кобол или Си можно записать
шаг за шагом все инструкции, необходимые для исполнения программы. Язык SQL
позволяет задать только то, “что нужно делать”, а само исполнение отдельных
операций (“как делать”) возлагается непосредственно на СУБД. Такой подход в
значительной мере определяется самой философией реляционных баз данных. СУБД в
данном случае рассматривается как “черный ящик”, и что происходит внутри него,
пользователя не должно касаться. Его должно интересовать только внесение в базу
данных необходимых изменений и получение правильного ответа на запрос.
Другой особенностью SQL
является так называемая трехзначная логика. В большинстве языков булево
выражение может принимать только два значения: истина и ложь. Язык SQL
позволяет записывать в базу данных значение NULL (пустое значение). NULL – это
специальный код, который помещается в столбец таблицы, если по какой-нибудь
причине в нем отсутствуют данные. Когда значение NULL участвует в операциях
сравнения, булев результат будет ни истина и ни ложь, а неизвестно.
Все языки
манипулирования данными, созданные для многих СУБД до появления реляционных баз
данных, были ориентированы на операции с данными, представленными в виде
логических записей файлов. Разумеется, это требовало от пользователя детального
знания организации хранения данных и серьезных усилий для указания того, какие
данные необходимы, где они размещаются и как их получить.
Благодаря работающим с
файловыми серверами СУБД, множество пользователей получают доступ к одним и тем
же базам данных. Упрощается разработка различных автоматизированных систем
управления организациями. Однако при таком подходе вся обработка запросов из
программ или с терминалов пользовательских ЭВМ на них и выполняется, поэтому
для реализации даже простого запроса необходимо считывать с файлового сервера
или записывать на него целые файлы, а это ведет к конфликтным ситуациям и
перегрузке сети. Для исключения указанных недостатков была предложена
технология клиент-сервер, но при этом понадобился единый язык общения с
сервером – выбор пал на SQL.
Рассматриваемый язык
SQL ориентирован на операции с данными, представленными в виде логически взаимосвязанных
совокупностей таблиц-отношений. Важнейшая особенность его структур – ориентация
на конечный результат обработки данных, а не на процедуру этой обработки. Язык
SQL сам определяет, где находятся данные, индексы и даже какие наиболее
эффективные последовательности операций следует использовать для получения
результата, а потому указывать эти детали в запросе к базе данных не требуется.
SQL в настоящее время
получил очень широкое распространение и фактически превратился в стандартный
язык реляционных баз данных. Стандарт на язык SQL был выпущен Американским
национальным институтом стандартов (ANSI) в 1986 г., а в 1987 г. Международная
организация стандартов (ISO) приняла его в качестве международного. Дальнейшее
развитие языка поставщиками СУБД потребовало принятия в 1992 году нового
расширенного стандарта (ANSI SQL-92 или просто SQL2). Следующим стандартом стал
SQL:1999 (SQL3). В настоящее время действует стандарт, принятый в 2003 году
(SQL:2003) с небольшими модификациями, внесёнными позже.
2. Вопросы
практического программирования
Как правило, любой
поставщик СУБД предоставляет вместе со своей системой внешнюю утилиту, которая
позволяет вводить операторы SQL в режиме командной строки и выдает на консоль
результаты их выполнения (так, как это сделано на этой страничке,
предоставляющей интерактивный доступ к БД publications). Недостатки такого
режима работы очевидны: необходимо знать SQL, необходимо помнить схему БД,
отсутствует возможность удобного просмотра результатов выполнения запросов.
Поэтому, подобные утилиты стали инструментами администраторов баз данных, а для
создания пользовательских приложений используются универсальные и
специализированные языки программирования. Приложения, написанные таким
образом, позволяют пользователю сосредоточиться на решении собственных задач, а
не на структурах данных.
Почти все способы
организации взаимодействия пользователя с базой данных основаны на модели
"клиент-сервер". Т.е. предполагается, что каждое приложение обработки
данных разбито, как минимум, на две части:
клиента, который
отвечает за организацию пользовательского интерфейса
сервер, который
собственно хранит данные, обрабатывает запросы и посылает их результаты клиенту
для отображения
При этом
предполагается, что каждая часть приложения функционирует на отдельном
компьютере, т.е. к выделенному серверу БД с помощью локальной сети подключены
персональные компьютеры пользователей (клиенты). Это наиболее популярная
сегодня схема организации вычислительной среды.
Язык SQL позволяет
только манипулировать данными, но в нем отсутствуют средства создания экранного
интерфейса, что необходимо для пользовательских приложений. Для создания этого
интерфейса служат универсальные языки третьего поколения (C, C++, Pascal) или
проблемно-ориентированные языки четвертого поколения (xBase, Informix 4Gl,
Progress, Jam,...). Эти языки содержат необходимые операторы ввода / вывода на
экран, а также операторы структурного программирования (цикла, ветвтеления и
т.д.). Также эти языки допускают определение структур, соответствующих записям
таблиц обрабатываемой базы данных. В исходный текст программы включаются
операторы языка SQL, которые во время исполнения передаются серверу БД, который
собственно и производит манипулирование данными. Отношения, полученные в
результате выполнения сервером SQL-запросов, возвращаются прикладной программе,
которая заполняет строками этих отношений заранее определенные структуры.
Дальнейшая работа клиентской программы (отображение, корректировка записей)
ведется с этими структурами.
Каждая СУБД помимо
интерактивной SQL-утилиты обязательно имеет библиотеку доступа и набор
драйверов для различных операционных систем.
Библиотека доступа -
это, как правило, объектный файл, исходный код которого создан на универсальном
языке типа C. Эта библиотека содержит набор функций, позволяющих
пользовательскому приложению соединятся с базой данных, передавать запросы
серверу и получать ответные данные. Типичный набор функций такой библиотеки
(имена функций зависят от используемой библиотеки):
Библиотечные вызовы
преобразуются драйвером базы данных в сетевые вызовы и передаются сетевым
программным обеспечением на сервер.
На сервере происходит
обратный процесс преобразования: сетевые пакеты -> функции библиотеки ->
SQL-запросы, запросы обрабатываются, их результаты передаются клиенту.
Как видим, такой способ
создания приложений чрезвычайно гибок, позволяет реализовать практически любое
приложение, но в то же время имеет явные недостатки:
разработка клиентской
программы возможна только для той операционной системы и на том языке
программирования, который поддерживатеся библиотекой, необходим драйвер базы
данных, который определяет допустимые типы сетевых интерфейсов, большой объем
кодирования, нестандартизованные библиотечные функции.
В результате получаем
приложение, которое привязано как к сетевой среде, так и к
программно-аппаратной платформе и используемой базе данных.
Некоторой модификацией
данного способа является использование "встроенного" языка SQL. В
этом случае в текст программы на языке третьего поколения включаются не вызовы
библиотек, а непосредственно предложения SQL, которые предваряются ключевым
выражением "EXEC SQL". Перед компиляцией в машинный код такая
программа обрабатывается препроцессором, который транслирует смесь операторов
"собственного" языка СУБД и операторов SQL в "чистый"
исходный код. Затем коды SQL замещаются вызовами соответствующих процедур из
библиотек исполняемых модулей, служащих для поддержки конкретного варианта
СУБД.
Такой подход позволил несколько
снизить степень привязанности к СУБД, например, при переключении прикладной
программы на работу с другим сервером базы данных достаточно было заново
обработать ее исходный текст новым препроцессором и перекомпилировать.
3.
Вопросы совместимости
По традиции, как и со
многими стандартами в IT-индустрии, с языком SQL возникла проблема: на каком-то
этапе многие производители использующего SQL программного обеспечения решили,
что функционал в текущей (на тот момент времени) версии стандарта недостаточен,
и его желательно расширить. В результате у разных производителей систем
управления баз данных (СУБД) в ходу разные диалекты SQL, в общем случае между
собой несовместимые.
Среди недостатков
использования стандартов оказывается о
возможностей конкретной реализации. Под реализацией языка SQL понимается
программный продукт SQL соответствующего производителя. Для расширения
функциональных возможностей многие разработчики, придерживающиеся принятых
стандартов, добавляют к стандартному языку SQL различные расширения.
Все конкретные
реализации языка несколько отличаются друг от друга. В интересах самих же
производителей гарантировать, чтобы их реализация соответствовала современным
стандартам ANSI в части переносимости и удобства работы пользователей. Тем не
менее каждая реализация SQL содержит усовершенствования, отвечающие требованиям
того или иного сервера баз данных. Эти усовершенствования или расширения языка
SQL представляют собой дополнительные команды и опции, являющиеся добавлениями
к стандартному пакету и доступные в данной конкретной реализации.
До 1996 года вопросами
соответствия коммерческих реализаций SQL стандарту занимался в основном
Национальный институт стандартов и технологий (NIST), который и устанавливал
уровень соответствия стандарту. Поздне́е подразделение, занимавшееся СУБД,
было расформировано, и на текущий момент все усилия по проверке СУБД на
соответствие стандарту ложатся на её производителя.
Положение изменилось с
введением стандарта SQL:1999. Отныне стандарт приобрёл модульную структуру —
основная часть стандарта была вынесена в раздел «SQL/Foundation», все остальные
были выведены в отдельные модули. Соответственно, остался только один уровень
совместимости — Core, что означало поддержку этой основной части. Поддержка
остальных возможностей оставлена на усмотрение производителей СУБД.
В настоящее время язык
SQL поддерживается многими десятками СУБД различных типов.
4.
Реализации SQL
Строго говоря, SQL не
является языком программирования согласно определению этого термина. SQL
представляет собой субъязык данных, предназначенный для использования только в
качестве интерфейса с БД. Сам по себе SQL не содержит тех средств, которые
необходимы для разработки законченных программ. Подобные задачи должны решаться
либо с помощью языков программирования или управления заданиями, либо
интерактивно, в результате действий, выполняемых самим пользователем. По
причине подобной незавершенности в плане организации вычислительного процесса
язык SQL может применяться в форме одной из трех прикладных реализаций:
1. Интерактивный
(или автономный) SQL дает возможность пользователям непосредственно извлекать
информацию из базы или записывать в нее данные. Информация, получаемая по
запросу SQL, может быть выдана на экран, переадресована в файл или на принтер.
2. Статический SQL
позволяет записать фиксированный исполняемый код SQL, он обычно используется в
приложениях на процедурных языках.
Есть две разновидности
статического SQL: встроенный и модульный.
Встроенный SQL
определен как код SQL, который включен в исходный текст программы, написанной
на другом языке программирования. В реальной жизни большинство приложений
разрабатываются на алгоритмических языка (например, Си или Кобол), однако для
обращения к БД используется встроенный SQL.
В модульном варианте
операторы SQL записаны в отдельных модулях, которые компонуются с модулями
основного языка. В первый стандарт – SQL86 – был включен только модульный SQL,
а встроенный SQL не нашел себе места в официальной части стандарта, хотя и был
приведен в приложении. Сегодня встроенный SQL пользуется гораздо большей
популярностью среди разработчиков, чем модульный, и стандарт SQL92 поддерживает
обе версии статического SQL.
3. Динамический
SQL дает возможность генерировать код SQL во время исполнения приложения и
используется вместо статического SQL в тех случаях, когда при разработке
приложения необходимый код SQL еще не может быть определен или зависит от того,
какой выбор сделает пользователь.
Операторы динамического
SQL обычно применяются в диалоговых
средах для построения запросов и в графических средствах разработки приложений
БД.
5.
Типы команд SQL
Реализация в SQL
концепции операций, ориентированных на табличное представление данных,
позволила создать компактный язык с небольшим набором предложений. Язык SQL
может использоваться как для выполнения запросов к данным, так и для построения
прикладных программ.
Основные категории
команд языка SQL предназначены для
выполнения различных функций, включая построение объектов базы данных и
манипулирование ими, начальную загрузку данных в таблицы, обновление и удаление
существующей информации, выполнение запросов к базе данных, управление доступом
к ней и ее общее администрирование.
Основные категории
команд языка SQL:
DDL
– язык определения данных;
DML
– язык манипулирования данными;
DQL
– язык запросов;
DCL
– язык управления данными;
команды
администрирования данных;
команды управления
транзакциями
Определение структур
базы данных (DDL)
Язык определения данных
(Data Definition
Language, DDL)
позволяет создавать и изменять структуру объектов базы данных, например,
создавать и удалять таблицы. Основными командами
языка DDL являются следующие: CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE
INDEX, ALTER INDEX, DROP INDEX.
Манипулирование данными
(DML)
Язык манипулирования
данными (Data
Manipulation
Language, DML)
используется для манипулирования информацией внутри объектов реляционной базы
данных посредством трех основных команд: INSERT,
UPDATE, DELETE.
Выборка данных (DQL)
Язык запросов DQL
наиболее известен пользователям реляционной базы данных, несмотря на то, что он
включает всего одну команду SELECT.
Эта команда вместе со своими многочисленными опциями и предложениями
используется для формирования запросов к реляционной базе данных.
Язык управления данными
(DCL - Data
Control
Language)
Команды управления
данными позволяют управлять доступом к информации, находящейся внутри базы
данных. Как правило, они используются для создания объектов, связанных с
доступом к данным, а также служат для контроля над распределением привилегий
между пользователями. Команды управления данными следующие: GRANT,
REVOKE.
Команды
администрирования данных
С помощью команд администрирования
данных пользователь осуществляет контроль за выполняемыми действиями и
анализирует операции базы данных; они также могут оказаться полезными при
анализе производительности системы. Не следует путать администрирование данных
с администрированием базы данных, которое представляет собой общее управление
базой данных и подразумевает использование команд всех уровней.
Команды управления
транзакциями
Существуют следующие
команды, позволяющие управлять транзакциями базы данных: COMMIT,
ROLLBACK, SAVEPOINT,
SET TRANSACTION.
6.
Преимущества и недостатки языка SQL
6.1
Преимущества
Язык SQL
является основой многих СУБД, т.к. отвечает за физическое структурирование и
запись данных на диск, а также за чтение данных с диска, позволяет принимать SQL-запросы
от других компонентов СУБД и пользовательских приложений. Таким образом, SQL
– мощный инструмент, который обеспечивает пользователям, программам и
вычислительным системам доступ к информации, содержащейся в реляционных базах
данных.
Основные достоинства
языка SQL заключаются в
следующем:
стандартность
– как уже было сказано, использование языка SQL
в программах стандартизировано международными организациями;
независимость от
конкретных СУБД – все распространенные СУБД используют SQL,
т.к. реляционную базу данных можно перенести с одной СУБД на другую с
минимальными доработками;
возможность переноса с
одной вычислительной системы на другую – СУБД может быть
ориентирована на различные вычислительные системы, однако приложения, созданные
с помощью SQL, допускают
использование как для локальных БД, так и для крупных многопользовательских
систем;
реляционная основа
языка – SQL
является языком реляционных БД, поэтому он стал популярным тогда, когда
получила широкое распространение реляционная модель представления данных.
Табличная структура реляционной БД хорошо понятна, а потому язык SQL
прост для изучения;
возможность создания
интерактивных запросов – SQL
обеспечивает пользователям немедленный доступ к данным, при этом в
интерактивном режиме можно получить результат запроса за очень короткое время
без написания сложной программы;
возможность
программного доступа к БД – язык SQL
легко использовать в приложениях, которым необходимо обращаться к базам данных.
Одни и те же операторы SQL
употребляются как для интерактивного, так и программного доступа, поэтому части
программ, содержащие обращение к БД, можно вначале проверить в интерактивном
режиме, а затем встраивать в программу;
обеспечение различного
представления данных – с помощью SQL
можно представить такую структуру данных, что тот или иной пользователь будет
видеть различные их представления. Кроме того, данные из разных частей БД могут
быть скомбинированы и представлены в виде одной простой таблицы, а значит,
представления пригодны для усиления защиты БД и ее настройки под конкретные
требования отдельных пользователей;
возможность
динамического изменения и расширения структуры БД
– язык SQL позволяет
манипулировать структурой БД, тем самым обеспечивая гибкость с точки зрения
приспособленности БД к изменяющимся требованиям предметной области;
поддержка архитектуры
клиент-сервер – SQL
– одно из лучших средств для реализации приложений на платформе клиент-сервер. SQL
служит связующим звеном между взаимодействующей с пользователем клиентской
системой и серверной системой, управляющей БД, позволяя каждой из них
сосредоточиться на выполнении своих функций.
Язык SQL
может использоваться широким кругом специалистов, включая администраторов баз
данных, прикладных программистов и множество других конечных пользователей.
Язык SQL
– первый и пока единственный стандартный язык для работы с базами данных,
который получил достаточно широкое распространение. Практически все крупнейшие
разработчики СУБД в настоящее время создают свои продукты с использованием
языка SQL либо с SQL-интерфейсом.
6.2
Недостатки
- Несоответствие
реляционной модели данных
Создатели реляционной
модели данных Эдгар Кодд, Кристофер Дейт и их сторонники указывают на то, что
SQL не является истинно реляционным языком. В опубликованном Кристофером Дейтом
и Хью Дарвеном Третьем Манифестеони излагают принципы СУБД следующего поколения
и предлагают язык Tutorial D, который является подлинно реляционным.
- Сложность
Хотя SQL и задумывался
как средство работы конечного пользователя, в конце концов он стал настолько
сложным, что превратился в инструмент программиста.
- Отступления от
стандартов
Несмотря на наличие
международного стандарта ANSI SQL-92, многие компании, занимающиеся разработкой
СУБД (например, Oracle, Sybase, Microsoft, MySQL AB), вносят изменения в язык
SQL, применяемый в разрабатываемой СУБД, тем самым отступая от стандарта. Таким
образом, появляются специфичные для каждой конкретной СУБД диалекты языка SQL.
- Сложность работы с
иерархическими структурами
СПИСОК
ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
Википедия – режим доступа: http://ru.wikipedia.org/wiki/SQL
Вопросы практического програмирования –
режим доступа: http://www.mstu.edu.ru/education/materials/zelenkov/ch_4_7.html
Введение в структурированный язык запросов
SQL – режим доступа: http://www.intuit.ru/department/database/sql/1/
Всё про Sql – режим
доступа: http://www.sql.ru/
Введение в стандарты языка баз данных SQL –
режим доступа: http://citforum.ru/database/sqlbook/index.shtml