Newcomposers.ru

IT Мир
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как вызвать функцию sql в аксессе

Вызов функций SQL Server из формы доступа

1 Smok [2015-04-16 19:40:00]

Я ищу правильный способ использования функций SQL Server в интерфейсе Access. Это довольно просто использовать его в одну сторону — просто нужно вызвать функцию, использовать скобки и вуаля — готово. Но я застрял в другом деле. Whtt, если есть две отдельные функции: одна для «кода», а вторая для «декодирования» данных? Исходную информацию можно найти здесь: Тип данных для хранения IP-адреса в SQL Server. Я хотел бы использовать этот пример в моем приложении доступа, но как сделать две отдельные односторонние операции в форме MS Access? Конечно, если вам нужно создать дополнительный вид или любой дополнительный уровень, чтобы достичь этого, помимо создания формы, я не очень упрям и немного ленив — я буду счастлив сделать это.

function sql-server ms-access

2 ответа

1 Решение Gord Thompson [2015-04-17 15:47:00]

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

  1. скрытый элемент управления, связанный с полем в связанной таблице, и
  2. видимый несвязанный элемент управления, с которым пользователь может взаимодействовать.

Например, предположим, что у вас есть связанная с ODBC таблица с именем [dbo_temperatures], указывающая на таблицу SQL Server, в которой хранятся значения температуры в градусах Цельсия:

У вас также есть две скалярные функции в SQL Server для преобразования значений от Цельсия до Фаренгейта и наоборот

В вашей форме (привязанной к связанной таблице [dbo_temperatures]) вы создаете

  1. скрытое текстовое поле с именем «txtTempC», которое связано с полем [tempC] и
  2. видимое несвязанное текстовое поле с именем «txtTempF».

Форма имеет две частные функции VBA для вызова функций SQL Server

Затем вы можете использовать текущее событие формы для заполнения текстового поля Fahrenheit

и событие After Update текстового поля Fahrenheit для обновления текстового поля Celsius.

Поскольку текстовое поле Celsius привязано к полю [tempC], изменение будет записано обратно в таблицу, когда запись будет сохранена.

0 PhilS [2015-04-17 11:13:00]

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

Это невозможно в форме, связанной с данными в Access. Доступ всегда пытается записать данные, введенные в поле формы, непосредственно в соответствующее table- или поле запроса. Невозможно выполнить обработку данных (вызов функции кодирования) между ними.

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

Как вызвать функцию ms-access из C#?

Я написал функцию ms-access в модуле под названием ‘StripLead’. Я сделал однострочную процедуру под названием «CallFunction». Теперь, когда я вызываю эту процедуру из ms-access, она отлично работает. Но когда я вызываю эту процедуру из C# я получаю ошибку:

Неопределенная функция ‘Striplead’ в выражении.

Код модуля Ms-access:

Процедура Ms-access «CallFunction» (sql просмотр):

Пожалуйста, предложите, является ли этот подход неправильным. Или же, если есть способ сделать вызов функции ms-access из C# для извлечения данных. Моей целью является извлечение модифицированных данных из MS-Access и заполнить datagrid в C#.

1 Ответ

Access предоставляет возможность вызова пользовательских функций VBA из запросов SQL, но эта возможность ограничена запросами, выполняемыми из самого приложения Microsoft Access . Это связано с тем, что функции VBA требуют выполнения инфраструктуры приложения Access (в частности, службы VBA «Expression Service»).

В вашем случае вы можете запустить запрос доступа «real» из своего кода C# с использованием Microsoft.Office.Interop.Access , но это даст вам объект DAO Recordset , и возиться с этим для работы с OleDbDataAdapter вполне может быть больше проблем, чем стоит (если это вообще возможно).

Вы, наверное, просто будет лучше, чтобы заново создать логические функции VBA в C#.

Похожие вопросы:

В VBA/VB6 я могу вызвать функцию или подпрограмму, как так: Call myFunction Я подключаюсь к приложению доступа из .Net вот так: using MSAccess = Microsoft.Office.Interop.Access.Application; var.

Мы переносим приложение MS Access 2003 из Office 2003 в Office 2010 (и WinXP = > Win7) и столкнулись с проблемой, пытаясь запустить функцию Excel Yield из MS Access. Текущий код для этого (который.

Можно ли вызвать код C# каким-либо образом из файла базы данных MS Access (а не из приложения Access)? Мой сценарий заключается в том, что когда что-то произойдет в какой-то таблице, я должен.

Привет, я очень новичок в скриптах MS Access, и мне было интересно, как вызвать функцию. Я попробовал это так: В VB.net — oAccess.Run(AuditEditEnd, zaudTmpFuelDispensed, zaudFuelDispensed, ID.

У меня есть хранимая процедура, которая принимает параметры, но ничего не возвращает. Как я могу вызвать его из MS Access? EDIT — с помощью Рему я заставляю его работать: Set cnn = New.

Возможный Дубликат : Как вызвать lib, написанный на C++ из C? Я возлюсь с pHash и хочу вызвать функцию для генерации перцептивного hash из расположения файла. Когда я пытаюсь вызвать функцию.

Я просто хотел узнать, можно ли вызвать функцию модуля или макрос в базе данных MS Access извне. Использование C# Спасибо

Необходимо добавить некоторые функции XML в один проект MSAccess. Самый простой способ для меня сделать эту работу-написать некоторый код C#, который будет читать данные и записывать их на локальный.

У меня есть программа c++, которая должна возвращать строку. Поскольку метод main в C++ не может возвращать строку, я возвращаю строку через пользовательскую функцию. Как я могу вызвать эту функцию.

Я создал функцию в модуле MS Access, скажем, Calculate(A, B) . Я также создал запрос в MS Access, чтобы использовать эту функцию, скажем: UPDATE aTable SET aField = Calculate(bField, cField) Как я.

Реализовать хранимые процедуры / функции в Access 2007

Всем привет! Народ, помогите пожалуйста. В общем у меня есть база данных в SQL-сервере.

Я создал такую же в аксесе. Там 1 таблица всего. В SQL-сервере у меня есть пользовательская функция, которую я написал. 2-й запрос вызывает эту функцию и всё отлично считается и выдаётся результат.

Подскажите пожалуйста как в аксессе сделать хоть какой-нибудь аналог хранимой процедуры / функции.
Я пробовал на VBA макрос сделать, но что-то не получилось (((.

Может тут есть кто может мне по шагам разжевать как правильно написать в Access 2007 пользовательскую функцию (аналог Create Function T-SQL). И как её правильно вызвать, чтобы она отработала? С синтаксисом VBA я уже разобрался. Т.е. переписал уже код T-SQL на VBA. Проблема в том, что наверно не знаю как правильно макрос сохранить и вызвать.

Читать еще:  Работа с базами аксесс

Был бы очень признателен

Связать хранимые процедуры в параметрами из MS SQL Server в MS Access
Здравствуйте! Есть хранимая процедура, написанная в SQL Server CREATE PROC ZAKAZCHIK @city.

Хранимые процедуры и функции
Ребята, дайте пожалуйста 1 пример, как описывать хранимую процедуру, и 1 пример, как описывать.

Хранимые функции/процедуры
Добрый день. Нахожусь в процессе освоения MySQL, в виду автоматизации процесса тестирования.

Хранимые процедуры и функции MySQL
Помогите!! Придумать не менее трёх хранимых процедур и функций по этой физической модели бд. Сама.

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

Результат первого запроса — таблица со значениями. Во втором запросе эти значения нужно просуммировать. Для этого я и вводил курсор и вызывал функцию из 1-го запроса. Непонятно как для начала процедуру оформить, а уже потом курсор

Хорошо.
Есть вот такая задача. Автомобиль движется по городу, и у него GPS-маячок есть, который передаёт в базу его координаты (долготу и широту), и другие данные.

Выкладываю архив с резервной копией БД. CalculateTheDistance2 — функция, которая вычисляет по формуле расстояние меджу 2-мя точками на карте по их долготе и широте. Соответственно у функции 4 входных параметра, а возвращает она 1 параметр — расстояние.

Общий пробег машины — запрос, который проходит по всей таблице GpsHistory и суммирует все расстояния между всеми точками. Поэтому и курсор я там использовал, чтобы на тех данных, для которых прописан курсор циклически выполнялась сумма.
В исходнике там это видно. Как все эти дела организовать без использования функции — я себе не представляю.
В Access я бы не полез, если бы в будущем не предполагался запрос с параметрами (параметры — DeviceID и время).

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

Сейчас пока главное что мне нужно — правильно составить макрос — ну т.е. сделать аналог функции SQL-сервера. И правильно вызвать эту функцию. Или подскажите как тут обойтись без использования функции/ макроса. Синтаксис VBA я уже знаю. Детали пока не ясны.

Надеюсь что описал доступно. Буду рад любой помощи.

Вызов пользовательских функций в SQL и PL/SQL

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

Каждый раз, когда исполнительное ядро SQL вызывает функцию PL/SQL, оно должно «переключаться» на исполнительное ядро PL/SQL. При многократном вызове функции затраты на переключение контекстов могут быть весьма значи­тельными.

Требования к вызываемым функциям

Чтобы определяемую программистом функцию PL/SQL можно было вызывать из команд SQL , она должна отвечать следующим требованиям:

  • Все параметры функции должны иметь режим использования IN . Режимы IN OUT и OUT в функциях, встраиваемых в SQL-код, недопустимы.
  • Типы данных параметров функций и тип возвращаемого значения должны распоз­наваться сервером Oracle. PL/SQL дополняет основные типы Oracle, которые пока не поддерживаются базой данных. Речь идет о типах BOOLEAN , BINARY_INTEGER , ассо­циативных массивах, записях PL/SQL и определяемых программистом подтипах.
  • Функция должна храниться в базе данных. Функция, определенная на стороне клиента, не может вызываться в командах SQL, так как SQL не сможет разрешить ссылку на эту функцию.

По умолчанию пользовательские функции, вызываемые в SQL , оперируют данными одной строки, а не столбца (как агрегатные функции SUM , MIN и AVG ). Чтобы соз­дать агрегатные функции, вызываемые в SQL , необходимо использовать интерфейс ODCIAggregate , который является частью среды Oracle Extensibility Framework . За подробной информацией по этой теме обращайтесь к документации Oracle.

Ограничения для пользовательских функций, вызываемых в SQL

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

  • Хранимые функции не могут модифицировать таблицы баз данных и выполнять команды DDL ( CREATE TABLE , DROP INDEX и т. д.), INSERT , DELETE , MERGE и UPDATE . Эти ограничения ослабляются, если функция определена как автономная транзакция. В таком случае любые вносимые ею изменения осуществляются не­зависимо от внешней транзакции, в которой выполняется запрос.
  • Хранимые функции, которые вызываются удаленно или в параллельном режиме, не могут читать или изменять значения переменных пакета. Сервер Oracle не поддер­живает побочные эффекты, действие которых выходит за рамки сеанса пользователя.
  • Хранимая функция может изменять значения переменных пакета, только если она вызывается в списке выборки либо в предложении VALUES или SET . Если хранимая функция вызывается в предложении WHERE или GROUP BY , она не может изменять значения переменных пакета.
  • До выхода Oracle8 пользовательские функции не могли вызывать процедуру RAISE_ APPLICATION_ERROR .
  • Хранимая функция не может вызывать другой модуль (хранимую процедуру или функцию), не соответствующий приведенным требованиям.
  • Хранимая функция не может обращаться к представлению, которое нарушает любое из предшествующих правил. Представлением (view) называется хранимая команда SELECT , в которой могут вызываться хранимые функции.
  • До выхода Oracle11g для передачи параметров функциям могла использоваться только позиционная запись. Начиная с Oracle11g, допускается передача параметров по имени и смешанная запись.

Непротиворечивость чтения и пользовательские функции

Модель непротиворечивости чтения в базе данных Oracle проста и понятна: после выполнения запрос «видит» данные в том состоянии, в котором они существовали (были зафиксированы в базе данных) на момент начала запроса, с учетом результатов изменений, вносимых командами DML текущей транзакции. Таким образом, если мой запрос был выполнен в 9:00 и продолжает работать в течение часа, даже если за это время другой пользователь внесет в данные изменения, они не отразятся в моем запросе.

Но если не принять специальных мер предосторожности с пользовательскими функциями в ваших запросах, может оказаться, что ваш запрос будет нарушать (по крайней мере на первый взгляд) модель непротиворечивости чтения базы данных Oracle. Чтобы понять этот аспект, рассмотрим следующую функцию и запрос, в котором она вызывается:

Таблица account содержит 5 миллионов активных строк, а таблица orders — 20 миллио­нов. Я запускаю запрос в 10:00, на его завершение уходит около часа. В 10:45 приходит некто, обладающий необходимыми привилегиями, удаляет все строки из таблицы orders и закрепляет транзакцию. По правилам модели непротиворечивости чтения Oracle сеанс, в котором выполняется запрос, не должен рассматривать эти строки как удаленные до завершения запроса. Но при следующем вызове из запроса функция total_sales не найдет ни одной строки и вернет NULL — и так будет происходить до завершения запроса.

При выполнении запросов из функций, вызываемых в коде SQL, необходимо внимательно следить за непротиворечивостью чтения. Если эти функции вызываются в продолжитель­ных запросах или транзакциях, вероятно, вам стоит выполнить следующую команду для обеспечения непротиворечивости чтения между командами SQL текущей транзакции: SET TRANSACTION READ ONLY

Читать еще:  Скачать аксесс 2020 бесплатно без регистрации

В этом случае необходимо позаботиться о наличии достаточного табличного простран­ства отмены.

Определение подпрограмм PL/SQL в командах SQL (12.1 и выше)

Разработчики уже давно могли вызывать свои функции PL/SQL из команд SQL . До­пустим, я создал функцию с именем BETWNSTR , которая возвращает подстроку с заданной начальной и конечной позицией:

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

Эта возможность позволяет «расширить» язык SQL функциональностью, присущей конкретному приложению, и повторно использовать алгоритмы (вместо копирования). К недостаткам выполнения пользовательских функций в SQL следует отнести необ­ходимость переключения контекста между исполнительными ядрами SQL и P L/SQL . Начиная с Oracle Database 12c вы можете определять функции и процедуры PL/SQL в секции WITH подзапроса, чтобы затем использовать их как любую встроенную или пользовательскую функцию. Эта возможность позволяет консолидировать функцию и запрос в одной команде:

Главное преимущество такого решения — повышение производительности, так как при таком определении функций затраты на переключение контекста с ядра SQL н а ядро PL/SQL существенно снижаются. С другой стороны, за него приходится расплачиваться возможностью повторного использования логики в других частях приложения.

Впрочем, для определения функций в секции WITH есть и другие причины. В SQL можно вызвать пакетную функцию, но нельзя сослаться на константу, объявленную в пакете (если только команда SQL не выполняется внутри блока PL/SQL ), как показано в сле­дующем примере:

Классическое обходное решение основано на определении функции в пакете и ее по­следующем вызове:

Для простого обращения к значению константы в команде SQL потребуется слишком много кода и усилий. Начиная с версии 12.1 это стало излишним — достаточно создать функцию в секции WITH :

Функции PL/SQL , определяемые в SQL, также пригодятся при работе с автономными базами данных, доступными только для чтения. Хотя в таких базах данных невозмож­но создавать «вспомогательные» функции PL/SQL , вы можете определять их прямо в запросах.

Механизм WITH FUNCTION стал чрезвычайно полезным усовершенствованием языка SQL. Тем не менее каждый раз, когда вы планируете его использование, стоит задать себе один вопрос: «Потребуется ли эта функциональность в нескольких местах приложения?»

Если вы ответите на него положительно, следует решить, компенсирует ли выигрыш по производительности от применения WITH FUNCTION потенциальные потери от копи­рования и вставки этой логики в нескольких командах SQL.

Учтите, что в версии 12.1 в блоках PL/SQL невозможно выполнить статическую коман­ду select с секцией with function . Безусловно, это выглядит очень странно, и я уверен, что в 12.2 такая возможность появится, но пока при попытке выполнения следующего кода будет выдана ошибка:

Помимо конструкции WITH FUNCTION, в версии 12.1 также появилась директива UDF для улучшения быстродействия функций PL/SQL, выполняемых из SQL.

Access SQL. Основные понятия, лексика и синтаксис

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

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

Понимание принципов работы SQL помогает создавать более точные запросы и упрощает исправление запросов, которые возвращают неправильные результаты.

Это статья из цикла статей о языке SQL для Access. В ней описаны основы использования SQL для выборки данных и приведены примеры синтаксиса SQL.

В этой статье

Что такое SQL?

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

На языке SQL описываются наборы данных, помогающие получать ответы на вопросы. При использовании SQL необходимо применять правильный синтаксис. Синтаксис — это набор правил, позволяющих правильно сочетать элементы языка. Синтаксис SQL основан на синтаксисе английского языка и имеет много общих элементов с синтаксисом языка Visual Basic для приложений (VBA).

Например, простая инструкция SQL, извлекающая список фамилий контактов с именем Mary, может выглядеть следующим образом:

Примечание: Язык SQL используется не только для выполнения операций над данными, но еще и для создания и изменения структуры объектов базы данных, например таблиц. Та часть SQL, которая используется для создания и изменения объектов базы данных, называется языком описания данных DDL. Язык DDL не рассматривается в этой статье. Дополнительные сведения см. в статье Создание и изменение таблиц или индексов с помощью запроса определения данных.

Инструкции SELECT

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

таблицы, в которых содержатся данные;

связи между данными из разных источников;

поля или вычисления, на основе которых отбираются данные;

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

необходимость и способ сортировки.

Предложения SQL

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

Определяет поля, которые содержат нужные данные.

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

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

Определяет порядок сортировки результатов.

В инструкции SQL, которая содержит статистические функции, определяет поля, для которых в предложении SELECT не вычисляется сводное значение.

Только при наличии таких полей

В инструкции SQL, которая содержит статистические функции, определяет условия, применяемые к полям, для которых в предложении SELECT вычисляется сводное значение.

Термины SQL

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

Сопоставимая часть речи

Имя, используемое для идентификации объекта базы данных, например имя поля.

глагол или наречие

Ключевое слово, которое представляет действие или изменяет его.

Значение, которое не изменяется, например число или NULL.

Сочетание идентификаторов, операторов, констант и функций, предназначенное для вычисления одного значения.

Основные предложения SQL: SELECT, FROM и WHERE

Общий формат инструкций SQL:

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

Читать еще:  Как сделать кнопочную форму в аксесс

Каждая инструкция SELECT заканчивается точкой с запятой (;). Точка с запятой может стоять как в конце последнего предложения, так и на отдельной строке в конце инструкции SQL.

Пример в Access

В приведенном ниже примере показано, как в Access может выглядеть инструкция SQL для простого запроса на выборку.

1. Предложение SELECT

2. Предложение FROM

3. Предложение WHERE

Эту инструкцию SQL следует читать так: «Выбрать данные из полей «Адрес электронной почты» и «Компания» таблицы «Контакты», а именно те записи, в которых поле «Город» имеет значение «Ростов».

Разберем пример по предложениям, чтобы понять, как работает синтаксис SQL.

Предложение SELECT

SELECT [E-mail Address], Company

Это предложение SELECT. Оно содержит оператор (SELECT), за которым следуют два идентификатора («[Адрес электронной почты]» и «Компания»).

Если идентификатор содержит пробелы или специальные знаки (например, «Адрес электронной почты»), он должен быть заключен в прямоугольные скобки.

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

В инструкции SELECT предложение SELECT всегда стоит перед предложением FROM.

Предложение FROM

Это предложение FROM. Оно содержит оператор (FROM), за которым следует идентификатор (Контакты).

В предложении FROM не указываются поля для выборки.

Предложение WHERE

Это предложение WHERE. Оно содержит оператор (WHERE), за которым следует выражение (Город=»Ростов»).

Примечание: В отличие от предложений SELECT и FROM, предложение WHERE является необязательным элементом инструкции SELECT.

С помощью предложений SELECT, FROM и WHERE можно выполнять множество действий. Дополнительные сведения об использовании этих предложений см. в следующих статьях:

Сортировка результатов: ORDER BY

Как и в Microsoft Excel, в Access можно сортировать результаты запроса в таблице. Используя предложение ORDER BY, вы также можете указать способ сортировки результатов при выполнении запроса. Если используется предложение ORDER BY, оно должно находиться в конце инструкции SQL.

Предложение ORDER BY содержит список полей, для которых нужно выполнить сортировку, в том же порядке, в котором будут применена сортировка.

Предположим, например, что результаты сначала нужно отсортировать по полю «Компания» в порядке убывания, а затем, если присутствуют записи с одинаковым значением поля «Компания», — отсортировать их по полю «Адрес электронной почты» в порядке возрастания. Предложение ORDER BY будет выглядеть следующим образом:

ORDER BY Company DESC, [E-mail Address]

Примечание: По умолчанию Access сортирует значения по возрастанию (от А до Я, от наименьшего к наибольшему). Чтобы вместо этого выполнить сортировку значений по убыванию, необходимо указать ключевое слово DESC.

Дополнительные сведения о предложении ORDER BY см. в статье Предложение ORDER BY.

Работа со сводными данными: предложения GROUP BY и HAVING

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

SELECT COUNT([E-mail Address]), Company

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

Задание полей, которые не используются в агрегатной функции: предложение GROUP BY

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

Предложение GROUP BY должно следовать сразу же за предложением WHERE или FROM, если предложение WHERE отсутствует. В предложении GROUP BY поля указываются в том же порядке, что и в предложении SELECT.

Продолжим предыдущий пример. Пусть в предложении SELECT агрегатная функция применяется только к полю [Адрес электронной почты], тогда предложение GROUP BY будет выглядеть следующим образом:

GROUP BY Company

Дополнительные сведения о предложении GROUP BY см. в статье Предложение GROUP BY.

Ограничение агрегированных значений с помощью условий группировки: предложение HAVING

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

Предположим, например, что к первому полю в предложении SELECT применяется функция AVG (которая вычисляет среднее значение):

SELECT COUNT([E-mail Address]), Company

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

HAVING COUNT([E-mail Address])>1

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

Дополнительные сведения о предложении HAVING см. в статье Предложение HAVING.

Объединение результатов запроса: оператор UNION

Оператор UNION используется для одновременного просмотра всех данных, возвращаемых несколькими сходными запросами на выборку, в виде объединенного набора.

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

Примечание: В запросах на объединение числовой и текстовый типы данных являются совместимыми.

Используя оператор UNION, можно указать, должны ли в результаты запроса включаться повторяющиеся строки, если таковые имеются. Для этого следует использовать ключевое слово ALL.

Запрос на объединение двух инструкций SELECT имеет следующий базовый синтаксис:

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

Дополнительные сведения об объединении инструкций SELECT с помощью оператора UNION см. в статье Просмотр объединенных результатов нескольких запросов с помощью запроса на объединение.

Ссылка на основную публикацию
Adblock
detector