MySQL将子查询与别名相关联



您好,我不了解相关子查询在后台的工作方式。我有两个表,我想检查两个值是否相等,如果第二个表中的某个值等于第二个表中的值,则第二个表的值。 我的代码是:

SELECT first_name, last_name, salary 
FROM employees 
WHERE employees.salary = (SELECT min_salary
FROM jobs
WHERE employees.job_id = jobs.job_id);

在外部查询中比较工资时,它知道job_id对员工是否正确 反对,它究竟是如何工作的? 它是否遍历每个值并将值传递给别名。对象?

假设内部查询的值为 2500。如果有员工的收入为 2500,但他job_id min_salary是 2000 怎么办?此查询如何知道何时正确?

如果有人需要更多详细信息,那么一切都可以在这里更好地解释: https://www.w3resource.com/mysql-exercises/subquery-exercises/find-the-names-salary-of-the-employees-whose-salary-is-equal-to-the-minimum-salary-for-their-job-grade.php

WHERE子句对表中的每一行执行一次employees

如果有员工的收入为 2500 但min_salary他的job_id怎么办 会是2000年吗?

对于这种情况,子查询:

SELECT min_salary FROM jobs WHERE employees.job_id = jobs.job_id 

将返回2000并且WHERE子句中的布尔表达式将被FALSE,因为2500 <> 2000该员工将从结果中筛选出来。

每行employeesjobs之间的链接是列job_id

对于employees中的每个job_id,表jobs一次又一次地扫描以获取相应的min_salary,并且该值(必须是唯一的,我假设它在名为jobs的表中是唯一的)与employees的列salary进行比较。

这个查询也可以通过一个INNER联接来实现,我相信它更清楚发生了什么:

SELECT e.first_name, e.last_name, e.salary 
FROM employees e INNER JOIN jobs j
ON j.job_id = e.job_id AND j.min_salary = e.salary;

由于您在问题中提到了别名,因此请使用它们来限定所有列,即使您知道对于某些列,没有其他具有相同名称的列。还可以使用短别名使代码更短且更具可读性。

相关内容

  • 没有找到相关文章

最新更新