Compartilhamento de tecnologia

MySQL: usar em ou onde após o left join?

2024-07-11

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

No MySQL,LEFT JOIN Usado para retornar todos os registros da tabela esquerda (ou seja, a tabela à esquerda da palavra-chave LEFT JOIN), mesmo se não houver registros correspondentes na tabela direita. Para os registros que não correspondem na tabela correta, a parte da tabela correta do conjunto de resultados será preenchida com NULL.sobreONeWHEREO uso de cláusulas, elas estão emLEFT JOINAs funções são diferentes:

  • SOBRE Cláusula: utilizada para definir condições de junção, ou seja, determinar quais registros devem ser unidos.Quando você precisar combinar registros com base no relacionamento entre determinados valores de campos nas tabelas esquerda e direita, estas condições devem ser colocadasON mais tarde.se emONExistem restrições condicionais adicionais na tabela direita posteriormente, que também serão aplicadas durante a conexão, mas não afetarão o princípio de retornar todos os registros da tabela esquerda.
  • ONDE Cláusula: usada para pares que passaramJOIN O conjunto de resultados gerado pela operação é ainda filtrado.Quando a condição é colocadaWHEREcláusula, os registros que não atenderem às condições (seja da tabela esquerda ou da tabela direita) serão removidos, o que pode afetar a intenção original de retornar todos os registros da tabela esquerda, especialmente ao lidar com valores NULL, você precisa estar extremamente cuidadoso.

Caso específico um:

Suponha que temos duas tabelas, uma éemployees(tabela de funcionários), a outra édepartments(tabela de departamento), queremos descobrir todos os funcionários e os nomes de seus departamentos, mesmo que alguns funcionários não estejam atribuídos a um departamento específico.

tabela de funcionários:

eu ianome
1Alice
2Prumo
3Carol

tabela de departamentos:

eu ianome
1RH
2ISTO
3Marketing

em,employeesmesadepartment_idO campo pode ser NULL, indicando que não há departamento atribuído.

Exemplo de uso de ON:

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