Неотъемлемая и важнейшая часть любой системы, применяющей БД, - это языковые средства, обеспечивающие возможность доступа и действий над данными, определения их структур, способов использования и интерпретации.
Язык SQL появился в 70-е годы, как одно из таких средств. Его прототипом был язык SEQUEL, разработанный IBM. Вобрал в себя достоинства реляционной модели, в частности, достоинства математического аппарата реляционной алгебры и исчисления, используя при этом сравнительно небольшое число операторов и относительно простой синтаксис.
Благодаря своим качествам SQL стал стандартным языком работы с реляционными БД. Этот стандарт поддерживается всеми ведущими мировыми фирмами, действующих в сфере технологий БД.
Использование стандартного языка позволило обеспечить высокую степень независимости разрабатываемых прикладных системы от конкретного типа используемой СУБД. Однако большинство коммерческих реализаций языка SQL имеют большие или меньшие отличия от стандарта. С одной стороны это уменьшает переносимость приложений, а с другой – полезное расширение реализации языка обеспечивают его развитие и со временем включаются в новые редакции стандарта. В настоящее время ни одна система не реализует стандарт SQL в полном объеме. Кроме того, во всех диалектах языка имеются возможности, не являющиеся стандартами.
Язык SQL относится к классу непроцедурных языков программирования. В отличие от универсальных процедурных языков, которые также могут работать с БД, язык SQL ориентирован не на записи, а на множества. Это значит, что в качестве входной информации для формулируемого на языке SQL запроса к БД используется множество кортежей одной или нескольких таблиц отношений. В результате выполнения запроса также образуется множество кортежей в результирующей таблице отношений. Запрос SQL задает не процедуру, т.е. последовательность действий, а условия, которым должны удовлетворять кортежи результирующего отношения, сформулированные в терминах входного отношения.
Существуют 2 формы языка SQL:
1 – интерактивный язык SQL – используется для задания SQL запросов пользователем и получения результатов в интерактивном режиме.
2 – встроенный язык SQL –состоит из команд SQL, встроенных внутрь программ, обычно написанных на другом языке. Это делает программы, использующие такие языки, более мощными, гибкими и эффективными, обеспечивая их применение для работы с данными, хранящимися в реляционных БД. При этом требуется дополнительные средства интерфейса SQL с языком, в который он встроен.
Язык SQL имеет 2 составные части:
1 – язык определения данных – дает возможность создания, изменения и удаления различных объектов БД (таблицы, индексы, пользователи). В число дополнительных функций могут быть включены и средства ограничения целостности данных, определение порядка структур и хранения, описание элементов физического уровня хранения данных.
2 – язык манипулирования данными – дает возможность выборки информации из БД и её преобразования.
В языке SQL имеется средство, позволяющее каждому атрибуту указывать тип данных, которому отношению этого атрибута. Определение типов данных является той частью языка, в которой коммерческая реализация языка не полностью удовлетворяет требованиям стандарта SQL. Это объясняется желанием обеспечить совместимость SQL с другими языками программирования.
Тип данных строка символов:
Стандарт поддерживает только 1 тип – представление текста CHAR[длина] – представляет строки фиксированной длины (от 1 от 255). Если во вводимое поле фактическое число символов меньше числа определенного параметром длина, то константа автоматически дополняется справа пробелами до заданного числа символов.
Некоторые реализации языка SQL поддерживают в качестве символьного типа строковый тип переменной длины VARCHAR[длина]. В отличие от типа CHAR при вводе значения меньше заданного, не производится её дополнения пробелами. В случае если длина не указана явно, она полагается равной одному символу ровно во всех случаях.
Константы, имеющие тип CHAR или VARCHAR заключаются в одинарные кавычки.
Числовые типы данных:
INTEGER -используется для представления целых чисел в диапазоне от -2^31 до 2^31.
SMALLINT –используетсядля представления целых чисел в диапазоне от -2^15 до 2^15.
DECIMAL(точность, [масштаб]) – десятичное число с фиксированной точкой. Точность определяет количество значащих цифр в числе. Масштаб указывает максимальное число цифр справа от точки.
NUMERIC(точность, [масштаб]).
FLOAT(точность) – число с плавающей точкой с указанной минимальной точностью.
REAL – число с плавающей точкой, точность определена по умолчанию.
DOUBLE PRECISION – число, аналогичное REAL, но точность в 2 раза выше.
Тип данных для представления даты и времени:
Является не стандартным и определяется конкретной реализацией СУБД. В наиболее частом случае используется тип DATE и TIME.
Для обозначения пропущенных, неопределенных значений атрибута используется ключевое слово NULL.Это приводит к ряду особенностей, которые нужно учитывать при работе с такими значениями:
1 – в агрегирующих функциях, позволяющих получать сводную информацию, для обеспечения точности и однозначного толкования результатов NULL-значения игнорируются.
2 – условные операторы от булевой двузначной логики расширяется до трехзначной.
3 – все операторы, за исключением оператора конкатенации (объединения) строк, возвращают пустое значение.
4 – для проверки на пустое значение используется оператор IS NULL.
5 – функции преобразования типа, имеющие NULL в качестве аргумента, возвращают пустое значение.