MySQL
Een te veel
Zoeken…
Invoering
Het idee van één op veel (1: M) betreft het samenvoegen van rijen met elkaar, in het bijzonder gevallen waarin een enkele rij in een tabel overeenkomt met veel rijen in een andere.
1: M is eenrichtingsverkeer, dat wil zeggen dat wanneer u een 1: M-relatie opvraagt, u de 'één'-rij kunt gebruiken om' veel 'rijen in een andere tabel te selecteren, maar u kunt geen enkele' veel'-rij gebruiken om selecteer meer dan een enkele rij.
Opmerkingen
Voor de meeste gevallen vereist het werken met een 1: M-relatie dat we primaire sleutels en externe sleutels begrijpen.
Een primaire sleutel is een kolom in een tabel waarbij een enkele rij van die kolom een enkele entiteit vertegenwoordigt, of het selecteren van een waarde in een primaire-sleutelkolom resulteert in precies één rij. Met behulp van de bovenstaande voorbeelden vertegenwoordigt een EMP_ID een enkele werknemer. Als u zoekt naar een enkele EMP_ID, ziet u een enkele rij die de overeenkomstige werknemer vertegenwoordigt.
Een buitenlandse sleutel is een kolom in een tabel die overeenkomt met de primaire sleutel van een andere andere tabel. Uit ons bovenstaande voorbeeld is de MGR_ID in de tabel WERKNEMERS een externe sleutel. Over het algemeen om twee tabellen samen te voegen, voegt u ze samen op basis van de primaire sleutel van de ene tabel en de externe sleutel in een andere.
Voorbeeld bedrijfstabellen
Overweeg een bedrijf waar elke werknemer die een manager is, 1 of meer werknemers beheert en elke werknemer slechts 1 manager heeft.
Dit resulteert in twee tabellen:
WERKNEMERS
emp_id | VOORNAAM | ACHTERNAAM | MGR_ID |
---|---|---|---|
E01 | Johnny | Appleseed | M02 |
E02 | Erin | Macklemore | M01 |
E03 | Colby | Papierwerk | M03 |
E04 | Ron | Sonswan | M01 |
MANAGERS
MGR_ID | VOORNAAM | ACHTERNAAM |
---|---|---|
M01 | Luid | McQueen |
M02 | Bazig | Broek |
M03 | Vat | Jones |
Laat de werknemers beheren door een enkele manager
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' ;
Resulteert in:
emp_id | VOORNAAM | ACHTERNAAM |
---|---|---|
E02 | Erin | Macklemore |
E04 | Ron | Sonswan |
Uiteindelijk zien we voor elke manager waarnaar we zoeken 1 of meer werknemers terugkomen.
Download de manager voor een enkele medewerker
Raadpleeg de bovenstaande voorbeeldtabellen bij het bekijken van dit voorbeeld.
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 | VOORNAAM | ACHTERNAAM |
---|---|---|
M03 | Vat | Jones |
Omdat dit het omgekeerde is van het bovenstaande voorbeeld, weten we dat we voor elke medewerker waarnaar we vragen slechts één overeenkomstige manager zullen zien.