这两个SQLite查询会产生相同的结果吗?



我正在做这个练习。

问题4的目标是找到在"琼斯"之后被雇佣的员工。我认为这个问题可以不用像这样的连接来解决:

SELECT first_name, last_name, hire_date
FROM employees 
WHERE hire_date > (
SELECT hire_date FROM employees WHERE last_name = "Jones"
)

但是网站上的答案是:

SELECT e.first_name, e.last_name, e.hire_date 
FROM employees e 
JOIN employees davies 
ON (davies.last_name = "Jones") 
WHERE davies.hire_date < e.hire_date;

这些答案大致相同还是有理由认为第二个答案更好?

我假设列last_name被定义为UNIQUE,因此第一个查询中的子查询只返回1行。
如果不是,那么查询不会返回相同的结果,因为尽管第一个查询中的子查询可能返回多于1行(并且在其他数据库中查询甚至不会运行),SQLite将只选择返回的第一行并使用其hire_date将其与表的所有行进行比较,而连接将使用last_name = "Jones"的所有行


如果我的假设是正确的,那么这两个查询是等效的,但第一个是我建议的,因为它更具可读性,我相信它会比连接执行得更好。如果我必须使用连接来满足这个要求(因为这是作业),我会选择一个更容易读的形式:

SELECT e.first_name, e.last_name, e.hire_date 
FROM employees e 
JOIN (SELECT * FROM employees WHERE last_name = "Jones") t 
ON t.hire_date < e.hire_date;

最新更新