В каком диалоговом окне создают связи между полями таблиц бд


Связи между таблицами базы данных / Хабр

1. Введение


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

1.1. Для кого эта статья?


Эта статья будет полезна тем, кто хочет разобраться со связями между таблицами базы данных. В ней я постарался рассказать на понятном языке, что это такое. Для лучшего понимания темы, я чередую теоретический материал с практическими примерами, представленными в виде диаграммы и запроса, создающего нужные нам таблицы. Я использую СУБД Microsoft SQL Server и запросы пишу на T-SQL. Написанный мною код должен работать и на других СУБД, поскольку запросы являются универсальными и не используют специфических конструкций языка T-SQL.

1.2. Как вы можете применить эти знания?


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

2. Благодарности


Учтены были советы и критика авторов jobgemws, unfilled, firnind, Hamaruba.
Спасибо!

3.1. Как организовываются связи?


Связи создаются с помощью внешних ключей (foreign key).
Внешний ключ — это атрибут или набор атрибутов, которые ссылаются на primary key или unique другой таблицы. Другими словами, это что-то вроде указателя на строку другой таблицы.

3.2. Виды связей


Связи делятся на:
  1. Многие ко многим.
  2. Один ко многим.
    • с обязательной связью;
    • с необязательной связью;
  3. Один к одному.
    • с обязательной связью;
    • с необязательной связью;

Рассмотрим подробно каждый из них.

4. Многие ко многим


Представим, что нам нужно написать БД, которая будет хранить работником IT-компании. При этом существует некий стандартный набор должностей. При этом:
  • Работник может иметь одну и более должностей. Например, некий работник может быть и админом, и программистом.
  • Должность может «владеть» одним и более работников. Например, админами является определенный набор работников. Другими словами, к админам относятся некие работники.

Работников представляет таблица «Employee» (id, имя, возраст), должности представляет таблица «Position» (id и название должности). Как видно, обе эти таблицы связаны между собой по правилу многие ко многим: каждому работнику соответствует одна и больше должностей (многие должности), каждой должности соответствует один и больше работников (многие работники).

4.1. Как построить такие таблицы?


Мы уже имеем две таблицы, описывающие работника и профессию. Теперь нам нужно установить между ними связь многие ко многим. Для реализации такой связи нам нужен некий посредник между таблицами «Employee» и «Position». В нашем случае это будет некая таблица «EmployeesPositions» (работники и должности). Эта таблица-посредник связывает между собой работника и должность следующим образом:
Слева указаны работники (их id), справа — должности (их id). Работники и должности на этой таблице указываются с помощью id’шников.

На эту таблицу можно посмотреть с двух сторон:

  1. Таким образом, мы говорим, что работник с id 1 находится на должность с id 1. При этом обратите внимание на то, что в этой таблице работник с id 1 имеет две должности: 1 и 2. Т.е., каждому работнику слева соответствует некая должность справа.
  2. Мы также можем сказать, что должности с id 3 принадлежат пользователи с id 2 и 3. Т.е., каждой роли справа принадлежит некий работник слева.

4.2. Реализация


Диаграмма

Код на T-SQL
create table dbo.Employee ( EmployeeId int primary key, EmployeeName nvarchar(128) not null, EmployeeAge int not null ) -- Заполним таблицу Employee данными. insert into dbo.Employee(EmployeeId, EmployeeName, EmployeeAge) values (1, N'John Smith', 22) insert into dbo.Employee(EmployeeId, EmployeeName, EmployeeAge) values (2, N'Hilary White', 22) insert into dbo.Employee(EmployeeId, EmployeeName, EmployeeAge) values (3, N'Emily Brown', 22) create table dbo.Position ( PositionId int primary key, PositionName nvarchar(64) not null ) -- Заполним таблицу Position данными. insert into dbo.Position(PositionId, PositionName) values(1, N'IT-director') insert into dbo.Position(PositionId, PositionName) values(2, N'Programmer') insert into dbo.Position(PositionId, PositionName) values(3, N'Engineer') -- Заполним таблицу EmployeesPositions данными. create table dbo.EmployeesPositions ( PositionId int foreign key references dbo.Position(PositionId), EmployeeId int foreign key references dbo.Employee(EmployeeId), primary key(PositionId, EmployeeId) ) insert into dbo.EmployeesPositions(EmployeeId, PositionId) values (1, 1) insert into dbo.EmployeesPositions(EmployeeId, PositionId) values (1, 2) insert into dbo.EmployeesPositions(EmployeeId, PositionId) values (2, 3) insert into dbo.EmployeesPositions(EmployeeId, PositionId) values (3, 3)



ОбъясненияС помощью ограничения foreign key мы можем ссылаться на primary key или unique другой таблицы. В этом примере мы
  • ссылаемся атрибутом PositionId таблицы EmployeesPositions на атрибут PositionId таблицы Position;
  • атрибутом EmployeeId таблицы EmployeesPositions — на атрибут EmployeeId таблицы Employee;


4.3. Вывод


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

5. Один ко многим


Эта самая распространенная связь между базами данных. Мы рассматриваем ее после связи многие ко многим для сравнения.

Предположим, нам нужно реализовать некую БД, которая ведет учет данных о пользователях. У пользователя есть: имя, фамилия, возраст, номера телефонов. При этом у каждого пользователя может быть от одного и больше номеров телефонов (многие номера телефонов).

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

Другими словами, телефон принадлежит только одному пользователю. А пользователю могут принадлежать 1 и более телефонов (многие).

Как мы видим, это отношение один ко многим.

5.1. Как построить такие таблицы?


Пользователей будет представлять некая таблица «Person» (id, имя, фамилия, возраст), номера телефонов будет представлять таблица «Phone». Она будет выглядеть так:
Данная таблица представляет три номера телефона. При этом номера телефона с id 1 и 2 принадлежат пользователю с id 5. А вот номер с id 3 принадлежит пользователю с id 17.
Заметка. Если бы у таблицы «Phones» было бы больше атрибутов, то мы смело бы их добавляли в эту таблицу.

5.2. Почему мы не делаем тут таблицу-посредника?


Таблица-посредник нужна только в том случае, если мы имеем связь многие-ко-многим. По той простой причине, что мы можем рассматривать ее с двух сторон. Как, например, таблицу EmployeesPositions ранее:
  1. Каждому работнику принадлежат несколько должностей (многие).
  2. Каждой должности принадлежит несколько работников (многие).

Но в нашем случае мы не можем сказать, что каждому телефону принадлежат несколько пользователей — номеру телефона может принадлежать только один пользователь.
Теперь прочтите еще раз заметку в конце пункта 5.1. — она станет для вас более понятной.
5.3. Реализация

Диаграмма

Код на T-SQL
create table dbo.Person ( PersonId int primary key, FirstName nvarchar(64) not null, LastName nvarchar(64) not null, PersonAge int not null ) insert into dbo.Person(PersonId, FirstName, LastName, PersonAge) values (5, N'John', N'Doe', 25) insert into dbo.Person(PersonId, FirstName, LastName, PersonAge) values (17, N'Izabella', N'MacMillan', 19) create table dbo.Phone ( PhoneId int primary key, PersonId int foreign key references dbo.Person(PersonId), PhoneNumber varchar(64) not null ) insert into dbo.Phone(PhoneId, PersonId, PhoneNumber) values (1, 5, '11 091-10') insert into dbo.Phone(PhoneId, PersonId, PhoneNumber) values (2, 5, '19 124-66') insert into dbo.Phone(PhoneId, PersonId, PhoneNumber) values (3, 17, '21 972-02') 


Объяснения

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


6. Один к одному


Представим, что на работе вам дали задание написать БД для учета всех работников для HR. Начальник уверял, что компании нужно знать только об имени, возрасте и телефоне работника. Вы разработали такую БД и поместили в нее всю 1000 работников компании. И тут начальник говорит, что им зачем-то нужно знать о том, является ли работник инвалидом или нет. Наиболее простое, что приходит в голову — это добавить новый столбец типа bool в вашу таблицу. Но это слишком долго вписывать 1000 значений и ведь true вы будете вписывать намного реже, чем false (2% будут true, например).

Более простым решением будет создать новую таблицу, назовем ее «DisabledEmployee». Она будет выглядеть так:

Но это еще не связь один к одному. Дело в том, что в такую таблицу работник может быть вписан более одного раза, соответственно, мы получили отношение один ко многим: работник может быть несколько раз инвалидом. Нужно сделать так, чтобы работник мог быть вписан в таблицу только один раз, соответственно, мог быть инвалидом только один раз. Для этого нам нужно указать, что столбец EmployeeId может хранить только уникальные значения. Нам нужно просто наложить на столбец EmloyeeId ограничение unique. Это ограничение сообщает, что атрибут может принимать только уникальные значения.

Выполнив это мы получили связь один к одному.

Заметка. Обратите внимание на то, что мы могли также наложить на атрибут EmloyeeId ограничение primary key. Оно отличается от ограничения unique лишь тем, что не может принимать значения null.

6.1. Вывод


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

6.2. Реализация


Диаграмма

Код на T-SQL
create table dbo.Employee ( EmployeeId int primary key, EmployeeName nvarchar(128) not null, EmployeeAge int not null ) insert into dbo.Employee(EmployeeId, EmployeeName, EmployeeAge) values (159, N'John Smith', 22) insert into dbo.Employee(EmployeeId, EmployeeName, EmployeeAge) values (722, N'Hilary White', 29) insert into dbo.Employee(EmployeeId, EmployeeName, EmployeeAge) values (937, N'Emily Brown', 19) insert into dbo.Employee(EmployeeId, EmployeeName, EmployeeAge) values (100, N'Frederic Miller', 16) insert into dbo.Employee(EmployeeId, EmployeeName, EmployeeAge) values (99, N'Henry Lorens', 20) insert into dbo.Employee(EmployeeId, EmployeeName, EmployeeAge) values (189, N'Bob Red', 25) create table dbo.DisabledEmployee ( DisabledPersonId int primary key, EmployeeId int unique foreign key references dbo.Employee(EmployeeId) ) insert into dbo.DisabledEmployee(DisabledPersonId, EmployeeId) values (1, 159) insert into dbo.DisabledEmployee(DisabledPersonId, EmployeeId) values (2, 722) insert into dbo.DisabledEmployee(DisabledPersonId, EmployeeId) values (3, 937)


Объяснения

Таблица DisabledEmployee имеет атрибут EmployeeId, что является внешним ключом. Он ссылается на атрибут EmployeeId таблицы Employee. Кроме того, этот атрибут имеет ограничение unique, что говорит о том, что в него могут быть записаны только уникальные значения. Соответственно, работник может быть записан в эту таблицу не более одного раза.


7. Обязательные и необязательные связи


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

7.1. Один ко многим


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

Одну и ту же связь можно рассматривать как обязательную и как необязательную. Рассмотрим вот такой пример:
У одной биологической матери может быть много детей. У ребенка есть только одна биологическая мать.
А) У женщины необязательно есть свои дети. Соответственно, связь необязательна.
Б) У ребенка обязательно есть только одна биологическая мать – в таком случае, связь обязательна.

7.2. Один к одному


  1. Один к одному с обязательной связью:
    У одного гражданина определенной страны обязательно есть только один паспорт этой страны. У одного паспорта есть только один владелец.
  2. Один к одному с необязательной связью:
    У одной страны может быть только одна конституция. Одна конституция принадлежит только одной стране. Но конституция не является обязательной. У страны она может быть, а может и не быть, как, например, у Израиля и Великобритании.

Одну и ту же связь можно рассматривать как обязательную и как необязательную:
У одного человека может быть только один загранпаспорт. У одного загранпаспорта есть только один владелец.
А) Наличие загранпаспорта необязательно – его может и не быть у гражданина. Это необязательная связь.
Б) У загранпаспорта обязательно есть только один владелец. В этом случае, это уже обязательная связь.

7.3. Многие ко многим


Любая связь многие ко многим является необязательной. Например:
Человек может инвестировать в акции разных компаний (многих). Инвесторами какой-то компании являются определенные люди (многие).
А) Человек может вообще не инвестировать свои деньги в акции.
Б) Акции компании мог никто не купить.

8. Как читать диаграммы?


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

Мы видим отношение один ко многим. Одной персоне принадлежит много телефонов.

  1. Возле таблицы Person находится золотой ключик. Он обозначает слово «один».
  2. Возле таблицы Phone находится знак бесконечности. Он обозначает слово «многие».

9. Итоги


  1. Связи бывают:
    • Многие ко многим.
    • Один ко многим.
      1) с обязательной связью;
      2) с необязательной связью.
    • Один к одному.
      1) с обязательной связью;
      2) с необязательной связью.
  2. Связи организовываются с помощью внешних ключей.
  3. Foreign key (внешний ключ) — это атрибут или набор атрибутов, которые ссылаются на primary key или unique другой таблицы. Другими словами, это что-то вроде указателя на строку другой таблицы.

10. Задачи


Для лучшего усвоения материала предлагаю вам решить следующие задачи:
  1. Описать таблицу фильм: id, название, длительность, режиссер, жанр фильма. Обратите внимание на то, что у фильма может быть более одного жанра, а к одному жанру может относится более, чем один фильм.
  2. Описать таблицу песня: id, название, длительность, певец. При этом у песни может быть более одного певца, а певец мог записать более одной песни.
  3. Реализовать таблицу машина: модель, производитель, цвет, цена
    • Описать отдельную таблицу производитель: id, название, рейтинг.
    • Описать отдельную таблицу цвета: id, название.

    У одной машины может быть только один производитель, а у производителя — много машин. У одной машины может быть много цветов, а у одного цвета может быть много машин.
  4. Добавить в БД из пункта 6.2. таблицу военно-обязанных по типу того, как мы описали отдельную таблицу DisabledEmployee.

Обзор полей связанных записей - Airtable

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

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

Вы определенно захотите использовать поле связанной записи, если:

  • У вас есть две таблицы с разными типами элементов (например, книги и авторы), и вы хотите смоделировать отношения между этими двумя разными типами элементов
  • Вы хотите получить доступ к важной информации из другой записи в другой таблице одним щелчком мыши
  • Вы хотите избежать дублирования информации в таблицах (что может привести к проблемам, если вы обновите ее в одной таблице, но забудете обновить ее в другом месте!), Используя поле поиска
  • Вы хотите суммировать информацию из другой таблицы с помощью поля сведения

По сути, связанная запись представляет собой связь (связь!) Между двумя разными объектами, идеями или людьми.

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

Поля связанных записей представляют собой двусторонние отношения между записями - например, поле связанной записи с названием «Автор (ы)» в таблице с названием «Книги» не означает просто «Эта книга написана этим автором», это также означает «Этот автор написал эту книгу.Таким образом, это означает, что поля связанных записей равны , обратным :

.

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

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

Что ты хочешь сделать?

Используйте данные из связанной таблицы для улучшения информации в вашем запросе

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

Просмотреть все записи из двух похожих таблиц

Используйте данные из связанной таблицы для улучшения информации в вашем запросе

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

Используйте мастер запросов для создания запроса из основной таблицы и связанной таблицы

  1. Убедитесь, что таблицы имеют определенную связь в окне «Связи».

    Как?

    1. На вкладке Инструменты базы данных в группе Показать / скрыть щелкните Отношения .

    2. На вкладке Design в группе Взаимосвязи щелкните Все взаимосвязи .

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

      • Если таблицы видны в окне «Связи», убедитесь, что связь уже определена.

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

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

        На вкладке Design в группе Показать / скрыть щелкните Имена таблиц .

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

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

      Примечание: Вы можете создать связь между полем с типом данных AutoNumber и полем с типом данных Number, если это поле имеет размер длинного целого числа. Это часто случается, когда вы создаете отношения «один ко многим».

      Откроется диалоговое окно Изменить отношения .

    5. Щелкните Создать , чтобы создать отношение.

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

    6. Закройте окно Отношения .

  2. На вкладке Создать в группе Запросы щелкните Мастер запросов .

  3. В диалоговом окне Новый запрос щелкните Мастер простых запросов , а затем щелкните ОК .

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

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

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

  7. Добавьте поля, которые вы хотите использовать для улучшения результатов запроса, в список Selected Fields , а затем нажмите Next .

  8. Менее Хотите подробный или сводный запрос? , щелкните либо Detail , либо Summary .

    Если вы не хотите, чтобы ваш запрос выполнял какие-либо агрегатные функции ( Sum , Avg , Min , Max , Count , StDev или Var ), выберите подробный запрос. Если вы действительно хотите, чтобы ваш запрос выполнял агрегатную функцию, выберите сводный запрос.Сделав свой выбор, нажмите Далее .

  9. Щелкните Finish , чтобы просмотреть результаты.

Пример, использующий образец базы данных Northwind

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

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

Используйте мастер запросов для создания запроса
  1. Откройте образец базы данных Northwind. Закройте форму входа.

  2. На вкладке Создать в группе Запросы щелкните Мастер запросов .

  3. В диалоговом окне Новый запрос щелкните Мастер простых запросов , а затем щелкните ОК .

  4. В поле со списком Таблицы / Запросы щелкните Таблица: Заказы .

  5. В списке Доступные поля дважды щелкните OrderID , чтобы переместить это поле в список Выбранные поля . Дважды щелкните Shipping Fee , чтобы переместить это поле в список Selected Fields .

  6. В поле со списком Таблицы / Запросы щелкните Таблица: Сотрудники .

  7. В списке Доступные поля дважды щелкните Имя , чтобы переместить это поле в список Выбранные поля . Дважды щелкните LastName , чтобы переместить это поле в список Selected Fields . Щелкните Далее .

  8. Поскольку вы создаете список всех заказов, вы хотите использовать подробный запрос.Если вы суммируете стоимость доставки по сотруднику или выполняете какую-либо другую агрегированную функцию, вы используете сводный запрос. Щелкните Detail (показывает каждое поле каждой записи) , а затем щелкните Next .

  9. Щелкните Finish , чтобы просмотреть результаты.

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

Верх страницы

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

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

Создание запроса на выборку с использованием таблиц с отношением «многие ко многим»

  1. На вкладке Создать в группе Запросы щелкните Конструктор запросов .

    Откроется диалоговое окно Показать таблицу .

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

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

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

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

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

  6. На вкладке Design в группе Результаты щелкните Выполнить .

    Access отображает выходные данные запроса в режиме таблицы.

Пример, который использует образец базы данных Northwind

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

Предположим, у вас появилась новая возможность: поставщик из Рио-де-Жанейро нашел ваш веб-сайт и, возможно, захочет вести с вами дела. Однако они работают только в Рио и близлежащем Сан-Паулу. Они поставляют все категории пищевых продуктов, с которыми вы работаете. Это довольно крупный бизнес, и они хотят получить ваши заверения в том, что вы можете предоставить им доступ к достаточному количеству потенциальных продаж, чтобы они окупились: продажи не менее 20 000 реалов в год (около 9300 долларов США). Можете ли вы предоставить им необходимый рынок?

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

В этом примере вы создадите перекрестный запрос, который отображает общий объем продаж за год в городах Рио-де-Жанейро и Сан-Паулу.

Создайте запрос в представлении «Дизайн»

  1. Откройте базу данных Northwind. Закройте форму входа.

  2. На вкладке Создать в группе Запросы щелкните Конструктор запросов .

    Откроется диалоговое окно Показать таблицу .

  3. В диалоговом окне Показать таблицу дважды щелкните Клиенты , или ders и Сведения о заказе , а затем щелкните Закрыть .

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

  4. В таблице «Клиенты» дважды щелкните поле «Город», чтобы добавить его в сетку конструктора запросов.

  5. В сетке запроса в столбце Город в строке Критерии введите In («Рио-де-Жанейро», «Сан-Паулу») . Это приводит к включению в запрос только тех записей, где заказчик находится в одном из этих двух городов.

  6. В таблице сведений о заказе дважды щелкните поля ShippedDate и UnitPrice.

    Поля добавлены в сетку конструктора запроса.

  7. В столбце ShippedDate в сетке конструктора запроса выберите строку Поле . Замените [ShippedDate] на Year: Format ([ShippedDate], «yyyy») . Это создает псевдоним поля Year , который позволяет вам использовать только часть года значения в поле ShippedDate.

  8. В столбце UnitPrice в сетке конструктора запроса выберите строку Поле . Замените [UnitPrice] на Sales: [Детали заказа]. [UnitPrice] * [Количество] - [Детали заказа]. [UnitPrice] * [Количество] * [Скидка] . Это создает псевдоним поля Sales , который вычисляет продажи для каждой записи.

  9. На вкладке Design в группе Тип запроса щелкните Перекрестная таблица .

    Две новые строки, Total и Crosstab , появятся в сетке конструктора запросов.

  10. В столбце Город в сетке конструктора запросов щелкните строку Crosstab , а затем щелкните Заголовок строки .

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

  11. В столбце год щелкните строку Crosstab , а затем щелкните Заголовок столбца .

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

  12. В столбце Sales щелкните строку Crosstab , а затем щелкните Value .

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

  13. В столбце Продажи щелкните строку Итоги , а затем щелкните Сумма .

    Это заставляет запрос суммировать значения в этом столбце.

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

  14. На вкладке Design в группе Результаты щелкните Выполнить .

Теперь у вас есть запрос, который возвращает общий объем продаж по годам в Рио-де-Жанейро и Сан-Паулу.

Верх страницы

Просмотреть все записи из двух похожих таблиц

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

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

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

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

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

Создание запроса на объединение с использованием двух таблиц

  1. На вкладке Создать в группе Запросы щелкните Конструктор запросов .

    Откроется новая сетка конструктора запроса и диалоговое окно Показать таблицу .

  2. В диалоговом окне Показать таблицу нажмите Закрыть .

  3. На вкладке Design в группе Тип запроса щелкните Union .

    Запрос переключается с представления «Дизайн» на представление SQL.На этом этапе вкладка объекта представления SQL пуста.

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

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

  6. Если вы хотите указать критерий для поля из первой таблицы, введите WHERE , затем имя поля, оператор сравнения (обычно знак равенства ( = )) и критерий. Вы можете добавить дополнительные критерии в конец предложения WHERE, используя ключевое слово AND и тот же синтаксис, что и для первого критерия; например, WHERE [ClassLevel] = "100" AND [CreditHours]> 2. Когда вы закончите указывать критерии, нажмите ENTER.

  7. Введите UNION и нажмите клавишу ВВОД.

  8. Введите SELECT , а затем список полей из второй таблицы, которые вы хотите включить в запрос. Вы должны включить те же поля из этой таблицы, что вы включили из первой таблицы, и в том же порядке. Имена полей должны быть заключены в квадратные скобки и разделены запятыми. Когда вы закончите вводить имена полей, нажмите ENTER.

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

  10. Если хотите, добавьте предложение WHERE, как описано в шаге 6 этой процедуры.

  11. Введите точку с запятой (; ), чтобы указать конец запроса.

  12. На вкладке Design в группе Результаты щелкните Выполнить .

    Ваши результаты появятся в режиме таблицы.

Верх страницы

См. Также

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

.

Access 2016: создание форм

Урок 14: Создание форм

/ ru / access2016 / Modifying-tables / content /

Введение

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

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

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

Посмотрите видео ниже, чтобы узнать больше о создании форм.

Для создания формы:

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

  1. В области навигации выберите таблицу, которую вы хотите использовать для создания формы. Стол открывать не нужно.
  2. Выберите вкладку Create , найдите группу Forms и щелкните команду Form .
  3. Ваша форма будет создана и открыта в Layout view .
  4. Чтобы сохранить форму , щелкните команду Сохранить на панели инструментов быстрого доступа .При появлении запроса введите имя для формы, затем щелкните OK .
О субформах

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

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

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

Our Orders form, which includes a useful subform.

Доступ: работа с таблицами

Урок 5: Работа с таблицами

/ ru / доступ / управление базами данных и объекты / контент /

Введение

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

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

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

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

Основы стола

Чтобы открыть существующий стол:
  1. Откройте свою базу данных и найдите панель навигации .
  2. На панели навигации найдите таблицу, которую нужно открыть.
  3. Дважды щелкните нужную таблицу.
  4. Таблица откроется и появится как вкладка в вкладках документа полоса .
Общие сведения о таблицах

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

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

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

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

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

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

.

Смотрите также