MySQL
Jeden za dużo
Szukaj…
Wprowadzenie
Idea jednego do wielu (1: M) dotyczy łączenia rzędów ze sobą, w szczególności przypadków, w których jeden wiersz w jednej tabeli odpowiada wielu wierszom w innym.
1: M jest jednokierunkowy, to znaczy za każdym razem, gdy zapytanie o relację 1: M, możesz użyć wiersza „jeden”, aby wybrać „wiele” wierszy w innej tabeli, ale nie możesz użyć pojedynczego wiersza „wiele”, aby wybierz więcej niż jeden „jeden” wiersz.
Uwagi
W większości przypadków praca z relacją 1: M wymaga od nas zrozumienia kluczy podstawowych i kluczy obcych .
Klucz podstawowy to kolumna w tabeli, w której dowolny pojedynczy wiersz tej kolumny reprezentuje pojedynczy byt, lub wybranie wartości w kolumnie klucza podstawowego daje dokładnie jeden wiersz. Korzystając z powyższych przykładów, identyfikator EMP_ID reprezentuje jednego pracownika. Jeśli zapytasz o dowolny identyfikator EMP_ID, zobaczysz pojedynczy wiersz reprezentujący odpowiedniego pracownika.
Klucz obcy to kolumna w tabeli, która odpowiada kluczowi głównemu innej innej tabeli. Z naszego powyższego przykładu MGR_ID w tabeli EMPLOYEES jest kluczem obcym. Zasadniczo, aby połączyć dwie tabele, dołączysz do nich na podstawie klucza podstawowego jednej tabeli i klucza obcego w drugiej.
Przykładowe tabele firm
Rozważmy firmę, w której każdy pracownik, który jest menedżerem, zarządza co najmniej 1 pracownikiem, a każdy pracownik ma tylko 1 menedżera.
Daje to dwie tabele:
PRACOWNIKÓW
EMP_ID | IMIĘ | NAZWISKO | MGR_ID |
---|---|---|---|
E01 | Jasio | Nasiona Jabłka | M02 |
E02 | Erin | Macklemore | M01 |
E03 | Colby | Papierkowa robota | M03 |
E04 | Ron | Sonswan | M01 |
MENEDŻEROWIE
MGR_ID | IMIĘ | NAZWISKO |
---|---|---|
M01 | Głośny | McQueen |
M02 | Apodyktyczny | Spodnie |
M03 | Beczka | Jones |
Uzyskaj pracowników zarządzanych przez jednego menedżera
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' ;
Prowadzi do:
EMP_ID | IMIĘ | NAZWISKO |
---|---|---|
E02 | Erin | Macklemore |
E04 | Ron | Sonswan |
Ostatecznie, za każdego kierownika, o którego pytamy, zobaczymy 1 lub więcej pracowników zwróconych.
Zdobądź menedżera dla jednego pracownika
Spójrz na powyższe przykładowe tabele, patrząc na ten przykład.
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 | IMIĘ | NAZWISKO |
---|---|---|
M03 | Beczka | Jones |
Ponieważ jest to odwrotność powyższego przykładu, wiemy, że dla każdego pracownika, którego szukamy, zobaczymy tylko jednego odpowiedniego kierownika.