MySQL
Один ко многим
Поиск…
Вступление
Идея от одного до многих (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 | бочка | Джонс |
Поскольку это является обратным приведенному выше примеру, мы знаем, что для каждого сотрудника, которого мы запрашиваем, мы увидим только одного соответствующего менеджера.