Condivisione della tecnologia

MySQL: utilizzare su o dove dopo il join a sinistra?

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

In MySQL,LEFT JOIN Utilizzato per restituire tutti i record dalla tabella di sinistra (ovvero la tabella a sinistra della parola chiave LEFT JOIN), anche se non sono presenti record corrispondenti nella tabella di destra. Per i record che non corrispondono nella tabella di destra, la parte della tabella di destra del set di risultati verrà riempita con NULL.DiONEWHEREL'uso delle clausole, sono in usoLEFT JOINI ruoli sono diversi:

  • SU Clausola: utilizzata per definire le condizioni di unione, ovvero determinare quali record devono essere uniti.Quando è necessario combinare i record in base alla relazione tra determinati valori di campo nelle tabelle di sinistra e di destra, è necessario inserire queste condizioniON Dopo.se dentroONSuccessivamente verranno applicate ulteriori restrizioni condizionali sulla tabella di destra, che verranno applicate anche durante la connessione, ma non influenzeranno il principio di restituzione di tutti i record dalla tabella di sinistra.
  • DOVE Clausola: utilizzata per le coppie che hanno superatoJOIN Il set di risultati generato dall'operazione viene ulteriormente filtrato.Quando viene posta la condizioneWHEREclausola, quei record che non soddisfano le condizioni (sia dalla tabella di sinistra che da quella di destra) verranno rimossi, il che potrebbe influenzare l'intenzione originale di restituire tutti i record dalla tabella di sinistra, specialmente quando si gestiscono valori NULL, è necessario essere molto attento.

Caso specifico uno:

Supponiamo di avere due tabelle, una lo èemployees(tabella dei dipendenti), l'altro lo èdepartments(tabella dei dipartimenti), vogliamo scoprire tutti i dipendenti e i nomi dei loro dipartimenti, anche se alcuni dipendenti non sono assegnati a un dipartimento specifico.

tavolo dipendenti:

idnome
1Alice
2Bob
3Carol

tabella dipartimenti:

idnome
1Risorse umane
2ESSO
3Marketing

In,employeestavolodepartment_idIl campo può essere NULL, indicando che non è stato assegnato alcun reparto.

Esempio di utilizzo ON:

SELECT employees.name, departments.name AS department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;