Что такое запросы?

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

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

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

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

Как используются запросы?

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

Когда вы запускаете запрос, результаты представлены вам в таблице, но при его разработке вы используете другое представление. Это называется представлением Query Design , и оно позволяет увидеть, как ваш запрос объединяется.

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

маркированная графика

Однозарядные запросы

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

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

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

Чтобы применить простой запрос из одной таблицы:

  1. Выберите вкладку « Создать » на ленте и найдите группу « Запросы ».
  2. Выберите команду « Запрос дизайна» .
    Команда проектирования запросов
  3. Доступ переключится на представление Query Design . В появившемся диалоговом окне « Показать таблицу » выберите таблицу, в которую вы хотите запустить запрос. Нажмите « Добавить» , затем нажмите « Закрыть» . Мы выполняем запрос о наших клиентах, поэтому добавим таблицу Customers .
    Выбор таблицы для использования в запросе
  4. Выбранная таблица будет отображаться как небольшое окно в области « Связывание объектов» . В окне таблицы дважды щелкните имена полей, которые вы хотите включить в свой запрос. Они будут добавлены в дизайнерскую сетку в нижней части экрана.

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

    Выбор полей для добавления в запрос
  5. Задайте критерии поиска , щелкнув ячейку в строке « Критерии:» каждого поля, которое вы хотите фильтровать. Ввод критериев в несколько полей в строке «Критерии: строка» задает ваш запрос, чтобы он включал только результаты, соответствующие всем критериям. Если вы хотите установить несколько критериев, но вам не нужны записи, показанные в ваших результатах, чтобы удовлетворить их все, введите первые критерии в строке «Критерии: строка» и дополнительные критерии в строке « Или» и строках под ней. Для этого запроса с одной таблицей мы будем использовать очень простые критерии поиска.
    • Мы хотим найти наших клиентов, которые живут в городе под названием Raleigh , поэтому в нашем поле « Город» мы напечатаем «Raleigh» . Ввод «Raleigh» в кавычках будет извлекать все записи с точным соответствием для Raleigh в поле City.
    • Некоторые клиенты, которые живут в пригороде, живут довольно близко, и мы также хотели бы пригласить их. Мы добавим их почтовый индекс , 27513 , в качестве еще одного критерия. Поскольку мы хотим найти клиентов, которые либо живут в Raleigh, либо в почтовом индексе 27513, мы наберем «27513» в строке or: Zip Code .
    Установка критериев поиска, чтобы запрос обнаружил записи с «Raleigh» в поле City или «27513» в поле Zip Code.
  6. После того, как вы установите критерии, запустите запрос, нажав команду « Выполнить» на вкладке « Дизайн запросов ».
    Команда Run Query
  7. Результаты запроса будут отображаться в представлении Datasheet запроса , которое выглядит как таблица. Если вы хотите, сохраните запрос, нажав команду « Сохранить» на панели быстрого доступа. Когда появится запрос на его имя, введите нужное имя и нажмите « ОК» .
    Именование нового запроса для его сохранения

Проектирование запроса с несколькими таблицами

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

Планирование запроса

При планировании запроса, который использует более одной таблицы, выполните следующие четыре действия:

  1. Точно укажите то, что вы хотите знать. Если бы вы могли спросить свою базу данных о каком-либо вопросе, что бы это было? Построение запроса сложнее, чем просто задание вопроса, но точно знать, какой вопрос вы хотите ответить, имеет важное значение для создания полезного запроса.
  2. Определите каждый тип информации, которую вы хотите включить в результаты вашего запроса. Какие поля содержат эту информацию?
  3. Найдите поля, которые вы хотите включить в свой запрос. В каких таблицах они содержатся?
  4. Определите критерии, которые должна удовлетворять информация в каждой области. Подумайте о вопросе, который вы задали на первом шаге. Какие поля вам нужны для поиска конкретной информации? Какую информацию вы ищите? Как вы его будете искать?

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

Планирование нашего запроса

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

Определив вопрос, который мы хотим задать

Наша база данных выпечки содержит множество клиентов, некоторые из которых никогда не размещали заказ, но которые находятся в нашей базе данных, потому что они подписались на наш список рассылки. Большинство из них живут в пределах города, но другие живут за городом или даже из штата! Мы хотим, чтобы наши загородные клиенты, которые раньше заказывали заказы, возвращались и давали нам еще одну попытку, поэтому мы отправим им несколько купонов. Мы действительно не хотим, чтобы в нашем списке были клиенты, которые живут слишком далеко; отправка купона кому-то, кто не живет в нашем районе, вероятно, не заставит их войти. Так что действительно, мы просто хотим найти людей, которые не живут в нашем городе, но которые все еще живут в нашем районе.

Идентификация данных, которые мы хотим найти

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

Идентификация необходимой нам информации

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

Составляя список информации, необходимой нам для создания запроса, который ответит на наш вопрос

Расположение таблиц, содержащих нужную нам информацию

Чтобы написать запрос, вам нужно хорошо ознакомиться с различными таблицами в вашей базе данных. Из обширной работы с нашей собственной базой данных мы знаем, что информация о клиенте, которая нам нужна, находится в полях в таблице Customers . Наши идентификаторы номеров заказов находятся в поле в таблице « Заказы» . Нам нужно включить эти две таблицы, чтобы найти всю необходимую нам информацию.

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

Определение критериев, которые должен искать наш запрос

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

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

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

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

Чтобы писать запросы, вам нужно будет установить критерии на языке, который понимает Access . Как вы можете видеть на изображении выше, наши критерии, требующие номеров телефонов, начинаться с 919, должны быть напечатаны следующим образом: Like («919 *») . Чтобы узнать, как писать дополнительные критерии, обратитесь к нашему Краткому справочному руководству по критериям критериев запроса в разделе « Дополнительно » этого руководства. Руководство содержит несколько наиболее часто используемых критериев в запросах Access.

Объединение таблиц в запросы

Последнее, что вам нужно учитывать при разработке запроса, – это то, как вы связываете или присоединяетесь к столам, с которыми работаете. Когда вы добавляете две таблицы в запрос Access, это то, что вы увидите в области « Связывание объектов» :

Присоединенные таблицы в области связей объектов

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

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

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

Связанные данные, хранящиеся в таблицах «Клиенты» и «Заказы»

Что вы замечаете, когда смотрите эти списки? Каждый заказ в таблице « Заказы» связан с кем-то в таблице « Клиенты» – клиентом, который разместил этот заказ. Однако, когда вы смотрите таблицу Customers, вы увидите, что клиенты, разместившие несколько заказов, связаны более чем с одним заказом, а те, кто никогда не размещал заказ, не привязаны к никаким заказам. Как вы можете видеть, даже когда две таблицы связаны, возможно иметь записи в одной таблице, которые не имеют отношения к какой-либо записи в другой таблице.

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

Соединение слева направо извлекает все записи из первой таблицы слева

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

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

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

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

Соединение справа налево сначала извлекает все записи из таблицы справа.

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

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

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

Теперь, когда мы понимаем, какое направление соединения нам нужно использовать, мы готовы построить наш запрос!

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

Создание запроса с несколькими таблицами

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

Чтобы создать запрос с несколькими таблицами:

  1. Выберите команду Design Query на вкладке « Создать » на ленте.
    Команда проектирования запросов
  2. В появившемся диалоговом окне « Показать таблицу » выберите каждую таблицу, которую вы хотите включить в свой запрос, затем нажмите « Добавить» . После того, как вы добавили все нужные таблицы, нажмите « Закрыть» . Когда мы планировали наш запрос, мы решили, что нам нужна информация из таблицы Customers и Orders , поэтому мы добавим их.
    Выбор таблиц для использования в запросе
  3. Таблицы появятся в панели «Связывание объектов» , которая связана линией соединения . Дважды щелкните тонкий раздел линии соединения между двумя таблицами, чтобы изменить направление соединения .
    Щелчок по линии соединения для изменения направления
  4. Откроется диалоговое окно « Свойства соединения ». Выберите вариант, чтобы выбрать направление вашего соединения.
    • Выберите вариант 2: для слева-р IGHT присоединиться. В нашем запросе левая таблица – таблица Customers , поэтому выбор этого означает, что все наши клиенты, которые соответствовали нашим критериям местоположения, независимо от того, разместили ли они заказ, будут включены в наши результаты. Мы не хотим выбирать этот вариант для нашего запроса.
    • Выберите вариант 3: для запроса справа на один . Поскольку наш правильный стол является нашей таблицей Orders , выбор этого параметра позволит нам работать с записями для всех заказов и только для клиентов, разместивших заказы. Мы выберем этот вариант для нашего запроса, потому что это именно те данные, которые мы хотим видеть.
    Изменение направления соединения справа налево
  5. В окнах таблицы дважды щелкните имена полей, которые вы хотите включить в свой запрос. Они будут добавлены в дизайнерскую сетку в нижней части экрана.

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

    Добавление полей таблицы в запрос
  6. Установите критерии поля , введя требуемые критерии в строке критериев каждого поля. Мы хотим установить два критерия:
    • Во-первых, чтобы найти клиентов, которые не живут в Роли, мы наберем Not In («Raleigh») в поле City .
    • Во-вторых, чтобы найти клиентов, у которых есть номер телефона, начинающийся с кода зоны 919 , мы наберем « (919 *») в поле « Номер телефона» .
    Определение критериев поля для нашего запроса
  7. После того, как вы установите критерии, запустите запрос, нажав команду « Выполнить» на вкладке « Дизайн запросов ».
    Выбор команды «Выполнить»
  8. Результаты запроса будут отображаться в представлении Datasheet запроса , которое выглядит как таблица. Если вы хотите, сохраните запрос, нажав команду « Сохранить» на панели быстрого доступа. Когда появится запрос на его имя, введите нужное имя и нажмите « ОК» .
    Именование нового запроса для его сохранения

Задание!

  1. Если вы еще этого не сделали, загрузите нашу пробную базу данных и откройте ее.
  2. повторите новый запрос.
  3. Выберите таблицы клиентов и ордеров, которые будут включены в ваш запрос.
  4. Изменение направления присоединиться к праву на левом .
  5. Добавьте в свой запрос следующие поля из таблицы Customers :
    • Имя
    • Фамилия
    • город
  6. Добавьте в запрос следующие поля из таблицы Заказы :
    • Заметки
    • Я БЫ
  7. Установите следующие критерии:
    • В поле « Фамилия» введите «Go *», чтобы возвращать только записи с именами, начинающимися с Go .
    • В поле « Город» введите «Raleigh», чтобы вернуть только записи с Raleigh в поле City.
    • В поле ID введите > = 60, чтобы возвращать только записи с идентификационным номером, большим или равным 60.
  8. Запустите запрос. Если вы правильно ввели запрос, ваши результаты будут содержать одну запись для клиента с именем Will Good . Если нет, нажмите стрелку раскрывающегося списка « Вид» на ленте, чтобы вернуться к представлению «Дизайн» и проверить свою работу.
  9. Сохраните запрос с именем Will Query .

Залишити відповідь