Поиск…


Вступление

Идея от одного до многих (1: M) касается объединения строк друг с другом, в частности случаев, когда одна строка в одной таблице соответствует многим строкам в другой.

1: M является однонаправленным, то есть в любое время, когда вы запрашиваете отношения 1: M, вы можете использовать строку «один» для выбора «многих» строк в другой таблице, но вы не можете использовать одну строку «много» для выберите более одной строки.

замечания

В большинстве случаев работа с соотношением 1: M требует от нас понимания первичных ключей и внешних ключей .

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

Внешний ключ - это столбец в таблице, который соответствует первичному ключу другой другой таблицы. В нашем примере выше MGR_ID в таблице EMPLOYEES является внешним ключом. Обычно для объединения двух таблиц вы присоединяетесь к ним на основе первичного ключа одной таблицы и внешнего ключа в другом.

Примеры таблиц компании

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

Это приводит к двум таблицам:

СОТРУДНИКИ

EMP_ID ИМЯ ФАМИЛИЯ MGR_ID
E01 Джонни Яблочное M02
E02 Erin Macklemore M01
E03 Colby Оформление документации M03
E04 Рон Sonswan M01

РУКОВОДИТЕЛИ

MGR_ID ИМЯ ФАМИЛИЯ
M01 Громко McQueen
M02 Властный Штаны
M03 бочка Джонс

Получить сотрудников, управляемых одним менеджером

SELECT e.emp_id , e.first_name , e.last_name FROM employees e INNER JOIN managers m ON m.mgr_id = e.mgr_id WHERE m.mgr_id = 'M01' ;

Результаты в:

EMP_ID ИМЯ ФАМИЛИЯ
E02 Erin Macklemore
E04 Рон Sonswan

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

Получить менеджера для одного сотрудника

При просмотре этого примера ознакомьтесь с приведенными выше примерами таблиц.

SELECT m.mgr_id , m.first_name , m.last_name FROM managers m INNER JOIN employees e ON e.mgr_id = m.mgr_id WHERE e.emp_id = 'E03' ;

MGR_ID ИМЯ ФАМИЛИЯ
M03 бочка Джонс

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



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow