MySQL
Uno a molti
Ricerca…
introduzione
L'idea di uno a molti (1: M) riguarda l'unione di righe tra di loro, in particolare i casi in cui una singola riga in una tabella corrisponde a più righe in un'altra.
1: M è unidirezionale, ovvero ogni volta che si esegue una query su una relazione 1: M, è possibile utilizzare la riga 'uno' per selezionare 'molte' righe in un'altra tabella, ma non è possibile utilizzare una singola riga 'molte' per seleziona più di una singola riga "uno".
Osservazioni
Per la maggior parte dei casi, lavorare con una relazione 1: M richiede che comprendiamo le chiavi primarie e le chiavi esterne .
Una chiave primaria è una colonna in una tabella in cui qualsiasi singola riga di quella colonna rappresenta una singola entità oppure, selezionando un valore in una colonna chiave primaria, si ottiene esattamente una riga. Utilizzando gli esempi precedenti, un EMP_ID rappresenta un singolo dipendente. Se esegui una query per ogni singolo EMP_ID, vedrai una singola riga che rappresenta il dipendente corrispondente.
Una chiave esterna è una colonna in una tabella che corrisponde alla chiave primaria di un'altra tabella diversa. Dal nostro esempio precedente, MGR_ID nella tabella EMPLOYEES è una chiave esterna. Generalmente per unire due tabelle, ti unirai a loro in base alla chiave primaria di una tabella e alla chiave esterna in un'altra.
Esempio di tabelle aziendali
Considera un'azienda in cui ogni dipendente che è un manager, gestisce uno o più dipendenti e ogni dipendente ha solo un manager.
Ciò si traduce in due tabelle:
DIPENDENTI
EMP_ID | NOME DI BATTESIMO | COGNOME | MGR_ID |
---|---|---|---|
E01 | Johnny | Appleseed | M02 |
E02 | Erin | Macklemore | M01 |
E03 | Colby | lavoro d'ufficio | M03 |
E04 | Ron | Sonswan | M01 |
DIRIGENTI
MGR_ID | NOME DI BATTESIMO | COGNOME |
---|---|---|
M01 | Forte | McQueen |
M02 | Prepotente | Pantaloni |
M03 | barile | Jones |
Ottieni i dipendenti gestiti da un singolo 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' ;
Risultati in:
EMP_ID | NOME DI BATTESIMO | COGNOME |
---|---|---|
E02 | Erin | Macklemore |
E04 | Ron | Sonswan |
In definitiva, per ogni manager su cui eseguiamo la query, vedremo restituire 1 o più dipendenti.
Ottieni il manager per un singolo dipendente
Consulta le tabelle di esempio sopra quando guardi questo esempio.
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 | NOME DI BATTESIMO | COGNOME |
---|---|---|
M03 | barile | Jones |
Poiché questo è l'inverso dell'esempio sopra riportato, sappiamo che per ogni dipendente per il quale richiediamo, vedremo sempre un manager corrispondente.