Язык SQL

Идеи языка SQL оказались настолько плодотворными, что он быстро завоевал популярность и стал широко внедряться в создаваемых в конце 70-х и в 80-х годах реляционных СУБД. Однако плодотворность идей языка SQL в отличие от первоначального замысла проявилась вовсе не в том, что на нем стали «разговаривать» с базами данных пользователи, не являющиеся профессиональными программистами. Язык SQL, в конечном счете, позволил, как уже отмечалось, отделить низкоуровневые функции по организации структуры и обработке данных от высокоуровневых функций, позволяя при создании и эксплуатации банков данных сосредоточиваться на смысловом, а не техническом аспекте работы с данными.

Быстрое и массовое распространение языка SQL в реляционных СУБД к середине 80-х годов привело фактически к принятию его в качестве стандарта по организации и обработке данных. В 1986 г. Американским национальным институтом стандартов (ANSI) и Международной организацией по стандартизации (ISO) язык был стандартизирован де-юре, т. е. признан стандартным языком описания и обработки данных в реляционных СУБД. В 1989 г. ANSI/ISO была принята усовершенствованная версия SQL — SQL2, а в 1992 г. третья версия — SQL3.

Язык SQL относится к так называемым декларативным (непроцедурным) языкам программирования. В отличие от процедурных языков (С, Паскаль, Фортран, Кобол, Бейсик) на нем формулируются предложения (инструкции) о том, «что сделать», но не «как сделать, как получить». Машина данных в СУБД исполняет роль интерпретатора и как раз строит машинный код, реализующий способ получения результата, задаваемого SQL-инструкциями.

Язык SQL состоит из двух частей:

• языка описания (определения) данных — DDL (Data Definition Language);
• языка манипулирования данными — DML (Data Manipulation Language).

Синтаксис SQL-инструкций включает:

• название инструкции (команду);
• предложения, определяющие источники, условия операции;
• предикаты, определяющие способы и режимы отбора записей, задаваемых предложениями;
• выражения, значения которых задают свойства и параметры выполнения инструкции и предложения.

Структуру SQL-инструкций можно разделить на две основные части, схематично представленные на схеме (квадратные скобки, как это общепринято, означают необязательность элемента).

Первая часть включает название (команду) SQL-инструкции, предикат (необязательный элемент) и аргументы инструкции, которыми являются перечисляемые через запятую имена полей одной или нескольких таблиц.

Вторая часть состоит из одного или нескольких предложений, аргументы которых могут задавать источники данных (имена таблиц, операции над таблицами), способы, условия и режимы выполнения команды (предикаты сравнения, логические и математические выражения по значениям полей таблиц).

Перечень SQL-инструкций разделяется по частям языка SQL.

В состав языка DDL входят несколько базовых инструкций, обеспечивающих основной набор функций при создании реляционных таблиц и связей между ними.

CREATETABLE… — создать таблицу;
CREATEINDEX… — создать индекс;
ALTERTABLE… — изменить структуру ранее созданной таблицы;
DROP… — удалить существующую таблицу и базы данных.

В структуре инструкций CREATETABLE и ALTERTABLE важную роль играет предложение CONSTRAINT (создать ограничения на значения данных — razgovorodele.ru) со следующими установками — NOT NULL (не допускаются нулевые, точнее «пустые» значения по соответствующему полю, иначе говоря, определяется поле с обязательным заполнением), AUTOINC (поле с инкрементальным, т. е. последовательно возрастающим с каждой новой записью, характером значений) и PRIMARY KEY (определение для поля уникального, т. е. без повторов, индекса, что в результате задает режим заполнения данного поля с уникаль-ными неповторяющимися по различным строкам значениями).

В состав языка DML также входят несколько базовых инструкций, охватывающих тем не менее основные операции по вводу, обработке и выводу данных.

SELECT… — выбрать данные из базы данных;
INSERT… — добавить данные в базу данных;
UPDATE… — обновить данные в базе данных;
DELETE… — удалить данные;
GRANT… — предоставить привилегии пользователю;
REVOKE… — отменить привилегии пользователю;
COMMIT… — зафиксировать текущую транзакцию;
ROLLBACK… — прервать текущую транзакцию.

Важное значение имеют разновидности инструкции SELECT-SELECT… INTO … (выбрать из одной или нескольких таблиц набор записей, из которого создать новую таблицу) и UNION SELECT, которая в дополнении с исходной инструкцией SELECT (SELECT… UNION SELECT…) реализует операцию объединения таблиц.

Помимо предложения CONSTRAINT в SQL-инструкциях используются следующие предложения:

FROM… — указывает таблицы или запросы, которые содержат поля, перечисленные в инструкции SELECT;
WHERE… — определяет, какие записи из таблиц, перечисленных в предложении FROM, следует включить в результат выполнения инструкции SELECT, UPDAТЕ или DELETE;
GROUP BY… — объединяет записи с одинаковыми значениями в указанном списке полей в одну запись;
НАVING… — определяет, какие сгруппированные записи отображаются при использовании инструкции SELECT с предложением GROUP BY;
IN… — определяет таблицы в любой внешней базе данных, с которой ядро СУБД может установить связь;
ORDERBY… — сортирует записи, полученные в результате запроса, в порядке возрастания или убывания на основе значений указанного поля или полей.

В качестве источника данных по предложению FROM, помимо таблиц и запросов, могут использоваться также результаты операций соединения таблиц в трех разновидностях-INNER JOIN… ON…, LEFT JOIN. ..ON… и RIGHT JOIN…ON… (внутреннее соединение, левое и правое внешнее соединение, соответственно).

Предикаты используются для задания способов и режимов использования записей, отбираемых на основе условий в инструкции SQL. Такими предикатами являются:

ALL… — отбирает все записи, соответствующие условиям, заданным в инструкции SQL, используется по умолчанию;
DISTINCT… — исключает записи, которые содержат повторяющиеся значения в выбранных полях;
DISTINCTROW… — опускает данные, основанные на целиком повторяющихся записях, а не на отдельных повторяющихся полях;
ТОРп… — возвращает п записей, находящихся в начале или в конце диапазона, описанного с помощью предложения ORDER BY;

Выражениями в инструкциях SQL являются любые комбинации операторов, констант, значений текстовых констант, функций, имен полей, построенные по правилам математических выражений и результатом которых является конкретное, в том числе и логическое значение.

Язык SQL, конечно же, с точки зрения профессиональных программистов построен довольно просто, но, вместе с тем, как уже отмечалось, надежды на то, что на нем станут общаться с базами данных пользователи-непрограммисты, не оправдались. Причина этого, вероятно, заключается в том, что, несмотря на простоту, язык SQL все же является формализованным искусственным языком, осваивание и использование которого в боль-шинстве случаев тяготит конечных пользователей — razgovorodele.ru. Исследования основ и способов интерфейса человека с компьютером, эргономических и психологических основ работы с компьютерной информацией, проведенные в конце 70-х и в 80-х годах, показали, что пользователи-специалисты в конкретных предметных областях (а не в области вычислительной техники и программирования) более склонны к диалогово-визуальным формам работы с вычислительными системами и компьютерной информацией. Поэтому с конца 80-х годов в развитии СУБД наметились две тенденции:

• СУБД для конечных пользователей;
• СУБД для программистов (профессионалов).

В СУБД для конечных пользователей имеется развитый набор диалоговых и визуально-наглядных средств работы с базой данных в виде специальных диалоговых интерфейсов и пошаговых «мастеров», которые «ведут» пользователя по пути выражения им своих потребностей в обработке данных. Например, при создании новой таблицы соответствующий «мастер» последовательно запрашивает у пользователя имя таблицы, имена, типы и другие параметры полей, индексов и т. д. При этом интерфейсная часть СУБД формирует для ядра СУБД (машины данных) соответствующую и порой весьма сложную инструкцию SQL.

В профессиональных СУБД язык базы данных (SQL) дополняется элементами, присущими процедурным языкам программирования — описателями и средствами работы с различ-ного типа переменными, операторами, функциями, процедурами и т. д. В результате формируется специализированный на работу с данными декларативно-процедурный язык высокого уровня, который встроен в СУБД (точнее надстроен над ядром СУБД). Такие языки называют «включающими». На основе включающего языка разрабатываются полностью автономные прикладные информационные системы, реализующие более простой и понятный для специалистов в определенной предметной области (скажем, в бухгалтерии) интерфейс работы с информацией.

С учетом этапов в развитии программных средств СУБД такие языки получили название языков четвертого поколения — 4GL (Forth Generation Language). Языки 4GL могут быть непосредственно встроены в сами СУБД, а могут существовать в виде отдельных сред программирования. В последнем случае в таких средах разрабатываются прикладные части информационных систем, реализующие только интерфейс и высокоуровневые функции по обработке данных. За низкоуровневым, как говорят, «сервисом» к данным такие прикладные системы обращаются к SQL-серверам, являющимися отдельными специализированными разновидностями СУБД. «Общение» между прикладными системами и SQL-серверами происходит соответственно на языке SQL.

Свои языки 4GL имеют практически все развитые профессиональные СУБД-Orac/e, SyBase, Informix, Ingres, DB2, отечественная СУБД ЛИНТЕР. Распространенными отдельными средами программирования для создания информационных систем в настоящее время являются системы Visual Basic фирмы Microsoft и Delphi фирмы Borland Intemational. Кроме того, уже упоминавшиеся CASE-средства автоматизированного проектирования — PowerBuilder фирмы PowerSoft, Oracle Designer фирмы Oracle, SQLWindows фирмы Gupta и др., также, как правило, имеют свои встроенные языки 4GL.

В заключение следует отметить, что в последнее время наметилась тенденция встраивания развитых языков уровня 4GL и в СУБД для конечных пользователей — razgovorodele.ru. В качестве примера можно привести СУБД Access фирмы Microsoft, имеющей один из наиболее развитых интерфейсов по созданию и работе с базами данных для конечных пользователей, и в то же время оснащенной встроенным языком уровня 4GL — VBA (Visual Basic for Application), являющегося диалектом языка Visual Basic.

Запись опубликована в рубрике АИС4, Бизнес. Добавьте в закладки постоянную ссылку.