MySQL 具有别名的相关子查询
MySQL correlated subqueries with aliases
你好,我不明白相关子查询在幕后是如何工作的。我有两个 table,如果第一个 table 的某个值等于第二个 table 的某个值,我想检查两个值是否相等,如果第二个值的某个值相等。
我的代码是:
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 是否对员工对象正确?
它是否遍历每个值并将值传递给 alias.Object?
假设内部查询的值为 2500。如果有员工的收入为 2500,但 min_salary 他的 job_id 为 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
子句对tableemployees
中的每一行执行一次。
What if there is employee who earn 2500 but min_salary for his job_id
would be 2000?
对于这种情况,子查询:
SELECT min_salary FROM jobs WHERE employees.job_id = jobs.job_id
将 return 2000
并且 WHERE
子句中的布尔表达式将为 FALSE
因为 2500 <> 2000
并且该员工将从结果。
employees
和jobs
的每一行之间的link是第job_id
列。
对于 employees
中的每个 job_id
,table jobs
被一次又一次地扫描以获取相应的 min_salary
和这个值(必须是unique 并且我假设它在一个名为 jobs
的 table 中是唯一的)与 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;
既然您在问题中提到了别名,请使用它们来限定所有列,即使您知道对于某些列没有其他同名的列也是如此。还可以使用短别名使代码更短、更易读。
你好,我不明白相关子查询在幕后是如何工作的。我有两个 table,如果第一个 table 的某个值等于第二个 table 的某个值,我想检查两个值是否相等,如果第二个值的某个值相等。 我的代码是:
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 是否对员工对象正确? 它是否遍历每个值并将值传递给 alias.Object?
假设内部查询的值为 2500。如果有员工的收入为 2500,但 min_salary 他的 job_id 为 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
子句对tableemployees
中的每一行执行一次。
What if there is employee who earn 2500 but min_salary for his job_id would be 2000?
对于这种情况,子查询:
SELECT min_salary FROM jobs WHERE employees.job_id = jobs.job_id
将 return 2000
并且 WHERE
子句中的布尔表达式将为 FALSE
因为 2500 <> 2000
并且该员工将从结果。
employees
和jobs
的每一行之间的link是第job_id
列。
对于 employees
中的每个 job_id
,table jobs
被一次又一次地扫描以获取相应的 min_salary
和这个值(必须是unique 并且我假设它在一个名为 jobs
的 table 中是唯一的)与 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;
既然您在问题中提到了别名,请使用它们来限定所有列,即使您知道对于某些列没有其他同名的列也是如此。还可以使用短别名使代码更短、更易读。