Разное

Запросы бд: Запросы в БД

12.08.2018

Содержание

Запросы в БД

5.1. Понятие запроса.

5.2. Алгоритм создания запроса с помощью QBE в СУБД MS Access.

5.3. Условия отбора записей.

5.4. Параметрические запросы.

5.1. Понятие запроса

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

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

Все многообразие запросов можно проклассифицировать схемой приведенной на рис. 5.1.

С точки зрения решаемых информационных задач и формы результатов исполнения запросов их можно разделить на три основные группы:

—  запросы на выборку;

—  запросы на изменение;

—  управляющие запросы.

Формирование запросов в СУБД может осуществляться в специальном редакторе (командный режим) или через наглядно-диалоговые средства: конструкторы и пошаговые мастера формирования запросов. Сформированный запрос может быть сохранен в базе данных для дальнейшего использования.

В современных СУБД для подготовки запросов чаще всего используются два основных языка описания запросов:

– QBE (Query By Example) – язык запросов по образцу;

– SQL (Structured Query Language) – структурированный язык запросов.

По возможностям манипулирования данными языки SQL и QBE практически одинаковы. Главное отличие между ними заключается в способе формирования запросов: визуальном (QBE) или программировании (SQL).

Между QBE и SQL имеется тесная связь: запросы созданные пользователем в QBE хранятся в формате SQL, т. е. SQL является внутренним стандартом для выполнения и хранения запросов.

лассификация запросов в реляционных СУБД

Рис. 5.1. Классификация запросов в реляционных СУБД

Первое описание QBE было предложено М. М. Злуффом в 1975-1977 гг.

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

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

В таблице 5.1 представлены основные операции, поддерживаемые QBE и результаты выполнения запросов

Таблица 5.1

Операция

Результат

Выборка данных

Ответная таблица (временная)

Вычисления над данными

Вставка новых записей

Обновленная исходная таблица

Удаление записей

Модификация (изменение) данных

Создание новой таблицы

Новая таблица в базе данных

В современных СУБД, например Access и Visual FoxPro, многие действия по подготовке запросов с помощью языка QBE выполняются визуально с помощью мыши.

5.2. Алгоритм создания запроса с помощью QBE в СУБД MS Access

При создании запроса с помощью QBE в СУБД MS Access необходимо выполнить следующие операции:

1.  В окне базы данных (рис.5.2, а) открыть контейнер Запросы.

2.  Щелкнуть по клавише Создать.

3.  В появившемся диалоговом окне

Новый запрос (рис.5.2, б) выбрать режим Конструктор и щелкнуть по клавише ОК.

4.  В появившемся диалоговом окне Добавление таблицы (рис.5.3, б) выбрать источник данных.

5.  Определить связи между источниками данных (если они не были определены заранее в окне Схема данных).

лассификация запросов в реляционных СУБД

(а) (б)

Рис.5.2. Окно базы данных (а), диалоговое окно Новый запрос (б)

лассификация запросов в реляционных СУБД

(а) (б)

Рис.5.3. Бланк запроса QBE (а), диалоговое окно Добавление таблицы (б)

6.  Изменить в диалоговом окне Параметры объединения (рис.5.4, б) тип объединения между источниками данных, если необходимо.

лассификация запросов в реляционных СУБД

(а) (б)

Рис.5.3. Бланк запроса QBE (а), диалоговое окно Параметры объединения (б)

7.  Определить необходимый набор полей (рис.5.4).

8.  Добавить вычисляемые поля (при необходимости).

9.  Задать условия отбора записей (при необходимости).

10. 

лассификация запросов в реляционных СУБД


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

Рис.5.4. Сформированный бланк запроса QBE

11.  Указать параметры отображения результатов запроса: показ/скрытие полей, сортировка данных (при необходимости).

12.  Преобразовать тип запроса в другой тип (при необходимости).

13.  Отобразить результирующий набор записей или произвести модификацию данных (рис.5.5).

лассификация запросов в реляционных СУБД

Рис.5.5. Результат выполнения запроса в режиме Таблицы

14.  Для дальнейшего использования (в качестве источника данных для других запросов, форм, отчетов и т. п.) сохранить в базе данных. Запрос в базе данных хранится в виде поименованной инструкции SQL (рис.5.6).

лассификация запросов в реляционных СУБД

Рис.5.6. Запрос в режиме SQL

5.3. Условия отбора записей

Условие отбора записей – это набор предопределенных или задаваемых пользователем правил.

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

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

[Имя_поля]

[Имя_таблицы]![Имя_поля]

[Forms]![Имя_формы]![Имя_элемента_управления]

[Forms]![Имя_формы]![Имя_элемента_управления].[Свойство]

Таблица 5.2

Оператор

Описание

Меньше

<=

Меньше или равно

Больше

>=

Больше или равно

=

Равно

<> 

Не равно

IS NULL

Проверка на пустое значение

IS NOT NULL

Проверка на непустое значение

IN

Проверка на равенство любому значению из списка

IN(«США»; «Канада»; «Мексика»)

BETWEEN

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

BETWEEN 100 AND 300

LIKE

Проверка соответствия текстового или MEMO поля заданному шаблону символов

Таблица 5.3

Символы шаблона, используемые в операторе LIKE

Шаблон

Описание

?

Любой символ

LIKE «ст? л»

*

Любое (включая нулевое) количество символов

LIKE «*стол*»

#

Любая цифра от 0 до 9

LIKE «199#»

[<список>]

Отбор полей, содержащих один символ, находящийся в списке

LIKE «[0-9]», LIKE «[абк-м]»

[!<список>]

Отбор полей, не содержащих один символ, находящийся в списке

LIKE «[!0-9]» , LIKE «[!абк-м]»

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

>=10 AND <=100

>3 And <5 Or >10 And <15

Текстовые константы в выражении должны быть заключены в двойные кавычки:

Like «М*» Or «США»

Константы типа дата/время выделяются символами #:

>= #01/03/2003# AND < #01/03/2003#

>= #12:00:00# AND < #14:25:00#

5.4. Параметрические запросы

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

[Номер заказа]

>=[Начальная дата] AND <=[Конечная дата]

Like [Первые буквы названия] & «*»

При выполнении запроса текст параметра будет отображен в диалоговом окне (рис. 5.7).

лассификация запросов в реляционных СУБД

Рис.5.7. Окно ввода параметра

 

SQL запросы быстро. Часть 1 / Хабр

Введение

Язык SQL очень прочно влился в жизнь бизнес-аналитиков и требования к кандидатам благодаря простоте, удобству и распространенности. Из собственного опыта могу сказать, что наиболее часто SQL используется для формирования выгрузок, витрин (с последующим построением отчетов на основе этих витрин) и администрирования баз данных. И поскольку повседневная работа аналитика неизбежно связана с выгрузками данных и витринами, навык написания SQL запросов может стать фактором, из-за которого кандидат или получит преимущество, или будет отсеян. Печальная новость в том, что не каждый может рассчитывать получить его на студенческой скамье. Хорошая новость в том, что в изучении SQL нет ничего сложного, это быстро, а синтаксис запросов прост и понятен. Особенно это касается тех, кому уже доводилось сталкиваться с более сложными языками.

Обучение SQL запросам я разделил на три части. Эта часть посвящена базовому синтаксису, который используется в 80-90% случаев. Следующие две части будут посвящены подзапросам, Join’ам и специальным операторам. Цель гайдов: быстро и на практике отработать синтаксис SQL, чтобы добавить его к арсеналу навыков.

Практика

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

Кликнуть здесь

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

Структура sql-запросов

Общая структура запроса выглядит следующим образом:
SELECT ('столбцы или * для выбора всех столбцов; обязательно')
FROM ('таблица; обязательно')
WHERE ('условие/фильтрация, например, city = 'Moscow'; необязательно')
GROUP BY ('столбец, по которому хотим сгруппировать данные; необязательно')
HAVING ('условие/фильтрация на уровне сгруппированных данных; необязательно')
ORDER BY ('столбец, по которому хотим отсортировать вывод; необязательно')

Разберем структуру. Для удобства текущий изучаемый элемент в запроса выделяется CAPS’ом.
SELECT, FROM

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

Выбрать все (обозначается как *) из таблицы Customers:

SELECT * FROM Customers

Выбрать столбцы CustomerID, CustomerName из таблицы Customers:
SELECT CustomerID, CustomerName FROM Customers
WHERE

WHERE — необязательный элемент запроса, который используется, когда нужно отфильтровать данные по нужному условию. Очень часто внутри элемента where используются IN / NOT IN для фильтрации столбца по нескольким значениям, AND / OR для фильтрации таблицы по нескольким столбцам.

Фильтрация по одному условию и одному значению:

select * from Customers
WHERE City = 'London'

Фильтрация по одному условию и нескольким значениям с применением IN (включение) или NOT IN (исключение):
select * from Customers
where City IN ('London', 'Berlin')
select * from Customers
where City NOT IN ('Madrid', 'Berlin','Bern')

Фильтрация по нескольким условиям с применением AND (выполняются все условия) или OR (выполняется хотя бы одно условие) и нескольким значениям:
select * from Customers
where Country = 'Germany' AND City not in ('Berlin', 'Aachen') AND CustomerID > 15
select * from Customers
where City in ('London', 'Berlin') OR CustomerID > 4

GROUP BY

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

При использовании GROUP BY обязательно:

  1. перечень столбцов, по которым делается разрез, был одинаковым внутри SELECT и внутри GROUP BY,
  2. агрегатные функции (SUM, AVG, COUNT, MAX, MIN) должны быть также указаны внутри SELECT с указанием столбца, к которому такая функция применяется.

Группировка количества клиентов по городу:
select City, count(CustomerID) from Customers
GROUP BY City

Группировка количества клиентов по стране и городу:
select Country, City, count(CustomerID) from Customers
GROUP BY Country, City

Группировка продаж по ID товара с разными агрегатными функциями: количество заказов с данным товаром и количество проданных штук товара:

select ProductID, COUNT(OrderID), SUM(Quantity) from OrderDetails
GROUP BY ProductID

Группировка продаж с фильтрацией исходной таблицы. В данном случае на выходе будет таблица с количеством клиентов по городам Германии:

select City, count(CustomerID) from Customers
WHERE Country = 'Germany'
GROUP BY City

Переименование столбца с агрегацией с помощью оператора AS. По умолчанию название столбца с агрегацией равно примененной агрегатной функции, что далее может быть не очень удобно для восприятия.
select City, count(CustomerID) AS Number_of_clients from Customers
group by City

HAVING

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

Фильтрация агрегированной таблицы с количеством клиентов по городам, в данном случае оставляем в выгрузке только те города, в которых не менее 5 клиентов:


select City, count(CustomerID) from Customers
group by City
HAVING count(CustomerID) >= 5 

В случае с переименованным столбцом внутри HAVING можно указать как и саму агрегирующую конструкцию count(CustomerID), так и новое название столбца number_of_clients:


select City, count(CustomerID) as number_of_clients from Customers
group by City
HAVING number_of_clients >= 5

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

select City, count(CustomerID) as number_of_clients from Customers
WHERE CustomerName not in ('Around the Horn','Drachenblut Delikatessend')
group by City
HAVING number_of_clients >= 5

ORDER BY

ORDER BY — необязательный элемент запроса, который отвечает за сортировку таблицы.

Простой пример сортировки по одному столбцу. В данном запросе осуществляется сортировка по городу, который указал клиент:


select * from Customers
ORDER BY City

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

select * from Customers
ORDER BY Country, City

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

select * from Customers
order by CustomerID DESC

Обратная сортировка по одному столбцу и сортировка по умолчанию по второму:
select * from Customers
order by Country DESC, City

JOIN

JOIN — необязательный элемент, используется для объединения таблиц по ключу, который присутствует в обеих таблицах. Перед ключом ставится оператор ON.

Запрос, в котором соединяем таблицы Order и Customer по ключу CustomerID, при этом перед названиям столбца ключа добавляется название таблицы через точку:

select * from Orders
JOIN Customers ON Orders.CustomerID = Customers.CustomerID

Нередко может возникать ситуация, когда надо промэппить одну таблицу значениями из другой. В зависимости от задачи, могут использоваться разные типы присоединений. INNER JOIN — пересечение, RIGHT/LEFT JOIN для мэппинга одной таблицы знаениями из другой,

select * from Orders
join Customers on Orders.CustomerID = Customers.CustomerID
where Customers.CustomerID >10

Внутри всего запроса JOIN встраивается после элемента from до элемента where, пример запроса:

Другие типы JOIN’ов можно увидеть на замечательной картинке ниже:


В следующей части подробнее поговорим о типах JOIN’ов и вложенных запросах.

При возникновении вопросов/пожеланий, всегда прошу обращаться!

Создание запросов в БД — Базы данных

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

Назначение и виды запросов

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

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

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

Многотабличный запрос позволяет сформировать записи результата путем объединения взаимосвязанных записей из таблиц БД и включения нужных полей из нескольких таблиц. В частности, при объединении двух нормализованных связанных одно-многозначными отношениями таблиц результирующая запись образуется на основе записи подчиненной таблицы, в которую добавляются поля из связанной записи в главной таблице. Заметим, что подобное объединение формирует новую таблицу, которая не является нормализованной. Выбранный тип объединения таблиц задается при установлении связи между таблицами и определяет способ формирования записей запроса. По умолчанию связи устанавливаются с параметром объединения первого типа: объединение только тех записей, в которых значения связанных полей обеих таблиц совпадают.

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

В Access может быть создано несколько видов запроса.

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

Создание запроса

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

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

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

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

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

Таблица в режиме таблицы

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

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

Схема данных запроса

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

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

Бланк запроса по образцу

Бланк запроса по образцу представлен в виде таблицы на нижней панели окна запроса. Такая таблица предназначена для конструирования структуры таблицы результата запроса и условий выборки данных из исходных таблиц. Первоначально эта таблица пуста.

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

При заполнении бланка запроса:

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

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

Поля бланка запроса

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

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

Модификация запроса

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

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

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

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

Базы данных Access. Создание запросов

2.4. Системы управления базами данных и экспертные системы

2.4.4. Создание (формирование) запросов

Запрос (query) – это средство выбора необходимой информации из базы данных. Вопрос, сформированный по отношению к базе данных, и есть запрос. Применяются два типа запросов: по образцу (QBE – Query by example) и структурированный язык запросов (SQL – Structured Query Language).

QBE — запрос по образцу – средство для отыскания необходимой информации в базе данных. Он формируется не на специальном языке, а путем заполнения бланка запроса в окне Конструктора запросов.

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

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

2.4.4.1. Создание запроса на выборку с помощью Мастера

При создании query необходимо определить:

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

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


Рис. 1.

В окне мастера выбрать необходимую таблицу (таблицу — источник) из опции Таблицы и запросы и выбрать поля данных. Если query формируется на основе нескольких таблиц, необходимо повторить действия для каждой таблицы – источника.

Затем в окне Мастера надо выбрать подробный или итоговый отчет и щелкнуть на кнопке Далее. После этого необходимо задать имя запроса и выбрать один из вариантов дальнейшего действия: Открыть query для просмотра данных или Изменить макет запроса и нажать кнопку Готово. В результате чего получите готовый query.

2.4.4.2. Создание запроса на выборку с помощью Конструктора

С помощью конструктора можно создать следующие виды запросов:

  1. Простой.
  2. По условию.
  3. Параметрические.
  4. Итоговые.
  5. С вычисляемыми полями.

Чтобы вызвать Конструктор запросов, необходимо перейти в окно базы данных. В окне база данных необходимо выбрать вкладку Запросы и дважды щелкнуть на пиктограмме Создание запроса в режиме конструктора. Появится активное окно Добавление таблицы на фоне неактивного окна «Запрос: запрос на выборку».

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

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

В нижней части окна находится Бланк построения запроса QBE (Query by Example), в котором каждая строка выполняет определенную функцию:

  1. Поле – указывает имена полей, которые участвуют в запросе.
  2. Имя таблицы – имя таблицы, с которой выбрано это поле.
  3. Сортировка – указывает тип сортировки.
  4. Вывод на экран – устанавливает флажок просмотра поля на экране.
  5. Условия отбора  — задаются критерии поиска.
  6. Или – задаются дополнительные критерии отбора.

Рис. 2.

Запрос на выборку

В окне  «Запрос: запрос на выборку» с помощью инструментов формируем query:

  1. Выбрать таблицу – источник, из которой производится выборка записей.
  2. Переместить имена полей с источника в Бланк запроса. Например, из таблицы Группы студентов отбуксировать поле Название в первое поле Бланка запросов, из таблицы Студенты отбуксировать поле Фамилии во второе поле Бланка запросов, а из таблицы Успеваемость отбуксировать поле Оценка в третье поле и из таблицы Дисциплины отбуксировать поле Название в четвертое поле Бланка запросов.
  3. Задать принцип сортировки. Курсор мыши переместить в строку Сортировка для любого поля, появится кнопка открытия списка режимов сортировки: по возрастанию и по убыванию. Например, установить в поле Фамилия режим сортировки – по возрастанию.
  4. В строке вывод на экран автоматически устанавливается флажок просмотра найденной информации в поле.
  5. В строке «Условия» отбора и строке «Или» необходимо ввести условия ограниченного поиска – критерии поиска. Например, в поле Оценка ввести  — «отл/A», т.е. отображать все фамилии студентов, которые получили оценки отл/A.
  6. После завершения формирования запроса закрыть окно Запрос на выборку. Откроется окно диалога Сохранить – ответить Да (ввести имя созданного запроса, например, Образец запроса в режиме Конструктор) и щелкнуть ОК и вернуться в окно базы данных.

Рис. 3.

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


Рис. 4.

Чтобы внести изменения в query его необходимо выбрать щелчком мыши в окне базы данных, выполнить щелчок по кнопке Конструктор, внести изменения. Сохранить запрос, повторить его выполнение.

Параметрические запросы

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

Последовательность создания параметрического запроса:

  1. Создать query в режиме конструктора или открыть существующий запрос в режиме конструктора, например «Образец запроса в режиме Конструктор».
  2. В Бланк запроса в строке Условия отбора ввести условие отбора в виде приглашения в квадратных скобках, например [Введите фамилию].
  3. Закрыть окно Запрос на выборку, на вопрос о сохранении изменения ответить – Да. Вернуться в окно базы данных, где созданный query будет выделен.
  4. Выполнить query, щелкнув по кнопке: Открыть. В появившемся на экране окне диалога «Введите значение параметра» надо ввести, например фамилию студента, информацию об успеваемости которого необходимо получить, выполнить щелчок по кнопке ОК.

Далее >>>Тема: 2.4.5. Проектирование форм и работа с ними

Оптимизация запросов базы данных на примере B2B сервиса для строителей / ХабрКак вырасти в 10 раз под количеству запросов к БД не переезжая на более производительный сервер и сохранить работоспособность системы? Я расскажу, как мы боролись с падением производительности нашей базы данных, как оптимизировали SQL запросы, чтобы обслуживать как можно больше пользователей и не повышать расходы на вычислительные ресурсы.

Я делаю сервис для управления бизнес процессами в строительных компаниях. С нами работает около 3 тысяч компаний. Более 10 тысяч человек каждый день работают с нашей системой по 4-10 часов. Она решает разные задачи планирования, оповещения, предупреждения, валидации… Мы используем PostgreSQL 9.6. В базе данных у нас около 300 таблиц и каждые сутки в нее поступает до 200 млн запросов (10 тысяч различных). В среднем у нас 3-4 тысяч запросов в секунду, в самые активные моменты более 10 тысяч запросов в секунду. Большая часть запросов — OLAP. Добавлений, модификаций и удалений намного меньше, то есть OLTP нагрузка относительно небольшая. Все эти цифры я привел, чтобы вы могли оценить масштаб нашего проекта и понять насколько наш опыт может быть полезен для вас.

Картина первая. Лирическая


Когда мы начинали разработку, то особо не задумывались о том, какая нагрузка ляжет на БД и что мы будем делать если сервер перестанет вытягивать. При проектировании БД мы следовали общим рекомендациям и старались не стрелять себе в ногу, но дальше общих советов вроде “не используйте паттерн Entity Attribute Values мы не заходили. Проектировали исходя из принципов нормализации избегая избыточности данных и не заботились об ускорения тех или иных запросов. Как только пришли первые пользователи мы столкнулись с проблемой производительности. Как обычно мы оказались абсолютно не готовы к этому. Первые проблемы оказались простыми. Как правило все решалось добавлением нового индекса. Но наступил момент когда простые заплатки перестали работать. Осознав, что опыта не хватает и нам все сложнее понять в чем причина проблем, мы наняли специалистов, которые помогли нам правильно настроить сервер, подключить мониторинг, показали куда смотреть, чтобы получить статистику.

Картина вторая. Статистическая


Итак у нас есть около 10 тысяч различных запросов, которые выполняются на нашей БД за сутки. Из этих 10 тысяч есть монстры, которые выполняются по 2-3 млн раз со средним временем выполнения 0.1-0.3 мс и есть запросы со средним временем выполнения 30 секунд, которые вызываются 100 раз в сутки.

Оптимизировать все 10 тысяч запросов не представлялось возможным, поэтому мы решили разобраться с тем, куда направлять усилия, чтобы повышать производительность БД правильно. После нескольких итераций мы стали делить запросы на типы.

TOP запросы

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

Обычная практика всех компаний- работать с TOP запросами. Их немного, оптимизация даже одного запроса может освободить 5-10% ресурсов. Однако, по мере “взросления” проекта оптимизация TOP запросов становится все более нетривиальной задачей. Все простые способы уже отработаны, да и самый “тяжелый” запрос отнимает “всего” 3-5% ресурсов. Если TOP запросы в сумме занимают менее 30-40% времени, то скорее всего вы уже приложили усилия, чтобы они работали быстро и пришла пора переходить к оптимизации запросов из следующей группы.
Остается ответить на вопрос сколько верхних запросов включить в эту группу. Я обычно беру не меньше 10, но не больше 20. Стараюсь, чтобы время первого и последнего в TOP группе отличалось не более чем в 10 раз. То есть если время исполнения запросов резко падает с 1 места до 10, то беру TOP-10, если падение более плавное, то увеличиваю размер группы до 15 или 20.

Середняки (medium)

Это все запросы, которые идут сразу за TOP, за исключением последних 5-10%. Обычно в оптимизации именно этих запросов кроется возможность сильно поднять производительность сервера. Эти запросы могут “весить” до 80%. Но даже если их доля перевалила за 50%, значит пора на них взглянуть более внимательно.
Хвост (tail)

Как было сказано, эти запросы идут в конце и на них уходит 5-10% времени. Про них можно забыть, только если вы не используете автоматические средства анализа запросов, тогда их оптимизация тоже может дешево обойтись.

Как оценить каждую группу?

Я использую SQL запрос, который помогает сделать такую оценку для PostgreSQL (уверен что для многих других СУБД можно написать похожий запрос)

SQL запрос для оценки размера TOP-MEDIUM-TAIL групп
SELECT sum(time_top) AS sum_top, sum(time_medium) AS sum_medium, sum(time_tail) AS sum_tail
FROM
(
  SELECT CASE WHEN rn <= 20              THEN tt_percent ELSE 0 END AS time_top,
         CASE WHEN rn > 20 AND rn <= 800 THEN tt_percent ELSE 0 END AS time_medium,
         CASE WHEN rn > 800              THEN tt_percent ELSE 0 END AS time_tail
  FROM (
    SELECT total_time / (SELECT sum(total_time) FROM pg_stat_statements) * 100 AS tt_percent, query,
    ROW_NUMBER () OVER (ORDER BY total_time DESC) AS rn
    FROM pg_stat_statements
    ORDER BY total_time DESC
  ) AS t
)
AS ts


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

Вот так примерно соотносятся доли запросов на момент начала работ по оптимизации и сейчас.

Из диаграммы видно, что доля TOP запросов резко снизилась, зато выросли “середняки”.
Поначалу в TOP запросы попадали откровенные ляпы. Со временем детские болезни исчезли, доля TOP запросов сокращалась, приходилось прилагать все больше усилий, чтобы ускорить тяжелые запросы.

Чтобы получить текст запросов используем такой запрос
SELECT * FROM (
  SELECT ROW_NUMBER () OVER (ORDER BY total_time DESC) AS rn, total_time / (SELECT sum(total_time) FROM pg_stat_statements) * 100 AS tt_percent, query
  FROM pg_stat_statements
  ORDER BY total_time DESC
) AS T
WHERE
rn <= 20 -- TOP
-- rn > 20 AND rn <= 800 -- MEDIUM
-- rn > 800  -- TAIL


Вот список самых часто используемых приемов, которые помогали нам ускорять TOP запросы:
  • Redesign системы, например переработка логики уведомлений на message broker вместо периодических запросов к БД
  • Добавление или изменение индексов
  • Переписывание ORM запросов на чистый SQL
  • Переписывание логики lazy подгрузки данных
  • Кеширование через денормализацию данных. Например у нас есть связь таблиц Доставка -> Счет -> Запрос -> Заявка. То есть каждая доставка связана с заявкой через другие таблицы. Чтобы не связывать в каждом запросе все таблицы, мы продублировали ссылку на заявку в таблице Доставка.
  • Кэширование статических таблиц со справочниками и редко меняющихся таблиц в памяти программы.

Иногда изменения тянули на внушительный редизайн, но давали 5-10% разгрузки системы и были оправданы. Со временем выхлоп становился все меньше, а редизайн требовался все более серьезный.

Тогда мы обратили внимание на вторую группу запросов- группу середняков. В ней намного больше запросов и казалось, что на анализ всей группы уйдет очень много времени. Однако большинство запросов оказались очень просты для оптимизации, а многие проблемы повторялись десятки раз в разнличных вариациях. Вот примеры некоторых типовых оптимизаций, который мы применяли к десяткам похожих запросов и каждая группа оптимизированных запросов разгружала БД на 3-5%.

  • Вместо проверки наличия записей с помощью COUNT и полного сканирования таблицы стали использовать EXISTS
  • Избавились от DISTINCT (нет общего рецепта, но иногда можно легко от него избавиться ускоряя запрос в 10-100 раз).

    Например, вместо запроса для выборки всех водителей по большой таблице доставок (DELIVERY)

    SELECT DISTINCT P.ID, P.FIRST_NAME, P.LAST_NAME
    FROM DELIVERY D JOIN PERSON P ON D.DRIVER_ID = P.ID
    

    сделали запрос по сравнительно небольшой таблице PERSON
    SELECT P.ID, P.FIRST_NAME, P.LAST_NAME
    FROM PERSON
    WHERE EXISTS(SELECT D.ID FROM DELIVERY WHERE D.DRIVER_ID = P.ID)
    

    Казалось бы, мы использовали коррелирующий подзапрос, но он дает ускорение более чем в 10 раз.
  • Во многих случаях вообще отказались от COUNT и
    заменили на расчет приближенного значения
  • вместо
    UPPER(s) LIKE JOHN%’ 
    

    используем
    s ILIKE “John%”
    


Каждый конкретный запрос удавалось ускорить порой в 3-1000 раз. Несмотря на впечатляющие показатели, поначалу нам казалось, что нет смысла в оптимизации запроса, который выполняется 10 мс, входит в 3-ю сотню самых тяжелых запросов и в общем времени нагрузки на БД занимает сотые доли процента. Но применяя один и тот же рецепт к группе однотипных запросов мы отыгрывали по несколько процентов. Чтобы не тратить время на ручной просмотр всех сотен запросов мы написали несколько простых скриптов, которые с помощью регулярных выражений находили однотипные запросы. В итоге автоматический поиск групп запросов позволил нам еще больше улучшить нашу производительность, затратив скромные усилия.

В итоге мы уже три года работаем на одном и том же железе. Среднесуточная нагрузка около 30%, в пиках доходит до 70%. Количество запросов как и количество пользователей выросло примерно в 10 раз. И все это благодаря постоянному мониторингу этих самых групп запросов TOP-MEDIUM. Как только какой-то новый запрос появляется в группе TOP, мы его тут же анализируем и пытаемся ускорить. Группу MEDIUM мы раз в неделю просматриваем с помощью скриптов анализа запросов. Если попадаются новые запросы, которые мы уже знаем как оптимизировать, то мы их быстро меняем. Иногда находим новые способы оптимизации, которые можно применить сразу к нескольким запросам.

По нашим прогнозам текущий сервер выдержит увеличение количества пользователей еще в 3-5 раз. Правда у нас есть еще один козырь в рукаве- мы до сих пор не перевели SELECT- запросы на зеркало, как рекомендуется делать. Но мы этого не делаем осознанно, так как хотим сначала до конца исчерпать возможности «умной» оптимизации, прежде чем включать «тяжелую артиллерию».
Критический взгляд на проделанную работу может подсказать использовать вертикальное масштабирование. Купить более мощный сервер, вместо того, чтобы тратить время специалистов. Сервер может стоить не так дорого, тем более что лимиты вертикального масштабирования у нас еще не исчерпаны. Однако в 10 раз выросло лишь количество запросов. За несколько лет, увеличился функционал системы и сейчас разновидностей запросов стало больше. Тот функционал, который был, за счет кеширования выполняется меньшим количеством запросов, к тому же более эффективных запросов. Значит можно смело умножить еще на 5, чтобы получить реальный коэффициент ускорения. Итак по самым скромным подсчетам можно сказать, что ускорение составило 50 и более раз. Вертикально раскачать сервер в 50 раз обошлось бы дороже. Особенно учитывая, что однажды проведенная оптимизация работает все время, а счет за арендованный сервер приходит каждый месяц.

Запросы в Access — Базы данных Access

Запросы в Access являются основным инструментом выборки, обновления и обработки данных в таблицах базы данных. Access в соответствии с концепцией реляционных баз данных для выполнения запросов использует язык структурированных запросов SQL (Structured Query Language). С помощью инструкций языка SQL реализуется любой запрос в Access.

Основным видом запроса является запрос на выборку. Результатом выполнения этого запроса является новая таблица, которая существует до закрытия запроса. Записи формируются путем объединения записей таблиц, на которых построен запрос. Способ объединения записей таблиц указывается при определении их связи в схеме данных или при создании запроса. Условия отбора, сформулированные в запросе, позволяют фильтровать записи, составляющие результат объединения таблиц.

В Access может быть создано несколько видов запроса:

  • запрос на выборку — выбирает данные из одной таблицы или запроса или нескольких взаимосвязанных таблиц и других запросов. Результатом является таблица, которая существует до закрытия запроса. Формирование записей таблицы результата производится в соответствии с заданными условиями отбора и при использовании нескольких таблиц путем объединения их записей;
  • запрос на создание таблицы — выбирает данные из взаимосвязанных таблиц и других запросов, но, в отличие от запроса на выборку, результат сохраняет в новой постоянной таблице;
  • запросы на обновление, добавление, удаление — являются запросами действия, в результате выполнения которых изменяются данные в таблицах.

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

Запросы в Access

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

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

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

Создание простого запроса на выборку

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

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

Если вы хотите узнать больше о принципах работы запросов на примере базы данных Northwind, ознакомьтесь со статьей Общие сведения о запросах.

В этой статье

Overview

Создание запроса SELECT с помощью мастера запросов

Создание запроса в режиме конструктора

Создание запроса на выборку в веб-приложении Access

Общие сведения

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

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

Преимущества запросов

Запрос позволяет выполнять перечисленные ниже задачи.

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

    Примечание: Запрос только возвращает данные, но не сохраняет их. При сохранении запроса вы не сохраняете копию соответствующих данных.

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

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

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

Основные этапы создания запроса на выборку

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

  1. Выберите таблицы или запросы, которые хотите использовать в качестве источников данных.

  2. Укажите поля из источников данных, которые хотите включить в результаты.

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

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

Создание запроса на выборку с помощью мастера запросов

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

Подготовка

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

Дополнительную информацию о создании отношений между таблицами можно найти в статье Руководство по связям между таблицами.

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

  1. На вкладке Создание в группе Запросы нажмите кнопку Мастер запросов

    В группе "Запросы" на ленте Access есть два параметра: мастер запросов и конструктор
  2. В диалоговом окне Новый запрос выберите пункт Простой запрос и нажмите кнопку ОК.

  3. Теперь добавьте поля. Вы можете добавить до 255 полей из 32 таблиц или запросов.

    Для каждого поля выполните два указанных ниже действия.

    1. В разделе Таблицы и запросы щелкните таблицу или запрос, содержащие поле.

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

    3. Добавив в запрос все необходимые поля, нажмите кнопку Далее.

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

    Выполните одно из указанных ниже действий.

    1. Если вы хотите просмотреть отдельные записи, выберите пункт подробный и нажмите кнопку Далее. Перейдите к действию 9.

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

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

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

    1. Sum    — запрос вернет сумму всех значений, указанных в поле.

    2. Avg    — запрос вернет среднее значение поля.

    3. Min    — запрос вернет минимальное значение, указанное в поле.

    4. Max    — запрос вернет максимальное значение, указанное в поле.

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

  7. Нажмите ОК, чтобы закрыть диалоговое окно Итоги.

  8. Если вы не добавили в запрос ни одного поля даты и времени, перейдите к действию 9. Если вы добавили в запрос поля даты и времени, мастер запросов предложит вам выбрать способ группировки значений даты. Предположим, вы добавили в запрос числовое поле («Цена») и поле даты и времени («Время_транзакции»), а затем в диалоговом окне Итоги указали, что хотите отобразить среднее значение по числовому полю «Цена». Поскольку вы добавили поле даты и времени, вы можете подсчитать итоговые величины для каждого уникального значения даты и времени, например для каждого месяца, квартала или года.

    Выберите способ группировки дат в запросе в диалоговом окне простого мастера запросов.

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

    Примечание: В режиме конструктора для группировки значений по периодам можно использовать выражения, однако в мастере доступны только указанные здесь варианты.

  9. На последней странице мастера задайте название запроса, укажите, хотите ли вы открыть или изменить его, и нажмите кнопку Готово.

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

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

Создание запроса в режиме конструктора

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

Создание запроса

Действие 1. Добавьте источники данных

Действие 2. Соедините связанные источники данных

Действие 3. Добавьте выводимые поля

Действие 4. Укажите условия

Действие 5. Рассчитайте итоговые значения

Действие 6. Просмотрите результаты

Действие 1. Добавьте источники данных

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

  1. На вкладке Создание в группе Другое нажмите кнопку Конструктор запросов

    В группе "Запросы" на ленте Access есть два параметра: мастер запросов и конструктор
  2. В диалоговом окне Добавление таблицы на вкладке Таблицы, Запросы или Таблицы и запросы дважды щелкните каждый источник данных, который хотите использовать, или выберите их и нажмите кнопку Добавить.

    Диалоговое окно для добавления таблицы в Access, в котором показаны названия таблиц
  3. Закройте диалоговое окно Добавление таблицы.

Автоматическое соединение

Если между добавляемыми источниками данных уже заданы отношения, они автоматически добавляются в запрос в качестве соединений. Соединения определяют, как именно следует объединять данные из связанных источников. Access также автоматически создает соединение между двумя таблицами, если они содержат поля с совместимыми типами данных и одно из них — первичный ключ.

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

Если приложение Access при добавлении источников данных автоматически создало соединения правильных типов, вы можете перейти к действию 3 (добавление выводимых полей).

Повторное использование одного источника данных

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

При добавлении источника данных во второй раз Access присвоит имени второго экземпляра окончание «_1». Например, при повторном добавлении таблицы «Сотрудники» ее второй экземпляр будет называться «Сотрудники_1».

Действие 2. Соедините связанные источники данных

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

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

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

Добавление соединения

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

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

    Линия связи в конструкторе запроса

Изменение соединения

  1. Дважды щелкните соединение, которое требуется изменить.

    Откроется диалоговое окно Параметры соединения.

    Диалоговое окно "Параметры объединения"
  2. Ознакомьтесь с тремя вариантами в диалоговом окне Параметры соединения.

  3. Выберите нужный вариант и нажмите кнопку ОК.

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

Действие 3. Добавьте выводимые поля

Вы можете легко добавить поле из любого источника данных, добавленного в действии 1.

  • Для этого перетащите поле из источника в верхней области окна конструктора запросов вниз в строку Поле бланка запроса (в нижней части окна конструктора).

    При добавлении поля таким образом Access автоматически заполняет строку Таблица в таблице конструктора в соответствии с источником данных поля.

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

Использование выражения в качестве выводимого поля

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

  1. В пустом столбце таблицы запроса щелкните строку Поле правой кнопкой мыши и выберите в контекстном меню пункт Масштаб.

  2. В поле Масштаб введите или вставьте необходимое выражение. Перед выражением введите имя, которое хотите использовать для результата выражения, а после него — двоеточие. Например, чтобы обозначить результат выражения как «Последнее обновление», введите перед ним фразу Последнее обновление:.

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

Действие 4. Укажите условия

Это необязательно.

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

Определение условий для выводимого поля

  1. В таблице конструктора запросов в строке Условие отбора поля, значения в котором вы хотите отфильтровать, введите выражение, которому должны удовлетворять значения в поле для включения в результат. Например, чтобы включить в запрос только записи, в которых в поле «Город» указано «Рязань», введите Рязань в строке Условие отбора под этим полем.

    Различные примеры выражений условий для запросов можно найти в статье Примеры условий запроса.

  2. Укажите альтернативные условия в строке или под строкой Условие отбора.

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

Условия для нескольких полей

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

Настройка условий на основе поля, которое не включается в вывод

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

  1. Добавьте поле в таблицу запроса.

  2. Снимите для него флажок в строке Показывать.

  3. Задайте условия, как для выводимого поля.

Действие 5. Рассчитайте итоговые значения

Этот этап является необязательным.

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

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

  1. Когда запрос открыт в конструкторе, на вкладке «Конструктор» в группе «Показать или скрыть» нажмите кнопку Итоги.

    Access отобразит строку Итого на бланке запроса.

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

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

Действие 6. Просмотрите результаты

Чтобы увидеть результаты запроса, на вкладке «Конструктор» нажмите кнопку Выполнить. Access отобразит результаты запроса в режиме таблицы.

Чтобы вернуться в режим конструктора и внести в запрос изменения, щелкните Главная > Вид > Конструктор.

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

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

Создание запроса на выборку в веб-приложении Access

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

Важно    Корпорация Майкрософт больше не рекомендует создавать и использовать веб-приложения Access в SharePoint. В качестве альтернативного средства для бизнес-решений, не требующих дополнительного программирования и работающих в браузере и на мобильных устройствах, рекомендуется использовать Microsoft Power Apps.

  1. Откройте веб-приложение в Access.

  2. Выберите Главная > Дополнительно > Запрос.

  3. В диалоговом окне Добавление таблицы на вкладке Таблицы, Запросы или Таблицы и запросы дважды щелкните каждый источник данных, который хотите использовать, или выберите их и нажмите кнопку Добавить. По завершении нажмите кнопку Закрыть.

  4. Перетащите поля из источника в верхней области окна бланка запроса вниз в строку Поле таблицы конструктора (в нижней части окна конструктора).

    Конструктор запросов с выделенной вкладкой запроса

  5. Добавьте для полей необходимые условия.

  6. Щелкните вкладку запроса правой кнопкой мыши, выберите команду Сохранить и присвойте запросу имя.

  7. Чтобы увидеть результаты запроса, щелкните правой кнопкой мыши вкладку запроса и выберите пункт Режим таблицы.

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

  1. Щелкните заголовок таблицы в области выбора таблиц слева и нажмите кнопку Добавить представление (знак «плюс»).

    Добавление представления списка с клиента Access

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

    Добавление режима таблицы для запроса к исходной таблице

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

  3. Выберите Главная > Запустить приложение чтобы открыть новое представление в браузере.

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

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

запросов к базе данных | Типы и определения | Компьютерные науки

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

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

Методы создания запросов

Выбор параметров из меню

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

Запрос по примеру (QBE)

  • В этом методе система отображает пустую запись и позволяет идентифицировать поля и значения, которые определяют запрос.
  • Это метод создания запроса, который позволяет пользователю искать документы на основе примера в форме выбранной текстовой строки, или в форме имени документа, или даже списка документов. Поскольку система QBE разрабатывает фактический запрос, QBE легче понять, чем формальные языки запросов, и в то же время обеспечивает мощный поиск.
  • С точки зрения систем управления базами данных, QBE можно рассматривать как метод заполнения запросов «заполнить пробелы». Примером QBE является Grid Microsoft Query Design Grid.Пользователь вводит критерии в форму, чтобы создать условия поиска для стольких полей, сколько необходимо для выполнения поиска. Затем автоматически создается запрос для поиска в базе данных соответствующих данных.

Язык запросов

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

Примеры языков запросов

Microsoft Structured Query Language (SQL) является идеальным языком запросов. Другие расширения языка под зонтиком SQL-запроса включают в себя:

Языки запросов для других типов баз данных, таких как базы данных NoSQL и базы данных графов, включают в себя следующее:

  • Cassandra Query Language (CQL)
  • Сайфер Neo4j
  • Расширения интеллектуального анализа данных (DMX)
  • XQuery

Мощность запросов

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

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

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

В реляционной базе данных, которая состоит из записей или строк данных, запрос оператора SQL SELECT позволяет пользователю выбирать данные и доставлять их в приложение из базы данных.Полученный запрос сохраняется в таблице результатов, которая называется набором результатов. Оператор SELECT можно разделить на другие конкретные операторы, такие как FROM, ORDER BY и WHERE. Запрос SQL SELECT также может группировать и объединять данные, которые могут быть полезны для создания анализов или сводок.

,
Начало работы с запросами между базами данных — база данных SQL Azure
  • 2 минуты, чтобы прочитать

В этой статье

ПРИМЕНИМО к: База данных SQL Azure

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

По завершении вы: узнаете, как настроить и использовать базу данных SQL Azure для выполнения запросов, охватывающих несколько связанных баз данных.

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

Предпосылки

ALTER ANY EXTERNAL DATA SOURCE требуется разрешение. Это разрешение включено в разрешение ALTER DATABASE.ALTER ANY EXTERNAL DATA SOURCE необходимы разрешения для ссылки на базовый источник данных.

Создание образца базы данных

Для начала создайте две базы данных: клиентов и заказов либо на одном, либо на разных серверах.

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

  CREATE TABLE [dbo]. [OrderInformation] (
    [OrderID] [int] НЕ NULL,
    [CustomerID] [int] НЕ NULL
    )
INSERT INTO [dbo].[OrderInformation] ([OrderID], [CustomerID]) ЗНАЧЕНИЯ (123, 1)
INSERT INTO [dbo]. [OrderInformation] ([OrderID], [CustomerID]) ЗНАЧЕНИЯ (149, 2)
INSERT INTO [dbo]. [OrderInformation] ([OrderID], [CustomerID]) ЗНАЧЕНИЯ (857, 2)
INSERT INTO [dbo]. [OrderInformation] ([OrderID], [CustomerID]) ЗНАЧЕНИЯ (321, 1)
INSERT INTO [dbo]. [OrderInformation] ([OrderID], [CustomerID]) ЗНАЧЕНИЯ (564, 8)
  

Теперь выполните следующий запрос к базе данных Customer , чтобы создать таблицу CustomerInformation и ввести пример данных.

  CREATE TABLE [dbo]. [CustomerInformation] (
    [CustomerID] [int] НЕ NULL,
    [CustomerName] [varchar] (50) NULL,
    [Компания] [varchar] (50) NULL
    ОГРАНИЧЕНИЕ [CustID] ПЕРВИЧНЫЙ КЛЮЧ КЛАСТЕР ([CustomerID] ASC)
)
INSERT INTO [dbo]. [CustomerInformation] ([CustomerID], [CustomerName], [Company]) ЗНАЧЕНИЯ (1, «Джек», «ABC»)
INSERT INTO [dbo]. [CustomerInformation] ([CustomerID], [CustomerName], [Company]) ЗНАЧЕНИЯ (2, «Стив», «XYZ»)
INSERT INTO [dbo]. [CustomerInformation] ([CustomerID], [CustomerName], [Company]) ЗНАЧЕНИЯ (3, 'Lylla', 'MNO')
  

Создание базы данных объектов

Главный ключ и учетные данные в области базы данных

  1. Откройте SQL Server Management Studio или Инструменты данных SQL Server в Visual Studio.

  2. Подключитесь к базе данных Orders и выполните следующие команды T-SQL:

      CREATE MASTER KEY ENCRYPTION BY PASSWORD = '';
    CREATE DATABASE SCOPED CREDENTIAL ElasticDBQueryCred
    WITH IDENTITY = '<имя пользователя>',
    SECRET = '<пароль>';
      

    «Имя пользователя» и «пароль» должны быть именем пользователя и паролем, используемыми для входа в базу данных клиентов. Аутентификация с использованием Azure Active Directory с эластичными запросами в настоящее время не поддерживается.

Внешние источники данных

Чтобы создать внешний источник данных, выполните следующую команду в базе данных заказов:

  СОЗДАТЬ ИСТОЧНИК ВНЕШНИХ ДАННЫХ MyElasticDBQueryDataSrc WITH
    (TYPE = RDBMS,
    LOCATION = '<имя_сервера> .database.windows.net',
    DATABASE_NAME = 'Клиенты',
    CREDENTIAL = ElasticDBQueryCred,
);
  

Внешние столы

Создайте внешнюю таблицу в базе данных заказов, которая соответствует определению таблицы CustomerInformation:

  СОЗДАТЬ ВНЕШНЮЮ ТАБЛИЦУ [dbo].[Информация для клиентов]
([CustomerID] [int] НЕ NULL,
    [CustomerName] [varchar] (50) NOT NULL,
    [Компания] [varchar] (50) NOT NULL)
С УЧАСТИЕМ
(DATA_SOURCE = MyElasticDBQueryDataSrc)
  

Выполнить образец эластичной базы данных T-SQL-запроса

После того как вы определили свой внешний источник данных и внешние таблицы, теперь вы можете использовать T-SQL для запроса внешних таблиц. Выполните этот запрос в базе данных заказов:

  ВЫБРАТЬ OrderInformation.CustomerID, OrderInformation.OrderId, CustomerInformation.CustomerName, CustomerInformation.Company
ОТ заказаИнформация
ВНУТРЕННЕЕ ПРИСОЕДИНЕНИЕ
ON CustomerInformation.CustomerID = OrderInformation.CustomerID
  

Стоимость

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

Информация о ценах приведена в разделе Цены базы данных SQL.

Следующие шаги

,

запросов к базе данных

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

Запросы — одна из вещей, которые делают базы данных такими мощными. «Запрос» относится к действию извлечения данных из вашей базы данных. Обычно вы будете выбирать, сколько данных вы хотите вернуть. Если у вас есть много данных в вашей базе данных, вы, вероятно, не хотите видеть все. Скорее всего, вы захотите видеть только те данные, которые соответствуют определенным критериям.

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

Как и во многих других задачах, вы можете запрашивать базу данных либо программно, либо через пользовательский интерфейс.

Вариант 1: программно

Способ извлечения данных из вашей базы данных с помощью SQL заключается в использовании оператора SELECT .

Используя инструкцию SELECT, вы можете получить все записи …

SELECT * FROM Albums;

..или только некоторые записи:

SELECT * FROM Albums ГДЕ ArtistId = 1;

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

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

Вариант 2: Пользовательский интерфейс

Пользовательский интерфейс может оказаться проще для создания ваших запросов, особенно если они сложные.

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

  • Разработка запроса

    Вот пример запроса в режиме конструктора в Microsoft Access.

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

  • результатов запроса

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

,

запросов SQL SCOM — блог Кевина Холмена

Это список запросов, которые, как я знаю, многие люди считают полезными при написании отчетов или понимании схем БД SCOM для получения полезной информации.

Эти запросы работают для SCOM 2012 и более поздних версий.

Большой запрос таблицы. (я ставлю это наверх, потому что я так часто его использую — чтобы выяснить, что занимает так много места в OpsDB или DW)

 

- запрос большой таблицы.Я ставлю это на вершину, потому что я использую это так много, чтобы выяснить, что занимает так много места в OpsDB или DW ВЫБЕРИТЕ ТОП 1000 a2.name AS 'Tablename', CAST ((a1.reserved + ISNULL (a4.reserved, 0 )) * 8 / 1024.0 AS DECIMAL ( 10 , 0 )) AS 'TotalSpace (MB)', CAST (a1.data * 8 / 1024,0 AS DECIMAL ( 10 , 0 )) AS 'DataSize (MB)', CAST ((СЛУЧАЙ КОГДА (a1.used + ISNULL (a4.used, 0 ))> a1.данные THEN (a1.used + ISNULL (a4.used, 0 )) - a1.data ELSE 0 END) * 8 / 1024.0 AS DECIMAL ( 10 , 0 )) AS ' IndexSize (MB)», CAST ((СЛУЧАЙ КОГДА (a1.reserved + ISNULL (a4.reserved, 0 ))> a1.used THEN (a1.reserved + ISNULL (a4.reserved, 0 )) - a1.used ELSE 0 КОНЕЦ) * 8 / 1024,0 AS DECIMAL ( 10 , 0 )) AS 'Unused (MB)', a1.rows как 'RowCount', (row_number () over (упорядочить по (a1.зарезервировано + ISNULL (a4.reserved, 0 )) desc))% 2 как l1, a3.name AS «Схема» FROM (ВЫБЕРИТЕ ps.object_id, SUM (СЛУЧАЙ КОГДА (ps.index_id < 2 ) THEN row_count ELSE 0 END) AS [строки], SUM (ps.reserved_page_count) как зарезервировано, SUM (CASE WHEN (ps.index_id < 2 ) THEN (ps.in_row_data_page_count + ps.lob_used_page_count + ps.row_overflow_used_page_count) ELSE (ps.lob_used_page_count + ps.row_overflow_used_page_count) END) AS данные, СУММА (пс.used_page_count) КАК Б / У FROM sys.dm_db_partition_stats ps GROUP BY ps.object_id) AS a1 LEFT OUTER JOIN (ВЫБЕРИТЕ it.parent_id, SUM (ps.reserved_page_count) как зарезервировано, SUM (ps.used_page_count) как используется FROM sys.dm_db_partition_stats ps ВНУТРЕННЕЕ СОЕДИНЕНИЕ sys.internal_tables ON (it.object_id = ps.object_id) ГДЕ it.internal_type IN ( 202 , 204 ) GROUP BY it.parent_id) КАК a4 ВКЛ (a4.parent_id = a1.object_id) ВНУТРЕННЕЕ СОЕДИНЕНИЕ sys.all_objects a2 ON (a1.object_id = a2.object_id) ВНУТРЕННЕЕ СОЕДИНЕНИЕсхемы a3 включены (a2.schema_id = a3.schema_id) - ОТПРАВИТЬ ЗАПРОС

Размер базы данных и используемого пространства. (У людей здесь много путаницы — здесь будут отображаться размер БД и файла журнала, а также использованное / свободное место в каждом)

 

- Размер базы и используемого пространства. - это покажет размер БД и файла журнала плюс используемое / свободное место в каждом Преобразование SELECT (десятичное число ( 12 , 0 ), округленное (sf.size / 128.000 , 2 )) AS 'FileSize (MB)', преобразовать (десятичное число ( 12 , 0 ), округлить (свойство файла (sf.имя, «SpaceUsed») / 128.000 , 2 )) AS «SpaceUsed (MB)», конвертировать (десятичное число ( 12 , 0 ), округление ((sf.size-fileproperty (sf.name, 'SpaceUsed')) / 128.000 , 2 )) AS 'FreeSpace (MB)', CASE smf.is_percent_growth WHEN 1 THEN CONVERT (VARCHAR ( 10 ), smf.growth) + '%' ELSE convert (VARCHAR ( 10 ), smf.growth / 128 ) + 'MB' END AS 'Autogrow', конвертировать (десятичное число ( 12 , 0 ), округленное (sf.maxsize / 128.000 , 2 )) AS 'AutoGrowthMB (MAX)', слева (sf.NAME, 15 ) AS 'NAME', слева (sf.FILENAME, 120 ) AS 'PATH', sf.FILEID из dbo.sysfiles sf ПРИСОЕДИНЯЙТЕСЬ к sys.master_files smf к smf.physical_name = sf.filename

Оперативная база данных запросов:

Секция оповещений

(БД OperationsManager):

Количество предупреждений консоли в день:

 

- Количество предупреждений консоли в день: ВЫБРАТЬ КОНВЕРТ (VARCHAR ( 20 ), TimeAdded, 102 ) AS DayAdded, COUNT (*) AS NumAlertsPerDay ОТ оповещения с (NOLOCK) ГДЕ TimeRaised не NULL GROUP BY CONVERT (VARCHAR ( 20 ), TimeAdded, 102 ) ЗАКАЗАТЬ на DayAdded DESC

лучших 20 предупреждений в оперативной базе данных, по количеству предупреждений

 

- 20 предупреждений в оперативной базе данных по количеству предупреждений ВЫБЕРИТЕ ТОП 20 СУММ ( 1 ) AS AlertCount, AlertStringName AS 'AlertName', AlertStringDescription AS 'Описание', Название, MonitoringRuleId ОТ Alertview WITH (NOLOCK) ГДЕ TimeRaised не NULL GROUP BY AlertStringName, AlertStringDescription, Name, MonitoringRuleId ЗАКАЗАТЬ НА AlertCount DESC

20 лучших предупреждений в оперативной базе данных по количеству повторов

 

- 20 предупреждений в оперативной базе данных по количеству повторов ВЫБЕРИТЕ ТОП 20 СУММА (RepeatCount + 1 ) КАК RepeatCount, AlertStringName как 'AlertName', AlertStringDescription как «Описание», Название, MonitoringRuleId ОТ Alertview WITH (NOLOCK) ГДЕ Timeraised не равен NULL GROUP BY AlertStringName, AlertStringDescription, Name, MonitoringRuleId ЗАКАЗАТЬ ПО RepeatCount DESC

Топ 20 объектов, генерирующих наибольшее количество предупреждений в оперативной базе данных, по количеству повторов

 

- Топ 20 объектов, генерирующих наибольшее количество предупреждений в оперативной базе данных, по количеству повторений ВЫБЕРИТЕ ТОП 20 СУММА (RepeatCount + 1 ) КАК RepeatCount, MonitoringObjectPath AS 'Path' ОТ Alertview WITH (NOLOCK) ГДЕ Timeraised не равен NULL GROUP BY MonitoringObjectPath ЗАКАЗАТЬ ПО RepeatCount DESC

Топ 20 объектов, генерирующих наибольшее количество предупреждений в оперативной базе данных, по количеству предупреждений

 

- Топ 20 объектов, генерирующих наибольшее количество предупреждений в оперативной базе данных, по количеству предупреждений ВЫБЕРИТЕ ТОП 20 СУММ ( 1 ) AS AlertCount, MonitoringObjectPath AS 'Path' ОТ Alertview WITH (NOLOCK) ГДЕ TimeRaised не NULL GROUP BY MonitoringObjectPath ЗАКАЗАТЬ НА AlertCount DESC

Количество предупреждений консоли в день по состоянию разрешения:

 

- Количество предупреждений консоли в день по состоянию разрешения: ВЫБРАТЬ СЛУЧАЙ КОГДА (ГРУППИРОВАНИЕ (КОНВЕРТ (VARCHAR ( 20 ), TimeAdded, 102 )) = 1 ) ТОГДА КОНВЕРТ «ВСЕ ДНИ» (VARCHAR ( 20 ), TimeAdded, 102 ) END AS [Дата], СЛУЧАЙ, КОГДА (GROUPING (ResolutionState) = 1 ) ПОСЛЕ ТОГО, ЧТО «Все государства разрешения» ДАЖЕ CAST (ResolutionState AS VARCHAR ( 5 )) END AS [ResolutionState], COUNT (*) AS NumAlerts ОТ оповещения с (NOLOCK) ГДЕ TimeRaised не NULL GROUP BY CONVERT (VARCHAR ( 20 ), с добавлением времени, 102 ), разрешениеState With ROLLUP ЗАКАЗАТЬ ПО ДАТЕ DESC

Раздел событий (БД OperationsManager):

Все события по количеству по дням, итого по всей базе данных: (это говорит нам о том, сколько событий в день мы вставляем — и помогает нам искать слишком много событий, штормов событий и результатов после настройки правил, которые генерируют слишком много событий)

 

- Все события по количеству по дням, с итогом для всей базы данных ВЫБЕРИТЕ СЛУЧАЙ КОГДА (ГРУППИРОВАНИЕ (КОНВЕРТ (VARCHAR ( 20 ), TimeAdded, 102 )) = 1 ) ТО «Все дни» ELSE CONVERT (VARCHAR ( 20 ), TimeAdded, 102 ) END AS DayAdded, COUNT (*) AS EventsPerDay FROM EventAllView GROUP BY CONVERT (VARCHAR ( 20 ), с добавлением времени, 102 ) с ROLLUP ЗАКАЗАТЬ на DayAdded DESC

Наиболее распространенные события по номеру события и источнику события: (Это дает нам имя источника события, чтобы увидеть, что вызывает эти события)

 

- большинство общих событий по номеру события и источнику события ВЫБЕРИТЕ top 20 Number в качестве EventID, COUNT (*) AS TotalEvents, Publishername как EventSource ИЗ EventAllView eav с (nolock) GROUP BY Number, Publishername ЗАКАЗАТЬ ПО TotalEvents DESC

Компьютеры, генерирующие большинство событий:

 

- Компьютеры, генерирующие большинство событий ВЫБЕРИТЕ top 20 LoggingComputer as ComputerName, COUNT (*) AS TotalEvents ИЗ EventallView с (NOLOCK) GROUP BY LoggingComputer ЗАКАЗАТЬ ПО TotalEvents DESC

Раздел производительности

(БД OperationsManager):

Производительность вставок в день:

 

- Производительность вставок в день: ВЫБЕРИТЕ СЛУЧАЙ КОГДА (ГРУППИРОВАНИЕ (КОНВЕРТ (VARCHAR ( 20 ), TimeSampled, 102 )) = 1 ) ТО «Все дни» ELSE CONVERT (VARCHAR ( 20 ), TimeSampled, 102 ) КОНЕЦ КАК DaySampled, COUNT (*) AS PerfInsertPerDay ИЗ PerformanceDataAllView с (NOLOCK) GROUP BY CONVERT (VARCHAR ( 20 ), TimeSampled, 102 ) с ROLLUP ЗАКАЗАТЬ ПО DaySampled DESC

Топ 20 добавлений производительности по объекту perf и имени счетчика: (Это показывает нам, какие счетчики, вероятно, переизбраны или имеют повторяющиеся правила сбора, и заполняют базы данных)

 

- Топ 20 рабочих вставок по объекту perf и имени счетчика: ВЫБЕРИТЕ ТОП 20 шт.ObjectName, pcv.CounterName, COUNT (pcv.countername) AS Всего Из исполненных данных все видят AS pdv, представление производительности видят AS pcv ГДЕ (pdv.performancesourceinternalid = pcv.performancesourceinternalid) GROUP BY pcv.objectname, pcv.countername ЗАКАЗАТЬ ПО СЧЕТУ (pcv.countername) DESC

Для просмотра всех данных о производительности, собранных для данного компьютера:

 

- Чтобы просмотреть все вставки производительности для данного компьютера: выберите отдельный путь, ObjectName, CounterName, InstanceName из PerformanceDataAllView PDV с (NOLOCK) внутреннее соединение PerformanceCounterView pcv на pdv.performancesourceinternalid = pcv.performancesourceinternalid внутреннее соединение BaseManagedEntity bme на pcv.ManagedEntityId = bme.BaseManagedEntityId где путь = 'sql2a.opsmgr.net' упорядочить по имени объекта, имени контрагента, имени экземпляра

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

 

- Извлечь все данные перфорации для данного компьютера, объекта, счетчика и экземпляра: выберите путь, ObjectName, CounterName, InstanceName, SampleValue, TimeSampled из PerformanceDataAllView PDV с (NOLOCK) внутреннее соединение PerformanceCounterView pcv на pdv.performancesourceinternalid = pcv.performancesourceinternalid внутреннее соединение BaseManagedEntity bme на pcv.ManagedEntityId = bme.BaseManagedEntityId где путь = 'sql2a.opsmgr.net' И objectname = 'LogicalDisk' AND countername = 'Свободные Мегабайты' упорядочить по времени выборки DESC

Штат Раздел:

Чтобы узнать, сколько лет вашим данным StateChange:

 

- чтобы узнать, сколько лет вашим данным StateChange: объявить @statedaystokeep INT SELECT @statedaystokeep = DaysToKeep from PartitionAndGroomingSettings WHERE ObjectName = 'StateChangeEvent' ВЫБЕРИТЕ COUNT (*) как «Total StateChanges», рассчитывать (случай, когдаTimeGenerated> dateadd (dd, - @ saidaystokeep, getutcdate ()) THEN sce.TimeGenerated ELSE NULL END) как «в пределах удержания ухода», считать (СЛУЧАЙ, КОГДА sce.TimeGenerated удержание ухода» считать (СЛУЧАЙ КОГДА sce.TimeGenerated 30 , getutcdate ()) THEN sce.TimeGenerated ELSE NULL END) как

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *