[{UNION [ ALL ] ] INTERSECT | MINUS} СПЕЦИФИКАЦИЯ_ЗАПРОСА ]
[ ORDER BY СТОЛБЕЦ1 [, СТОЛБЕЦ2 ]
[ NOWAIT ]
Informix предлагает следующий синтаксис оператора.
SELECT [ ALL | DISTINCT | UNIQUE ] СТОЛБЕЦ1 [, СТОЛБЕЦ2 ]
FROM ТАБЛИЦА1 [, ТАБЛИЦА2]
[ WHERE УСЛОВИЕ_ПОИСКА ]
[ GROUP BY {СТОЛБЕЦ1 [, СТОЛБЕЦ2 ] | INTEGER}
[ HAVING УСЛОВИЕ_ПОИСКА ]]
[ UNION СПЕЦИФИКАЦИЯ_ЗАПРОСА ]
[ ORDER BY СТОЛБЕЦ1 [, СТОЛБЕЦ2 ]
[INTO TEMP TABLE [WITH NO LOG ]]
Как вы уже, наверное, заметили, синтаксис операторов по сути одинаков. Везде присутствуют ключевые слова SELECT, FROM, WHERE, GROUP BY, HAVING, UNION и ORDER BY. В каждом случае эти ключевые слова выполняют одни и те же задачи, но имеют различные опции в зависимости от реализации. Эти опции и называются усовершенствованиями.
Соответствие стандарту ANSI SQL
Производители стараются соответствовать стандарту ANSI SQL. но ни один из их продуктов не соответствует стандарту на 100%. Некоторые производители добавит к стандартным свои команды, и многие из этих команд и функций были приняты стандартом ANSI SQL. Для производителя соответствие стандарту выгодно по многим причинам. Например, в случае соответствия стандарту реализацию соответствующего производителя легко освоить, а создаваемый в рамках данной реализации программный код SQL будет легко переносим от одной реализации к другой. Переносимость, очевидно, оказывается важным фактором, когда приходится переводить базу данных из одной системы управления базами данных в другую. Какая причина может sacia-вить компанию потратить кучу денег на переход к реализации, которая не согласуется со стандартами? Компания не станет этого делать, если переход потребует внесения слишком больших изменений в программное обеспечение, а освоение языка новой реализации потребует слишком больших усилий. ПОЭТОМУ соответствие стандарту ANSI SQL в большинстве случаев проблемой не является.
Расширения SQL
Практически все известные производители имеют свои расширения SQL Каждое расширение SQL по-своему уникально и, вообще говоря, не предполагает переносимости от одной реализации к другой. Однако самые популярные расширения отмечаются стандартом ANSI, а иногда со временем становятся частью нового стандарта.
Примерами расширений стандартного SQL являются PL/SQL, используемый продуктами Oracle, и Transact-SQL, используемый Sybase и Microsoft SQL Server. Оба эги расширения обсуждаются достаточно подробно в примерах следующих разделов.
Примеры расширений
И PL/SQL, и Transact-SQL считаются языками программирования четвертого поколения. Оба, в отличие от стандартного SQL, являются процедурно-ориентированными языками. Кроме них, мы рассмотрим также другую реализацию SQL, называемую MySQL, которую можно найти в Internet.
Непроцедурный язык SQL включает следующие операторы.
• INSERT
• UPDATE
• DELETE
• SELECT
• COMMIT
• ROLLBACK
Любое расширение SQL, являющееся процедурным языком, должно включать все операторы, команды и функции стандартного SQL. Кроме того, такое расширение включает операторы следующего вида.
• Объявления переменных
• Объявления курсоров
• Условные операторы
• Циклы
• Обработчики ошибок
• Различные приращения
• Преобразования данных
• Знаки подстановки
• Триггеры
• Сохраненные процедуры
Эти операторы в рамках процедурного языка дают пользователю более широкие возможности для управления данными.
Стандартный SQL по своей сути является непроцедурным языком, что предполагает предъявление серверу базы данных отдельных операторов. Получив такой оператор, сервер должен решить, каким образом выполнить данный оператор оптимально. Процедурные языки дают программисту возможность не только осуществить запрос на выборку или манипуляцию данными, но и указать серверу базы данных, как именно следует выполнять такой запрос.
Transact-SQL
Transact-SQL является процедурным языком, позволяющим указать базе данных, как и где искать и обрабатывать данные. Стандартный SQL не является процедурным языком, поэтому при его использовании способы извлечения и обработки данных база данных выбирает сама. В Transact-SQL имеются, в частности, возможности объявлять локальные и глобальные переменные, курсоры, программно обрабатывать ошибки, создавать и сохранять триггеры и другие процедуры, использовать циклы, знаки подстановки, преобразовывать одни типы данных в другие, создавать итоговые отчеты.
Вот пример оператора Transact-SQL:
IF (SELECT AVG(COST) FROM PRODUCTSJTBL) > 50
BEGIN
PRINT "ПОНИЗИТЬ ВСЕ ЦЕНЫ НА 10 ПРОЦЕНТОВ."
Читать дальше