4.7 Основы языка sql
Общие сведения
Появление и развитие языка SQL связано с созданием теории реляционных БД. Математической основой языка SQL является реляционная алгебра и реляционное исчисление.
Прообраз языка возник в 1970 году в лаборатории Санта-Тереза фирмы IBM. В настоящее время популярность SQL настолько велика, что разработчики нереляционных СУБД снабжают свои системы SQL-интерфейсом.
Язык SQL имеет официальный стандарт - ANSI/ISO. Стандарт языка SQL регламентируется Американским институтом стандартов (American National Standard's Institute - ANSI) и Международной организацией стандартизации (International Organization for Standardization - ISO). Большинство разработчиков придерживаются этого стандарта, однако часто расширяют его для реализации новых возможностей обработки данных. Стандартизация возможностей SQL продолжается. Линия развития стандартов представлена стандартами: ISO-ANSI SQL, SQL/92, SQL2, SQL3.
SQL сочетает в себе возможности языка определения данных, языка манипулирования данными и языка запросов. При этом он реализует и основные функции реляционных СУБД.
SQL не является языком программирования в традиционном представлении. На нем пишутся не программы, а запросы к БД, поэтому этот язык называют языком запросов, языком декларативным, а не процедурным. Это означает, что с его помощью можно сформулировать, что необходимо получить, однако нельзя указать, как это следует сделать. В отличие от процедурных языков программирования (Си, Паскаль), в языке SQL отсутствуют алгоритмические конструкции, операторы цикла, условные переходы и т.д.
Запрос в языке SQL состоит из одного или нескольких операторов, следующих один за другим и разделенных точкой с запятой. Каждая последовательность операторов языка SQL реализует определенное действие над БД. Оно осуществляется за несколько шагов, на каждом из которых над таблицами выполняются определенные действия.
Структура оператора SQL
Каждый оператор SQL начинается с ключевого слова, которое определяет, что делает этот оператор (SELECT, INSERT, DELETE).
В операторе содержатся предложения, содержащие сведения о том, над какими данными производятся операции. Каждое предложение начинается с ключевого слова, такого как FROM, WHERE и др.
Структура предложения зависит от его типа: ряд предложений содержит имена полей или таблиц, некоторые могут включать дополнительные ключевые слова, константы или выражения.
На рисунке 4.9 приведен пример простой структуры оператора SELECT. Синтаксис этого оператора выглядит следующим образом:
SELECT столбцы (или *)
FROM таблица (ы)
[WHERE ограничение(я)]
[ORDER BY столбец];
Рис.4.9 Структура оператора SELECT в языке SQL
За ключевым словом SELECT следуют сведения о том, какие именно поля необходимо включить в результирующий набор данных. Звездочка (*) означает, что в набор данных попадают все поля таблицы.
Для указания имен таблиц, из которых выбираются записи, применяется ключевое слово FROM,
Для фильтрации результатов, возвращаемых оператором SELECT, используется предложение WHERE,
Выражение IS NOT NULL означает, что соответствующий столбец результирующего набора данных не должен иметь пустых значений
Предложение ORDER BY является необязательным и применяется для сортировки результирующего набора данных по одному или нескольким столбцам.
Основные операторы языка SQL
Наиболее важные операторы выделены в стандарте ANSI/ISO SQL.
Data Definition Language (DDL) – язык описания данных.
Эта составляющая языка содержит операторы, позволяющие создавать, модифицировать и уничтожать базы данных и объекты внутри них (таблицы, представления) (табл. 4.4).
Таблица 4.4 Операторы DDL
Оператор | Описание |
CREATE TABLE | Добавление новой таблицы к базе данных |
DROP TABLE | Удаление таблицы из базы данных |
ALTER TABLE | Изменение структуры имеющейся таблицы |
CREATE VIEW | Добавление нового представления к базе данных |
DROP VIEW | Удаление представления |
CREATE INDEX | Создание нового индекса |
DROP INDEX | Удаление существующего индекса |
Data Manipulation Language (DML) – язык манипулирования данными. Эта составляющая языка содержит операторы, позволяющие добавлять, выбирать, удалять и модифицировать данные. Эти операторы не обязательно должны завершать транзакцию, внутри которой они вызваны. Описание операторов представлено в табл. 4.5
Таблица 4.5 Операторы DML
Оператор | Описание |
SELECT | Выбор данных |
INSERT | Вставка данных |
DELETE | Удаление данных |
UPDATE | Обновление данных |
Иногда оператор SELECT относят к отдельной категории Data Query Language (DQL) – язык запрашиваемых данных.
Transaction Control Language (TCL) – язык управления транзакциями.
Транзакция – это группа операций модификации данных, имеющих логически законченный смысл, после выполнения которых база данных останется корректной. Операторы данного класса (табл. 4.6) применяются для управления изменениями, выполняемыми группой операторов DML.
Таблица 4.6 Операторы TCL
Оператор | Описание |
COMMIT | Завершение транзакции и сохранение изменений в базе данных |
ROLLBACK | Откат транзакции и отмена изменений в базе данных |
SET TRANSACTION | Установка параметров доступа к данным в текущей транзакции |
Data Control Language (DCL) – язык управления данными. Операторы этой группы (табл. 4.7), иногда называемые операторами Access Control Language – язык управления базой, применяются для осуществления административных функций, присваивающих или отменяющих право (привилегию) использовать базу данных, таблицу базы данных, а также выполнять те или иные операторы SQL.
Таблица 4.7 Операторы GCL
-
Оператор
Описание
GRANT
Присвоение привилегии
REVOKE
Отмена привилегии
Функциональные возможности языка SQL
Основные функциональные возможности языка SQL приведены ниже.
Определение данных. Эта функция SQL представляет собой описание структуры поддерживаемых данных и организацию реляционных отношений (таблиц). Для ее реализации предназначены операторы создания базы данных, создания таблиц и доступа к данным.
Создание базы данных. Для создания новой базы данных используется оператор CREATE DATABASE. В структуре оператора указывается имя создаваемой базы данных.
Создание таблиц. Базовая таблица создается с помощью оператора CREATE TABLE. В этом операторе указываются имена полей, типы данных для них, длина (для некоторых типов данных). В SQL используются следующие типы данных:
INTEGER – целое число;
CHAR – символьное значение;
VARCHAR – символьное значение, сохраняются только непустые символы;
DECIMAL – десятичное число;
FLOAT – число с плавающей запятой;
DOUBLE PRECISION – удвоенная точность с плавающей точкой;
DATETIME – дата и время;
BOOL – булевое значение.
В операторе создания таблицы указываются ограничения на значения столбцов и на таблицу. Возможные ограничения показаны в табл. 4.8
Таблица 4.8 Ограничения на определяемые данные
-
Оператор
Пояснение
На значения столбцов
На таблицу
NOT NULL
Не нулевой
+
UNIQUE
Уникальный
+
+
PRIMARYKEY
Первичный ключ
+
+
CHECK
Проверка предиката
+
+
DEFAULT
Значение по умолчанию
+
REFERENCES
Ссылка на имя таблицы, имя столбца
+
+
FOREIGNKEY
Внешний ключ
+
Для реляционной модели данных существенным является указания внешнего ключа (FOREIGNKEY). При объявлении внешних ключей необходимо наложить соответствующие ограничения на столбец, например, NOT NULL.
В SQL-предложении CHECK обозначает семантические ограничения, обеспечивающие целостность данных, чтобы, например, ограничить множество допустимых значения определенного столбца.
Нельзя использовать оператор создания таблицы несколько раз для одной и той же таблицы. Если после ее создания обнаружились неточности в ее определении, то внести изменения можно с помощью оператора ALTER TABLE. Этот оператор предназначен для изменения структуры существующей таблицы: можно удалить или добавить поле к существующей таблице.
Манипулирование данными. SQL позволяет пользователю или прикладной программе изменять содержимое базы данных путем вставки новых данных, удаления или модификации существующих данных.
Вставка новых данных является процедурой добавления строк в базу данных и выполняется с помощью оператора INSERT.
Модификация данных предполагает изменения значений в одном или нескольких столбцах таблицы и выполняется с помощью оператора UPDATE. Пример:
UPDATE СЧЕТ
SET сумма=сумма+1000.00
WHERE сумма>0
Удаление строк из таблицы осуществляется с помощью оператора DELETE. Синтаксис оператора имеет вид:
DELETE
FROM таблица
[WHERE условие]
Предложение WHERE не является обязательным, однако, если его не включить, то будут удалены все записи таблицы. Полезно использовать оператор SELECT c тем же синтаксисом, что и оператор DELETE, чтобы предварительно проверить, какие записи будут удалены.
Обеспечение целостности данных. Язык SQL позволяет определить достаточно сложные ограничения целостности, удовлетворение которым будет проверяться при всех модификациях базы данных. Контроль за результатами транзакций, обработка возникающих ошибок и координирование параллельной работы с базой данных нескольких приложений или пользователей обеспечивается операторами COMMIT (фиксирует удачное окончание текущей транзакции и начало новой) и ROLLBACK (необходимость отката – автоматического восстановления состояния базы данных на начало транзакции)
Выборка данных – одна из важнейших функций базы данных, которой соответствует оператор SELECT. Пример использования оператора был рассмотрен в предыдущем разделе.
В SQL можно создавать вложенные последовательности запросов (подзапросы). Существуют определенные типы запросов, которые лучше реализовывать с помощью подзапросов. К таким запросам относятся так называемые проверки существования. Предположим, что требуется получить данные о студентах, которые не имеют оценку «семь баллов». Если будет возвращено пустое множество, то это означает лишь одно – у каждого студента есть, по крайней мере, одна такая оценка.
Связывание таблиц. Операторы языка SQL позволяют извлекать данные более чем из одной таблицы. Одна из возможностей сделать это заключается в связывании таблиц по одному общему полю.
В операторе SELECT должно присутствовать ограничение на совпадение значений определенного столбца (поля). Тогда из связанных таблиц будут извлекаться только те строки, в которых значения заданного столбца совпадают. Название столбца указывается только вместе с названием таблицы; в противном случае оператор будет неоднозначным.
Можно использовать другие типы связывания таблиц: оператор INTER JOIN (внутреннее соединение) обеспечивает присутствие в результирующем наборе записей, совпадающие значения в связанных полях. Внешние соединения (OUTER JOIN) позволяют включить в результат запроса все строки из одной таблицы и соответствующие им строки из другой
Управление доступом. SQL обеспечивает синхронизацию обработки базы данных различными прикладными программами, защиту данных от несанкционированного доступа.
Доступ к данным в многопользовательской среде регулируется с помощью операторов GRANT и REVOKE. В каждом операторе необходимо указать пользователя, объект (таблицу, представление), по отношению к которому задаются полномочия, и сами полномочия. Например, оператор GRANT задает пользователю Х возможность производить выборку данных из таблицы ТОВАР:
GRANT SELECT ON ТОВАР TO X
Оператор REVOKE аннулирует все предоставленные ранее полномочия.
Встраивание SQL в прикладные программы. Реальные приложения обычно написаны на других языках, генерирующих код на языке SQL и передающих их в СУБД в виде текста в формате ASCII.
Стандартом фирмы IBM для SQL-продуктов регламентировано использование встроенного языка SQL. При написании прикладной программы ее текст представляет собой смесь команд основного языка программирования (например, C, Pascal, Cobol, Fortran, Assembler) и команд SQL со специальным префиксом, например. ExecSQL. Структура SQL-предложений расширена для размещения переменных основного языка в SQL-конструкции.
SQL-процессор видоизменяет вид программы в соответствии с требованиями компилятора основного языка программирования. Функция компилятора состоит в трансляции (перевод) программы с исходного языка программирования на язык, близкий к машинному. После компиляции прикладная программа (приложение) представляет собой самостоятельный модуль.
Диалекты языка SQL
В современных реляционных СУБД для описания и манипулирования данными используются диалекты языка SQL. Подмножество языка SQL, позволяющее создавать и описывать БД, называется DDL (Data Definition Language).
Первоначально язык SQL назывался SEQUEL(Structured English Query Language), потом SEQUEL/2, а затем просто – SQL. Сегодня язык SQL –фактический стандарт для реляционных СУБД.
Первый стандарт языка появился в 1989 г. – SQL-89 и поддерживался практически всеми коммерческими реляционными СУБД. Он имел общий характер и допускал широкое толкование. Достоинствами SQL-89 можно считать стандартизацию синтаксиса и семантики операторов выборки и манипулирования данными, а также фиксацию средств ограничения целостности базы данных. Однако в нем отсутствовал такой важный раздел как манипулирование схемой базы данных. Неполнота стандарта SQL-89 привела к появлению в 1992г. следующей версии языка SQL.
SQL2 (или SQL-92) охватывает практически все необходимые проблемы: манипулирование схемой базы данных, управление транзакциями и сессиями, поддерживает архитектуры клиент-сервер или средства разработки приложений.
Дальнейшим шагом развития языка является вариант SQL 3. Эта версия языка дополняется механизмом триггеров, определением произвольного типа данных, объектным расширением.
В настоящее время существует три уровня языка: начальный, промежуточный и полный. Многие производители своих СУБД применяют собственные реализации SQL, основанные как минимум на начальном уровне соответствующего стандарта ANSI, и содержащие некоторые расширения, специфические для той или иной СУБД. В табл. 4.9 приведены примеры диалектов SQL.
Таблица 4.9 Диалекты языка SQL
-
СУБД
Язык запросов
СУБД System R
SQL
DB2
SQL
Access
SQL
SYBASE SQL Anywhere
Watcom-SQL
SYBASE SQL Server
Transact_SQL
My SQL
SQL
Oracle
PL/SQL
В объектно-ориентированных БД используется язык объектных запросов OQL (Object Query Language). За основу языка OQL была взята команда SELECT языка SQL2 и добавлены возможность направлять запрос к объекту или коллекции объектов, а также возможность вызывать методы в рамках одного запроса.
Совместимость многих используемых диалектов SQL обусловливает совместимость СУБД. Так, СУБД SYBASE SQL Anywhere максимально, насколько это возможно для СУБД такого класса, совместима с СУБД SYBASE SQL Server. Одной из сторон такой совместимости является поддержка в SYBASE SQL Anywhere такого диалекта языка SQL как Transact-SQL. Этот диалект используется в SYBASE SQL Server и может применяться в SYBASE SQL Anywhere наряду с собственным диалектом языка SQL - Watcom-SQL.
- Основы информационных технологий
- Оглавление
- Предисловие
- Современные информационные технологии
- 1.1 История, современное состояние и перспективы развития вычислительной техники
- 1.2 Элементная база, архитектура, сетевая компоновка, производительность
- 1.3 Понятие информации. Классификация и виды информационных технологий
- Основные свойства информационных технологий.
- 1 .4 Операционные системы
- 2 Основные программные средства информационных технологий
- 2.1. Программное обеспечение. Текстовые редакторы, их возможности и назначение
- 2.2. Графические редакторы
- 2.3. Электронные таблицы
- 2.4. Сервисные инструментальные программные средства
- 2.5. Системы математических вычислений MatLab
- 2.6 Система подготовки презентаций
- 3 Сетевые технологии и интернет
- 3.1 Классификация компьютерных сетей
- 3.2 Семиуровневая модель структуры протоколов связи
- 2.3. Взаимодействие компьютеров в сети
- 3.3 Организационная структура Internet
- 3.4 Инструментальные средства создания web-сайтов. Основы web-дизайна
- 3.5 Языки разметки гипертекста html и xml
- 3.6 Скриптовые языки программирования
- 4 Системы управления базами данных
- 4.1. Классификация систем управления базами данных
- 4.2 Модели данных
- 4.3 Моделирование баз данных
- 4.4 Архитектура и функциональные возможности субд. Языковые и программные средства субд
- 4.5 Общая характеристика субд ms Access
- 4.6 Основные объекты ms Access
- 4.7 Основы языка sql
- Контрольные вопросы
- 5 Защита информации при использовании информационных технологий
- 5.1 Основы информационной безопасности
- 5.2. Методы и средства защиты информации
- 5.3 Защита от несанкционированного доступа к данным
- 5.4 Классы безопасности компьютерных систем
- 5.5 Основные аспекты построения системы информационной безопасности
- 6 Математическое моделирование и численные методы
- 6.1 Математические модели и численные методы решения задач в различных предметных областях
- 6.2 Численное дифференцирование и интегрирование
- 6.2.1 Особенность задачи численного дифференцирования
- 6.2.2 Интерполяционная формула Лагранжа для равноотстоящих узлов
- 6.2.3 Численное дифференцирование на основе интерполяционной формулы Лагранжа
- 6.2.4 Численное дифференцирование на основе интерполяционной формулы Ньютона
- 6.2.5 Постановка задачи численного интегрирования
- 6.2.6 Квадратурные формулы Ньютона-Котеса
- 6.2.7 Формула трапеций
- 6.2.8 Формула Симпсона
- 6.2.9 Оценка точности квадратурных формул
- 6.3 Методы решения обыкновенных дифференциальных уравнений
- 6.3.1 Задача Коши и краевая задача
- 6.3.1.1 Классификация уравнений
- 6.3.1.2 Задача Коши
- 6.3.2 Одношаговые методы решения задачи Коши
- 6.3.2.1 Метод Эйлера
- 6.3.2.2 Модифицированный метод Эйлера
- 6.3.2.3 Метод Рунге-Кутта четвертого порядка
- 6.3.2.4 Погрешность решения и выбор шага
- 6.3.3 Многошаговые методы решения задачи Коши
- 6.3.3.1 Многошаговые методы
- 6.3.3.2 Метод Адамса
- 6.3.3.3 Методы прогноза и коррекции (предиктор-корректор)
- 6.3.3.4 Общая характеристика многошаговых методов
- 6.3.4 Краевая задача и метод стрельбы
- 6.3.4.1 Краевая задача
- 6.3.4.2 Метод стрельбы
- 6.3.4.3 Метод стрельбы для линейного дифференциального уравнения
- 6.4 Решение дифференциальных уравнений в чстных производных
- 6.4.1 Краткие теоретические сведения
- 6.4.2 Классификация уравнений по математической форме
- 6.4.3 Основы метода конечных разностей
- 6.4.3.1 Построение сетки
- 6.4.3.2 Аппроксимация уравнения эллиптического типа
- 6.4.3.3 Аппроксимация уравнения гиперболического типа
- 6.4.3.4 Аппроксимация уравнения параболического типа
- 6.4.3.5 Погрешность решения
- 6.4.4 Основы метода конечных элементов
- 6.4.4.1. Формирование сетки
- 6.4.4.2 Конечно-элементная аппроксимация
- 6.4.4.3 Построение решения
- 6.6 Элементы математической статистики
- 6.6.1 Генеральная совокупность. Выборка. Статистические ряды
- 6.6.2 Графическое изображение вариационных рядов. Эмпирическое распределение
- 6.6.3 Средние величины и показатели вариации
- 6.6.4 Средняя арифметическая и ее свойства
- 6.6.5 Дисперсия и ее свойства. Среднее квадратическое отклонение
- 6.6.6 Коэффициент вариации
- 6.6.7 Структурные средние
- 6.6.8 Законы распределения случайных величин
- 6.6.9 Статистические гипотезы
- 7 Методы оптимизации и системы поддержки принятия решений
- 7.1 Характеристика методов решения задач оптимизации
- 7.1.1 Численные методы безусловной оптимизации нулевого порядка
- 7.1.1.1 Основные определения
- 7.1.1.2 Классификация методов
- 7.1.1.3 Общая характеристика методов нулевого порядка
- 7.1.1.4 Метод прямого поиска (метод Хука-Дживса)
- 7.1.1.5 Метод деформируемого многогранника (метод Нелдера—Мида)
- 7.1.1.6 Метод вращающихся координат (метод Розенброка)
- 7.1.1.7 Метод параллельных касательных (метод Пауэлла)
- 7.1.2 Численные методы безусловной оптимизации первого порядка
- 7.1.2.1 Минимизация функций многих переменных. Основные положения
- 7.1.2.2 Метод наискорейшего спуска
- 7.1.2.3 Метод сопряженных градиентов
- 7.1.3 Численные методы безусловной оптимизации второго порядка
- 7.1.3.1 Особенности методов второго порядка
- 7.1.3.2 Метод Ньютона
- 7.2 Линейное программирование
- 7.2.1 Транспортная задача линейного программирования
- 7.2.1.1 Постановка задачи
- 7.2.1.2 Венгерский метод
- 7.2.1.3 Метод потенциалов
- 7.3 Прямые методы условной оптимизации
- 7.3.1 Основные определения
- 7.3.2 Метод проекции градиента
- 7.3.3 Комплексный метод Бокса
- 7.4 Методы штрафных функций
- 7.4.1 Основные определения
- 7.4.2 Методы внутренних штрафных функций
- 7.4.3 Методы внешних штрафных функций
- 7.4.4 Комбинированные алгоритмы штрафных функций
- 7.5 Информационные технологии поддержки принятия решений
- 7.6 Информационные технологии экспертных систем Характеристика и назначение
- Список литературы