Файл: Классификация языков программирования. Критерии выбора среды и языка разработки программ. (ОБЗОР ЯЗЫКОВ ПРОГРАММИРОВАНИЯ)).pdf
Добавлен: 04.04.2023
Просмотров: 73
Скачиваний: 1
Допустимые в SQL типы данных разбиваются на следующие категории:
- точные числовые типы (exact numerics);
- приближенные числовые типы (approximate numerics);
- типы символьных строк (character strings);
- типы битовых строк (bit strings)75);
- типы даты и времени (datetimes);
- типы временных интервалов (intervals);
- булевский тип (Booleans);
- типы коллекций (collection types);
- анонимные строчные типы (anonymous row types);
- типы, определяемые пользователем (user-defined types);
- ссылочные типы (reference types).
Возможности SQL.
Изначально SQL был лишь языком запросов. В сущности, он содержал только предложение SELECT, которое позволяло формулировать запросы для выборки данных с БД. Затем язык был дополнен двумя компонентами, необходимыми для работы с базами данных. Первые — средства для определения структуры БД, которые в терминологии теории баз данных называются языком определения данных. Вторые — средства, которые позволяют заполнять базу данными, изменять и удалять. Данный компонент в теории баз данных называется языком манипулирования данными. Также было принято решение, что весь интерфейс из баз данных должен обеспечиваться одним языком, вследствие чего SQL оброс множеством функций, необходимых для управления базами данных. Приведем некоторые из них:
- определение, переопределение и удаление таблиц базы данных и других ее объектов (доменов, представлений, индексов, триггеров, сохраненных процедур, функций и т.д.);
- указание физической организации данных;
- поддержка ограничений целостности и непротиворечивости базы данных;
- защита данных от несанкционированного доступа с помощью определения пользователей (с именами и паролями) и ролей, прав доступа к данным и правам на смену стана базы данных;
- манипулирование данными в таблицах базы, включая вставку, изменение и удаление значений;
- поиск данных в нескольких таблицах и упорядочение полученных результатов;
- организация резервного копирования и восстановления базы данных;
- поддержка целостности транзакций;
- поддержка пользовательских процедур и функций, которые расширяют функциональные возможности SQL.
SQL существует в двух формах. В интерактивном SQL пользователь непосредственно вводит команды и получает результат. Команды встроенного SQL включаются в тексты программ на других языках. В этом случае обращения к базе данных и обработка результатов проводится этими программами.
Представления базы данных.
В языке допускалось использование хранимых отношений БД и представляемых отношений. Наиболее удачным решением было использование для определения представлений общего аппарата операторов выборки. Любой оператор выборки может быть использован для определения представления. В языке отсутствуют какие-либо ограничения по поводу использования представлений: влюбом операторе SQL, в котором допускается использование имени хранимого отношения, допускается и использование имени представления. В SQL System R ничего не говорится о рекомендуемом способе реализации доступа к представлениям, но при любом способе эффект должен быть таким, как если бы выполнить полную материализацию представления до выполнения оператора.
Массу проблем, исследований и предложений породила потенциальная возможность выполнения операторов манипулирования данными над представлениями. Понятно, что эта возможность легко реализуема для простых представлений, но в более сложных случаях не только реализация, но и семантика операций становится нетривиальной. Кстати, в System R операторы манипулирования данными допускались только над простыми представлениями.
Существенной особенностью языка SQL, появившейся в нем с самого начала, является обеспечение защиты доступа к данным средствами самого языка. Основная идея такого подхода состоит в том, что по отношению к любому отношению БД и любому столбцу отношения вводится предопределенный набор привилегий. С каждой транзакцией неявно связывается идентификатор пользователя, от имени которого она выполняется (способы связи и идентификации пользователей не фиксируются в языке и определяются в реализации).
Определение управляющих структур.
Внесение в реляционный язык, каким является SQL, явных операторов порождения и уничтожения структур физического уровня, поддерживающих эффективное выполнение запросов к БД, явилось в SQL System R чисто прагматическим решением, обеспечивающим возможность всех видов работ с БД с помощью одного языка. В SQL System R упоминаются два вида таких структур: индексы и связи (links). Индекс в его абстрактном языковом представлении - это инвертированный файл, обеспечивающий доступ к кортежам соответствующего отношения на основезаданных значений одного или нескольких столбцов, составляющих ключ индекса. Операторы языка позволяли создавать и уничтожать индексы, но никаким образом не давали возможности явно указать на необходимость использования существующего индекса при выполнении оператора выборки, решение об этом возлагалось на реализацию. С помощью оператора определения индекса можно было выразить два дополнительных утверждения, касающихся логической схемы отношения и физической структуры его хранения. Использование при определении индекса ключевого слова UNIQUE означало, что ключ этого индекса является возможным ключом соответствующего отношения. Фактически это означает наличие дополнительного механизма определения ограничения целостности отношения. Один из индексов для данного отношения мог быть определен с ключевым словом CLUSTERING. Это означает требование физической кластеризации во внешней памяти кортежей отношения с равными или близкими значениями ключа индекса. Операторы определения связи позволяли в стиле сетевой модели данных организовать во внешней памяти списки кортежей указанного отношения. Как и в случае индексов, операторы позволяли создавать и уничтожать такие списки, но не давали возможности явно указать на необходимость использования существующих списков при выполнении операторов выборки. Большая трудоемкость поддержания списков при выполнении операторов манипулирования данными и трудность выполнения оценок стоимости их использования при выполнении операторов выборки привели к тому, что механизм связей исчез из языка уже на поздней стадии проекта System R.
Типы команд SQL.
Реализация в SQL концепции операций, ориентированных на табличное представление данных, позволила создать компактный язык с небольшим набором предложений. Язык SQL может использоваться как для выполнения запросов к данным, так и для построения прикладных программ. Основные категории команд языка SQL предназначены для выполнения различных функций, включая построение объектов базы данных и манипулирование ими, начальную загрузку данных в таблицы, обновление и удаление существующей информации, выполнение запросов к базе данных, управление доступом к ней и ее общее администрирование.
Основные категории команд языка SQL:
- DDL – язык определения данных;
- DML – язык манипулирования данными;
- DQL – язык запросов;
-DCL – язык управления данными;
- команды администрирования данных;
- команды управления транзакциями.
1.3 Transact-SQL
Transact-SQL (T-SQL) является процедурным расширением языка SQL компаний Microsoft (для Microsoft SQL Server) и Sybase (для Sybase ASE).
Transact-SQL является процедурным языком, позволяющим указать базе данных, как и где искать и обрабатывать данные. Стандартный SQL не является процедурным языком, поэтому при его использовании способы извлечения и обработки данных база данных выбирает сама. В Transact-SQL имеются, в частности, возможности объявлять локальные и глобальные переменные, курсоры, возможность программно обрабатывать ошибки, создавать и сохранять триггеры и другие процедуры, использовать циклы, знаки подстановки, преобразовывать одни типы данных в другие, создавать итоговые отчеты[5].
Transact-SQL является процедурным расширением языка SQL компании Microsoft. По сравнению с SQL он расширен следующими дополнительными возможностями:
управляющие операторы, локальные и глобальные переменные,
различные дополнительные функции для обработки строк, дат, математики и т.п., поддержка аутентификации Microsoft Windows.
Transact-SQL – это ключ к использованию SQL Server. Все приложения, взаимодействующие с экземпляром SQL Server отправляют серверу инструкции Transact-SQL.
Предыстория Microsoft SQL SERVER.
Развитие клиент-серверных технологий во второй половине 80-х было обусловлено развитием двух ключевых направлений, активно разрабатываемых с конца 70-х годов: персональных компьютеров с одной стороны, и компьютерных сетей — с другой. Долгое время СУБД были доступны лишь для мэйнфреймов, и лишь благодаря росту производительности процессоров для домашних компьютеров и мини-ЭВМ разработчики СУБД (как, например, Oracle) начали создавать соответствующие версии своих продуктов. Одной из первых СУБД для ПК стала Oracle v3, выпущенная в 1983 году. На тот момент немногочисленные владельцы ПК использовали их в основном для разработки приложений и тестирования.
Одним из ключевых этапов в развитии СУБД стал 1986 год. К этому времени появилось еще несколько компаний-разработчиков СУБД, одной из самых заметных из них стала компания Sybase, основанная двумя годами ранее. К 1986 году Sybase начала комплектовать интеллектуальные рабочие станции (как правило, разработки Sun Microsystems или Apollo Computer) с серверами базы данных (разработанных, например, Oracle). При этом сама клиент-серверная технология сделала возможным отделение модулей обработки информации (т. н. back end) от модулей интерфейса (т. н. front end). Учтя постоянный рост проникновения компьютерных сетей, поставщики решений перешли к задачам распределения остальных задач (например, форматирование отчётов, проверка данных и т. д.) среди рабочих станций сети, оставив серверу выполнять лишь задачи, требующие централизованного решения (хранение и защита данных, оптимизация потока выполнения запросов и т. д.). Существенную роль в переходе от иерархических БД к реляционным сыграли и сами разработчики СУБД. Так, IBM к этому времени уже постепенно переводила своих клиентов с иерархических СУБД (как, например, IMS) на СУРДБ DB2 и SQL/DS. Новые СУБД хотя и уступали в скорости IMS, но превосходили её в легкости программирования и обслуживания. Поставки DB2 быстро превзошли ожидания, захватив значительную долю рынка в первый же год продаж. В сентябре 1986 года Gupta Technologies представила свою разработку SQL Base, заключающую в себе концепт сервера базы данных для ПК, объединённых в сеть. Также Gupta одной из первых реализовала прозрачный доступ к мэйнфреймам IBM с запущенными на них DB2, предоставив прямой доступ к хранившимся там данным без необходимости скачивания файлов или таблиц на рабочую станцию пользователя.
К концу 1986 года использование языка SQL в качестве основного для работы с данными в СУБД стало практически повсеместным. IBM, Oracle, Sybase и Gupta использовали схожий синтаксис языка SQL для отправки сообщений от клиентской части СУБД (front end) к серверной (back end), что позволяло сочетать клиентские и серверные части разных производителей. В том же году Американский национальный институт стандартов утвердил версию языка SQL в качестве международного стандарта обработки данных, что поставило под угрозу благополучие СУБД, не обладавших поддержкой языка SQL. Так, например, компания Cullinet хотя и анонсировала поддержку языка SQL в своих СУБД для миникомпьютеров, но из-за задержки в её реализации потеряла свою долю рынка СУБД, уступив IBM и её продукту DB2.
Элементы синтаксиса MS-SQL Директивы сценария - специфические команды, используемые только в T SQL. Эти команды помогают серверу определять правила работы со скриптом и транзакциями. Например: GO - сигнализирует SQL-серверу об окончании сценария, EXEC (или EXECUTE) - выполняет процедуру либо скалярную функцию.
Комментарии.
Комментарии используются для создания пояснений для блоков сценариев или для временного отключения команд при отладке. Они могут быть как строковыми, так и блоковыми:
-- строковый комментарий исключает из выполнения только одну строку, перед которой стоят два минуса.
/* */- блоковый комментарий исключает из выполнения целый блок команд, заключенный в указанную конструкцию.
Идентификаторы.
Идентификаторы - специальные символы, используюемые с переменными для того, чтобы идентифицировать их тип или для группировки слов в переменную.
Виды идентификаторов:
@- идентифицирует локальной переменной (пользовательской).
@@- идентификатор глобальной переменной (встроенной).
#- идентификатор локальной таблицы или процедуры.
##- идентификатор глобальной таблицы или процедуры.
[ ]- идентификатор группировки слов в переменную.
Типы данных в MS SQL Server.
Тип данных — фундаментальное понятие теории программирования. Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям, и, возможно, способ реализации хранения значений и выполнения операций. Любые данные, которыми оперируют программы, относятся к определённым типам.
В Transact SQL у каждого столбца, локальной переменной, выражения и параметра есть определенный тип данных. Тип данных — это атрибут, который определяет, какого рода данные могут храниться в объекте: целые числа, символы, данные денежного типа, метки времени и даты, двоичные строки и т.д.
SQL Server предоставляет набор системных типов данных, определяющих все типы данных, которые могут использоваться в нем. Можно также определять пользовательские типы данных в Transact-SQL или Microsoft.NET Framework. Псевдонимы типов данных основываются на системных типах. Псевдонимы типов данных создаются при помощи конструкции CREATE TYPE. Определяемые пользователем типы данных обладают свойствами, которые зависят от методов и операторов класса, создающиеся для них на одном из языков программирования, поддерживающиеся .NET Framework.
При объединении одним оператором двух выражений с разными типами данных, параметрами сортировки, точностями, масштабами или длинами, результат определяется следующим образом:
- Тип данных результата определяется применением правил очередности типов данных к входным выражениям. Дополнительные сведения см. в разделе Приоритет типов данных (Transact-SQL);
- Параметры сортировкирезультата определяются правилами очередности параметров сортировки, если тип данных результата относится к char, varchar, text, nchar, nvarchar или ntext. Дополнительные сведения см. в разделе Очередность параметров сортировки (Transact-SQL);
- Точность, масштаб и длина результата зависят от точности, масштаба и длины входных выражений. Дополнительные сведения см. в разделе Точность, масштаб и длина (Transact-SQL).
SQL Server предоставляет синонимы типов данных для совместимости со стандартом ISO. Типы данных в SQL Server объединены в следующие категории[10]:
-Точные числа
-Символьные строки в Юникоде
-Приблизительные числа
-Двоичные данные
-Дата и время
-Прочие типы данных
-Символьные строки
В зависимости от параметров хранения, некоторые типы данных в SQL Server относятся к следующим группам:
типы данных больших значений: varchar(max), nvarchar(max) и varbinary(max).
Типы данных больших объектов: text, ntext, image, varchar(max), nvarchar(max), varbinary(max) и xml.
Тип данных int является основным типом целочисленных данных в SQL Server. Тип данных bigint используется для хранения значений, выходящих за диапазон, поддерживаемый типом данных int.
В таблице приоритетов типов данных тип bigint располагается между smallmoney и int.
Функции возвращают bigint только в случае, если выражение параметра имеет тип bigint. SQL Server не выполняет автоматического продвижения других целочисленных типов данных (tinyint, smallint и int) до bigint.
Bit - Целочисленный тип данных, который может принимать значения 1, 0 или NULL.
decimal и numeric - Числа с фиксированной точностью и масштабом. При использовании максимальной точности числа могут принимать значения в диапазоне от -10^38+1 до 10^38-1. Синонимами по стандарту ISO для decimal являются dec и dec(p, s). numeric функционально эквивалентно decimal.