Использование разделителей и символов SQL


Разделителями в SQL также являются запятая, точка, точка с запятой и двоеточие. Описанные ниже разделители применяются с небольшими отличиями в ANSI SQL и в Jet SQL. Так в Jet SQL:

  • запятые используются для разделения членов списков, например имен полей: Имя, Фамилия, Отчество, [Год рождения}, Адрес, Город, Индекс;
  • для задания имен полей, которые содержат недопустимые символы (например, пробелы) применяются квадратные скобки: [Дата размещения];
  • если в запрос включены поля нескольких таблиц, то включается полное имя поля, которое состоит из двух частей: имени таблицы и имени поля, между которыми используется разделитель — точка: Заказы. КодЗаказа;
  • строки в ANSI SQL заключаются в одиночные кавычки (‘). Строки в Jet SQL можно заключать как в одиночные, так и в двойные кавычки ("). При использовании инструкций SQL в процедурах VBA рекомендуется ставить одиночные кавычки;
  • в конце инструкции Jet SQL обязательно ставится точка с запятой; П в инструкциях Jet SQL нельзя использовать переменные.

В инструкциях SQL, разбитых на несколько строк, часто встречаются отступы, которые указывают на продолжение предыдущей строки или на фрагмент, связанный с расположенным на предыдущей строке ключевым словом.
 
Использование инструкций SQL для создания запросов
Есть несколько типов запросов, которые невозможно создать с помощью Конструктора запросов. Их можно создать, вводя соответствующую инструкцию в окне SQL. Для этого нужно:

  1. Создать новый запрос с использованием Конструктора запросов.
  2. Закрыть диалоговое окно Добавление таблицы (Show Table), не добавляя таблиц.
  3. Выбрать команду Вид, Режим SQL (View, SQL View) для вывода окна SQL.
  4. Удалить весь текст, который может быть выведен в окне SQL (обычно по умолчанию ВЫВОДИТСЯ SELECT DISTINCTROW;).
  5. Ввести в окне инструкцию SQL, используя для ввода новой строки комбинацию клавиш <Ctrl>+<Enter>.
  6. Нажать на панели инструментов кнопку Запуск (Run), чтобы вывести результирующее множество записей.

Ниже рассматриваются запросы, которые могут быть введены только в режиме SQL.
Создание запросов на объединение записей
Этот тип запроса позволяет объединить в одном результирующем наборе результаты нескольких запросов, таблиц и инструкций SELECT. Синтаксис этого запроса следующий:
[TABLE] запрос_1 UNION [ALL] [TABLE] запрос_2 [UNION [ALL] [TABLE] запрос_п [ ... ]],
где
запрос_1, запрос_2, … запрос_п — инструкция SELECT, имя сохраненного запроса или имя сохраненной таблицы, перед которым стоит зарезервированное слово TABLE.
В каждом аргументе запрос_1 допускается применение предложения GROUP BY или HAVING для группировки возвращаемых данных. В конец последнего аргумента запрос_п можно включить предложение ORDER BY, чтобы отсортировать возвращенные данные. Таким образом, группировка записей может выполняться в каждом из объединяемых запросов или таблиц, а сортировка выполняется только в результирующем множестве записей запроса на объединение. В качестве поля для сортировки нужно указывать имена полей из первого запроса или таблицы, т. к. именно эти имена будут выступать в качестве имен полей в результирующем множестве запроса.
По умолчанию записи, повторяющиеся в объединяемых таблицах и запросах, не включаются в результирующее множество запроса. Использование предиката ALL в запросе позволяет включить все записи. Кроме того, такие запросы выполняются быстрее.
Все запросы, включенные в операцию UNION, должны отбирать одинаковое число полей; при этом типы данных и размеры полей не обязаны совпадать. Если число полей не совпадает, выводится сообщение об ошибке.
Для создания запроса на объединение существует специальная команда меню Запрос, Запрос SQL, Запрос на объединение (Query, SQL Specific, Union), которая доступна в режиме Конструктора запросов. При выполнении этой команды открывается пустое окно Режим SQL, в которое нужно ввести инструкцию.
На показана инструкция SQL, содержащая операцию UNION, для запроса "Клиенты и поставщики по городам" (Customers and Suppliers by City), который содержится в базе данных "Борей". Чтобы открыть окно SQL, откройте список запросов в окне базы данных, выделите запрос "Клиенты и поставщики по городам" и нажмите кнопку Конструктор (Design). При этом кнопка и команда меню Вид, Конструктор (View, Design View) становятся недоступными.
Результат выполнения запроса на объединение "Клиенты и поставщики по городам" приведен па .
Создание запроса к серверу
Еще одним типом запроса SQL является запрос к серверу. Он обрабатывается не процессором Jet, как все остальные запросы, а непосредственно передается на сервер базы данных, к которому выполняется обращение, например Microsoft SQL
Server. Главной особенностью этого запроса является то, что он должен использовать синтаксис языка SQL сервера базы данных (для Microsoft SQL Server это — Transact-SQL). Создается этот запрос аналогично запросу на объединение с помощью команды меню Запрос, Запрос SQL, К серверу (Query, SQL Specific, Pass-Through). Запросы к серверу применяются в приложениях, имеющих архитектуру "клиент-сервер".
Управляющие запросы
Управляющие запросы относятся к третьему типу запросов, которые создаются в окне Режим SQL и используют инструкции Jet SQL. Такие запросы позволяют работать с таблицами и индексами — создавать, изменять и удалять таблицы, создавать индексы.
Инструкции SQL, которые при этом используются, относятся к подмножеству SQL, называющемуся DDL — язык определения данных. Набор этих инструкций в Jet SQL существенно сокращен по сравнению со стандартом ANSI SQL, т. к. многие операции можно выполнить с помощью других средств (команд меню или окна базы данных).
В обычном режиме можно использовать следующие инструкции SQL:

  • CREATE TABLE — создает таблицу;
  • CONSTRAINT — создает уникальный индекс, в том числе по первичному ключу, а также применяется для установления отношений между таблицами;
  • ALTER TABLE — изменяет структуру таблицы, созданной с помощью инструкции CREATE TABLE;
  • DROP — удаляет таблицу из базы данных или удаляет индексы в таблице;
  • CREATE INDEX — создает индекс для поля или группы полей.

В режиме ANSI SQL-92 возможны дополнительно следующие инструкции:

  • CREATE PROCEDURE — создает хранимую процедуру; П CREATE VIEW — создает новое представление;
  • CREATE USER или GROUP — создает одного или нескольких новых пользователей или группу;
  • ADD USER — добавляет одного или нескольких существующих пользователей к существующей группе;
  • DROP USER или GROUP — удаляет одного или нескольких существующих пользователей или групп или исключает одного или нескольких существующих пользователей из существующей группы;
  • ALTER USER или DATABASE — изменяет пароль существующего пользователя или базы данных;
  • GRANT — предоставляет конкретные привилегии существующему пользователю или группе;
  • REVOKE — отменяет конкретные привилегии существующего пользователя или группы.

Замечание
Запросы данного типа обычно используются в программах на языке Visual Basic для приложений (VBA) тогда, когда нужно выполнить соответствующие операции программно. В противном случае для этого гораздо удобнее и быстрее применять средства пользовательского интерфейса Access.
В рамках данной книги мы не описываем подробно синтаксис всех инструкций SQL. Заинтересованному читателю рекомендуется обратиться к разделу Справочник Microsoft Jet SQL Справочной системы Access.