Просмотр инструкции sql в запросе access

totn Access


This MSAccess tutorial explains how to view the SQL for a query in Access 2007 (with screenshots and step-by-step instructions).

Question: In Microsoft Access 2007, I’ve created a query and I want to view the SQL for this query. How do I do this?

Answer:First, you need to open the query in Design View. To do this, right-click on the Query in the left window and select Design View from the popup menu.

Microsoft Access

Next, select the Design tab in the toolbar at the top of the screen. Then click on the View button in the Results group. Select SQL View from the popup menu.

Microsoft Access

The SQL should now be displayed for the Query as follows:

Microsoft Access

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

В этой статье

Формы и отчеты

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

Примечание    Выражения также можно использовать в формах или отчетах при выделении данных с помощью условного форматирования.

Операции с текстом

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

Выражение

Результат

=»N/A»

Отображает «Н/Д».

=[FirstName] & » » & [LastName]

Отображает значения, хранящиеся в полях таблицы FirstName и LastName. В данном примере оператор & используется для объединения значения в поле «Имя», пробела (заключенного в кавычки) и значения в поле «Фамилия».

=Left([ProductName], 1)

Функция Left используется для отображения первого знака в значении поля или элемента управления «НазваниеТовара».

=Right([AssetCode], 2)

Функция Right используется для отображения последних 2 знаков в значении поля или элемента управления «КодТовара».

=Trim([Address])

Функция Trim используется для отображения значения в элементе управления «Адрес» и удаления всех пробелов в начале или конце строки.

=IIf(IsNull([Region]), [City] & » » & [PostalCode], [City] & » » & [Region] & » » & [PostalCode])

Функция IIf используется для отображения значений элементов управления City и PostalCode, если элемент управления Region имеет пустое значение; в противном случае отображаются значения в элементах управления City, Region и PostalCode, разделенные пробелами.

=[City] & (» » + [Region]) & » » & [PostalCode]

Оператор + и распространение значений Null используются для отображения значений в элементах управления «Город» и «Индекс», если элемент управления или поле «Область» имеет значение Null; в противном случае отображаются значения в элементах управления или полях «Город», «Область» и «Индекс», разделенные пробелами.

Распространение значений Null означает, что если хотя бы один компонент выражения возвращает значение Null, то и все выражение также возвращает Null. Оператор + поддерживает распространение значений Null, а оператор & — нет.

К началу страницы

Колонтитулы

Для отображения или печати номеров страниц в отчетах или формах используются свойства Page и Pages. Свойства Page и Pages доступны только во время печати или предварительного просмотра, поэтому они не отображаются на странице свойств формы или отчета. Обычно эти свойства используются путем перемещения текстового поля в область верхнего или нижнего колонтитула в форме или отчете и применения выражения, например из приведенной ниже таблицы.

Дополнительные сведения об использовании колонтитулов в формах и отчетах см. в статье Вставка номеров страниц в форму или отчет.

Выражение

Результат

=[Page]

1

=»Page » & [Page]

Страница 1

=»Page » & [Page] & » of » & [Pages]

Страница 1 из 3

=[Page] & » of » & [Pages] & » Pages»

1 из 3 стр.

=[Page] & «/» & [Pages] & » Pages»

1/3 стр.

=[Country/region] & » — » & [Page]

UK — 1

=Format([Page], «000»)

001

=»Printed on: » & Date()

Напечатано: 12/31/17

К началу страницы

Арифметические операции

Выражения могут использоваться для сложения, вычитания, умножения и деления значений в нескольких полях или элементах управления. Вы также можете применять их для выполнения арифметических операций над датами. Например, допустим, что в таблице есть поле даты и времени RequiredDate. В поле или элементе управления, связанном с полем, выражение =[RequiredDate] — 2 будет возвращать значение даты и времени, предшествующее на два дня значению в поле RequiredDate.

Выражение

Результат

=[Subtotal]+[Freight]

Сумма значений в полях или элементах управления «СуммаЗаказа» и «СтоимостьДоставки».

=[RequiredDate]-[ShippedDate]

Интервал между значениями даты в полях или элементах управления «Срок» и «ДатаПоставки».

=[Price]*1.06

Результат умножения значения поля или элемента управления «Цена» на 1,06 (добавление 6 процентов к значению «Цена»).

=[Quantity]*[Price]

Результат умножения значений в полях или элементах управления Quantity и Price.

=[EmployeeTotal]/[CountryRegionTotal]

Частное от деления значений полей или элементов управления EmployeeTotal и CountryRegionTotal.

Примечание    Если в выражении используются арифметические операторы (+, , *, и /) и один из элементов управления имеет значение Null, результатом всего выражения будет значение Null. Это называется распространением значений Null. Если хотя бы одна из записей в элементах управления, используемых в выражении, может иметь значение Null, следует преобразовать его в нуль при помощи функции Nz, например: =Nz([Subtotal])+Nz([Freight]).

К началу страницы

Значения в других элементах управления

Иногда требуется получить значение, хранящееся в другом месте, например в поле или элементе управления в другой форме или отчете. Для возвращения значения из другого поля или элемента управления можно использовать выражение.

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

Выражение

Результат

=Forms![Orders]![OrderID]

Значение элемента управления «КодЗаказа» в форме «Заказы».

=Forms![Orders]![Orders Subform].Form![OrderSubtotal]

Значение элемента управления «ОтпускнаяЦена» из подчиненной формы «Заказано» в форме «Заказы».

=Forms![Orders]![Orders Subform]![ProductID].Column(2)

Значение третьего столбца поля «КодТовара» (список из нескольких столбцов в подчиненной форме «Заказано») в форме «Заказы». (Обратите внимание, что индекс 0 является ссылкой на первый столбец, 1 — на второй и т. д.).

=Forms![Orders]![Orders Subform]![Price] * 1.06

Результат умножения значения элемента управления «Цена» подчиненной формы «Заказано» в форме «Заказы» на 1,06 (добавление 6 процентов к значению «Цена»).

=Parent![OrderID]

Значение элемента управления «КодЗаказа» в форме, которая является главной для текущей подчиненной формы.

Ниже приведены выражения, которые используются в вычисляемых элементах управления в отчетах. Выражения используют свойство Отчет.

Выражение

Результат

=Report![Invoice]![OrderID]

Значение элемента управления «КодЗаказа» в отчете «Счет».

=Report![Summary]![Summary Subreport]![SalesTotal]

Значение элемента управления «Сумма заказов» из подчиненного отчета «Подотчет» в отчете «Итоги».

=Parent![OrderID]

Значение элемента управления «КодЗаказа» в отчете, который является главным для текущего подчиненного отчета.

К началу страницы

Количество значений, сумма и среднее

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

В таблице ниже приведены примеры использования функций Avg, Count и Sum.

Выражение

Описание

=Avg([Freight])

Функция Avg используется для отображения средних значений поля таблицы или элемента управления «СтоимостьДоставки».

=Count([OrderID])

Функция Count используется для отображения числа записей в элементе управления «КодЗаказа».

=Sum([Sales])

Функция Sum используется для отображения суммы значений в элементе управления «Продажи».

=Sum([Quantity]*[Price])

Функция Sum используется для отображения суммы произведения значений элементов управления «Количество» и «Цена».

=[Sales]/Sum([Sales])*100

Отображает процент продаж, полученный путем деления общего значения «Продажи» на сумму значений этого элемента управления.

Если для свойства Format (Формат) элемента управления задано значение Percent (Процентный), не включайте в выражение операцию *100.

Дополнительные сведения об использовании агрегатных функций и вычислении итоговых значений в полях и столбцах см. в статьях Суммирование данных с помощью запроса, Подсчет данных при помощи запроса, Отображение итогов по столбцу в таблице с помощью строки «Итог» и Отображение итогов по столбцу в таблице.

К началу страницы

Агрегатные функции SQL

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

Выражение

Описание

=DLookup(«[ContactName]», «[Suppliers]», «[SupplierID] = » & Forms(«Suppliers»)(«[SupplierID]»))

Функция DLookup используется для возвращения значения из полей ContactName в таблице «Поставщики», для которых значение в поле SupplierID в таблице совпадает со значением элемента управления SupplierID в форме «Поставщики».

=DLookup(«[ContactName]», «[Suppliers]», «[SupplierID] = » & Forms![New Suppliers]![SupplierID])

Функция DLookup используется для возвращения значения из полей ContactName в таблице «Поставщики», для которых значение в поле SupplierID в таблице совпадает со значением элемента управления SupplierID в форме «НовыеПоставщики».

=DSum(«[OrderAmount]», «[Orders]», «[CustomerID] = ‘RATTC'»)

Функция DSum используется для возвращения значений из поля OrderAmount таблицы «Заказы», для которых значение поля CustomerID равно «РАТТС».

=DCount(«[Retired]»,»[Assets]»,»[Retired]=Yes»)

Функция DCount возвращает количество значений Yes в поле Retired (логическое поле) в таблице Assets.

К началу страницы

Операции с датами

Отслеживание дат и времени — одно из основных действий при работе с базами данных. Например, вы можете вычислить, сколько дней прошло с момента выписки счета, чтобы определить срок дебиторской задолженности. Можно задать различные форматы даты и времени, как показано в следующей таблице.

Выражение

Описание

=Date()

Функция Date используется для отображения текущей даты в формате mm-dd-yy, где mm — месяц (от 1 до 12), dd — день (от 1 до 31), а yy — последние две цифры года (от 1980 до 2099).

=Format(Now(), «ww»)

Функция Format используется для отображения номера недели в году, на которую приходится текущая дата, где ww — номер недели от 1 до 53.

=DatePart(«yyyy», [OrderDate])

Функция DatePart используется для отображения значения года, содержащегося в элементе управления «ДатаЗаказа», в четырехзначном формате.

=DateAdd(«y», -10, [PromisedDate])

Функция DateAdd используется для отображения даты, предшествующей на 10 дней значению даты в элементе управления «УсловленнаяДата».

=DateDiff(«d», [OrderDate], [ShippedDate])

Функция DateDiff используется для отображения разницы в днях между значениями дат в элементах управления «ДатаЗаказа» и «ДатаПоставки».

=[InvoiceDate] + 30

Арифметическая операция используется для вычисления даты, которая на 30 дней позднее даты в поле или элементе управления InvoiceDate.

К началу страницы

Условия для выбора одного из двух значений

В примерах выражений, приведенных в следующей таблице, используется функция IIf для возвращения одного из двух возможных значений. Функция IIf имеет три аргумента. Первый аргумент — это выражение, которое должно возвращать значения True или False. Второй аргумент — это значение, возвращаемое в случае, если выражение имеет значение True, а третий аргумент — значение, возвращаемое в случае, если выражение имеет значение False.

Выражение

Описание

=IIf([Confirmed] = «Yes», «Order Confirmed», «Order Not Confirmed»)

Функция IIf используется для отображения сообщения «Order Confirmed», если элемент управления Confirmed имеет значение Yes; в противном случае отображается сообщение «Order Not Confirmed.».

=IIf(IsNull([Country/region]), » «, [Country])

Функции IIf и IsNull используются для отображения пустой строки, если элемент управления «Страна» имеет значение Null; в противном случае выводится его значение.

=IIf(IsNull([Region]), [City] & » » & [PostalCode], [City] & » » & [Region] & » » & [PostalCode])

Функции IIf и IsNull используются для отображения значений элементов управления «Город» и «Индекс», если элемент управления «Область» имеет значение Null; в противном случае отображаются значения в полях или элементах управления «Город», «Область» и «Индекс».

=IIf(IsNull([RequiredDate]) Or IsNull([ShippedDate]), «Check for a missing date», [RequiredDate] — [ShippedDate])

Функции IIf и IsNull используются для отображения сообщения «Проверьте отсутствующую дату», если результат вычитания значения элемента управления «Срок» из значения «ДатаПоставки» равен пустому значению (Null); в противном случае отображается интервал между значениями дат «Срок» и «ДатаПоставки».

К началу страницы

Запросы и фильтры

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

Условия отбора используются в запросе для ограничения числа отображаемых записей. Например, оператор Between применяется для задания начальной и конечной даты и ограничения результатов запроса только теми заказами, которые были поставлены в указанный период.

Ниже представлены примеры выражений для использования в запросах.

Операции с текстом

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

Выражение

Описание

FullName: [FirstName] & » » & [LastName]

Создание поля «ПолноеИмя», отображающего значения полей «Имя» и «Фамилия», разделенные пробелом.

Address2: [City] & » » & [Region] & » » & [PostalCode]

Создание поля «Адрес2», отображающего значения полей «Город», «Область» и «Индекс», разделенные пробелами.

ProductInitial: Left([ProductName], 1)

Создание поля ProductInitial и отображение в нем с помощью функции Left первого знака значения в поле ProductName.

TypeCode: Right([AssetCode], 2)

Создание поля TypeCode и отображение с помощью функции Right последних двух знаков в значении поля AssetCode.

AreaCode: Mid([Phone],2,3)

Создание поля AreaCode и отображение с помощью функции Mid трех знаков, начиная со второго, в значении поля Phone.

ExtendedPrice: CCur([Order Details].[Unit Price]*[Quantity]*(1-[Discount])/100)*100

Присвоение вычисляемому полю имени ExtendedPrice и вычисление итога по позиции с примененной скидкой с помощью функции CCur.

К началу страницы

Арифметические операции

Выражения могут использоваться для сложения, вычитания, умножения и деления значений в нескольких полях или элементах управления. Вы также можете выполнять арифметические операции над датами. Например, допустим, что существует поле даты и времени с названием RequiredDate. Выражение =[RequiredDate] — 2 возвращает значение даты и времени, предшествующее на два дня значению в поле «RequiredDate.

Выражение

Описание

PrimeFreight: [Freight] * 1.1

Создание поля «СрочнаяДоставка» и отображение стоимости доставки с 10-процентной надбавкой.

OrderAmount: [Quantity] * [UnitPrice]

Создание поля «ОбъемЗаказа» и отображение произведения значений полей «Количество» и «Цена».

LeadTime: [RequiredDate] — [ShippedDate]

Создание поля «ВремяДоставки» и отображение разности значений полей «Срок» и «ДатаПоставки».

TotalStock: [UnitsInStock]+[UnitsOnOrder]

Создание поля «ВсегоВНаличии» и отображение суммы значений полей «НаСкладе» и «Ожидается».

FreightPercentage: Sum([Freight])/Sum([Subtotal]) *100

Создание поля FreightPercentage и отображение стоимости доставки в процентах от итога. Функция Sum используется для вычисления суммы всех значений поля Freight, после чего это значение делится на сумму всех значений поля Subtotal.

Чтобы использовать это выражение, следует преобразовать запрос на выборку в итоговый запрос, так как в бланке запроса понадобится строка Итог и необходимо задать в качестве значения ячейки Итог этого поля выражение.

Дополнительные сведения о создании итоговых запросов см. в статье Суммирование данных с помощью запроса.

Если для свойства Format (Формат) поля задано значение Percent (Процентный), не включайте операцию *100.

Дополнительные сведения об использовании агрегатных функций и вычислении итоговых значений в полях и столбцах см. в статьях Суммирование данных с помощью запроса, Подсчет данных при помощи запроса, Отображение итогов по столбцу в таблице с помощью строки «Итог» и Отображение итогов по столбцу в таблице.

К началу страницы

Операции с датами

Почти во всех базах данных хранятся значения даты и времени. Для работы со значениями даты и времени в Access для полей таблицы задается тип данных «Дата/время». В Access можно выполнять автоматические арифметические операции с датами. Например, вы можете вычислить, сколько дней прошло с момента выписки счета, чтобы определить срок дебиторской задолженности.

Выражение

Описание

LagTime: DateDiff(«d», [OrderDate], [ShippedDate])

Создание поля LagTime и отображение с помощью функции DateDiff числа дней между датой размещения заказа и датой поставки.

YearHired: DatePart(«yyyy»,[HireDate])

Создание поля «ГодНайма» и отображение с помощью функции DatePart года найма сотрудника.

MinusThirty: Date( )- 30

Создание поля MinusThirty и отображение с помощью функции Date даты за 30 дней до текущей.

К началу страницы

Агрегатные функции SQL

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

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

Для вычисления итогового значения часто требуется создать запрос. Например, для суммирования значений группы следует создать итоговый запрос. Чтобы включить итоговый запрос, на бланке запроса выберите вариант Итоги в меню Представление.

Выражение

Описание

RowCount: Count(*)

Создание поля RowCount и подсчет с помощью функции Count числа записей в запросе, включая записи с пустыми полями.

FreightPercentage: Sum([Freight])/Sum([Subtotal]) *100

Создание поля FreightPercentage и вычисление процента стоимости доставки для каждого итога. Для этого сумма всех значений поля Freight делится на сумму всех значений поля Subtotal. (В этом примере используется функция Sum.)

Это выражение следует использовать с итоговым запросом. Если для свойства Format поля задано значение Percent, не включайте операцию *100.

Дополнительные сведения о создании итоговых запросов см. в статье Подсчет данных при помощи запроса.

AverageFreight: DAvg(«[Freight]», «[Orders]»)

Создание поля AverageFreight и вычисление с помощью функции DAvg средней стоимости доставки по всем заказам, объединенным в итоговом запросе.

К началу страницы

Поля с недостающими данными

Приведенные ниже выражения работают с полями, которые могут не содержать данных, т. е. иметь значения Null. Значения Null встречаются довольно часто. Например, это может быть неизвестная цена для нового товара или значение, которое сотрудник забыл добавить в отчет. Возможность поиска и обработки значений Null — это важная часть операций с базами данных, и выражения, приведенные в следующей таблице, демонстрируют некоторые способы работы с такими значениями.

Выражение

Описание

CurrentCountryRegion: IIf(IsNull([CountryRegion]), » «, [CountryRegion])

Создание поля CurrentCountryRegion и отображение с помощью функций IIf и IsNull пустой строки в поле, если поле CountryRegion содержит значение Null; в противном случае отображается значение поля CountryRegion.

LeadTime: IIf(IsNull([RequiredDate] — [ShippedDate]), «Check for a missing date», [RequiredDate] — [ShippedDate])

Создание поля LeadTime и отображение с помощью функций IIf и IsNull сообщения «Проверьте отсутствующую дату», если одно из полей RequiredDate или ShippedDate имеет значение Null; в противном случае отображается разность значений полей.

SixMonthSales: Nz([Qtr1Sales]) + Nz([Qtr2Sales])

Создание поля SixMonthSales и отображение итоговых значений в полях Qtr1Sales и Qtr2Sales с помощью функции Nz для преобразования всех значений Null в нули.

К началу страницы

Создание вычисляемых полей с помощью вложенных запросов

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

Выражение

Описание

Cat: (SELECT [CategoryName] FROM [Categories] WHERE [Products].[CategoryID]=[Categories].[CategoryID])

Создание поля Cat и отображение значения поля CategoryName, если значение поля CategoryID из таблицы «Категории» совпадает со значением поля CategoryID из таблицы «Товары».

К началу страницы

Поиск совпадений в текстовых значениях

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

Поле

Выражение

Описание

ShipCity

«London»

Отображает заказы, отправленные в Киев.

ГородНазначения

«London» Or «Hedge End»

Оператор Or используется для отображения заказов, отправленных в Лондон или в Хедж-Энд.

ShipCountryRegion

In(«Canada», «UK»)

Оператор In используется для отображения заказов, отправленных в Канаду или в Соединенное Королевство.

ShipCountryRegion

Not «USA»

Оператор Not используется для отображения заказов, отправленных во все страны, кроме США.

ProductName

Not Like «C*»

Оператор Not и подстановочный знак * используются для отображения товаров, названия которых не начинаются с буквы C.

CompanyName

>=»N»

Отображение заказов, доставленных в компании, названия которых начинаются с букв от N до Z.

ProductCode

Right([ProductCode], 2)=»99″

Функция Right используется для отображения заказов, последние цифры в значении поля ProductCode которых равны 99.

ShipName

Like «S*»

Отображение заказов, доставленных клиентам, чьи имена начинаются с буквы S.

К началу страницы

Условия для дат

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

Поле

Выражение

Описание

ShippedDate

#2/2/2017#

Отображает заказы, отправленные 2 февраля 2017 г.

ShippedDate

Date()

Отображает заказы, отправленные сегодня.

RequiredDate

Between Date( ) And DateAdd(«m», 3, Date( ))

Оператор Between…And и функции DateAdd и Date используются для отображения заказов, которые должны быть выполнены в интервале между текущей датой и датой, отстоящей от нее на три месяца.

OrderDate

< Date( ) — 30

Функция Date используется для отображения заказов, которым больше 30 дней.

OrderDate

Year([OrderDate])=2017

Функция Year используется для отображения заказов, сделанных в 2017 г.

OrderDate

DatePart(«q», [OrderDate])=4

Функция DatePart используется для отображения заказов на четвертый квартал.

OrderDate

DateSerial(Year ([OrderDate]), Month([OrderDate])+1, 1)-1

Функции DateSerial, Year и Month используются для отображения заказов на последний день каждого месяца.

OrderDate

Year([OrderDate])= Year(Now()) And Month([OrderDate])= Month(Now())

Функции Year и Month и оператор And используются для отображения заказов для текущего года и месяца.

ShippedDate

Between #1/5/2017# And #1/10/2017#

Оператор Between…And используется для отображения заказов, отправленных не ранее 5 и не позднее 10 января 2017 г.

RequiredDate

Between Date( ) And DateAdd(«M», 3, Date( ))

Оператор Between…And используется для отображения заказов, которые должны быть выполнены в течение трех месяцев.

BirthDate

Month([BirthDate])=Month(Date())

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

К началу страницы

Поиск записей с недостающими данными

Приведенные в следующей таблице выражения работают с полями, в которых могут отсутствовать данные, т. е. содержаться значения Null или пустые строки. Значение Null означает отсутствие данных; оно не подразумевает наличие нулевого или какого-либо иного значения. В Access поддерживается концепция отсутствующих данных, т. к. это важно для целостности базы данных. В действительности сведения часто отсутствуют, хотя иногда только временно (например, если цена на новый товар еще не определена). Поэтому в базе данных, моделирующей некоторый реальный объект, например компанию, должна быть возможность хранения записей с отсутствующими сведениями. Для определения того, содержится ли в поле значение Null, используется функция IsNull, а функция Nz применяется для преобразования значений Null в нули.

Поле

Выражение

Описание

ShipRegion

Is Null

Отображение заказов для клиентов, у которых отсутствует (равно Null) значение в поле ShipRegion.

ShipRegion

Is Not Null

Отображение заказов для клиентов, у которых есть значение в поле ShipRegion.

Факс

«»

Отображение заказов для клиентов, у которых нет факсимильного аппарата, то есть для тех клиентов, у которых поле «Факс» содержит пустую строку, а не значение Null.

К началу страницы

Поиск совпадений в шаблонах записей с помощью оператора Like

Оператор Like обеспечивает гибкий поиск строк, соответствующих определенному шаблону, так как Like можно использовать с подстановочными знаками. Например, подстановочный знак * (звездочка) соответствует любой последовательности знаков, что упрощает поиск всех имен, начинающихся с определенной буквы. Например, используйте выражение Like «S*» для поиска всех имен, имена которых начинаются с буквы с. Дополнительные сведения см. в статье оператор Like.

Поле

Выражение

Описание

ShipName

Like «S*»

Поиск всех записей, значение в поле «ИмяПолучателя» которых начинается с буквы С.

ИмяПолучателя

Like «*Imports»

Поиск всех записей, значение в поле «ИмяПолучателя» которых заканчивается слогом «ов».

ShipName

Like «[A-D]*»

Поиск всех записей, значение в поле ShipName которых начинается с букв А, Б, В или Г.

ShipName

Like «*ar*»

Поиск всех записей, значение в поле ShipName которых включает сочетание букв «ар».

ИмяПолучателя

Like «Григорий Верны?»

Поиск всех записей, значение в поле «ИмяПолучателя» которых начинается с «Григорий» и содержит вторую строку из 6 букв, в которой первые 5 букв — «Верны», а последняя буква неизвестна.

ИмяПолучателя

Not Like «A*»

Поиск всех записей, значение в поле ShipName которых не начинается с буквы A.

К началу страницы

Подбор строк с помощью агрегатных функций SQL

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

Поле

Выражение

Описание

Freight

> (DStDev(«[Freight]», «Orders») + DAvg(«[Freight]», «Orders»))

Функции DStDev и DAvg используются для отображения всех заказов, для которых стоимость доставки превышает среднюю с учетом стандартного отклонения.

Quantity

> DAvg(«[Quantity]», «[Order Details]»)

Функция DAvg используется для отображения заказанных товаров, количество которых превышает среднее.

К началу страницы

Подбор полей с помощью вложенных запросов

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

Поле

Выражение

Отображает

UnitPrice

(SELECT [UnitPrice] FROM [Products] WHERE [ProductName] = «Aniseed Syrup»)

Товары, цена которых равна цене анисового сиропа.

Цена

>(SELECT AVG([UnitPrice]) FROM [Products])

Товары, цена которых превышает среднюю.

Зарплата

> ALL (SELECT [Salary] FROM [Employees] WHERE ([Title] LIKE «*Manager*») OR ([Title] LIKE «*Vice President*»))

Заработная плата каждого торгового представителя, превышающая заработную плату сотрудников, занимающих должность менеджера или вице-президента.

ОбъемЗаказа: [Цена] * [Количество]

> (SELECT AVG([UnitPrice] * [Quantity]) FROM [Order Details])

Заказы, итоговая сумма которых превышает среднее значение для заказов.

К началу страницы

Запросы на обновление

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

Дополнительные сведения см. в статье Создание запроса на обновление.

Поле

Выражение

Результат

Название

«Salesperson»

Изменяет текстовое значение на «Продавец».

ProjectStart

#8/10/17#

Изменяет значение даты на 10 августа 2017 г.

Поддержка прекращена.

Yes

Изменяет в логическом поле значения «Нет» на «Да».

ИнвНомер

«PN» & [PartNumber]

Добавляет строку «PN» к началу каждого инвентарного номера.

ИтогПозиции

[UnitPrice] * [Quantity]

Вычисляет произведение значений «Цена» и «Количество».

СтоимостьДоставки

[Freight] * 1.5

Увеличивает стоимость доставки на 50 процентов.

Продажи

DSum(«[Quantity] * [UnitPrice]», «Order Details», «[ProductID]=» & [ProductID])

Если значение поля ProductID в текущей таблице совпадает со значением поля ProductID в таблице «Заказано», обновляет итоговые значения продаж, рассчитываемые как произведение полей Quantity и UnitPrice.

ShipPostalCode

Right([ShipPostalCode], 5)

Обрезает левые знаки в поле, оставляя пять правых знаков.

UnitPrice

Nz([UnitPrice])

Заменяет значение Null (неизвестное или неопределенное значение) на нуль (0) в поле UnitPrice.

К началу страницы

Инструкции SQL

В Access в качестве языка запросов используется SQL. Каждый запрос, созданный в режиме конструктора, можно также представить на языке SQL. Чтобы просмотреть инструкцию SQL для любого запроса, выберите в меню Представление команду Режим SQL. В приведенной ниже таблице содержатся примеры инструкций SQL, использующие выражения.

Инструкция SQL, использующая выражение

Результат

SELECT [FirstName],[LastName] FROM [Employees] WHERE [LastName]=»Danseglio»;

Выводит значения полей «Имя» и «Фамилия» для сотрудников, имеющих фамилию Бутусов.

SELECT [ProductID],[ProductName] FROM [Products] WHERE [CategoryID]=Forms![New Products]![CategoryID];

Выводит значения полей «КодТовара» и «НазваниеТовара» из таблицы «Товары» для записей, у которых значение поля «КодТипа» совпадает со значением элемента управления «КодТипа» в открытой форме «Новые товары».

SELECT Avg([ExtendedPrice]) AS [Average Extended Price] FROM [Order Details Extended] WHERE [ExtendedPrice]>1000;

Вычисляет среднюю отпускную цену заказов, у которых значение в поле «ОтпускнаяЦена» превышает 1000, и отображает ее в поле «Средняя отпускная цена».

SELECT [CategoryID], Count([ProductID]) AS [CountOfProductID] FROM [Products] GROUP BY [CategoryID] HAVING Count([ProductID])>10;

Отображает в поле CountOfProductID общее количество товаров для типов, содержащих более 10 товаров.

К началу страницы

Выражения для таблиц

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

Значения по умолчанию для полей

При разработке базы данных может потребоваться присвоить значение по умолчанию полю или элементу управления. Затем при создании новой записи с этим полем или объектом, содержащим элемент управления, Access будет подставлять соответствующее значение. Выражения в приведенной ниже таблице являются примерами значений по умолчанию для поля или элемента управления. Если элемент управления связан с полем таблицы, которое имеет значение по умолчанию, значение по умолчанию элемента управления имеет приоритет.

Поле

Выражение

Значение поля по умолчанию

Quantity

1

1

Область

«MT»

Московская

Область

«New York, N.Y.»

Пушкино, Московская область (Если значение содержит знаки пунктуации, его нужно заключить в прямые кавычки).

Факс

«»

Пустая строка, чтобы обратить внимание на то, что данное поле должно быть пустым, а не содержащим значение Null.

Дата заказа

Date( )

Текущая дата

Срок

Date() + 60

Дата, отстоящая от текущей на 60 дней

К началу страницы

Правило проверки поля.

С помощью выражения можно создать правило проверки для поля или элемента управления. Затем при вводе данных в поле или элемент управления эти данные будут проверяться на соответствие условию. Чтобы создать правило проверки, измените свойство ValidationRule поля или элемента управления. Следует также задать значение для свойства ValidationText, которое содержит текст, отображаемый Access при нарушении правила проверки. Если значение для свойства ValidationText не задано, будет выводиться сообщение об ошибке, используемое по умолчанию.

Ниже приведены примеры выражений для задания правил проверки в свойстве ValidationRule и соответствующий текст в свойстве ValidationText.

Свойство ValidationRule

Свойство ValidationText

<> 0

Введите значение, отличное от нуля.

0 Or > 100

Значение должно быть либо равно 0, либо больше 100.

Like «K???»

Значение должно содержать четыре знака и начинаться с буквы K.

< #1/1/2017#

Введите дату, предшествующую 01.01.2017.

>= #1/1/2017# And < #1/1/2008#

Укажите дату в 2017 г.

Дополнительные сведения см. в статье Создание условия на значение для проверки данных в поле.

К началу страницы

Выражения для макросов

В некоторых случаях выполнять макрокоманду или набор макрокоманд в макросе нужно только в том случае, если выполнено определенное условие. Предположим, вы хотите, чтобы макрокоманда выполнялась только в том случае, если значение текстового поля счетчика равно 10. Задайте выражение со следующим условием в столбце Условие макроса:

[Counter]=10

Как и в случае со свойством Validation Rule, выражение в столбце Условие является условным выражением. Оно должно возвращать логическое значение True или False. Макрокоманда будет выполнена, только если условие возвращает значение True.

Совет.    Чтобы временно пропустить макрокоманду, введите в качестве условия False. Это может быть полезно, когда вы пытаетесь найти проблемы в макросе.

Используйте это выражение для выполнения действия.

If

[City]=»Paris»

Поле «Город» в форме, из которой запускается макрос, имеет значение «Париж».

DCount(«[OrderID]», «Orders») > 35

Количество записей в поле «КодЗаказа» таблицы «Заказы» превышает 35.

DCount(«*», «[Order Details]», «[OrderID]=» & Forms![Orders]![OrderID]) > 3

В таблице «Заказано» есть больше трех записей, у которых значение поля OrderID совпадает со значением поля OrderID в форме «Заказы».

[ShippedDate] Between #2-Feb-2017# And #2-Mar-2017#

Значение поля ShippedDate в форме, из которой запускается макрос, попадает в интервал со 2 февраля по 2 марта 2017 г.

Forms![Products]![UnitsInStock] < 5

Значение поля «НаСкладе» в форме «Товары» меньше 5.

IsNull([FirstName])

Поле FirstName в форме, из которой запускается макрос, имеет значение Null (не заполнено). Это выражение эквивалентно следующему: [Имя] Is Null.

[CountryRegion]=»UK» And Forms![SalesTotals]![TotalOrds] > 100

Поле CountryRegion в форме, из которой запускается макрос, содержит значение «Литва», а значение поля TotalOrds в форме SalesTotals превышает 100.

[CountryRegion] In («France», «Italy», «Spain») And Len([PostalCode])<>5

Поле CountryRegion в форме, из которой запускается макрос, имеет значение France, Italy или Spain, а почтовый индекс не содержит 5 символов.

MsgBox(«Confirm changes?»,1)=1

Нажмите кнопку ОК в диалоговом окне функции MsgBox. Если нажата кнопка Отмена, эта макрокоманда будет пропущена.

К началу страницы

Мастер запросов и Конструктор — всего лишь визуальные инструменты для создания запросов. Любой запрос, созданный в Access с помощью визуальных инструментов, можно просмотреть в режиме SQL (пример 24.1). В этом режиме запрос отображается как запись на языке SQL (англ. Structured Query Language — структурированный язык запросов).

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

Некоторые возможности языка SQL:

1. Создание, изменение и удаление таблиц БД. 
2. Выборка информации из БД. 
3. Добавление записей в таблицу БД. 
4. Редактирование и удаление записей в таблице БД.

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

Достоинства языка SQL:

1. Декларативность — указывает, какие операции нужно выполнить. Способ их реализации выбирается автоматич  ески. 
2. Наличие международных стандартов.
3. Независимость от конкретной СУБД.

Недостатки языка SQL:

1. Стандарт языка сложен и объемен.
2. Возможность отступления от стандарта (многие компании вносят свои изменения в язык).

Синтаксис SQL близок к естественному английскому языку. Команды SQL выглядят как обычные предложения английского языка и просты в понимании.

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

Если идентификатор содержит пробелы, то он заключается в квадратные скобки (пример 24.3).

В Access используется интерактивная версия языка SQL — Microsoft Jet SQL. Чтобы создать запрос SQL в Access (пример 24.4), необходимо:

1) перейти в меню Создание;

2) выбрать Конструктор запросов;

3) закрыть окно Добавление таблицы;

4) выбрать Режим SQL;

5) в открывшемся окне ввести текст запроса и при необходимости сохранить запрос;

6) выполнить запрос, нажав   кнопку на Панели инструментов.

В Access реализованы следующие составные части языка SQL:

1. Язык определения данных (Data Definition Language — DDL). Используется для определения структуры базы данных.
2. Язык манипулирования данными (Data Manipulation Language — DML). Предоставляет возможность выборки информации из базы данных и ее преобразования.

Пример 24.1. Представление запроса на языке SQL.

Таблица БД:

Запрос в режиме Конструктор, который позволяет найти сеансы, стоимость билетов на которые не превышает 9 р. 50 к.:

Результат запроса (режим таблицы):

Запрос SQL:

 

Язык SQL был предложен компанией IBM в начале 70-х гг. для проверки возможностей реляционной модели БД.

Разработчики языка запросов SQL:

 

Дональд Чэмбэрлин
(Donald D. Chamberlin)

Рэй Бойс
(Ray Boyce)

Первый международный стандарт языка SQL был принят в 1989 г.

В настоящее время действует стандарт, принятый в 2003 г. (SQL:2003), с некоторыми модификациями и дополнениями, внесенными позже (SQL:2008, SQL:2011, SQL:2016).

SQL является непроцедурным языком программирования. Команды SQL могут выполняться непосредственно в интерактивном режиме, а также встраиваются в базовый язык программирования, которым может быть любой стандартный язык, например C++.

Пример 24.2. В запросе SQL из примера 24.1:

Операторы

SELECT — определяет поля, которые содержат запрашиваемые данные.

FROM — определяет таблицу, содержащую поля, указанные в SELECT.

WHERE — определяет условия отбора полей, которым должны соответствовать все записи, включаемые в результаты.

Идентификаторы полей

Сеансы.Кинотеатр, Сеансы.Фильм, Сеансы.Время, Сеансы.Стоимость — содержат адрес (имя объекта БД) и название поля.

Пример 24.3. Синтаксис идентификаторов SQL.

Запрос:

SELECT Товары.[Номер склада], Товары.Наименование, Товары.Поставщик, Товары.Цена, Товары.Количество

FROM Товары

WHERE (((Товары.[Номер склада])=2))

Результат:

Пример 24.4. Создание запроса SQL в Access.

Выбор режима SQL:

Окно для ввода запроса SQL:

Ответы с готовыми решениями:

Dynamic SQL Error SQL error code=-104. Token unknown — Line11, char — 1
Доброго времени суток всем. подскажите пожалуйста, почему при выполнении SQL запроса к БД InterBase…

SQL Error Code -204
Не пойму при поптытке установить свойство PersonIBQuery.Active := True
выдает такую ошибку…

Firebird SQL error code = -303
Главная проблема в том, что в документации нигде мне не удалось найти, что это за ошибка такая…

Коллекция BB code (html, css, c++, JS? sql, с#, xml, Java, php, perl)
Подскажите где можно взять BB коды как на этом форуме, интересуют коды различных языков…

1

In a previous post, we looked at some of the core concepts behind relational databases and how data should be organised to avoid some of the pitfalls of database design such as repetition and redundancy. In this post, we will be looking at how to use Structured Query Language (SQL) to interact with our databases through classic CRUD operations (Create, Update and Delete).

What is Structured Query Language?

The fundamental job of an MS Access database (or indeed any database) is to provide a home (base) for data (data). Hence database. Data is stored in entities which are referred to in MS Access as tables and this ability to store data provides us with an opportunity to read, update, insert and delete said data at a later date. In order to work with the data we have stored, we need to be able to communicate with the database. And in order to communicate with the database, we need to use Structured Query Language (SQL).

SQL provides us with the opportunity to read data from single or even multiple tables. We can use SQL to sum, count or average values stored in the database. SQL can also be used to insert new records, update existing ones and delete unwanted ones. Let’s examine what an SQL statement might look like.

The most basic statement you can write with SQL is called a SELECT statement.

SELECT Invoices.ID, Invoices.InvoiceNo, Invoices.Date, Invoices.OrganisationID FROM Invoices 

In the above SQL statement we are retrieving the fields ID, InvoiceNo, Date and OrganisationID from an Invoices table.

Where will I find SQL?

In MS Access, SQL can be found in queries (view a query in SQL View). It can also be used in VBA to construct custom queries to manipulate data (this will be covered later in the post).

Note: In MS Access, every communication with the database uses SQL to some degree although this is not always obvious. When you create a form based off a table, the form is using SQL to communicate with the table but these interactions are buried inside MS Access.

SQL Keywords

When you use SQL to retrieve data, you are creating a query. If you take another look at the Select statement above, you will see that some of the words are in UPPER case (SELECT and FROM). These are called keywords and are fundamental to creating SQL queries.

Note: When writing SQL, it doesn’t matter if you use UPPER or lower case for the keywords. SELECT and select are treated exactly the same. There is, however, a convention to use UPPER case as it is easier to read.

There are many keywords in Structured Query Language. Here is a brief description of some of the more popular ones:

Keyword Description
SELECT Used to retrieve data from a table.
INSERT Used to add new rows of data to a table.
UPDATE Used to update existing data in a table.
DELETE Used to remove data from a table.
WHERE Used to filter out certain rows based on some criteria.
ORDER BY Used to return the data rows in a particular order based on one or more columns (fields).
JOIN, INNER JOIN & OUTER JOIN Used to join tables together on primary and foreign key fields.
DISTINCT Used to reduce the number of rows returned based on the uniqueness of a given column (field).
UNION Used to join tables together that have an identical number of columns with identical data types.

Table 1

The CRUD Operations

It is worth remembering that, the fundamental purpose of a database, is to store and manipulate data. At the very basic level there are four actions that a database is required to perform. These activities are often referred to as CRUD operations. CRUD stands for Create, Read, Update and Delete. In SQL terms, these 4 operations translate to:

  • Create = INSERT
  • Read = SELECT
  • Update = UPDATE
  • Delete = DELETE

Let’s expand on the SELECT statement.

SELECT Query

In MS Access, you can create a SQL query by either writing the code directly (SELECT field FROM table) or you can use a special interface to help construct the code for you. This special interface method is known as Query-By-Example. It can be an excellent way to generate SQL code without having to be too adept at writing it. We will begin by showing you how to use the QBE editor.

Open the Teaching Institute Software System Database if you wish to practice creating and modifying queries.

In the ribbon, click Create and then select Query Design, the Query By Example editor will open (double-click on the image to enlarge it).

Figure 1

The three areas that have been highlighted are:

  1. The Query Type button group.
  2. The Show Table Dialog Box.
  3. The Query Grid.

We are going to create a simple query that will retrieve the StudentID, First Name, Last Name and Email Address from the tblStudents table.

  • In the Show Table Dialog Box, double click tblStudents. You will see tblStudents appear in the query pane (item 1 in Figure 2).
  • Close the Show Table Dialog Box.
  • Double Click on StudentID, LastName, FirstName and EmailAddress in tblStudents in the newly added tblStudents table. You will see that these fields have been added to the query grid in the bottom half of the window (Item 2 in Figure 2). You can also click and drag the fields from the table to the query pane.

Your screen should now look something like this:

Figure 2

  • In the ribbon select Run (Item 3 in Figure 2).

The results of the query are displayed in tabular form.

Figure 3

So, where is the SQL?

The point of the Query-By-Example editor is to make it simple to create queries in MS Access. What actually happens is that MS Access converts the Query-By-Example objects into SQL. Wouldn’t it be great if you could see the generated SQL? You bet it would!

To view the SQL code:

  • Select the down arrow of the view button in the top left hand corner of the screen.

Select SQL view.

Figure 4

The generated SQL code is shown and reads:

Figure 5

The Query-By-Example editor can be used instead of writing pure SQL which is both more convenient and a useful learning tool.

Summarising the SQL

Let’s summarise some of the details of the SQL statement in Figure 5.

  • The SELECT keyword comes first. Then the table fields are referred to explicitly. This means that the fields are prefixed with the table name, and separated by a full stop (tblStudents.StudentID). 
  • Each of the table fields in the query is separated by a comma.
  • The FROM keyword tells the database which table the table fields refer to.
  • The end of the SQL command is indicated by the semi-colon (this semi-colon is not necessary when working with single queries).

Altering the SQL directly

In the above example, we began with the query in design mode. We then constructed a query using Query-By-Example before viewing the query as pure SQL. Let’s see what happens if we modify a pure SQL query and then view it using the Query-By-Example editor.

Using the pure SQL from Figure 5:

Place the cursor in the Query text between the tblStudents.EmailAddress field and the FROM keyword. Delete the tblStudents.EmailAddress field and the preceding comma. Your query should now look like this:

igureFigure 6

If you now switch to design view (View > Design View) you will see that the tblStudents.EmailAddress field has been removed from the Query Grid.

Figure 7

So, you have two options for creating SQL: through the Query-By-Example editor or using pure SQL.

Selecting Records by Criteria

The SELECT query is useful as it provides a simple way to extract data from the database. But we do not always want to retrieve every row from a table. Sometimes, we want to retrieve a subset of rows that match a certain criteria.

For example, we may only want to see records from the tblStudents table where the city is ‘New York’. Or we may only want to return employees from the tblEmployees table that have the job title of ‘Secretary’. These actions are achieved by using the WHERE clause.

  • Open the QBE editor, remove any other tables and add the tblStudents table.
  • Add StudentID, FirstName, LastName and City to the Query Grid
  • In the City column add the text “New York” to the Criteria row and press Enter

Your Query Grid should look like Figure 8:

Figure 8

  • Run the query and you will see that the only rows returned are those that have ‘New York’ in the city column.

Figure 9

  • Now switch to SQL view to see the SQL code for this query:

Figure 10

You can see that we have the standard SELECT query but a WHERE clause has been added to filter the records based on the criteria shown.

The WHERE clause comprises of the WHERE keyword followed by the field name tblStudents.City the comparison operator ‘=’ and the literal value that is being searched for “New York”.

You will notice that in converting it from a QBE query to pure SQL, parentheses have been added around the WHERE claus. This particular feature is a small annoyance that MS Access has, in that the parentheses are not necessary (certainly not in a simple query like this). The SQL could just as well read:

SELECT tblStudents.StudentID, tblStudents.LastName, tblStudents.FirstName, tblStudents.City FROM tblStudents WHERE tblStudents.City=”New York”;

The use of the WHERE clause is a very important concept to understand, particularly when using action queries such as UPDATE and DELETE (more on this later).

Comparison Operators

In the WHERE clause we have used a comparison operator (the equals sign). It is often useful to use other comparison operators such as:

  • < Less than,
  • > Greater than,
  • <> Not equal to,
  • <= Less than or equal to,
  • >= Greater than or equal to.

In the following example, we are using the ‘>’ operator to find all courses that cost more than £119:

Figure 11

Comparison operators work intuitively with numeric values. When comparing strings, the greater than operator (>) will look for a string that comes after another string alphabetically. So, it is correct to say Dog > Cat (D comes after C) but incorrect to say Duck > Monkey (M does not come after D).

INSERT QUERY

The INSERT query allows us to add new records to the database. It is analogous to the Create function in our CRUD acronym, however, in the QBE window the INSERT query is accessed via the Append button.

Figure 12

We are going to add a new record to the tblEmployees table using an INSERT action query.

  • Open the QBE window and click on the Append button in the ribbon.
  • In the append dialog box select tblEmployees:

Figure 13

  • In the query Grid type FName:”Tom” in the first row of the first column.
  • Select FirstName from the drop down list in the Append To: row.
  • In the query Grid type SName:”Cruise” in the first row of the second column.
  • Select LastName from the drop down list in the Append To: row.
  • In the query Grid type Job:”Drama Teacher” in the first row of the third column.
  • Select Job Title from the drop down list in the Append To: row.

Figure 14

  • Click the Run button to execute the query.
  • You will get a warning that tells you that you are going to add rows to the table Click OK.
  • Open the tblEmployees table and you should see that a new record has been inserted with the data we provided.
  • Now switch to SQL view to see the SQL code for this query:

Figure 15

To summarise the query:

  • The INSERT keyword is followed by the word INTO, this is followed by the name of the table and the fields that we are inserting.
  • The second part of the query uses the SELECT keyword and then combines the literal data (“Tom” for example) with as “alias” (AS FName).

Another quirk of MS Access is the way it converts INSERT statements. Another (more succinct) way of writing the above would be:

INSERT INTO tblEmployees (FirstName, LastName, JobTitle) VALUES (“Tom”, “Cruise”, “Drama Teacher”)

The above statement is a more “standard” way of writing an INSERT statement.

UPDATE Query

An update query is used to change a value of one or more fields in an existing table row or number of rows. In our example, we are going to update some of the details relating to the record we have just added. In order to do this we need to somehow identify the row that contains our record.

To do this

  • Open the tblEmployees table (we are starting with a fresh copy of the database so you will not see the previous entry).
  • Choose a record to edit (we are going to choose the record for Gabrielle Luna).
  • Make a note of the EmployeeID for the Gabrielle Luna record.  In our case it is the number 3.

Figure 16

  • Close the tblEmployees table.

We are going to use the EmployeeID value with a WHERE clause so that we are certain that we only update the record that we need to.

Note: This is why the WHERE clause is so important. If we run an action query such as UPDATE  without specifying a WHERE clause, we will alter every record in the table.

We are going to UPDATE two of the fields in the Gabrielle Luna record; City and StateProvince. To carry out this update we must do the following:

  • Open the QBE editor and add the tblEmployees table.
  • Click the Update button on the ribbon.
  • In the first column of the query grid select EmployeeID.
  • In the criteria row enter the ID value that we have just obtained from the tblEmployees table (3).
  • In the second column select City
  • In the Update To: row, type “Sacremento”.
  • In the third column select StateProvince.
  • In the Update To: row, type “California”.

The query builder should look like this:

Figure 17

Before we run this query, let’s take a look at the SQL code. Select SQL View:

Figure 18

In this command the UPDATE keyword is followed by the table name, the SET clause then tells the database which fields to update and to which value. The WHERE clause comes next and it tells the database to only perform this UPDATE on the row WHERE the EmployeeID = 3.

Run the query and open the tblEmployees table to check that the fields for Gabrielle Luna have been updated.

Note: Again, the parentheses around the WHERE clause are unnecessary.

DELETE Query

The DELETE query is used to delete a record or multiple records from the database.

Note: For obvious reasons, be careful when using a delete query.

We are going to delete the Gabrielle Luna record from the database. But this time we are going to start using the SQL View and check our code in the QBE editor.

  • Open the QBE editor, close the ‘Show Table’ dialog.
  • Select SQL View.
  • The word SELECT; will be shown in the view.
  • Remove the word SELECT; and type this: DELETE * FROM tblEmployees WHERE EmployeeID = 3;
  • Your query should look like this:

Figure 19

Note: This query has used the asterisk short cut *. The asterisk is used to indicate that all fields should be selected. This can be used in SELECT queries to return all columns. The asterisk is useful but should only be used when it is a definite requirement to return all columns. In all other cases the specific field names should be listed.

  • Select Design View.

Figure 20

  • Click the Run button to execute the query.
  • You can check that Gabrielle Luna has been removed from tblEmployees by opening the tblEmployees table.

SELECT DISTINCT

Select distinct is used to return only unique rows of data. Let’s take a look at an example.

  • Open the QBE editor.
  • Select SQL View.
  • Delete SELECT; and type: SELECT tblEmployees.JobTitle FROM tblEmployees;
  • Run the query. You will have a list of JobTitles. The JobTitle “Secretary” will be repeated 5 times.
  • Select SQL View.
  • Add DISTINCT into your query like this: SELECT DISTINCT tblEmployees.JobTitle FROM tblEmployees;
  • Run the query. You will now only have unique rows of data (every value will only appear once).

Figure 21

SELECT DISTINCT is a very useful keyword but can only be added to an SQL statement through SQL View. You cannot do it through the QBE editor.

ORDER BY

The ORDER BY clause sorts a query by a field or fields in either ascending or descending order.

  • Open the QBE editor.
  • Add tblEmployees.
  • In the query grid:
    • Choose tblEmployees for Table.
    • Choose LastName for Field.
    • Choose Ascending for Sort.
  • This will select the LastName field from tblEmployees and then sort the data by LastName (alphabetically in this case).

Figure 22

Note: Choosing Descending for the Sort field will reverse the order.

  • Change to SQL view.
  • The ORDER BY keyword has been added to the end of the SELECT statement.

Figure 23

  • Running the query will return this dataset:

Figure 24

JOINING TABLES

In a normalised database, tables will often contain fields that reference a field from another table. In Figure 25 below, the tblClass table contains a field called TeacherID and TeacherID is “linked” to the TeacherID of the table tblTeachers. This link provides an important protection: no value can be entered into tblClass.TeacherID unless it exists in tblTeachers.TeacherID. This ensures that we have a database that contains data integrity. It also gives us an opportunity to combine the two tables in a query. And the act of combining two or more tables in a query is referred to as “joining” tables.

From a purely SQL code perspective, joins can be difficult to write. But QBE pane provides us (yet again) with a great tool to visualise and learn the concepts of joining tables.

To see how tables are joined together do the following:

  • Open the QBE editor.
  • Add the tblTeachers table.
  • Add the tblClass table.
  • The relationship between the table already exists and is depicted by the line that connects them (the line travels from tblTeachers.TeacherID to tblClass.TeacherID).
  • Add Teachers.LastName to the grid and then add tblClass.ClassDate.

Figure 25

  • Run the query.
  • Switch to SQL View

Figure 26

Let’s summarise what we can see:

  • We see our normal SELECT query, with the fields explicitly identified by their table name prefix.
  • The FROM clause lists the tables that we want to draw the information from.
  • The INNER JOIN clause tells the database that we only want to see results where both of the tables contain a value in the TeacherID field.
  • The ON keyword tells the database which two fields contain the related data.

Note: The INNER JOIN part of the SQL query was created by the line that joined the tblTeachers.TeacherID field to the tblClass.TeacherID field. We did not need to add anything to the query grid.

If we go back to the QBE editor, we can change the relationship type to include ALL of the records from the tblTeachers table and only matching records in the tblClass table.

To do this:

  • Right click on the table join (you have to be very careful to right-click on the line itself) and select Join Properties.
  • The Join Properties dialog box appears.

Figure 27

  • The dialog box shows the tables that are selected and the columns upon which the join is created. The tables are identified as ‘Left’ and ‘Right’. Below this there is a list of join types.
  • Select Option 2: Include all records from ‘tblTeachers and only those records from tblClass where the joined fields are equal.
  • Click OK and run the query.
  • Switch to SQL View.

Figure 28

Here we see the SELECT query once again but the keyword LEFT has been added to indicate that ALL records from the ‘Left’ table must be returned. In this case, the “Left” table is tblTeachers. (B.T.W., There is an element of randomness as to the way in which tables are defined as “Left” and “Right”).

The difference between the 2 queries above is small but important. There are 3 teachers recorded in tblTeachers that do not have any classes allocated to them. By looking through the query results I can see that these are teachers named Lee, Xie and Mortensen (look for records with no value in the tblClass.ClassDate field).

Using SQL in VBA code

Writing your own SQL queries in VBA code is a great way to extend the functionality and usability of your database projects.

This part of the tutorial will concentrate on executing queries such as Select, Insert, Update and Delete in VBA code.

You will first need to open the VBA Editor and add a new Module.

  • Press ALT + F11 on your keyboard.
  • Right-click on TeachingDB.
  • Mouse over Insert and click on Module.

Figure 29

Let’s take a look at our newly created Module:

Figure 30

We will be adding code in the section labelled “Your code will go here” (obs).

Selecting Records

The first procedure you will write will be a procedure that uses SQL to select an Employee from the database.

Figure 31

  1. We set the lngEmployeeID value to 5.
  2. We create an string that will represent the SQL query that we want to generate.
  3. We print the string to the Immediate Window so we can evaluate it.
  4. We open a recordset using the SQL query string we created earlier. A recordset is a dataset that we can interact with.
  5. We print some values from our recordset to the Immediate Window.
  6. We set the recordset variable to nothing (a clean-up operation).

To run the code, type GetEmployee into the Immediate Window and press return on your keyboard.

Figure 32

The code will print out the SQL query string (sSql) and some elements from the recordset.

Figure 33

It is very common to use a recordset to work with existing data in an MS Access project. The recordset itself can be edited and records can be updated, created and deleted although there are other, more SQL, ways to achieve this using the CurrentDB.Execute method (show below).

Inserting a Record

Let’s write some code to insert a record in tblEmployees.

Figure 34

  1. We use a series of variables to store the values that we will be entering in the table.
  2. The SQL statement itself is stored in a variable called sSql and is a mix of literal string values and variables.
  3. We print the SQL statement to the Immediate Window. Although this is unnecessary, it can be useful to view the compiled SQL statement and error check it.
  4. We use the CurrentDB.Execute statement to run the SQL statement.

To run the code, type InsertEmployee into the Immediate Window and press return on your keyboard. The SQL statement will be printed to the Immediate Window

Figure 35

…and if you open up tblEmployees, you will see that Roy Greene has been entered as a new Employee:

Figure 36

Updating a Record

We can also use the CurrentDB.Execute method to update existing record(s) in a table.

Figure 37

  1. We use a series of variables to store the values that we will be entering in the table.
  2. The SQL statement itself is stored in a variable called sSql and is a mix of literal string values and variables.
  3. We print the SQL statement to the Immediate Window. Although this is unnecessary, it can be useful to view the compiled SQL statement and error check it.
  4. We use the CurrentDB.Execute statement to run the SQL statement.

To run the code, type UpdateEmployee into the Immediate Window and press return on your keyboard. The SQL statement will be printed to the Immediate Window

Figure 38

…and if you open up tblEmployees, you will see that EmployeeID 4 has been updated with the appropriate values.

Figure 39

Deleting a Record

Let’s use the CurrentDB.Execute method to delete an existing record in tblEmployees.

Figure 40

  1. In this instance, we only need the EmployeeID of the record we want to delete.
  2. The SQL statement itself is stored in a variable called sSql and is a mix of literal string values and variables.
  3. We print the SQL statement to the Immediate Window. Although this is unnecessary, it can be useful to view the compiled SQL statement and error check it.
  4. We use the CurrentDB.Execute statement to run the SQL statement.
  5. We have introduced the dbFailOnError option to the CurrentDB.Execute statement. This is an important statement because if the code can’t run for some reason (as we will see), without this option we would not receive a message indicating the reason why not.

To run the code, type DeleteEmployee into the Immediate Window and press return on your keyboard. The SQL statement will be printed to the Immediate Window

Figure 41

In Figure 41, we can see that after running the DeleteEmployee sub-procedure, we print the SQL statement to the Immediate Window (as expected) but the CurrentDB.Execute method throws an error. We are unable to delete EmployeeID 3 because EmployeeID 3 appears in tblStudents as a related record. Since we cannot create orphaned records in a well-designed relational database, this behaviour is both expected and welcome.

If we had not used the dbFailOnError option, we would not receive this message. The query would not run and the record would not get deleted but we would be unaware of this.

Summary

Let’s summarise some of the points we have covered in this post.

Structured Query Language is a language that enables objects to communicate with a database.

Some popular commands that SQL uses are SELECT (to retrieve records), INSERT (to create records), UPDATE (to update records) and DELETE (to delete) records.

When selecting records, it is possible to filter records using the WHERE keyword and sort records using the ORDER BY keyword.

MS Access provides two ways to write queries: using the Query-By-Example editor or by using pure SQL code.

You can use SQL in VBA by using a combination of string literals and variables to construct SQL statements that can be executed using the CurrentDB.Execute method.

Understanding SQL is an important step in understanding relational databases themselves. A good understanding of SQL will also enable you to migrate your application to a SQL Server back-end which is a popular and robust solution for thousands of businesses.

Понравилась статья? Поделить с друзьями:
  • Руководство по оценке профессионального риска для здоровья работника
  • Ингавирин 90 инструкция по применению капсулы взрослым как принимать взрослым
  • Фритюрница тефаль super quadra 1000 инструкция
  • Калибратор давления dpi 610 руководство по эксплуатации
  • Этоксидол аналоги уколы инструкция по применению цена отзывы аналоги