ОСНОВЫ SQL
Введение в язык SQL
На сегодняшний день язык SQL является первым и пока единственным стандартным языком работы с базами данных. Язык SQL поддерживается многими СУБД различных типов, разработанных для самых разнообразных вычислительных платформ. SQL — прежде всего информационно-логический язык, предназначенный для описания, изменения и извлечения данных, хранимых в реляционных базах данных. Это непроцедурный язык, более того, его нельзя назвать языком программирования. Язык SQL ориентирован на операции с данными, представленными в виде логически взаимосвязанных таблиц, что позволило создать компактный язык с небольшим набором предложений. Важнейшей особенностью структуры языка SQL является ориентация на конечный результат обработки данных, а не на процедуру этой обработки.
Для расширения функциональных возможностей многие разработчики, придерживающиеся принятых стандартов, добавляют к стандартному языку SQL различные расширения.
Реализацией языка SQL называется программный продукт SQL соответствующего производителя.
Основные категории команд языка SQL предназначены для выполнения различных функций, включая построение объектов базы данных и манипулирование ими, начальную загрузку данных в таблицы, обновление и удаление существующей информации, выполнение запросов к базе данных, управление доступом к ней и ее общее администрирование.
Основные категории команд языка SQL:
- • DDL — язык определения данных;
- • DML — язык манипулирования данными;
- • DQL — язык запросов;
- • DCL — язык управления данными;
- • команды администрирования данных;
- • команды управления транзакциями.
Язык определения данных DDL (Data Definition Language) позволяет создавать и изменять структуру объектов базы данных, например создавать и удалять таблицы. Основными командами языка DDL являются следующие:
CREATE table — создание таблицы;
ALTER TABLE — изменение таблицы;
DROP table — удаление таблицы;
CREATE INDEX — создание индекса;
ALTER INDEX — изменение индекса;
DROP INDEX — удаление индекса.
Язык манипулирования данными DML (Data Manipulation Language) используется для манипулирования информацией внутри объектов реляционной базы данных посредством трех основных команд:
INSERT — вставка записей;
UPDATE — обновление записей;
DELETE — удаление записей.
Любая модель данных определяет множество действий, которые допустимо производить над некоторой реализацией БД для ее перевода из одного состояния в другое.
Язык запросов DQL (Data Query Language) наиболее известен пользователям реляционной базы данных, несмотря на то, что он включает всего одну команду SELECT, которая возвращает строки из базы данных и позволяет делать выборку одной или нескольких строк или столбцов из одной или нескольких таблиц. Любая операция над данными включает в себя селекцию данных (select), т. е. выделение из всей совокупности именно тех данных, над которыми должна быть выполнена требуемая операция, и действие над выбранными данными, которое определяет характер операции. Условие селекции — это некоторый критерий отбора данных, в котором могут быть использованы логическая позиция элемента данных, его значение и связи между данными.
Язык управления данными DCL (Data Control Language) включает команды управления данными, которые позволяют управлять доступом к информации, находящейся внутри базы данных. Как правило, они используются для создания объектов, связанных с доступом к данным, а также служат для контроля над распределением привилегий между пользователями. Команды управления данными следующие:
GRANT — установить права доступа;
REVOKE — аннулировать права доступа.
Синтаксис этих команд зависит от СУБД. Для того чтобы упростить процесс управления доступом, многие СУБД предоставляют возможность объединять пользователей в группы или определять роли. Роль — это совокупность привилегий, предоставляемых пользователю и/или другим ролям. Такой подход позволяет предоставить конкретному пользователю определенную роль или соотнести его определенной группе пользователей, обладающей набором прав в соответствии с задачами, которые на нее возложены.
С помощью команд администрирования данных пользователь осуществляет контроль за выполнением действий с базой данных, анализирует операции базы данных, анализирует производительность системы и т.п. Следует отметить, что администрирование данных и администрирование базы данных не одно и то же. Администрирование базы данных представляет собой общее управление базой данных и подразумевает использование команд всех уровней.
Команды управления транзакциями включают в себя следующие команды:
COMMIT — подтверждение транзакции;
ROLLBACK — откат транзакции;
SAVEPOINT — установка точки прерывания (неполный откат);
SET TRANSACTION — начало транзакции.
Язык SQL является основой многих СУБД, так как отвечает за физическое структурирование и запись данных на диск, а также за чтение данных с диска, позволяет принимать SQL-запросы от других компонентов СУБД и пользовательских приложений. Таким образом, SQL — мощный инструмент, который обеспечивает пользователям, программам и вычислительным системам доступ к информации, содержащейся в реляционных базах данных.
Идентификаторы языка SQL предназначены для обозначения объектов в базе данных и являются именами таблиц, представлений, столбцов и других объектов базы данных. Стандарт SQL задает набор символов, который используется по умолчанию, — он включает строчные и прописные буквы латинского алфавита (A—Z, a—z ), цифры (0—9) и символ подчеркивания (_).
Язык, в терминах которого дается описание языка SQL, называется метаязыком. Синтаксические определения обычно задают с помощью специальной металингвистической символики, называемой Бэкуса-Наура формулами (БНФ). Для записи зарезервированных слов используются прописные буквы. Строчные буквы употребляются для записи слов, определяемых пользователем. Применяемые в нотации БНФ символы и их обозначения показаны в табл. 10.1:
Металингвистическая символика БНФ
Таблица 10.1
: : = |
Равно по определению |
I |
Необходимость выбора одного из нескольких приведенных значений |
< . . . > |
Описанная с помощью метаязыка структура языка |
{ . . . } |
Обязательный выбор некоторой конструкции из списка |
[...] |
Необязательный выбор некоторой конструкции из списка |
[, ••.п] |
Необязательная возможность повторения конструкции от нуля до нескольких раз |
Ранее мы уже определили данные как совокупную информацию, хранимую в БД в виде одного из нескольких различных типов. С помощью типов данных устанавливаются основные правила для данных, содержащихся в конкретном столбце таблицы, в том числе размер выделяемой для них памяти.
В языке SQL имеется шесть скалярных типов данных, определенных стандартом (табл. 10.2):
Таблица 10.2
Тип данных |
Объявления |
Символьный |
CHAR|VARCHAR |
Битовый |
BIT|BIT VARYING |
Точные числа |
NUMERIC|DECIMAL|INTEGER|SMALLINT |
Округленные числа |
FLOAT|REAL|DOUBLE PRECISION |
Дата/время |
DATE|TIME|TIMESTAMP |
Интервал |
INTERVAL |
Символьные данные состоят из последовательности символов, входящих в определенный создателями СУБД набор символов. Поскольку наборы символов являются специфическими для различных диалектов языка SQL, перечень символов, которые могут входить в состав значений данных символьного типа, также зависит от конкретной реализации.
При определении столбца с символьным типом данных параметр «длина» применяется для указания максимального количества символов, которые могут быть помещены в данный столбец. Символьная строка может быть определена как имеющая фиксированную (CHAR) или переменную (VARCHAR) длину. Если строка определена с фиксированной длиной значений, то при вводе в нее меньшего количества символов значение дополняется до указанной длины пробелами, добавляемыми справа. Если строка определена с переменной длиной значений, то при вводе в нее меньшего количества символов в базе данных будут сохранены только введенные символы, что позволит достичь определенной экономии внешней памяти.
Битовый тип данных используется для определения битовых строк, т.е. последовательности двоичных цифр (битов), каждая из которых может иметь значение либо 0, либо 1.
Тип точных числовых данных применяется для определения чисел, которые имеют точное представление, т.е. числа состоят из цифр, необязательной десятичной точки и необязательного символа знака. Данные точного числового типа определяются точностью и длиной дробной части. Точность задает общее количество значащих десятичных цифр числа, в которое входит длина как целой части, так и дробной, но без учета самой десятичной точки. Масштаб указывает количество дробных десятичных разрядов числа.
Типы NUMERIC и DECIMAL предназначены для хранения чисел в десятичном формате. По умолчанию длина дробной части равна нулю, а принимаемая по умолчанию точность зависит от реализации. Тип INTEGER (INT) используется для хранения больших положительных или отрицательных целых чисел. Тип SMALLINT — для хранения небольших положительных или отрицательных целых чисел; в этом случае расход внешней памяти существенно сокращается.
Тип округленных чисел применяется для описания данных, которые нельзя точно представить в компьютере, в частности действительных чисел. Округленные числа или числа с плавающей точкой представляются в научной нотации, при которой число записывается с помощью мантиссы, умноженной на определенную степень десяти (порядок).
Тип данных «дата/время» используется для определения моментов времени с некоторой установленной точностью. Стандарт SQL поддерживает следующий формат: тип данных DATE используется для хранения календарных дат, включающих поля YEAR (год), MONTH (месяц) и DAY (день). Тип данных TIME — для хранения отметок времени, включающих поля HOUR (часы),MINUTE (минуты) и SECOND (секунды). Тип данных TIMESTAMP — для совместного хранения даты и времени.
Данные типа INTERVAL используются для представления периодов времени.