MySQL entra a far parte Tutorial

April 12

La dichiarazione JOIN in MySQL è utilizzato per combinare dati provenienti da due o più tabelle in un insieme comune. I tavoli sono uniti attraverso una colonna comune in ogni tabella. Le colonne non devono avere lo stesso nome, ma devono contenere lo stesso tipo di dati. MySQL è conforme alla maggior parte, ma non tutti, i vincoli SQL standard per i join. Si unisce può essere utilizzato in SELECT, UPDATE e DELETE. Questo articolo si concentrerà sul SELECT.

interno entra a far parte

Le tabelle seguenti verranno utilizzati per illustrare ciascuno dei join:

Indirizzo
nome cognome staddress zip
Kris Miller 301 Anywhere St 17598
Steve Fetterhoff 305 A cuore aperto Ave 17989
James Smith 623 Kensington Ct 98.539

cerniera lampo
città stato CAP
Lancaster, PA 17598
Wiconisco PA 17989
Arancione CA 98.539

Interno unisce combinare i valori di due tabelle e la loro combinazione per produrre i risultati. Ritornano solo i record che soddisfano i requisiti partecipare, e nessuno che non lo fanno.

Croce entra a far prendere ogni riga da una tabella e unirsi a ogni riga della seconda tabella con la sintassi:

SELECT * FROM indirizzo, zip
ANDARE

È possibile sostituire la virgola nell'esempio precedente, con la parola chiave JOIN.

SELECT * FROM indirizzo ENTRA zip
ANDARE

Queste dichiarazioni produce i seguenti risultati:

| Kris | Miller | 301 Anywhere St | 17598 | Lancaster | PA | 17598 |

| Steve | Fetterhoff | 305 S. Ave altrove | 17989 | Lancaster | PA | 17598 |

| James | Smith | 623 Kensington Ct | 98.539 | Lancaster | PA | 17598 |

| Kris | Miller | 301 Anywhere St | 17598 | Wiconisco | PA | 17989 |

| Steve | Fetterhoff | 305 S. Ave altrove | 17989 | Wiconisco | PA | 17989 |

| James | Smith | 623 Kensington Ct | 98.539 | Wiconisco | PA | 17989 |

| Kris | Miller | 301 Anywhere St | 17598 | arancione | CA | 98.539 |

| Steve | Fetterhoff | 305 S. Ave altrove | 17989 | arancione | CA | 98.539 |

| James | Smith | 623 Kensington Ct | 98.539 | arancione | CA | 98.539 |

Per queste due tabelle, i risultati non sono realmente utili. Essi mostrano semplicemente una combinazione delle due tabelle in un'unica tabella.

Un Equi registrazione o regolare registrazione è un cross join con una clausola WHERE restrittiva.

SELEZIONE fname, lname, staddress, città, stato, zip.zip DA indirizzo, avviamento postale in cui address.zip = zip.zip
ANDARE

o utilizzando la parola chiave JOIN, come:

SELEZIONE address.fname, address.lname, address.staddress, zip.city, zip.state, zip.zip DA indirizzo ENTRA zip address.zip = zip.zip
ANDARE

Questo join restituisce gli indirizzi, e la sintassi esatta crea una mailing list correttamente formattato.

| Kris | Miller | 301 Anywhere St | Lancaster | PA | 17598 |

| Steve | Fetterhoff | 305 S. Ave altrove | Wiconisco | PA | 17989 |

| James | Smith | 623 Kensington Ct | arancione | CA | 98.539 |

La notazione "zip.zip" dice di usare il codice postale dal tavolo zip. Questa notazione consente di definire esattamente quali colonne devono essere restituiti. Se il nome della colonna non si ripeta in entrambe le tabelle, non è necessario utilizzare la notazione "table.column", ma se si ripete, è necessario specificare quale tabella da utilizzare.

È inoltre possibile creare questa affermazione utilizzando la clausola USING. Per la clausola USING funzioni, ciascuna tabella deve contenere una colonna comune (in questo esempio la colonna comune sarebbe 'zip'). La scheda riveduta sarebbe:

SELEZIONE fname, lname, staddress, città, stato, zip.zip DA indirizzo ENTRA zip usando ZIP;

outer join

Outer join combinare due o più tabelle, ma non richiedono che le tabelle unite contengono record corrispondenti. In altre parole, a seconda del tipo di outer join che è richiesto, ci può essere una o più righe che hanno valori NULL nelle colonne di dati per una delle tabelle. Outer join può essere sia a sinistra oa destra si unisce.

Al fine di fornire esempi per questa sezione il seguente record viene aggiunto alla tabella di indirizzi:

Pam Kasper 501 W 69th St 80907

E, il seguente record verrà aggiunto alla tabella zip:

New York NY 50647

Una sinistra join restituisce tutti i record che soddisfano la query più i record non corrispondenti nella tabella a sinistra del join.

SELEZIONE fname, lname, staddress, città, stato, zip.zip DA indirizzo LEFT JOIN zip UTILIZZO (zip)
ANDARE

I risultati sarebbero:

Kris | Miller | 301 Anywhere St | Lancaster | PA | 17598 |

| Steve | Fetterhoff | 305 S. Ave altrove | Wiconisco | PA | 17989 |

| James | Smith | 623 Kensington Ct | arancione | CA | 98.539 |

| Pam | Kasper | 501 W 69th St | NULL | NULL | NULLO

Come si può vedere, tutti i record della tabella di sinistra (indirizzo) vengono restituiti, con valori nulli per i record mancanti dalla tabella di destra.

Un diritto unirsi è l'opposto di una sinistra join.

SELEZIONE fname, lname, staddress, città, stato, zip.zip indirizzo FROM RIGHT JOIN zip UTILIZZO (zip)
ANDARE

| Kris | Miller | 301 Anywhere St | Lancaster | PA | 17598 |

| Steve | Fetterhoff | 305 S. Ave altrove | Wiconisco | PA | 17989 |

| James | Smith | 623 Kensington Ct | arancione | CA | 98.539 |

| NULL | NULL | NULL | New York | NY | 50647 |​​