Uploaded by zowlp

Краткое_введение_SQL.

advertisement
134
Раздел 6
ВВЕДЕНИЕ В ЯЗЫК SQL
6.1. Язык SQL в СУБД
6.1.1. Язык баз данных SQL
Язык SQL (Structured Query Language) – структурированный язык запросов). Его история насчитывает около 40 лет. Первый, достаточно полный функционально, но не полностью синтаксически и семантически определенный вариант языка SQL был разработан и частично реализован в рамках проекта компании IBM по созданию экспериментальной реляционной СУБД System R в
1974-1979 гг. В то время SQL представлял собой скромный исследовательский
проект.
Со временем SQL стал стандартом языка баз данных, являясь одной их
важнейших и востребованных информационных технологий. Его поддерживают сотни разнообразных СУБД, работающих на различных платформах – от
мэйнфреймов до мобильного телефона или встроенного в автомобиль устройства. В процессе своего развития SQL стал стандартным языком управления базами данных в широком диапазоне компьютерных систем и приложений, включая мэйнфреймы, персональные компьютеры, системы клиент/сервер, хранилища данных и Интернет-приложения.
Название языка SQL только частично отражает его суть. Действительно,
язык SQL главным образом ориентирован на удобную и понятную пользователям формулировку запросов выбора из реляционной базы данных. Но в целом
его функции шире – он может быть использован для выполнения любых необходимых действий с базой данных, управляемой SQL-ориентированной СУБД.
SQL является логичным и мощным языком для взаимодействия с базой данных.
SQL относится к декларативным (описательным), то есть непроцедурным
языкам. В SQL отсутствуют алгоритмические конструкции, такие как метки,
условные переходы, операторы цикла и др. На данном языке можно сформули-
135
ровать, что нужно сделать с данными, но не требуется указывать, как именно
это следует сделать. Таким образом, язык SQL скрывает от пользователя сложности реализации алгоритмов поиска данных, обеспечивая простоту понимания
и легкость манипулирования данными. Он дает разработчикам и пользователям
с разным уровнем подготовки легкий в изучении и применении инструмент для
работы с базой данных.
Плодотворная идея SQL привела к тому, что к началу 1980-х годов существовало несколько вариантов этого языка от разных производителей, каждый
со своими различиями. Для преодоления этой проблемы было принято решение разработать стандарт языка SQL. Стандарт SQL – это документ, в котором определяется обязательный набор возможностей языка для всех SQLориентированных СУБД. Стандарты являются отправной точкой на определенный момент времени для разработчиков СУБД в усовершенствовании технологий обработки данных. Они определяют однозначное понимание семантики,
синтаксиса и возможностей языка на определенный момент времени.
В 1986 г. в результате совместных усилий двух организаций ANSI (American National Standarts Institute – американский национальный институт стандартов) и ISO (International Standarts Organisation – международная организация
стандартов) был принят первый официальный стандарт SQL-86 (SQL-1). Краткая история дальнейшего развития стандартов представлена в табл.6.1.
Таблица 6.1
Стандарты языка SQL
Год
Название
Особенности стандарта
Значительные изменения (ISO 9075); базовый уровень стандарта SQL-92
был принят как отдельный федеральный стандарт обработки информации
FIPS 127-2.
1992
SQL-92 /
SQL-2
1999
Добавлена поддержка регулярных выражений, рекурсивных запросов,
SQL:1999/
поддержка триггеров, базовые процедурные расширения, нескалярные тиSQL-3
пы данных и некоторые объектно-ориентированные возможности.
2003 SQL:2003
Введены расширения для работы с XML-данными, оконные функции для
работы с OLAP-базами данных, генераторы последовательностей и основанные на них типы данных.
136
2006 SQL:2006
Функциональность работы с XML-данными значительно расширена. Появилась возможность совместно использовать в запросах SQL и XQuery.
2008 SQL:2008
Расширены возможности оконных функций, устранены некоторые неоднозначности стандарта SQL:2003.
2011 SQL:2011
Добавлены функции по работе с темпоральными базами данных.
2016 SQL:2016
Расширены возможности по ограничению целостности данных, обеспечения безопасности и авторизации
Каждый стандарт представляет собой комплект взаимосвязанных документов сложной структуры. К примеру, текст стандарта SQL-92 составляет
около 600 страниц, SQL:2016 – более 1700 страниц. Как видим, SQL-стандарты
не являются статичными, а постоянно развиваются.
В настоящее время язык SQL воплощен практически во всех коммерческих СУБД – все фирмы-производители СУБД провозглашают реализацию
стандарта SQL. Таким образом, освоив один раз стандарт этого языка, пользователь посредством SQL может работать с базой данных в среде любой SQLориентированной СУБД.
Язык SQL можно использовать для доступа к базе данных в двух режимах – при интерактивной работе и в прикладных программах. С помощью
SQL пользователь может в интерактивном режиме быстро получить ответы на
любые, в том числе достаточно сложные запросы, тогда как для реализации
этих запросов на другом языке пришлось бы разрабатывать соответствующую
программу. В прикладных программах, написанных на определенных языках
программирования, SQL используются как встроенный язык для обращения к
базе данных.
Характеризуя язык SQL в целом, можно выделить следующие его достоинства:
•
высокоуровневая структура, напоминающая английский язык;
•
лежащая в его основе классическая реляционная модель;
•
независимость от конкретных СУБД;
•
межплатформенная переносимость;
137
•
расширяемость и наличие развивающихся стандартов;
•
возможность выполнения интерактивных запросов на извлечение
данных и модификацию их структуры;
•
обеспечение программного доступа к базам данных;
•
возможность различного представления данных разным пользовате-
•
поддержка архитектуры клиент/сервер;
•
возможность изменять и расширять структуру базы данных даже в то
лям;
время, когда пользователи обращаются к ее содержимому (динамическое определение данных);
•
поддержка объектно-ориентированных технологий и интеграция с
языком программирования Java;
•
возможность доступа к данным в среде Интернет;
•
поддержка открытого программного кода;
•
промышленная инфраструктура – приложения уровня предприятия
обычно требуют наличия SQL-ориентированной базы данных.
6.1.2. Роль языка SQL в СУБД
Сам по себе SQL не является ни системой управления базами данных, ни
отдельным программным продуктом. SQL – это неотъемлемая часть СУБД, инструмент, с помощью которого осуществляется связь пользователя с ней. На
рис. 6.1 изображена структурная схема типичной СУБД, компоненты которой
соединяются в единое целое с помощью SQL (своего рода “клея”). Ядро базы
данных является сердцевиной СУБД. Оно отвечает за физическое структурирование данных и запись их на диск, а также за физическое чтение данных с диска. Кроме того, ядро принимает SQL-запросы от других компонентов СУБД
(таких как генератор форм, генератор отчетов или модуль запросов), от пользовательских приложений, а также от других вычислительных систем.
138
Ядро базы данных
Рис. 6.1. Структурная схема типичной SQL-ориентированной СУБД
SQL является мощным инструментом, обеспечивающим пользователям,
прикладным программам и компьютерным системам доступ к информации, содержащейся в базе данных.
Роль SQL в СУБД многогранна. Так, SQL – это:
•
язык интерактивных запросов. Пользователи вводят команды SQL в
интерактивном режиме для выборки данных и отображения их на экране, а
также для внесения изменений в базу данных;
•
язык программирования баз данных. Чтобы получить доступ к базе
данных, в прикладные программы вставляются команды SQL;
•
язык администрирования баз данных. Администратор базы данных
может использовать SQL для определения структуры базы данных и управления доступом к данным;
•
язык создания приложений в архитектуре клиент/сервер. В приклад-
ных программах SQL используется как средство организации связи по локаль-
139
ной сети с сервером базы данных, в которой хранятся совместно используемые
данные;
•
язык доступа к данным в Интернете;
•
язык распределенных баз данных. В системах управления распреде-
ленными базами данных SQL помогает распределять данные между несколькими соединенными компьютерными системами;
•
язык шлюзов баз данных. В компьютерных сетях язык SQL использу-
ется для связи баз данных, созданных в различных СУБД, и др.
6.2. Основные понятия языка SQL
6.2.1. Структура команды SQL
Каждая команда SQL начинается с указания действия – ключевых слов,
описывающих выполняемую операцию (ключевое слово – это зарезервированное слово, имеющее определенный смысл в языке). Например, SELECT (извлечь), INSERT (добавить), DELETE (удалить), COMMIT (завершить),
CREATE TABLE (создать структуру таблицы).
После действия может следовать одно или несколько предложений.
Предложение описывает данные, с которыми работает команда, или содержит
уточняющую информацию о действии, выполняемом командой. Каждое предложение начинается с ключевого слова, такого как, например, WHERE (где),
FROM (откуда), INTO (куда). Многие предложения содержат имена таблиц и
полей базы данных, некоторые – константы и выражения.
Имена таблиц, полей и пользователей согласно стандарту SQL1 должны
содержать от 1 до 18 символов, начинаться с буквы и не содержать пробелов
или специальных символов. На практике именование в различных СУБД реализуется по-разному. В качестве имен не рекомендуется использовать ключевые
слова SQL.
140
Пример команды SQL
Действие
Ключевые
слова
SELECT FROM
(извлечь)
(из)
Предложения
СТУДЕНТ
WHERE
НЗ= 1702003
(имя таблицы)
(где)
(условие)
6.2.2. Типы данных
Тип данных характеризует значения данных (например, числовые, текстовые, дата/время), а также определяет операции, применимые к рассматриваемым данным.
Такие традиционные типы данных, как числа и строки символов постоянной длины, были определены в стандарте SQL-1. Более поздние стандарты
предусматривают дополнительно и другие типы данных, например, строка символов переменной длины, дата, время, абстрактные типы и др. В табл. 6.2. приведены часто используемые типы данных, которые могут храниться в SQLориентированной базе данных и обрабатываться с помощью SQL.
Однако необходимо отметить, что современные коммерческие СУБД
предоставляют возможность работать с данными самых разных типов, причем
между наборами типов данных у разных СУБД имеются существенные отличия.
Таблица 6.2
Некоторые типы данных в языке SQL
Тип данных /
Сокращенное обозначение
INTEGER /
INT
SМALLINT
Описание
Числовые
Большие положительные или отрицательные целые числа
Небольшие положительные или отрицательные целые числа
141
NUМЕRIС(n,m) /
DЕСIМАL(n,m) /
DЕС(n,m)
FLОАТ(n)
Десятичные числа. n — общее количество цифр в числе, m
— количество цифр в дробной части
СНАRАСТЕR(n) /
CHAR(n)
CНARACTER VARYING(n) /
CНAR VARYING(n) /
VARCHAR(n)
Числа с плавающей точкой. n — число байтов, резервируе
мое под хранение числа
Строковые
Строки символов постоянной длины
Строки символов переменной длины
Логические
Битовые строки переменной длины n
Битовые строки постоянной длины n
Дата/время
Дата
Время. n – количество цифр в дробной части числа секунд
BIT(n)
BIT VARYING(n)
DATE
TIME(n)
Диапазон данных разных типов определяется реализацией в конкретной СУБД.
6.2.3. Выражения
Выражения в SQL используются для задания критериев выбора данных
или выполнения операций над данными, которые извлечены из базы данных.
Выражения представляют собой определенную последовательность полей базы
данных, констант, функций, соединенных операторами.
Константы используются для указания конкретных значений данных. В
SQL имеются следующие типы констант:
•
с фиксированной запятой, например:
21
•
62.3
с плавающей запятой, например:
3.14Е9
•
-375.18
-2.5Е4
2.5Е-6
0.783Е24
строковые должны быть заключены в одинарные кавычки, например:
'Минск'
'БЕЛАРУСЬ'
'Иванов И. И.'
В некоторых СУБД используются двойные кавычки:
" БГЭУ"
"New York"
"Google"
142
•
отсутствующее значение (NULL) – используется в SQL для обработ-
ки отсутствующих данных. Примеры отсутствующих значений приведены на
рис. 6.2.
Менеджеры филиалов банка
Ф.И.О. менеджера
Код менеджера
Номер филиала банка
Иванов И. И.
10
1
Петров П. П.
16
NULL
Сидоров С. С.
NULL
127
Сидоров С. С. не менеджер
Филиал банка для
Петрова П. П. не определен
Рис. 6.2. Примеры отсутствующих значений
Большинство SQL-ориентированных СУБД поддерживает так называемые агрегатные (итоговые) функции. К часто используемым агрегатным функциям можно отнести следующие:
•
COUNT – количество значений в столбце таблицы;
•
SUM – сумма значений в столбце;
•
AVG – среднее арифметическое значений в столбце;
•
MAX – максимальное значение в столбце;
•
MIN – минимальное значение в столбце.
В выражениях можно использовать следующие типы операторов:
•
арифметические: + (сложение), - (вычитание), * (умножение), / (деле-
•
отношения: = (равно), > (больше), < (меньше), >= (больше или рав-
ние);
но), <= (меньше или равно), <> (не равно);
•
логические: AND (логическое «И»), OR (логическое «ИЛИ»), NOT
(логическое отрицание);
•
специальные:
143
•
IN – определяет множество, которому может принадлежать значение;
•
BETWEEN – задает границы, в которые должно попадать значение;
•
LIKE – применяется для поиска по шаблону. В шаблоне используются подстановочные знаки: % (процент), заменяющий любую последовательность символов и _ (подчеркивание), заменяющее один
любой символ;
•
IS NULL – используется для поиска NULL-значений.
Для указания порядка действий в выражениях можно применять круглые
скобки.
Пример выражения
Цена * (Остаток + Приход - Расход)
6.3. Функциональные возможности языка SQL
6.3.1. Характеристика команд языка SQL
Язык SQL представляет собой очень богатый и сложный язык, все возможности которого трудно сразу осознать и тем более понять. Поэтому приходится его разбивать на уровни: «базовый» (entry), «промежуточный»
(intermediate) и «полный» (full). Базовый уровень содержит около сорока команд, которые по функциональному назначению можно сгруппировать в категории. В табл. 6.3 приводится подмножество команд базового уровня языка SQL
по категориям.
Таблица 6.3
Команды языка SQL
Команда
Назначение
Команды определения данных
CREATE TABLE
Создает структуру таблицы
DROP TABLE
Удаляет таблицу
ALTER TABLE
Изменяет структуру таблицы
CREATE VIEW
Создает представление
144
Команда извлечения данных
Извлекает данные из базы данных
SELECT
Команды внесения изменений в базу данных
INSERT
Добавляет новые записи в таблицу
DELETE
Удаляет записи из таблицы
UPDATE
Обновляет данные таблицы
Команды управления транзакциями
Сохраняет в базе данных все изменения, произведенные в ходе
COMMIT
выполнения текущей транзакции
ROLLBACK
Отменяет все изменения, произведенные в ходе выполнения
текущей транзакции
Команды управления доступом
GRANT
Предоставляет пользователю определенные права доступа
REVOKE
Отменяет определенные права доступа
Команды встроенного SQL
DECLARE, OPEN,
Реализуют обращения к базе данных из прикладных про-
FETCH, CLOSE
грамм.
Формирование запросов на языке SQL осуществляется в строгом соответствии с форматом команды, который определяет правила ее записи.
Для описания форматов команд языка SQL (иногда усеченных) будем использовать следующие обозначения:
•
< > (угловые скобки) – то, что в них указано, определяет пользова-
•
[ ] (квадратные скобки) – выделяют те части команды, которые могут
тель;
отсутствовать;
•
{ } (фигурные скобки) – объединяют последовательность элементов в
логическую группу;
•
... (многоточие) – указывает на допустимость повторения элемента
или группы элементов один или несколько раз;
•
 (вертикальная черта) – означает альтернативный выбор;
•
( ) (круглые скобки) – заключают аргументы команды;
145
•
(пробелы) – используются для разделения элементов команды.
Примеры команд SQL будем приводить для базы данных Банк, реляционная модель которой представлена на рис. 3.9.
6.3.2. Команды определения данных
Команда создания структуры таблицы CREATE TABLE имеет следующий формат:
CREATE TABLE <имя таблицы>
({<имя поля> <тип данных>[<размер> ]
[<ограничения на поле>]
[<значение поля по умолчанию>] },...
[,<ограничения на таблицу>] )
В команде указываются имя создаваемой таблицы и описываются ее поля – задаются их имена, типы данных. Для каждого поля могут быть указаны размер
поля, ограничения на поле, значение поля по умолчанию. Приведем некоторые
из ограничений на поля:
•
NOT NULL – поле, для которого указано это ограничение, не допус-
кает значений NULL;
•
UNIQUE – поле, для которого указано это ограничение, не допускает
повторяющихся значений;
•
PRIMARY KEY – поле, для которого это ограничение задано, должно
выступать в роли первичного ключа.
Значение поля по умолчанию указывается при помощи ключевого слова DEFAULT. Возможно задание ограничений на всю таблицу. Они применяются к
группам, состоящим из нескольких полей, и задаются при помощи ключевого
слова CHECK.
Пусть требуется создать в базе данных Банк1 (рис. 3.9) структуру таблицы КЛИЕНТ, состоящую из полей «Код клиента», «Ф.И.О. клиента», «Социальное положение» и «Адрес клиента». Для примера поле «Код клиента» определим числовым, первичным ключом таблицы; поле «Ф.И.О. клиента» – символьным с размером 20, обязательным для заполнения; поле «Социальное по-
146
ложение» – символьным с размером 15; поле «Адрес клиента» – символьным с
размером 50. Решить эту задачу можно с помощью следующей команды:
CREATE TABLE КЛИЕНТ (КК INT PRIMARY KEY, ФИО CHAR(20) NOT
NULL, СОЦ_П CHAR(15), АДР_К CHAR(50))
Команда удаления таблицы DROP TABLE имеет следующий формат:
DROP TABLE <имя таблицы>
Например, по команде
DROP TABLE КЛИЕНТ
таблица КЛИЕНТ удаляется из базы данных.
Команда внесения изменений в структуру таблицы ALTER TABLE имеет следующий формат:
ALTER TABLE <имя таблицы>
|ADD [COLUMN] <имя столбца>
|ALTER COLUMN <имя столбца> <тип данных>
|DROP [COLUMN] <имя столбца>
В этой команде ключевые слова означают следующее:
ADD COLUMN – добавить новый столбец в существующую таблицу;
ALTER COLUMN – изменить тип существующего столбца в таблице;
DROP COLUMN – удалить существующий столбец из таблицы.
Например, по команде
ALTER TABLE КЛИЕНТ ADD НФ INT
в структуру таблицы КЛИЕНТ добавляется новое поле НФ, имеющее тип «целое число».
Представления (views) – это таблицы, содержимое которых извлекается из других таблиц базы данных. Представления подобны окнам, через которые просматривается информация, хранимая в базе данных. Представления
можно использовать, как и любую другую таблицу: формулировать к нему запросы, выполнять обновление, вставку, удаление данных и соединение с другими таблицами и представлениями.
147
Команда создания представления CREATE VIEW имеет следующий
формат:
CREATE VIEW <имя представления> AS <запрос> [WITH CHECK OPTION]
Например, по команде
CREATE VIEW СЛУЖАЩИЕ AS SELECT * FROM КЛИЕНТ WHERE
СОЦ_П='Служащий'
выполняется запрос на выборку записей о служащих из таблицы КЛИЕНТ и создается представление СЛУЖАЩИЕ.
6.3.3. Команда извлечения данных
Команда извлечения данных – SELECT является основной, наиболее часто используемой командой языка SQL. Эта команда применяется при формировании всех запросов выбора. Она имеет следующий формат:
SELECT [ALLDISTINCT| DISTINCTROW |
[TOP n
[PERCENT]]]
<список полей>*
FROM {<имя таблицы}> [,...]
[WHERE <условие>]
[ORDER BY {<имя поля> [ASCDESC]},..]
[GROUP BY {<имя поля>} [,...]
[HAVING <условие>]]
Команда SELECT должна обязательно содержать ключевые слова
SELECT и FROM. Остальные ключевые слова являются необязательными.
Можно выводить все значения полей (ALL) или только неповторяющиеся
(DISTINCT). Ключевое слово DISTINCTROW позволяет не отображать полностью повторяющиеся записи. Если не указаны эти ключевые слова, то выводятся все значения полей.
TOP n возвращает n записей, а TOP n PERCENT – n процентов записей,
находящихся в начале диапазона, выбранного по условию.
148
В списке полей перечисляются поля, которые необходимо включить в результирующую таблицу. Звездочка (*) означает, что в результирующую таблицу включаются все поля таблицы.
Ключевое слово ORDER BY задает сортировку записей по возрастанию
(ASC) или убыванию (DESC). Если не указан порядок сортировки, то осуществляется сортировка по возрастанию.
Ключевое слово GROUP BY позволяет осуществлять группировку по
указанным полям. Выбор определенных результирующих групп можно осуществить с помощью ключевого слова HAVING.
Команда SELECT дает возможность проведения вычислений над полями
базы данных, итоговых вычислений с использованием функций агрегирования
таких, как SUM, AVG, COUNT, MAX, MIN. Она позволяет также создавать
вложенные и многотабличные запросы.
Примеры команды SELECT
1. По команде
SELECT * FROM КЛИЕНТ
из таблицы КЛИЕНТ извлекаются все ее поля.
2. По команде
SELECT * FROM КЛИЕНТ WHERE ФИО_К = 'Сокол С.С.' OR ФИО_К = 'Брас
Б.Б.'
из таблицы КЛИЕНТ извлекаются все записи, у которых в поле ФИО_К хранятся значения Сокол С.С. либо Брас Б.Б.
3. По команде
SELECT ФИО_К, АДР_К FROM КЛИЕНТ ORDER BY ФИО_К
из таблицы КЛИЕНТ выбираются поля ФИО_К и АДР_К и их значения выдаются в алфавитном порядке значений поля ФИО_К. В команде не указан порядок сортировки, поэтому по умолчанию задается ASC (от А до Я).
4. По команде
SELECT НФ, COUNT(НС) FROM СЧЕТ GROUP BY НФ
выдается количество счетов, обрабатываемых каждым филиалом.
149
5. По команде
SELECT КК, НС
FROM КЛИЕНТ-СЧЕТ
WHERE КК=
(SELECT КК
FROM КЛИЕНТ
WHERE ФИО_К='Сокол С.С.')
выводятся номера счетов клиента Сокол С.С. Для их определения отыскивается
код клиента вложенной командой SELECT.
6. По команде
SELECT ФИЛИАЛ.НФ, ФИЛИАЛ.АДР_Ф, СЧЕТ.НС
FROM ФИЛИАЛ, СЧЕТ
WHERE ФИЛИАЛ.НФ=СЧЕТ.НФ
выводятся на основании двух таблиц сведения о номерах филиалов, их адресе и
номерах счетов, обрабатываемых филиалами.
6.3.4. Команды внесения изменений в базу данных
Команда добавления новых записей в таблицу имеет следующий формат:
INSERT INTO <имя таблицы>
([{<имя поля>},...] VALUES({<значение>},...)
Например, по команде
INSERT INTO КЛИЕНТ VALUES (80, 'Стром И.И.', 'Рабочий', 'Сухая, 6')
в таблицу КЛИЕНТ добавляется новая запись, в первое поле которой заносится
значение 80, во второе поле – значение Стром И.И., в третье поле – значение
Рабочий, в четвертое поле – значение Сухая,6.
Команда удаления записей из таблицы DELETE имеет следующий формат:
DELETE FROM <имя таблицы> [WHERE <условие>]
В условии предложения WHERE можно использовать различные операторы, в
том числе специальные.
Например, по команде
150
DELETE FROM СЧЕТ WHERE НФ=513
из таблицы СЧЕТ удаляются все записи о счетах филиала № 513.
Команда обновления данных UPDATE имеет следующий формат:
UPDATE <имя таблицы>
SET{<имя поля>=<выражение>},... [WHERE <условие>]
Например, по команде
UPDATE КЛИЕНТ SET ФИО_К = 'Кравцова И.И.' WHERE КК=80
в таблице КЛИЕНТ для тех записей, у которых в поле КК хранится значение 80,
изменяется значение поля ФИО_К на Кравцова И.И.
6.3.5. Команды управления транзакциями
Для обеспечения непротиворечивости базы данных используется механизм транзакций. SQL-транзакция – это несколько последовательных команд
SQL, которые должны выполняться как единое целое.
В языке SQL обработка транзакций реализована с помощью двух команд
– COMMIT и ROLLBACK. Они управляют изменениями, выполненными
группой команд. Команда COMMIT сообщает об успешном окончании транзакции. Она информирует СУБД о том, что транзакция завершена, все ее команды выполнены успешно и противоречия в базе данных не возникли. Команда ROLLBACK сообщает о неуспешном окончании транзакции. Она информирует СУБД о том, что пользователь не хочет завершать транзакцию, и СУБД
должна отменить все изменения, внесенные в базу данных в результате выполнения транзакции. В этом случае СУБД возвращает базу данных в состояние, в
котором она находилась до выполнения транзакции.
Команды COMMIT и ROLLBACK используются в основном в программном режиме, хотя возможно их использование и в интерактивном режиме.
6.3.6. Команды управления доступом
К категории Управление доступом относятся команды для осуществления
функций администрирования, присваивающих или отменяющих право (привилегию) использовать таблицы базы данных определенным образом. Каждый
151
пользователь базы данных имеет определенные права по отношению к объектам базы. Права – это те действия с объектом, которые может выполнять
пользователь. Права могут меняться с течением времени: старые могут отменяться, новые – добавляться. В SQL предусмотрены следующие права:
•
SELECT – право читать таблицу;
•
INSERT – право добавлять данные в таблицу;
•
UPDATE – право изменять данные таблицы;
•
DELETE – право удалять данные из таблицы;
•
REFERENCES – право определять первичный ключ.
Пользователь, создавший таблицу, является ее владельцем. Как владелец,
пользователь имеет все права на таблицу и может назначить права для работы с
ней другим пользователям. Кроме владельца, права может назначать администратор базы данных.
Команда предоставления прав доступа GRANT имеет следующий формат:
GRANT ALL [PRIVILEGES]{SELECT INSERT DELETE UPDATE
[<список полей>]REFERENCES [<список полей>]},...ON <имя таблицы> TO
<список пользователей>
Например, по команде
GRANT SELECT, UPDATE ON КЛИЕНТ TO USER1, USER2
пользователям USER1 и USER2 назначаются права чтения и обновления (редактирования) таблицы КЛИЕНТ.
Команда отмены прав доступа REVOKE имеет следующий формат:
REVOKE ALL [PRIVILEGES]{SELECT INSERT DELETE UPDATE
[<список полей>]REFERENCES [<список полей>]},...ON <имя таблицы>TO
<список пользователей>
Например, по команде
REVOKE UPDATE ON КЛИЕНТ TO USER1
отменяется право обновления таблицы КЛИЕНТ пользователю USER1.
152
6.3.7. Команды встроенного SQL
К категории Встроенный SQL относятся команды, предназначенные для
пересылки данных, извлеченных из базы по запросу, для обработки в прикладную программу, написанную на определенном языке программирования
(например, COBOL, BASIC, Perl, C++). Результат запроса помещается в область памяти, называемую SQL-курсором. Для управления SQL-курсором используются команды:
•
DECLARE – определяет курсор для запроса;
•
OPEN – открывает курсор для чтения результата запроса;
•
FETCH – последовательно считывает данные запроса в переменные
прикладной программы;
•
CLOSE – прекращает доступ к курсору.
6.4.
Диалекты языка SQL в СУБД
Несмотря на наличие стандартов языка SQL, многие компаниипроизводители СУБД (Oracle, Microsoft, IBM, Informix и др.) вносят изменения
в SQL, тем самым отступая от стандартов. Каждая из реализаций языка SQL в
конкретной СУБД называется диалектом. Как и диалекты естественного языка,
диалекты SQL в основном похожи между собой, но различаются в деталях.
Функции, которые добавляются к стандарту языка разработчиками СУБД, принято называть расширениями. Например, в стандарте языка SQL определены
конкретные типы данных, которые могут храниться в базах данных. Во многих
диалектах этот список расширяется за счет разнообразных дополнений.
В самих стандартах, начиная с SQL-92, определено четыре уровня соответствия конкретной реализации SQL этому стандарту: базовый (Entry), переходный (Transitional), промежуточный (Intermediate), полный (Full). В настоящее время не существует ни одного диалекта, соответствующего уровню «полный». Производители СУБД применяют собственные реализации SQL, отвечающие как минимум базовому уровню соответствия стандарту и содержащие
153
некоторые расширения, специфические для данной СУБД. Не существует двух
совершенно идентичных диалектов. Более того, поскольку разработчики баз
данных вводят в СУБД все новые функциональные средства, постоянно расширяют свои диалекты языка SQL, то отдельные диалекты все больше и больше
отличаются друг от друга. Это имеет свои достоинства и недостатки.
Достоинства состоят в том, что диалект языка может включать в себя
более широкие возможности по сравнению со стандартом SQL, например,
больше типов данных, большее количество команд, больше дополнительных
возможностей у имеющихся команд. Такие возможности делают работу с конкретной СУБД более эффективной. Кроме того, такие нестандартные возможности языка проходят практическую апробацию и со временем могут быть
включены в стандарт.
Недостаток состоит в том, что различия в синтаксисе реализаций SQL
затрудняют перенос приложений из одной базы данных в другую. Например,
если приложение было создано для базы данных Microsoft SQL Server с использованием диалекта SQL в этой СУБД – языка Transact-SQL, то при переносе его
в базу данных Oracle не все конструкции языка будут восприняты диалектом
SQL в Oracle – языком PL/SQL.
В широко распространенных в настоящее время СУБД используются следующие диалекты языка SQL:
•
Transact-SQL – в СУБД Microsoft SQL;
•
PL/SQL – в СУБД Oracle;
•
Informix-SQL – в СУБД Informix;
•
Jet SQL – в СУБД Microsoft Access.
Диалект Jet SQL почти соответствует стандарту языка SQL. Основные
различия состоят в следующем:
•
имеют разные наборы зарезервированных слов и типов данных;
•
по-разному трактуется оператор Between;
•
различны подстановочные знаки, используемые в операторе Like;
154
•
Jet SQL обычно предоставляет пользователю большую свободу.
Например, разрешается группировка и сортировка по значению выражения;
•
Jet SQL позволяет использовать более сложные выражения.
Глоссарий
SQL-транзакция
Выражение в SQL
Диалект SQL
Права
Представление
Стандарт SQL
Язык SQL
Несколько последовательных команд SQL, которые должны выполняться как единое целое
Определенная последовательность полей, констант, функций, соединенных операторами
Реализация языка SQL в конкретной СУБД со свойственными ей
особенностями по сравнению со стандартом языка SQL
Действия с объектом базы данных, которые может выполнять
пользователь
Таблица, содержимое которой извлекается из других таблиц базы
данных
Документ, в котором определяется обязательный набор возможностей языка для всех SQL-ориентированных СУБД
Непроцедурный язык, используемый для управления данными в
SQL-ориентированных СУБД
Контрольные вопросы
1. Для чего предназначен язык SQL?
2. Зачем нужны стандарты разработчикам СУБД?
3. Каковы достоинства языка SQL?
4. Какую роль играет язык SQL в СУБД?
5. Какова структура SQL-команды?
6. С чего начинаются предложения в SQL-команде?
7. Что собой представляют выражения в языке SQL?
8. Данные каких типов могут обрабатываться в языке SQL?
9. Какие константы могут использоваться в выражениях в языке SQL?
10. Какие типы операторов используются в выражениях в языке SQL?
11. Какая SQL-команда применяется для создания структуры таблицы?
12. Какая SQL-команда позволяет добавить записи в таблицу?
13. Какая SQL-команда дает возможность обновить значения полей таблицы?
155
14. С помощью какой SQL-команды можно удалить записи из таблицы?
15. Какие SQL-команды используются для управления транзакциями?
16. Какие SQL-команды предназначены для управления доступом?
17. Какие SQL-команды позволяют передать данные из базы для обработки
в прикладную программу?
Download