ЭЛЕМЕНТЫ ЯЗЫКА SQL
ФУНКЦИИ И ОСНОВНЫЕ ВОЗМОЖНОСТИ ЯЗЫКА SQL
Неотъемлемая и важнейшая часть любой системы, применяющей БД, — языковые средства, обеспечивающие возможность доступа и действий над данными, определения их структур, способов использования и интерпретации. Язык SQL появился в 1970-е годы как одно из таких средств. Его прототип был разработан фирмой IBM и известен под названием SEQUEL (Structured English Query Language). SQL вобрал в себя достоинства реляционной модели, в частности, лежащий в ее основе математический аппарат реляционной алгебры и реляционного исчисления, используя при этом сравнительно небольшое число операторов и относительно простой синтаксис.
Благодаря своим качествам, язык SQL стал вначале де- факто, а затем и официально утвержденным в качестве стандарта - языком работы с реляционными БД. Этот стандарт поддерживается всеми ведущими мировыми фирмами, действующими в сфере технологий БД. Использование выразительного и эффективного стандартного языка позволило обеспечить высокую степень независимости разрабатываемых прикладных систем от конкретного типа используемой СУБД, существенно поднять уровень и унификацию инструментальных средств разработки приложений, работающих с реляционными БД.
Говоря о стандарте языка SQL, следует заметить, что большинство его коммерческих реализаций имеет некоторые отличия. Это, конечно, уменьшает совместимость систем, использующих различные «диалекты» SQL. Но, с другой стороны, полезные расширения реализаций языка обеспечивают его развитие и со временем включаются в новые редакции стандарта.
В настоящее время ни одна система не реализует стандарт SQL в полном объеме. Кроме того, во всех диалектах языка имеются возможности, не являющиеся стандартными. Таким образом, можно сказать, что каждый диалект — это надмножество некоторого подмножества стандарта SQL. Это затрудняет переносимость приложений, разработанных для одних СУБД, в другие.
Отличие SQL от процедурных языков программирования
SQL относится к классу непроцедурных языков программирования. В отличие от универсальных процедурных языков, которые также могут быть использованы для работы с БД, SQL ориентирован не на записи, а на множества.
Это значит, что в качестве входной информации для формулируемого на языке SQL запроса к БД используется множество кортежей-записей одной или нескольких таблиц- отношений. В результате выполнения запроса также образуется множество кортежей результирующей таблицы-отношения. Другими словами, в SQL результатом любой операции над отношениями также является отношение. Запрос SQL задает не процедуру, т. е. последовательность действий, необходимых для получения результата, а условия, которым должны удовлетворять кортежи результирующего отношения, сформулированные в терминах входного (или выходных) отношения.
Интерактивный и встроенный SQL
Существует две формы языка SQL: интерактивный SQL и встроенный SQL.
Интерактивный SQL используется для задания SQL- запросов пользователем и получения результата в интерактивном режиме.
Встроенный SQL состоит из команд SQL и встроенных программ, обычно написанных на каком-то другом языке. Это делает программы, использующие такие языки, более мощными, гибкими и эффективными, обеспечивая их применение для работы с данными, хранящимися в реляционных БД. При этом, однако, требуются дополнительные средства интерфейса языка SQL с языком, в который он встраивается.
Составные части SQL
SQL подразделяется на следующие составные части:
Язык определения данных - DDL - дает возможность создания, изменения и удаления различных объектов БД (таблиц, индексов, пользователей и т. д.).
В число дополнительных функций DDL могут быть включены и средства ограничения целостности данных, определения порядка структур их хранения, описания элементов физического уровня хранения.
- ? Язык манипулирования данными — DML — предоставляет возможность выборки информации из БД и ее преобразования.
- ? Язык для осуществления административных операций — DCL — осуществляет присваивание или отмену прав (привилегий) использовать БД, таблицы и другие объекты.
- ? Язык контроля транзакций — TCL — дает возможность управлять транзакциями.
Типы данных SQL
В языке SQL имеются средства, позволяющие для каждого атрибута указывать тип данных, которому должны соответствовать все значения этого атрибута.
Определение типов данных является той частью языка, в которой коммерческая реализация языка не полностью согласовывается с требованиями официального стандарта SQL. Это объясняется желанием обеспечить совместимость SQL с другими языками программирования.
Строка символов
Стандарт поддерживает только один тип представления текста — CHARACTER (CHAR) Этот тип данных представляет собой символьные строки фиксированной длины.
Синтаксис:
CHARACTER [(длина)] или
CHAR [(длина)].
Длина может принимать значение от 1 до 255. Если во вводимой в поле текстовой константе фактическое число символов меньше числа, определенного параметром «длина», то эта константа автоматически дополняется справа пробелами до заданного числа символов.
Некоторые реализации языка SQL поддерживают в качестве типа данных строки переменной длины. VARCHAR, CHARACTER VARYING, CHARVARYING. Этот тип данных описывает текстовую строку, которая может иметь произвольную длину до определенного конкретной реализацией SQL максимума (Oracle — до 2000 символов). В отличие от типа CHAR, в этом случае при вводе текстовой константы, длина которой меньше заданной, не производится ее дополнение пробелами до заданного максимального значения.
Константы, имеющие тип CHARACTER и VARCHAR, в выражениях SQL заключаются в одиночные кавычки.
Синтаксис определения текстовой константы переменной длины:
VARCHAR [(длина)]
CHARACTER VARYING [(длина)]
CHARVARYING [(длина)].
Если длина строки не указана явно, она полагается равной 1 символу во всех случаях.
Числовые типы данных
- — INTEGER — используется для представления целых чисел в диапазоне от —231 до +231;
- — SMALLINT — используется для представления целых чисел в диапазоне от —215 до +215;
- — DECIMAL (точность [, масштаб]) — десятичное число с фиксированной точкой, точность определяет количество значащих цифр в числе. Масштаб указывает максимальное число цифр справа от точки;
- — NUMERIC (точность [, масштаб]) — десятичное число с фиксированной точкой, такое же, как и DECIMAL;
- — FLOAT [(точность)] — число с плавающей точкой и указанной минимальной точностью;
- — REAL — число с плавающей точкой, точность определена по умолчанию;
- — DOUBLE PRECISION — число аналогично REAL, но точность в два раза выше.
Дата и время
Тип данных для представления даты и времени является нестандартным и определяется конкретной реализацией SQL. В наиболее общем случае поддерживаются типы DATE и TIME для представления даты и времени соответственно.
Неопределенные или пропущенные данные
Для обозначения отсутствующих, пропущенных или неизвестных значений атрибута в SQL используется ключевое слово NULL. Строго говоря, NULL не является значением атрибута в обычном понимании, а используется именно для обозначения того факта, что действительное значение атрибута на самом деле пропущено или неизвестно. Это приводит к ряду особенностей, которые необходимо учитывать при работе с NULL -значениями:
- — в агрегирующих функциях, позволяющих получать сводную информацию по множеству значений атрибута, для обеспечения точности и однозначного толкования результатов отсутствующие или NULL-значения атрибутов игнорируются;
- — условные операторы от булевой двузначной логики TRUE/FALSE расширяются до трехзначной логики TRUE/ FALSE/UNKNOWN;
- — все операторы, за исключением оператора конкатенации строк (||), возвращают пустое значение (NULL), если значение любого из операндов NULL;
- — для проверки на пустое значение следует использовать операторы IS NULL и IS NOT NULL (использование для этих целей оператора сравнения «=» является ошибкой);
- — функции преобразования типа, имеющие NULL в качестве аргумента, возвращают пустое значение.
Используемые термины и обозначения
Ключевые слова — это используемые в выражениях SQL слова, имеющие определенное назначение.
Команды или предложения являются инструкциями, с помощью которых SQL обращается к БД. Команды состоят из одной или более логических частей, называемых предложениями. Предложения начинаются ключевым словом и состоят из ключевых слов и аргументов.
В описании синтаксиса команд SQL:
- — оператор определения «::=» разделяет определяемый элемент и собственно его определение;
- - квадратные скобки «[ ]» указывают необязательный элемент синтаксической конструкции;
- - многоточие «...» определяет, что выражение, предшествующее ему, может повторяться любое число раз;
- - фигурные скобки «{ }» объединяют последовательность элементов в логическую группу, один из элементов которой должен обязательно использоваться;
- — вертикальная черта «|» указывает, что часть определения, следующая за этим символом, является одним из возможных вариантов;
- — в угловые скобки «О» заключаются элементы, объясняемые по мере того, как они вводятся.
- Ш ВОПРОСЫ ДЛЯ САМОКОНТРОЛЯ
- 1. Назовите причину, благодаря которой язык SQL стал стандартом в качестве языка работы с реляционными данными.
- 2. Назовите отличия SQL от процедурных языков программирования.
- 3. Опишите формы языка SQL.
- 4. Назовите составные части языка SQL.
- 5. Перечислите типы данных, используемые в SQL.